it-swarm.dev

Warum ist Prolog gut für die KI-Programmierung?

Ich erforsche Programmiersprachen, die für die KI-Programmierung verwendet werden. Ich weiß, dass LISP an meiner Universität als KI-Programmiersprache unterrichtet wird, Prolog jedoch selten. Ich mag Prolog, aber ich bin kein KI-Programmierer, daher glaube ich nicht, dass ich selbst beurteilen kann, warum Prolog besser ist als LISP/Scheme. Ich habe mich gefragt, ob Programmierer Beiträge zu diesem Thema haben.

Wie könnten Sie argumentieren, dass Prolog für die KI-Programmierung nützlicher wäre?

Ich habe es ein wenig recherchiert, und das grundlegende Argument, das ich immer wieder gesehen habe, ist, dass Prolog, da Gedanken in Logik dargestellt werden und Prolog eine logische Programmiersprache ist, leicht Entscheidungsmaschinen bauen kann, oder etwas in diesem Sinne.

Gibt es noch etwas, was für Prolog in AI gesagt werden kann?

26
2rs2ts

Vom Vorwort zu Prolog-Programmierung für künstliche Intelligenz :

Prolog ist eine Programmiersprache, die sich auf eine kleine Reihe grundlegender Mechanismen konzentriert, darunter Pattern Matching, baumbasierte Datenstrukturierung und automatisches Backtracking. Dieses kleine Set bildet ein überraschend leistungsfähiges und flexibles Programmiergerüst. Prolog eignet sich besonders gut für Probleme, die Objekte - insbesondere strukturierte Objekte - und Beziehungen zwischen ihnen betreffen. Zum Beispiel ist es in Prolog eine einfache Übung, räumliche Beziehungen zwischen Objekten auszudrücken, beispielsweise befindet sich die blaue Kugel hinter der grünen. Es ist auch einfach, eine allgemeinere Regel zu formulieren: Wenn das Objekt X näher am Beobachter als das Objekt Y ist und Y näher als Z ist, muss X näher als Z sein. Prolog kann nun über die räumlichen Beziehungen und ihre Konsistenz mit argumentieren in Bezug auf die allgemeine Regel. Funktionen wie diese machen Prolog zu einer leistungsstarken Sprache für künstliche Intelligenz (KI) und nicht numerische Programmierung im Allgemeinen. Es gibt bekannte Beispiele für symbolische Berechnungen, deren Implementierung in anderen Standardsprachen mehrere zehn Seiten unverdaulichen Codes umfasste. Als die gleichen Algorithmen in Prolog implementiert wurden, war das Ergebnis ein kristallklares Programm, das leicht auf eine Seite passt.

Grundsätzlich ist es eine großartige Sprache, um verschiedene Beziehungen und Ziele auf prägnante, (meistens) lesbare und (halb-) natürliche Weise auszudrücken. Äquivalenter Code in den Lisps ist in der Regel ausführlicher und in seiner Absicht verschleierter, da Sie viel Zeit mit dem Mut und der Installation von Beziehungen verbringen.

Ich habe in meinem Undergrad eine Einführung in den AI-Kurs gemacht, bei der Prolog verwendet wurde, um ein Expertensystem zu implementieren.

Ein Expertensystem ist eine Software, mit der ein sehr spezifisches Problem gelöst wird, dessen Lösung von einer hohen Anzahl von Regeln und Variablen abhängt.

Sie können sich beispielsweise ein Expertensystem vorstellen, das Ihnen sagt, ob Sie beim Ausgehen einen Regenschirm mitnehmen sollten oder nicht. Sie würden ihm eine Reihe von Daten geben (ob es bewölkt ist, ob es am Tag zuvor geregnet hat, welche Jahreszeit es ist usw.) und das Expertensystem würde Regeln durchgehen, um Ihnen eine Antwort zu geben (wenn es bewölkt ist und es regnete Tag zuvor sollten Sie dann einen Regenschirm mitnehmen.

Aufgrund der Natur von Prolog ist es sehr einfach, Regeln und Fakten zu implementieren (in Prolog ist alles eine Regel oder eine Tatsache) und dann "die Datenbank abzufragen" (eine Antwort auf Ihre Frage zu erhalten), selbst wenn Sie Tausende dieser Regeln und Fakten haben .

Wenn Sie sich für das Thema interessieren, empfehle ich Ihnen, einen Prolog-Interpreter zu installieren und zu versuchen, ein sehr einfaches Expertensystem zu implementieren, um ein Gefühl dafür zu bekommen. Dies kann Ihnen helfen, zu verstehen, warum es für diese Aufgaben ein so leistungsfähiges Werkzeug ist.

26
Bitgarden

Der Unterschied ist ein bisschen wie bei der Verwendung von SQL für Datenbankabfragen, anstatt ein Programm beispielsweise in C zu schreiben. In SQL sagen Sie, was Sie wollen - aber Sie müssen nicht (direkt) den Algorithmus angeben, der zum Ableiten verwendet wird.

Ein Prolog-Programm wird manchmal als Datenbank bezeichnet, aber es ist wirklich eine Reihe von Prädikatenlogikanweisungen. Der Auswertungsmechanismus nimmt die Abfrage entgegen und führt sie basierend auf den Prädikatenlogikanweisungen durch und führt eine Suche durch, um die richtigen Lösungen zu finden. Alle benötigten Suchalgorithmen (viel komplizierter als eine SQL-Abfrage) sind in den Prolog-Compiler integriert.

Eine SQL-Abfrage würde, wenn Sie dieselbe Logik naiv in C implementieren würden, nicht viel mehr als Schleifen und if/else-Bedingungen benötigen.

Eine in C implementierte Prolog-Abfrage würde (zumindest) eine Backtracking-Suche unter Verwendung der Union-Find-Technik erfordern. Und das ist wieder eine naive Lösung.

Eine bestimmte Art der KI-Programmierung beinhaltet viel von der Art der Suche, die Prolog durchführt. Eigentlich nicht überraschend - ursprünglich wurde die KI-Programmierung in LISP oder einer anderen Sprache durchgeführt, aber Prolog wurde speziell für diese Aufgabe geschrieben.

Prädikatenlogik ist der natürliche Ansatz zur Definition dieses Stils von KI-Problemen. Sobald Sie diese Definition haben, können Sie sie direkt ausführen, ohne all diese umständlichen Suchalgorithmen implementieren zu müssen.

17
Steve314

Ich habe 2 Prolog-Module an der Universität belegt und es sehr genossen, mich in der Sprache zu entwickeln.

Es ist besonders gut für Expertensysteme, ich habe eine medizinische Symptomdiagnose geschrieben.

Mir wurde erklärt, dass LISP in bestimmten Ländern häufiger verwendet wird und Prolog in anderen Ländern.

In Bezug auf das Beste habe ich LISP nur kurz behandelt, als ich Lambda-Kalkül in einem Modul für Theoretische Informatik gemacht habe, also bin ich voreingenommen gegenüber Prolog.

Wenn Sie eine Anwendung entwickeln, die sich mit Regeln und Fakten befasst, um Antworten abzuleiten, ist Prolog sehr gut und unterstützt natürlich das Backtracking.

4
DazManCat