künstliche intelligenz unifikation, backtracking ... · erweitern sie das prologprogramm zum...

35
Künstliche Intelligenz Unifikation, Backtracking, Rekursion und Listen in Prolog Stephan Schwiebert WS 2008/2009 Sprachliche Informationsverarbeitung Institut für Linguistik Universität zu Köln

Upload: others

Post on 02-Nov-2019

6 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Künstliche Intelligenz Unifikation, Backtracking ... · Erweitern Sie das PrologProgramm zum Stammbaum um folgende Informationen: ... elternteil_von wumpus petra fritz anton wumpus

Künstliche IntelligenzUnifikation, Backtracking, 

Rekursion und Listen in Prolog

Stephan Schwiebert

WS 2008/2009

Sprachliche Informationsverarbeitung

Institut für Linguistik

Universität zu Köln

Page 2: Künstliche Intelligenz Unifikation, Backtracking ... · Erweitern Sie das PrologProgramm zum Stammbaum um folgende Informationen: ... elternteil_von wumpus petra fritz anton wumpus

Stephan Schwiebert ­ Sprachliche Informationsverarbeitung ­ WS 08/09

Aufgabe: Stammbaum

Andrea Judith Otto Silke Sebastian Torsten Kathi

Peter Petra Gerd Uschi Paul Paula

Kurt Brunhilde Theodor MarianneHans Maria

Abraham

Page 3: Künstliche Intelligenz Unifikation, Backtracking ... · Erweitern Sie das PrologProgramm zum Stammbaum um folgende Informationen: ... elternteil_von wumpus petra fritz anton wumpus

Praxis: Stammbaum

Page 4: Künstliche Intelligenz Unifikation, Backtracking ... · Erweitern Sie das PrologProgramm zum Stammbaum um folgende Informationen: ... elternteil_von wumpus petra fritz anton wumpus

Stephan Schwiebert ­ Sprachliche Informationsverarbeitung ­ WS 08/09

Praxis: Stammbaum

Erweitern Sie das Prolog­Programm zum Stammbaum um folgende Informationen:

Peter hasst Gerd Uschi hasst Gerd Uschi hasst Otto Otto hasst Gerd

Implementieren Sie anschließend: X ist Feind von Y, wenn X Y hasst, „Der Feind meines Feindes ist mein Freund“ sowie „Der Freund meines Feindes ist mein Feind“.

Page 5: Künstliche Intelligenz Unifikation, Backtracking ... · Erweitern Sie das PrologProgramm zum Stammbaum um folgende Informationen: ... elternteil_von wumpus petra fritz anton wumpus

Unifikation

Page 6: Künstliche Intelligenz Unifikation, Backtracking ... · Erweitern Sie das PrologProgramm zum Stammbaum um folgende Informationen: ... elternteil_von wumpus petra fritz anton wumpus

Stephan Schwiebert ­ Sprachliche Informationsverarbeitung ­ WS 08/09

Unifikation

Variablen in Prolog werden durch das Prinzip der Unifikation gebunden, eine neue Zuweisung eines Wertes ist nicht möglich.

Page 7: Künstliche Intelligenz Unifikation, Backtracking ... · Erweitern Sie das PrologProgramm zum Stammbaum um folgende Informationen: ... elternteil_von wumpus petra fritz anton wumpus

Stephan Schwiebert ­ Sprachliche Informationsverarbeitung ­ WS 08/09

Unifikation

Terme können nur dann unifiziert werden, wenn die bereits gebundenen Variablen übereinstimmen.

elternteil_von

elternteil_von

elternteil_von wumpus petra

antonfritz

wumpus X

Page 8: Künstliche Intelligenz Unifikation, Backtracking ... · Erweitern Sie das PrologProgramm zum Stammbaum um folgende Informationen: ... elternteil_von wumpus petra fritz anton wumpus

Stephan Schwiebert ­ Sprachliche Informationsverarbeitung ­ WS 08/09

Unifikation

Terme können nur dann unifiziert werden, wenn die bereits gebundenen Variablen übereinstimmen.

Unifikation nicht möglich

elternteil_von

elternteil_von

elternteil_von wumpus petra

antonfritz

wumpus X

