Einführung in die logische Programmierung 1 Beilage 5 FFHS/Zn Versuch und Irrtum – Graphentheoretische Optimierungen Übersicht Problem Transportproblem Rucksackproblem Waageproblem Haufenproblem Dokumentation 2.5.2, S. 42ff 2.5.3, S. 48ff Beilage 5 2.5.3, S. 51 Loesungen transport.pl rucksack.pl aufg30.pl ueb2-12.pl Strukturierte Lösung (2.5.4, S. 50f) Schritt 1: Liegt ein Minimierungs – oder Maximierungsproblem vor? Schritt 2: Wie lassen sich die möglichen Zustände (Knoten) modellieren? Schritt 3: Wie lässt sich der Startzustand modellieren? Schritt 4: Wie lässt sich der Zielzustand modellieren? Schritt 5: Welche Argumente erhält das Hauptprädikat ,start’? Schritt 6: Wie werden die Übergänge (Kanten) zwischen den Zuständen modelliert? Welches sind die Kantenbewertungen? Schritt 7: Terminiert die Suche im Suchgraphen? Ist der Suchgraph endlich? Zyklisch? Unendlich? Einführung in die logische Programmierung 2 Beilage 5 FFHS/Zn Praktischer Teil: Versuch und Irrtum (Aufgabe 30 der Ergänzungsübungen) Um einen Gegenstand mit Hilfe einer Balkenwaage zu wiegen, wird dieser auf die linke Waagschale gelegt; aus einem vorgegebenen Satz von Gewichtsstücken muß sodann eine passende Auswahl auf die rechte Waagschale gestellt werden, um die Waage ins Gleichgewicht zu bringen. Das Gewicht des zu wiegenden Gegenstands ist dann gleich der Summe der Gewichtsstücke auf der rechten Waagschale. Entwickeln Sie anhand des Schemas in Abschnitt 2.5.4 des Lehrbriefs ein Programm zur Simulation einer Balkenwaage. Das Start-Prädikat soll folgende Argumente haben: - das Gewicht des zu wiegenden Gegenstands als natürliche Zahl den Satz von Gewichtsstücken als Liste von natürlichen Zahlen ein Argument zur Rückgabe einer Auswahl von Gewichtsstücken, deren Summe gleich dem Gewicht des zu wiegenden Gegenstands ist. Falls mehrere solche Auswahlmöglichkeiten bestehen, sollen nur diejenigen berechnet werden, die aus möglichst wenigen Gewichtsstücken bestehen. Beispiel: Der Gegenstand wiege 26 Gramm; der Gewichtssatz bestehe aus Gewichtsstücken zu 1, 2, 4, 5, 10 und 20 Gramm. Ein Dialog mit dem Programm sieht dann so aus: ?- start(26, [1,2,4,5,10,20], Auswahl). Auswahl = [20, 5, 1] ; Auswahl = [20, 4, 2] ; No Schritt 1: Schritt 2: Schritt 3: Schritt 4: Schritt 5: Schritt 6: Schritt 7: Liegt hier ein Minimierungs- oder ein Maximierungsproblem vor? Modellieren Sie die möglichen Situationen (Knoten im Suchgraph) durch anschauliche Terme der Form kn(..., ..., ...). Modellieren Sie die Startsituation durch einen konkreteren Term. Modellieren Sie die angestrebte Zielsituation durch einen konkreteren Term und erforderlichenfalls durch eine einschränkende Bedingung. Programmieren Sie das Hauptprädikat start/3. Setzen Sie dabei min_zf_Weg/5 bzw. max_zf_Weg/5 als bekannt voraus. Zur Erinnerung, beide Prädikate haben folgende Argumente: - Startknoten - berechneter Zielknoten - einschränkende Bedingung an die Zielknoten - berechneter Weg - berechnete Wegbewertung Programmieren Sie die Züge (Kanten im Suchgraph) in der Form kante(vorherige Situation, Folgesituation, Bewertung) :- ... Ist der Suchgraph dieses Problems – endlich und zyklenfrei oder – endlich und zyklisch oder – unendlich?