Übungen – KI Prof. Dr. Jürgen Cleve Inhaltsverzeichnis 1 Übung Prolog I 1 2 Übung Prolog II 2 3 Übung Prolog III 3 4 Übung Prolog IV 4 5 Übung Prolog V 4 6 Übung WR/WV I und II – Logik 5 7 Übung WR/WV III und IV – Logik 5 8 Übung WR/WV V – Regelsysteme 6 9 Übung Vages Wissen 7 10 Übung Suche I und II 8 11 Übung Suche III und IV 9 12 Übung Data Mining 9 1 Übung Prolog I 1. Entwickeln Sie in Prolog eine Wissensbasis über Ihre Familie! Verwenden Sie dabei die in der Vorlesung vorgeschlagene Variante mittels vater von und frau von. Definieren Sie die Prädikate: • mutter von • eltern von • bruder von • grosseltern von • tante von • vorfahre von Hinweise • Starten Sie SWI-Prolog! 1 • Legen Sie eine neue Datei (Dateityp .pl) an und speichern Sie diese in Ihrem lokalen Verzeichnis. • In diese Datei schreiben Sie Ihre Fakten und Regeln. • Laden Sie diese Datei (consult) und stellen Sie dann Anfragen! • Man kann die Abarbeitung verfolgen (trace). • Beachten Sie: Variablen beginnen in Prolog mit einem Großbuchstaben, Konstante mit einem Kleinbuchstaben. 2 Übung Prolog II 1. Sechs Mann – nennen wir sie A, B, C, D, E, F – wurden in die engere Wahl für die Funktion des Vorsitzenden, des Stellvertreters und des Sekretärs der Gesellschaft der Freunde von logischen Aufgaben gezogen. Aber die Bestimmung dieser drei erwies sich als nicht so leicht, weil jeder der sechs gewisse Ansprüche stellte: (a) A will nicht zur Leitung gehören, wenn E nicht Vorsitzender wird. (b) B will nicht zur Leitung gehören, wenn er über C stehen soll. (c) B will unter gar keinen Umständen zusammen mit F arbeiten. (d) C will nicht mitarbeiten, wenn der Leitung E und F zusammen angehören. (e) C wird nicht mitarbeiten, wenn F Vorsitzender oder B Sekretär ist. (f) D wird nicht mit C oder E arbeiten, wenn er dem einen oder anderen unterstellt ist. (g) E will nicht Stellvertreter sein. (h) E will nicht Sekretär sein, wenn D Mitglied der Leitung ist. (i) E will nicht zusammen mit A arbeiten, wenn F nicht der Leitung angehört. (j) F will nur mitarbeiten, wenn er oder C Vorsitzender wird. Wie wurden die Posten verteilt ? Entwickeln Sie eine Lösung mittels PROLOG! Hinweis: “Zusammen arbeiten” bezieht sich nur auf die Leitungspositionen, ebenso die Hierarchie. 2. Definieren Sie den folgenden Graphen mittels Fakten kante/2 und entwicklen Sie ein Prädikat weg/2, welches entscheidet (true/false), ob ein Weg vom ersten zum zweiten Parameter existiert. a c b e d f g i j h l k Die Anfrage ?-weg(a,k). liefert true, ?-weg(c,b). liefert false. Was passiert, wenn man eine Kante von e nach a hinzufügt. 3. Wie sieht eine Regel dafür aus, dass sich 2 Kreise (in der Ebene) nicht berühren? Wählen Sie dazu eine passende Darstellung für einen Kreis! Hinweise • Starten Sie SWI-Prolog! • Legen Sie eine neue Datei (Dateityp .pl) an und speichern Sie diese in Ihrem lokalen Verzeichnis. • In diese Datei schreiben Sie Ihre Fakten und Regeln. • Laden Sie diese Datei (consult) und stellen Sie dann Anfragen! • Man kann die Abarbeitung verfolgen (trace). • Beachten Sie: Variablen beginnen in Prolog mit einem Großbuchstaben, Konstante mit einem Kleinbuchstaben. 3 Übung Prolog III 1. Programmieren Sie in Prolog folgende Listen-Prädikate: • Typ-Prüfung: Aus einer Liste sollen nur alle Zahlen übernommen werden. (?-pruefe([2,a,[1,2],3,1,4],X) → X=[2,3,1,4]) • Löschen aller Zahlen aus einer Liste (?-loesche([2,[4,3],3,b,1,X,4],Y) → Y=[[4,3],b,X]) • Ist eine Liste eine sortierte Liste von Zahlen? (?-ist sortiert([1,2,3,7,8]) → true, ?-ist sortiert([1,6,3,2,8]) → false) • Teilmengenbeziehung (?- teilmenge([1,2],[3,1,4,2]) → true) • Umdrehen einer Liste (?- rev([1,a,2],X) → X=[2,a,1]) • Nichtenthalten von Elementen in Listen (?- nichtin(b,[1,a,2]) → true) • Ist eine Liste in einer anderen Liste als Sequenz enthalten? (?- sequenz([3,5,6],[a,d,3,5,6,7,6]) → true) 2. Ergänzen Sie folgende Tabelle: Term1 kind(X,peter) geboren(kai,datum(X,Y,Z)) [a, b, c, d] X [ ] [3] a(2, b(3)) [a, b, 4, X] Term2 kind(otto,Y) geboren(U,V) [X|Y ] f (Y, X) [A|B] [A|B] a(2, b(4 − 1)) [A, C|Rest] Unifikation Ergebnis 3. Ich habe mir eine sechsstellige Zahl ausgedacht. Wenn ich die letzten beiden Ziffern wegnehme und vorn dranschreibe (in dieser Reihenfolge), erhalte ich eine sechsstellige Zahl, die exakt ein Neuntel der Ursprungszahl ist. Finden Sie diese Zahl mit einem Prolog-Programm. Hinweise • Starten Sie SWI-Prolog! • Legen Sie eine neue Datei (Dateityp .pl) an und speichern Sie diese in Ihrem lokalen Verzeichnis. • In diese Datei schreiben Sie Ihre Fakten und Regeln. • Laden Sie diese Datei (consult) und stellen Sie dann Anfragen! • Man kann die Abarbeitung verfolgen (trace). • Beachten Sie: Variablen beginnen in Prolog mit einem Großbuchstaben, Konstante mit einem Kleinbuchstaben. 4 Übung Prolog IV 1. Entwickeln Sie in Prolog Regeln für die Zusammensetzung eines Menüs, also z.B. aus: Suppe, Vorspeise, Hauptgang, Dessert, Getränk! Entwickeln Sie dazu geeignete Datenstrukturen zur Darstellung! Gehen Sie zunächst davon aus, dass alles mit allem – z.B. jede Vorspeise mit jedem Hauptgang – kombinierbar ist. 2. Entwickeln Sie das Programm für Menüs weiter, um folgende Menüs finden zu können: • Billige Menüs • Vegetarische Menüs • Kalorienarme Menüs Erweitern Sie dazu Ihre Darstellung der Speisen um die Zahlen für Kalorien und Preis sowie ein Attribut für vegetarisch. Ziel ist, Menüs auszugeben, die einen bestimmten Preis oder eine Kalorienanzahl nicht überschreiten bzw. die vegetarisch sind. 5 Übung Prolog V 1. Entwickeln Sie einen Sortieralgorithmus für Listen! Gehen Sie dabei von Listen mit Zahlen aus! Vorausgesetzt sei ein Prädikat gt, welches true liefert, falls der 1. Parameter größer als der 2. Parameter ist, also z.B. gt(3,1). Für Zahlen ist das Prädikat also z.B. durch gt(X,Y) :- X > Y. definiert. Eine mögliche Anfrage ist zB: ?-sortiere([3,1,4,2],X). → X=[1,2,3,4]. 2. Entwickeln Sie Prädikate für die Klötzchen-Welt. • Gehen Sie zunächst davon aus, dass es nur Würfel einer Einheitsgröße gibt. Entwickeln Sie eine geeignete Darstellung dafür, welche Würfel sich auf unserem Tisch befinden, z.B. könnte man durch [[a,b,c],[d,e]] darstellen, dass sich auf unserem Tisch 5 Objekte befinden, wobei a auf b, b auf c und d auf e steht. Programmieren Sie folgende Prädikate: – stelle objekt(X,Y) Das Objekt X soll auf Y draufgestellt werden. – stelle objekt auf tisch(X) Das Objekt X soll auf den Tisch gestellt werden. Dies kann ein neues Objekt, aber auch ein bereits auf dem Tisch befindliches sein. • Untersuchen Sie, was man ändern muss, wenn man auch andere Objekte wie Kegel, Zylinder o.ä. auf dem Tisch zulassen will. 6 Übung WR/WV I und II – Logik 1. Übersetzen Sie folgende umgangssprachlichen Sätze in eine prädikatenlogische Formel: • Jeder weiß etwas. • Keiner weiß alles. • Manche wissen gar nichts. • Keiner kennt jemanden, der alles weiß. • Jeder duzt sich mit irgendjemandem. • Es gibt eine Mannschaft, gegen die der FC Hansa Rostock noch nie verloren hat. • In Wismar scheint im Sommer immer die Sonne. • Nachts sind alle Katzen grau. • Die Mecklenburger lieben ihre Nachbarn. • Die Wismarer essen nur Fleisch. • Ich kenne jemanden, der jemanden kennt, der schon mal in Australien war. • Eine Aktie ist attraktiv, wenn ihr Kurs steigt. • Eine Aktie habe ich. 2. Übersetzen Sie folgende Sätze in die Prädikatenlogik: • Kein Metzger ist Vegetarier. • Alle Männer außer Metzgern lieben Vegetarier. • Die einzigen vegetarischen Metzger sind Frauen. • Kein Mann liebt eine Frau, die Vegetarier ist. • Keine Frau liebt einen Mann, der nicht alle Vegetarier liebt. 3. Stellen Sie in Prädikatenlogik dar: (a) All politicians are elected by residents. (b) No one sane will vote for a crook. (c) Some politicians are crooks. Beweisen Sie mittels Resolution : “There is a resident who is insane”. 7 Übung WR/WV III und IV – Logik 1. Seien folgende Aussagen gegeben: • Politiker mögen niemanden, der knausrig ist. • Jeder Politiker mag eine Firma. • Es gibt Politiker. Beweisen Sie, dass es eine Firma gibt, die nicht knausrig ist. 2. Seien folgende Aussagen gegeben: • Pferde sind schneller als Hunde. • Es gibt einen Windhund, der schneller als jeder Hase ist. • Fury ist ein Pferd. • Bunny ist ein Hase. Beweisen Sie mittels Resolution, dass Fury schneller als Bunny ist. Welche Probleme sehen Sie, wenn man den Beweis automatisch finden will? Vorgehen • Kopieren Sie die Dateien unter Beweiser, in Ihr lokales Verzeichnis! • Starten Sie SWI-Prolog! • Laden Sie die Datei swipl1.pl. • Öffnen und editieren Sie die Datei pl1bsp.txt! • Folgen Sie den Hinweisen im unteren Fenster. Hinweise • Prädikatenlogische Formeln werden in unseren Beispielen wie folgt dargestellt: – Negation: ˜ – Und: &, Oder: v – Implikation: − >, Äquivalenz: < − > – Für alle: all(x,p(x)) – Es existiert ein: ex(x,p(x)) • Verwenden Sie als prädikatenlogische Variablen keine Prolog-Variablen. Z.B. steht die Formel ex(y,(a(y) & all(x,ex(z,(p(x,z) -> q(z,x)))))) <-> t für ∃y (a(y) ∧ ∀x ( ∃z (p(x, z) → q(z, x)))) ↔ t • Der Beweiser verwendet in den Formeln eigene Variablenbezeichnungen (x..). • Das zu beweisende Ziel benötigt als Schlüsselwort goal. 8 Übung WR/WV V – Regelsysteme 1. Eine Aufgabe aus der englischen Zeitschrift Observer: In einem Tierpark sind sämtliche Tiere in die falschen Käfige geraten. Der Wärter soll die Tiere schleunigst in die richtigen Käfige bringen. Da 4 von den Tieren Raubtiere sind, ist es ausgeschlossen, dass zwei von ihnen gleichzeitig in denselben Käfig oder in den gemeinsamen Außenkäfig getrieben werden. Welches ist die geringste Zahl von Umsetzungen, die der Wärter durchführen muss? (a) Helfen Sie dem Wärter, eine Lösung zu finden. +---Loewe--+---Esel---+---Wolf---+-Krokodil-+-Panther-+ | | | | | | | Panther | Krokodil | Esel | Loewe | Wolf | | # # # # | +----#-----+----#-----+----#-----+----#-----+----#----+ | | +----Aussenkaefig-------------------------------------+ (b) Lösen Sie das Problem mittels Vorwärtsverkettung. Hinweise • Kopieren Sie diese Dateien Regel-Verarbeitung, Beispiel in Ihr lokales Verzeichnis! • Starten Sie Prolog! • Öffnen und editieren Sie die Datei bsp-forw.pl! Ergänzen Sie die Regeln! • Beachten Sie die Hinweise in der Datei fwreason.pl. • Laden Sie die Datei (consult) und rufen Sie loesung. auf. Beachten Sie, dass es um Aktionsregeln geht. Schwerpunkt ist hier also nicht Prolog, sondern die korrekte Formulierung von Aktionsregeln. 2. Entwickeln Sie ein Regelsystem, welches eine Diagnose für ein nicht erfolgreich startendes Auto durchführt. Bauen Sie zumindest Zündkerzen, den Füllstand des Tanks, die Batterie, den Anlasser ein. Den Zustand dieser Komponenten können Sie in Faktenform vorgeben. 9 Übung Vages Wissen 1. Wir wollen uns ein Auto kaufen. Wichtige Kriterien sind für uns: • Das Auto sollte aus Versicherungsgründen nicht zu stark, aber auch nicht zu schwach sein. Optimal sind 80-90 PS. • Das Auto sollte nicht fehleranfällig sein. • Das Auto soll preiswert sein oder im Spritverbrauch niedrig sein. Uns liegen 3 Angebote vor: Angebot PS BMW Trabant Opel 120 PS 27 PS 75 PS Pannen auf 100 Tkm 3 7 6 Preis Spritverbrauch 40000 5000 20000 9 7.5 8 Wählen Sie mit Hilfe der Fuzzy-Logik das günstigste Auto aus. Entwickeln Sie dazu Fuzzy-Mengen für die unscharfen Begriffe. 2. Seien folgende Regeln gegeben: • WENN leichtes Fieber UND normaler Puls DANN kleine Dosis • WENN leichtes Fieber UND leicht erhöhter Puls DANN mittlere Dosis • WENN leichtes Fieber UND stark erhöhter Puls DANN hohe Dosis • WENN hohes Fieber UND normaler Puls DANN mittlere Dosis • WENN hohes Fieber UND leicht erhöhter Puls DANN hohe Dosis • WENN hohes Fieber UND stark erhöhter Puls DANN hohe Dosis Entwickeln Sie ein Fuzzy-Konzept für das Schließen mit diesen Regeln. Betrachten Sie den Fall, dass jemand 38◦ Fieber und einen Puls von 105 hat. 10 Übung Suche I und II 1. Sei ein 4- und ein 3-Liter-Gefäß (leer und ohne Skalen) sowie eine Pumpe vorhanden. Wie bekommt man exakt 2 Liter in einem der Gefäße? Beschreiben Sie den Zustandsraum, wie kann man das Problem lösen? Lösen Sie diese Aufgabe mittels eines Suchverfahrens. 2. Sei ein Straßen-Netz zB mit folgenden Verbindungen gegeben: • Wismar-Rostock • Wismar-Schwerin • Wismar-Lübeck • Lübeck-Hamburg • Schwerin-Berlin • Schwerin-Hamburg • Rostock-Berlin • Berlin-Halle • Halle-Nürnberg • Halle-Leipzig • Leipzig-Dresden • Nürnberg-München • ... Suchen Sie mit Hilfe der verschiedenen Suchstrategien mögliche Verbindungen zwischen Wismar und Hamburg! Entwickeln Sie dazu geeignete heuristische Funktionen für • g: Kosten für einen Zustandsübergang (costs/3) • h: geschätzter Abstand zum Ziel (dist goal/2) Vergleichen Sie das Verhalten der Strategien! Hinweise • Kopieren Sie sich alle Dateien aus diesem Verzeichnis in Ihr lokales Verzeichnis! • Starten Sie Prolog, am besten durch Doppelklick auf die Datei kisuche.pl! • Sie werden gefragt, ob Sie die grafische Oberfläche verwenden wollen. Beantworten Sie dies mit y. Dann müsste ein Fenster aufgehen, in welchem Sie arbeiten können. • Sie können eine eigene Datei anlegen. Diese sollte die Endung bsp haben und sich an bspsuche.bsp orientieren. • Beachten Sie: Variablen beginnen in Prolog mit einem Großbuchstaben, Konstante mit einem Kleinbuchstaben. • Schauen Sie wegen möglicher Fehlermeldungen auf das Console-Fenster. 11 Übung Suche III und IV 1. Modifizieren Sie das Wasser-Problem, um den A∗ -Algorithmus anwenden zu können. Ergänzen Sie dazu dist goal und costs. Hinweis: Kopieren Sie sich dazu die Dateien swiast.pl, astern.pl in Ihr lokales Verzeichnis! Ein kleines AStern-Beispiel finden Sie hier. Diese Date müssen Sie laden. 2. Lösen Sie das Rundreiseproblem mit verschiedenen Städteanzahlen! Hinweise • Kopieren Sie folgende Dateien in Ihr Verzeichnis: astern.pl, swiast.pl, asttrav.pl. • Starten Sie Prolog, am besten durch Doppelklick auf die Datei asttrav.pl! • Compilieren Sie und rufen Sie den Suchalgorithmus mit astern(X). auf! • Beachten Sie: Variablen beginnen in Prolog mit einem Großbuchstaben, Konstante mit einem Kleinbuchstaben. 12 Übung Data Mining Als Hausaufgabe !! 1. Machen Sie sich mit den Grundlagen des Data Mining vertraut. 2. Betrachten Sie dabei insbesondere das Entscheidungsbaumlernens (hier den ID3-Algorithums).