Pourquoi Prolog est-il bon pour la programmation de l'IA? [fermé]

25

Je recherche des langages de programmation utilisés pour la programmation de l'IA. Je sais que LISP est enseigné en tant que langage de programmation de l'IA dans mon université, mais Prolog l'est rarement. J'aime un peu Prolog, mais je ne suis pas un programmeur d'IA, donc je ne pense pas que je suis qualifié pour juger par moi-même pourquoi Prolog est meilleur que LISP / Scheme. Je me demandais si les programmeurs avaient leur mot à dire sur ce sujet.

Comment pourriez-vous affirmer que Prolog serait plus utile pour la programmation de l'IA?

J'ai fait des recherches un peu, et l'argument de base que j'ai vu maintes et maintes fois est que, puisque les pensées sont présentées en logique, et Prolog est un langage de programmation logique, Prolog peut facilement construire des machines de décision, ou quelque chose dans ce sens.

Y a-t-il autre chose à dire pour Prolog en IA?

2rs2ts
la source
1
Ce n'est pas beaucoup de travail d'écrire un compilateur / interprète Prolog en Lisp. Paul Graham en a un exemple dans On Lisp .
Larry Coleman
Un de mes camarades de classe me le disait aussi. J'ai trouvé très intéressant que la manipulation symbolique de LISP me permette de recréer Prolog. Merci pour le côté sympa!
2rs2ts
4
@Larry Coleman: Écrire un compilateur / interprète Prolog naïf ne demande pas beaucoup de travail. Faire un qui est efficace et pleinement fonctionnel n'est pas trivial dans n'importe quelle langue.
JUSTE MON AVIS correct

Réponses:

19

De la préface à la programmation Prolog pour l'intelligence artificielle :

Prolog est un langage de programmation centré sur un petit ensemble de mécanismes de base, notamment la mise en correspondance de modèles, la structuration de données basée sur un arbre et le retour automatique. Ce petit ensemble constitue un cadre de programmation étonnamment puissant et flexible. Prolog est particulièrement bien adapté aux problèmes impliquant des objets - en particulier des objets structurés - et des relations entre eux. Par exemple, c'est un exercice facile dans Prolog d'exprimer des relations spatiales entre des objets, comme la sphère bleue derrière la verte. Il est également facile d'énoncer une règle plus générale: si l'objet X est plus proche de l'observateur que l'objet Y et que Y est plus proche que Z, alors X doit être plus proche que Z. Prolog peut maintenant raisonner sur les relations spatiales et leur cohérence avec respect de la règle générale. De telles fonctionnalités font de Prolog un langage puissant pour l'intelligence artificielle (IA) et la programmation non numérique en général. Il existe des exemples bien connus de calcul symbolique dont l'implémentation dans d'autres langages standard a pris des dizaines de pages de code indigeste. Lorsque les mêmes algorithmes ont été mis en œuvre dans Prolog, le résultat a été un programme limpide s'adaptant facilement sur une seule page.

Fondamentalement, c'est un excellent langage pour exprimer diverses relations et objectifs d'une manière succincte, (principalement-) lisible et (semi) naturelle. Le code équivalent dans, disons, le Lisps a tendance à être plus verbeux et plus obscur dans son intention parce que vous passez beaucoup de temps sur les tripes et la plomberie de la gestion et du raisonnement sur les relations.

JUSTE MON AVIS correct
la source
Mon ajout mineur ici serait que Prolog vous permet de déclarer des faits , puis des règles basées sur ces faits. Vos règles peuvent ensuite être utilisées par Prolog pour raisonner et répondre à d'autres requêtes en déduisant logiquement les réponses. Par exemple, si un fait déclare que A est un ancêtre de B et qu'un autre fait déclare que B est un ancêtre de C, alors Prolog peut déduire que A doit être un ancêtre de C sans que vous ayez à écrire un algorithme pour le vérifier.
code_dredd
25

J'ai suivi un cours d'introduction à l'IA dans mon premier cycle qui a utilisé Prolog pour nous faire implémenter un système expert.

Un système expert est un logiciel utilisé pour résoudre un problème très spécifique dont la solution dépend d'un grand nombre de règles et de variables.

Par exemple, vous pourriez imaginer un système expert qui vous dirait si vous devez prendre un parapluie avec vous lorsque vous sortez ou non; vous lui fourniriez un ensemble de données (s'il est nuageux, s'il a plu la veille, de quelle saison il s'agit, etc.) et le système expert passerait par des règles pour vous donner une réponse (s'il est nuageux et qu'il a plu le veille, vous devez prendre un parapluie).

La nature de Prolog rend très simple la mise en œuvre de règles et de faits (dans Prolog, tout est une règle ou un fait), puis "interroge la base de données" (obtenez une réponse à votre question), même lorsque vous avez des milliers de ces règles et faits .

Si le sujet vous intéresse, je vous recommande d'installer un interpréteur Prolog et d'essayer d'implémenter un système expert très basique pour vous en faire une idée - cela pourrait vous aider à comprendre pourquoi c'est un outil si puissant pour ces tâches.

Bitgarden
la source
J'ai lu dans mes recherches que Prolog rend les systèmes experts faciles à mettre en œuvre. Merci d'avoir soutenu cela avec quelques explications :)
2rs2ts
16

La différence est un peu comme utiliser SQL pour des requêtes de base de données plutôt que d'écrire un programme en, disons, C. En SQL, vous dites ce que vous voulez - mais vous n'avez pas (directement) à spécifier l'algorithme utilisé pour le dériver.

Un programme Prolog est parfois appelé une base de données, mais il s'agit en réalité d'un ensemble d'instructions logiques de prédicat. Le mécanisme d'évaluation prend la requête et y effectue des substitutions en fonction des instructions logiques de prédicat, en effectuant une recherche pour trouver les solutions correctes. Tous les algorithmes de recherche nécessaires (beaucoup plus impliqués qu'une requête SQL) sont intégrés au compilateur Prolog.

Une requête SQL, si vous deviez implémenter la même logique naïvement en C, n'aurait pas besoin de beaucoup plus que des boucles et des conditions if / else.

Une requête Prolog, implémentée en C, aurait besoin (au moins) d'une recherche de retour en arrière en utilisant la technique de recherche d'union. Et cela, encore une fois, est une solution naïve.

Un certain type de programmation d'IA implique une grande partie du type de recherche que Prolog fait. Sans surprise, vraiment - à l'origine, la programmation de l'IA était faite en Lisp ou dans un autre langage, mais Prolog a été écrit spécifiquement pour faire le travail.

La logique des prédicats est l'approche naturelle pour définir ce style de problème d'IA et, dans Prolog, une fois que vous avez cette définition, vous pouvez l'exécuter directement, sans avoir à implémenter tous ces algorithmes de recherche maladroits.

Steve314
la source
3

J'ai suivi 2 modules Prolog à l'Université et j'ai beaucoup aimé développer dans la langue.

Son particulièrement bon pour les systèmes experts, j'ai écrit un diagnostic médical symtom.

On m'a expliqué que Lisp a tendance à être davantage utilisé dans certains pays et Prolog dans d'autres.

Pour ce qui est du mieux, je n'ai couvert brièvement Lisp que lorsque j'ai fait du lambda calcul dans un module d'informatique théorique, donc je suis partisan de Prolog.

Si vous développez une application pour gérer les règles et les faits afin d'obtenir des réponses, Prolog est très bon et prend naturellement en charge le retour en arrière.

DazManCat
la source