2011-01-05 13 views
1

ich bin nicht sehr erfahren auf Prolog und ich versuche, eine Übung zu lösen, die einen heuristischen Algorithmus (zB A * oder BFS oder Hill-Climbing) verwendet, um eine Lösung für ein gegebenes Problem zu finden.Heuristische Algorithmen in Prolog

Da ich mit dieser Art von Programmierung nicht vertraut bin und eine Suche in Google mir nicht wirklich half, fragte ich mich, ob jemand mir einen Link zu einem ähnlichen bereits solven Beispiel geben könnte, um zu sehen, wie das gemacht wird.
Ich versuche nicht, irgendetwas zu kopieren, es ist nur, dass ich viel über Prolog commants usw. gelernt habe und ich weiß, wie diese Algorithmen in der Theorie funktionieren und wie sie das Problem lösen (zB in meiner Übung denke ich BFS oder A * wäre eine gute Wahl), aber ich verstehe nicht, wie ich ein Programm in Prolog erstellen soll, das tatsächlich einen Algorithmus verwendet und eine Lösung gibt.

Nur eine Klarstellung, ich glaube wirklich, dass echte Prolog-Code-Beispiele sehr nützlich und keine theoretische Erklärung dafür wären, wie ein Algorithmus funktioniert. Ich weiß nicht, wie das Problem gelöst werden soll, und besonders im Prolog ist das, was ich nicht verstehen ..

Thnx im Voraus ..

Antwort

0

Seltsamer vor kurzem eine BFS in Prolog implementiert ich. Ich habe den Code nirgends gepostet und ich zögere dies zu tun, weil es eine Neuimplementierung einer Aufgabe ist, die wahrscheinlich wiederverwendet wird.

ich Ihnen die tatsächliche BFS Definition geben kann:

% performs a BFS, with the given goal and queue 
bfs(Goal, [[Goal|[Path]]|_], Path). 
bfs(Goal, [State|Rest], Result) :- 
    successors_list(State, Successors), 
    remove_seen(Successors, NewStates), 
    add_to_seen(NewStates), 
    append(Rest, NewStates, Queue), 
    bfs(Goal, Queue, Result). 

Für dieses Problem „Goal“ war eine besondere Nummer, und „Path“ wurde die Sequenz von Aktionen, um dieses Ziel zu bekommen benötigt. Der zweite Parameter ist die Warteschlange, in der jeder Status als eine Liste von zwei Elementen dargestellt wird (der erste ist die aktuelle Nummer und der zweite der Pfad, der zum Generieren dieser Nummer benötigt wird). Es gibt den Pfad zurück, der benötigt wird, um die angegebene Nummer in "Path" zu erhalten. Die Menge der gesehenen Zustände wurde in der Datenbank selbst unter Verwendung von Behauptungen aufgezeichnet.

Außerhalb dieser Definition ist alles problemspezifisch.

EDIT: Ich hätte gesagt, das meiste ist problemspezifisch. Ich habe meinen Code überarbeitet, ein paar kleine Änderungen vorgenommen und das Problem, das er löst, geändert. Es ist deutlich genug genug von der Aufgabe, dass ich fühle es bequem zu buchen, also hier ist es: BFS in Prolog(AI)

+0

Thnx für die Antwort ... sehr hilfreich! – yiannis