20.03.2014 Aufrufe

Einführung in die Methoden der Künstlichen Intelligenz - Goethe ...

Einführung in die Methoden der Künstlichen Intelligenz - Goethe ...

Einführung in die Methoden der Künstlichen Intelligenz - Goethe ...

MEHR ANZEIGEN
WENIGER ANZEIGEN

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

5 Logisches Programmieren<br />

E<strong>in</strong>e mögliche Abhilfe ist das E<strong>in</strong>führen e<strong>in</strong>es zusätzlichen Parameters, <strong>der</strong> als Tiefenschranke<br />

verwendet wird (beachte den Abschnitt 5.3.3 zu Zahlen und arithmetischen Operationen).<br />

p(I,a,b).<br />

p(I,c,b).<br />

p(I,X,Y) :- I > 0, J is I-1, p(J,Y,X).<br />

p(I,X,Z) :- I > 0, J is I-1, p(J,X,Y) , p(J,Y,Z).<br />

Ruft man p(2,a,c) auf so erhält man true. I stellt hier gerade <strong>die</strong> Tiefenschranke dar.<br />

E<strong>in</strong>e weitere Verän<strong>der</strong>ung gegenüber <strong>der</strong> Logik ist, dass <strong>in</strong> Prologimplementierungen<br />

<strong>der</strong> Occurs Check während <strong>der</strong> Unifikation aus Effizienzgründen nicht durchgeführt<br />

wird. Da es <strong>in</strong> <strong>die</strong>sem Fall quasi e<strong>in</strong>e Lösung als unendlichen Term gibt (<strong>der</strong> natürlich<br />

ke<strong>in</strong> P L 1 -Term ist), wird e<strong>in</strong>fach weitergerechnet. Das ist aus Sicht <strong>der</strong> Prädikatenlogik<br />

falsch. Aus Prolog-Sicht muss sich <strong>der</strong> Programmierer darüber bewusst se<strong>in</strong>.<br />

Gibt man z.B.<br />

k(X,X)=k(Y,h(Y)).<br />

im Prolog-Interpreter e<strong>in</strong> (beachte = steht für Gleichheit bzgl. <strong>der</strong> Terme), so erhält man<br />

e<strong>in</strong>e Lösung:<br />

X = Y, Y = h(Y).<br />

Die Unifikation mit Occurs Check verbietet <strong>die</strong>se Lösung, da Y = h(Y ) bedeutet, dass Y<br />

e<strong>in</strong> unendlicher Term ist.<br />

Weitere Verän<strong>der</strong>ungen <strong>in</strong> Prolog gegenüber <strong>der</strong> theoretischen Fun<strong>die</strong>rung s<strong>in</strong>d:<br />

• Es gibt extra Operatoren zum Bee<strong>in</strong>flussen des Backtrack<strong>in</strong>g (Cut), <strong>der</strong> u.a. bewirken<br />

kann, dass für e<strong>in</strong> Unterziel statt vielen Lösungen maximal e<strong>in</strong>e berechnet wird.<br />

Dies werden wir unten noch genauer behandeln.<br />

• Assert/Retract: Damit können Programmklauseln zum Programm h<strong>in</strong>zugefügt<br />

bzw. gelöscht werden. I.a, betrifft <strong>die</strong>s nur Fakten.<br />

• Negation: Negation wird def<strong>in</strong>iert als Fehlschlagen <strong>der</strong> Suche.<br />

• Es wird z.T. Typ<strong>in</strong>formation zu Programmen h<strong>in</strong>zugefügt.<br />

• Argumente von Prädikaten kann man mit dem Zusatz I bzw. O versehen. Diese Angaben<br />

bedeuten, dass das jeweilige Argument nur als E<strong>in</strong>gabe bzw. nur als Ausgabe<br />

verwendet wird.<br />

• Zusätzlich kann man e<strong>in</strong> Prädikat als Funktion def<strong>in</strong>ieren, wenn <strong>die</strong> ersten Argumente<br />

<strong>die</strong> E<strong>in</strong>gabe s<strong>in</strong>d, das letzte Argument <strong>die</strong> Ausgabe, wobei <strong>die</strong> Funktion noch<br />

zusätzlich als determ<strong>in</strong>istisch (d.h. als mathematische Funktion) deklariert werden<br />

muss.<br />

Stand: 7. Januar 2013 164 M. Schmidt-Schauß & D. Sabel, Skript KI, WS 2012/13

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!