Une approche différente de la programmation

La programmation logique et l'IA

IA : Intelligence artificielle
Illustration de l'intelligence artificielle et de la programmation logique

La programmation dite « logique » se différencie de la programmation procédurale qui est de forme « impérative ».

Quelque soit le problème, en programmation procédurale classique il faut commencer par déterminer la solution au problème et ensuite retranscrire cette solution dans un langage évolué (COBOL, PASCAL, C) qui sera compilé pour être directement compréhensible et exécutable par le système d'exploitation et le microprocesseur. La retranscription de la solution dans un langage informatique constitue ce qu'on appelle le « code source » du programme.

En programmation logique il n'y a pas à écrire de code source à proprement parler mais il faut exprimer la logique de la solution et c'est ensuite l'ordinateur qui se charge de trouver lui-même la solution.

Le langage le plus connu en programmation logique est PROLOG (PROgrammation LOGique). Ce langage a été utilisé pour ce qu'on a appelé l'intelligence artificielle (IA). Il m'a été enseigné à l'IUT informatique de Dijon.

Le principe de ce type de programmation est de décrire des objets, de décrire les propriétés de ces objets et de décrire les relations qui existent entre eux. Ces descriptions se font avec un formalisme spécial qui ressemble à un formalisme mathématique. Tout cela constitue une base de connaissances.

La base de connaissances est composée de faits et de règles que l'on appelle prédicats.

Une fois la base de connaissances complétée on peut l'interroger en posant des questions. Les réponses seront déterminées par PROLOG sans que l'on ait à écrire une seule ligne de code pour expliquer à l'ordinateur comment arriver au résultat.

Pour se représenter comment tout cela fonctionne rien ne vaut un exemple. Nous pouvons constituer une base de connaissances avec les faits suivants :

LES PREDICATS
- Renault est une marque française
- Peugeot est une marque française
- Volkswagen est une marque allemande
- Super 5 est fabriquée par Renault
- Golf est fabriquée par Volkswagen
- 307 est fabriquée par Peugeot
- Super 5 TL est une voiture
- 307 HDI est une voiture
- Golf GTI est une voiture
- GTI est un moteur essence
- HDI est un moteur diesel
- TL est un moteur essence

A partir de ces informations entrées dans la base de connaissances suivant un certain formalisme, je peux maintenant interroger le système et lui poser par exemple comme questions :

- quelles sont les voitures allemandes ?

            La réponse serait « golf GTI » par simple déduction

- quelles sont les voitures à moteur diesel ?

            La réponse serait « 307 HDI »

On remarque avec cet exemple très succinct qu'en programmation logique nous n'avons pas besoin de connaître d'avance la question qui sera posée pour construire la base de connaissances. En programmation procédurale il faudrait connaître exactement la question et ensuite trouver la solution à la question et l'écrire sous forme d'algorithme puis de code pour que l'ordinateur exécute ensuite une procédure de façon répétitive.

On peut aussi compléter la base de connaissance en ajoutant le prédicat :

- Jacques possède une GOLF GTI

et le système serait aussitôt capable de répondre aux deux questions suivantes :

- Qui possède une voiture allemande ?

- Qui possède une voiture à essence ?

Bien entendu les bases de connaissances sont beaucoup plus complexes que cet exemple qui n'avait que pour but de comprendre le fonctionnement de la programmation logique par opposition à la programmation appelée aussi « impérative ».