L'intelligence Artificielle s'intéresse principalement à la résolution de problèmes, généralement complexes, à l'aide de connaissances générales sur le domaine considéré. Deux questions importantes se retrouvent au cœur de cette activité : Comment formaliser ces connaissances générales ? Comment concevoir des systèmes capables de les exploiter automatiquement pour résoudre les problèmes qui nous intéressent.

Ce cours présente différentes approches possibles. Il met notamment l'accent sur les techniques de résolution à base d'espace d'états, les algorithmes heuristiques, les algorithmes pour les jeux, qui, dans l'ensemble, amènent à résoudre des problèmes sur des structures de graphes. Il aborde également les techniques exploitant la description des connaissances caractérisant certains problèmes sous la forme d'un ensemble de contraintes logiques que l'on cherche à satisfaire. Il aborde également, la problématique des systèmes à base de connaissances, où la formalisation des connaissances s'effectue dans des cadres plus "logiques" et où la résolution de problèmes s'apparente à la construction de raisonnements, exploitant ces connaissances logiques, à l'aide de systèmes d'inférence.

Ce cours est aussi l'occasion d'aborder l'étude d'un nouveau langage de programmation, déclaratif et s'appuyant sur la logique. Il sera utilisé pour illustrer et mettre en œuvre différents concepts abordés dans ce cours et pour résoudre quelques problèmes pratiques.