Versuch und Irrtum (Aufgabe 30 der Ergänzungsübungen)

Werbung
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?
Herunterladen