Page 9: Künstliche Intelligenz Unifikation, Backtracking ... · Erweitern Sie das PrologProgramm zum Stammbaum um folgende Informationen: ... elternteil_von wumpus petra fritz anton wumpus

Stephan Schwiebert ­ Sprachliche Informationsverarbeitung ­ WS 08/09

Unifikation

Terme können nur dann unifiziert werden, wenn die bereits gebundenen Variablen übereinstimmen.

Unifikation möglich, X bekommt den Wert petra.

elternteil_von

elternteil_von

elternteil_von wumpus petra

antonfritz

wumpus X

Page 10: Künstliche Intelligenz Unifikation, Backtracking ... · Erweitern Sie das PrologProgramm zum Stammbaum um folgende Informationen: ... elternteil_von wumpus petra fritz anton wumpus

Stephan Schwiebert ­ Sprachliche Informationsverarbeitung ­ WS 07/08

Unifikation

Unifikation scheitert, wenn... es sich um zwei verschiedene atomare Strukturen handelt (z.B. 

'hans' und 'otto'). ein Term atomar, der andere komplex ist (z.B. 'test' und 

'test(test)'. zwei komplexe Terme unifiziert werden sollen, wobei

die Köpfe der Terme verschieden sind (z.B. 'a(X)' und 'b(X)') oder

die Stelligkeit verschieden ist (z.B. 'a(X)' und 'a(X,Y)') oder ein Argumentpaar von Argumenten gleicher Position im 

Term nicht unifizierbar ist.

Page 11: Künstliche Intelligenz Unifikation, Backtracking ... · Erweitern Sie das PrologProgramm zum Stammbaum um folgende Informationen: ... elternteil_von wumpus petra fritz anton wumpus

Stephan Schwiebert ­ Sprachliche Informationsverarbeitung ­ WS 08/09

Unifikation

Der Unifikations­Operator „=“ prüft, ob sich linke und rechte Seite des Operators unifizieren lassen.

Deshalb lässt er sich verwenden, um Identität zu prüfen, aber nicht, um zu rechnen o.ä.:

Page 12: Künstliche Intelligenz Unifikation, Backtracking ... · Erweitern Sie das PrologProgramm zum Stammbaum um folgende Informationen: ... elternteil_von wumpus petra fritz anton wumpus

Stephan Schwiebert ­ Sprachliche Informationsverarbeitung ­ WS 07/08

Unifikation

Welche Ausdrücke lassen sich unifizieren? X = Y. 5 = 3 + 2. X = 3 + 2.  a(X) = b(X). x(A) = x(B). a(X) = a(X,Y). a(X,Y) = a(x,y). a(b(C)) = b(a(C)). a = a. f(g(A,B)) = f(g(x,y)).

Page 13: Künstliche Intelligenz Unifikation, Backtracking ... · Erweitern Sie das PrologProgramm zum Stammbaum um folgende Informationen: ... elternteil_von wumpus petra fritz anton wumpus

Stephan Schwiebert ­ Sprachliche Informationsverarbeitung ­ WS 08/09

Unifikation & Backtracking

Dass Variablen (scheinbar) dennoch neu belegt werden können (wenn z.B. alle Vorfahren von wumpus ausgegeben werden), liegt daran, dass Prolog mit Hilfe von Backtracking nach Lösungen sucht.

Page 14: Künstliche Intelligenz Unifikation, Backtracking ... · Erweitern Sie das PrologProgramm zum Stammbaum um folgende Informationen: ... elternteil_von wumpus petra fritz anton wumpus

Backtracking

Page 15: Künstliche Intelligenz Unifikation, Backtracking ... · Erweitern Sie das PrologProgramm zum Stammbaum um folgende Informationen: ... elternteil_von wumpus petra fritz anton wumpus

Stephan Schwiebert ­ Sprachliche Informationsverarbeitung ­ WS 08/09

Backtracking

uninformiertes, universelles Suchverfahren (trial and error)

fester Bestandteil von Prolog Implementiert Tiefensuche in Bäumen Findet garantiert eine Lösung (falls eine Lösung 

existiert)

Page 16: Künstliche Intelligenz Unifikation, Backtracking ... · Erweitern Sie das PrologProgramm zum Stammbaum um folgende Informationen: ... elternteil_von wumpus petra fritz anton wumpus

Stephan Schwiebert ­ Sprachliche Informationsverarbeitung ­ WS 08/09

Backtracking: Beispiel Wegsuche

(nach König/Seifert 1989: Kap. 5.3, etwas modifiziert)

Gesucht ist ein Weg vomBahnhof zur Uni.

Page 17: Künstliche Intelligenz Unifikation, Backtracking ... · Erweitern Sie das PrologProgramm zum Stammbaum um folgende Informationen: ... elternteil_von wumpus petra fritz anton wumpus

Stephan Schwiebert ­ Sprachliche Informationsverarbeitung ­ WS 08/09

Backtracking: Beispiel Wegsuche

(nach König/Seifert 1989: Kap. 5.3, etwas modifiziert)

An jeder Kreuzung gibt es Alternativen, die evtl. zum Ziel führen.

Page 18: Künstliche Intelligenz Unifikation, Backtracking ... · Erweitern Sie das PrologProgramm zum Stammbaum um folgende Informationen: ... elternteil_von wumpus petra fritz anton wumpus

Stephan Schwiebert ­ Sprachliche Informationsverarbeitung ­ WS 08/09

Backtracking: Beispiel Wegsuche

(nach König/Seifert 1989: Kap. 5.3, etwas modifiziert)

Daraus lässt sich eine Baumstruktur erzeugen, in der jeder Knoten einer Kreuzung entspricht, und in der jeder Knoten  als Kind­Knoten die erreichbaren Kreuzungen enthält.

Page 19: Künstliche Intelligenz Unifikation, Backtracking ... · Erweitern Sie das PrologProgramm zum Stammbaum um folgende Informationen: ... elternteil_von wumpus petra fritz anton wumpus

Stephan Schwiebert ­ Sprachliche Informationsverarbeitung ­ WS 08/09

Backtracking: Beispiel Wegsuche

Bahnhof

Kriegsberg/Friedrich

Kronen/Lautenschlager

BahnhofFriedrich/Kronen

Kriegsberg/Kronen

Bahnhof

Uni Uni... ... ......

Page 20: Künstliche Intelligenz Unifikation, Backtracking ... · Erweitern Sie das PrologProgramm zum Stammbaum um folgende Informationen: ... elternteil_von wumpus petra fritz anton wumpus

Stephan Schwiebert ­ Sprachliche Informationsverarbeitung ­ WS 08/09

Backtracking: Beispiel Wegsuche

... ... ......

Ein Backtracking­Algorithmus „expandiert“ den aktuellen Knoten,wählt ein Kind und setzt dieses als neuen aktuellen Knoten ein.So wird rekursiv der Baum von der Wurzel bis zu einem Blattdurchlaufen (Tiefensuche).

Bahnhof

Kriegsberg/Friedrich

Kronen/Lautenschlager

BahnhofFriedrich/Kronen

Kriegsberg/Kronen

Bahnhof

Uni Uni

Page 21: Künstliche Intelligenz Unifikation, Backtracking ... · Erweitern Sie das PrologProgramm zum Stammbaum um folgende Informationen: ... elternteil_von wumpus petra fritz anton wumpus

Stephan Schwiebert ­ Sprachliche Informationsverarbeitung ­ WS 08/09

Backtracking: Beispiel Wegsuche

... ... ......

Bahnhof

Kriegsberg/Friedrich

Kronen/Lautenschlager

BahnhofFriedrich/Kronen

Kriegsberg/Kronen

Bahnhof

Uni Uni

Page 22: Künstliche Intelligenz Unifikation, Backtracking ... · Erweitern Sie das PrologProgramm zum Stammbaum um folgende Informationen: ... elternteil_von wumpus petra fritz anton wumpus

Stephan Schwiebert ­ Sprachliche Informationsverarbeitung ­ WS 08/09

Backtracking: Beispiel Wegsuche

... ... ......

Bahnhof

Kriegsberg/Friedrich

Kronen/Lautenschlager

BahnhofFriedrich/Kronen

Kriegsberg/Kronen

Bahnhof

Uni Uni

Page 23: Künstliche Intelligenz Unifikation, Backtracking ... · Erweitern Sie das PrologProgramm zum Stammbaum um folgende Informationen: ... elternteil_von wumpus petra fritz anton wumpus

Stephan Schwiebert ­ Sprachliche Informationsverarbeitung ­ WS 08/09

Backtracking: Beispiel Wegsuche

... ... ......

Bahnhof

Kriegsberg/Friedrich

Kronen/Lautenschlager

BahnhofFriedrich/Kronen

Kriegsberg/Kronen

Bahnhof

Uni Uni

Page 24: Künstliche Intelligenz Unifikation, Backtracking ... · Erweitern Sie das PrologProgramm zum Stammbaum um folgende Informationen: ... elternteil_von wumpus petra fritz anton wumpus

Stephan Schwiebert ­ Sprachliche Informationsverarbeitung ­ WS 08/09

Backtracking: Beispiel Wegsuche

Sollte ein gefundenes Blatt kein Zielknoten sein (Wegsuche endet in Sackgasse), so wird der Vaterknoten des aktuellen Knoten besucht und mit dem nächsten, noch nicht besuchten Kind weitergearbeitet. Sind keine Kinder mehr vorhanden, wird zurück zum Vater des Vaters gesprungen etc...

... ...

Bahnhof

Kriegsberg/Friedrich

Kronen/Lautenschlager

BahnhofFriedrich/Kronen

Kriegsberg/Kronen

Bahnhof

Uni Uni

Page 25: Künstliche Intelligenz Unifikation, Backtracking ... · Erweitern Sie das PrologProgramm zum Stammbaum um folgende Informationen: ... elternteil_von wumpus petra fritz anton wumpus

Stephan Schwiebert ­ Sprachliche Informationsverarbeitung ­ WS 08/09

Backtracking: Beispiel Wegsuche

... ...

Bahnhof

Kriegsberg/Friedrich

Kronen/Lautenschlager

BahnhofFriedrich/Kronen

Kriegsberg/Kronen

Bahnhof

Uni Uni

Page 26: Künstliche Intelligenz Unifikation, Backtracking ... · Erweitern Sie das PrologProgramm zum Stammbaum um folgende Informationen: ... elternteil_von wumpus petra fritz anton wumpus

Stephan Schwiebert ­ Sprachliche Informationsverarbeitung ­ WS 08/09

Backtracking: Beispiel Wegsuche

... ...

Bahnhof

Kriegsberg/Friedrich

Kronen/Lautenschlager

BahnhofFriedrich/Kronen

Kriegsberg/Kronen

Bahnhof

Uni Uni

Page 27: Künstliche Intelligenz Unifikation, Backtracking ... · Erweitern Sie das PrologProgramm zum Stammbaum um folgende Informationen: ... elternteil_von wumpus petra fritz anton wumpus

Stephan Schwiebert ­ Sprachliche Informationsverarbeitung ­ WS 08/09

Backtracking: Beispiel Wegsuche

... ...

Bahnhof

Kriegsberg/Friedrich

Kronen/Lautenschlager

BahnhofFriedrich/Kronen

Kriegsberg/Kronen

Bahnhof

Uni Uni

Page 28: Künstliche Intelligenz Unifikation, Backtracking ... · Erweitern Sie das PrologProgramm zum Stammbaum um folgende Informationen: ... elternteil_von wumpus petra fritz anton wumpus

Stephan Schwiebert ­ Sprachliche Informationsverarbeitung ­ WS 08/09

Backtracking: Beispiel Wegsuche

... ...

Bahnhof

Kriegsberg/Friedrich

Kronen/Lautenschlager

BahnhofFriedrich/Kronen

Kriegsberg/Kronen

Bahnhof

Uni Uni

Page 29: Künstliche Intelligenz Unifikation, Backtracking ... · Erweitern Sie das PrologProgramm zum Stammbaum um folgende Informationen: ... elternteil_von wumpus petra fritz anton wumpus

Stephan Schwiebert ­ Sprachliche Informationsverarbeitung ­ WS 08/09

Backtracking: Beispiel Wegsuche

... ...

Bahnhof

Kriegsberg/Friedrich

Kronen/Lautenschlager

BahnhofFriedrich/Kronen

Kriegsberg/Kronen

Bahnhof

Uni Uni

Page 30: Künstliche Intelligenz Unifikation, Backtracking ... · Erweitern Sie das PrologProgramm zum Stammbaum um folgende Informationen: ... elternteil_von wumpus petra fritz anton wumpus

Stephan Schwiebert ­ Sprachliche Informationsverarbeitung ­ WS 08/09

Backtracking: Beispiel Wegsuche

... ...

Bahnhof

Kriegsberg/Friedrich

Kronen/Lautenschlager

BahnhofFriedrich/Kronen

Kriegsberg/Kronen

Bahnhof

Uni Uni

Page 31: Künstliche Intelligenz Unifikation, Backtracking ... · Erweitern Sie das PrologProgramm zum Stammbaum um folgende Informationen: ... elternteil_von wumpus petra fritz anton wumpus

Stephan Schwiebert ­ Sprachliche Informationsverarbeitung ­ WS 08/09

Backtracking & Unifikation

Wird im Backtracking­Baum ein Schritt Richtung zur Wurzel zurückgelegt, werden alle Variablen, die zuvor in diesem Schritt unifiziert wurden, wieder frei.

Page 32: Künstliche Intelligenz Unifikation, Backtracking ... · Erweitern Sie das PrologProgramm zum Stammbaum um folgende Informationen: ... elternteil_von wumpus petra fritz anton wumpus

Stephan Schwiebert ­ Sprachliche Informationsverarbeitung ­ WS 08/09

Praxis: Wegsuche

ort(bahnhof).

ort(uni).

ort(krieg, friedrich).

ort(krieg, kronen).

ort(friedrich, kronen).

ort(lautenschlager, kronen).

ort(krieg, keppler).

weg(ort(bahnhof), ort(krieg,friedrich)).weg(ort(bahnhof), ort(lautenschlager,kronen)).weg(ort(krieg,friedrich), ort(friedrich,kronen)).weg(ort(lautenschlager,kronen), ort(friedrich,kronen)).weg(ort(friedrich,kronen), ort(krieg,kronen)).weg(ort(friedrich,kronen), ort(uni)).weg(ort(krieg,kronen), ort(krieg,keppler)).weg(ort(krieg,keppler), ort(uni)).

% Gesucht: Prädikat% wegsuche(X,Y) :­ ???% Aufruf: wegsuche(ort(bahnhof), ort(uni)). 

Page 33: Künstliche Intelligenz Unifikation, Backtracking ... · Erweitern Sie das PrologProgramm zum Stammbaum um folgende Informationen: ... elternteil_von wumpus petra fritz anton wumpus

Stephan Schwiebert ­ Sprachliche Informationsverarbeitung ­ WS 08/09

Praxis: Wegsuche in Prolog

Problem: Prolog sagt „Yes“, schön wäre jedoch eine Beschreibung des gesuchten Weges...

Lösung: Build­In­Prädikate nl/0 und write/1 nl/0

gibt einen Zeilenumbruch aus write/1

gibt einen Term aus, z.B. write('Hallo'), write(' '), write('Welt').

Page 34: Künstliche Intelligenz Unifikation, Backtracking ... · Erweitern Sie das PrologProgramm zum Stammbaum um folgende Informationen: ... elternteil_von wumpus petra fritz anton wumpus

Stephan Schwiebert ­ Sprachliche Informationsverarbeitung ­ WS 08/09

Praxis: Wegsuche in Prolog

Erweitern Sie das Programm zur Wegsuche mit Hilfe von nl/0 und write/1 um eine Ausgabe.

nl/0gibt einen Zeilenumbruch aus

write/1gibt einen Term aus, z.B. write('Hallo'), write(' '), write('Welt').

Page 35: Künstliche Intelligenz Unifikation, Backtracking ... · Erweitern Sie das PrologProgramm zum Stammbaum um folgende Informationen: ... elternteil_von wumpus petra fritz anton wumpus

Stephan Schwiebert ­ Sprachliche Informationsverarbeitung ­ WS 08/09

Praxis: Wegsuche in Prolog

Lösung:ort(bahnhof)....

weg(ort(bahnhof), ort(krieg,friedrich))....

wegsuche(X, Y) :­weg(X, Y),nl, write('von '), write(X), write(' nach '), write(Y), nl.

wegsuche(X, Y) :­weg(X, Z),wegsuche(Z, Y),write('von '), write(X), write(' nach '), write(Z), nl.