Projekt 1: Constraint-Satisfaction

Werbung
KI-Praktikum
M. Helmert, M. Westphal, S. Wölfl, J.-G. Smaus
Sommersemester 2009
Universität Freiburg
Institut für Informatik
Projekt 1: Constraint-Satisfaction-Probleme
Abgabe: 7. Juni 2009
Präsenzaufgaben
Aufgabe 1
Checken Sie aus dem Subversion-Repository des Praktikums das Python-Modul
constraint aus und starten Sie das Programm sudoku.py, um das vorgegebene Sudoku-Problem zu lösen. Erweitern Sie dann sudoku.py, um zusätzlich
folgende Sudoku-Probleme zu lösen:
7 4 3 1
2 8
4
6
2
8
7
5
9 3 2
8 4
9
7
1
5
1
3
8 6 4
5
2
7
8
4
2
8 9 2
1 3
5 4
7
8
4
9
2
2
7 6
7 6 5
7
2
5 1
7 3 4
6
4 1 9 8
Aufgabe 2
(a) Erweitern Sie den Python-Code dergestalt, dass die Anzahl der beim Programmablauf besuchten Knoten des Suchbaums gezählt wird.
(b) Versehen Sie den Code mit einer Ausgabe der Anzahl der besuchten Knoten sowie der Laufzeit (siehe dazu die Dokumentation zum Modul time).
(c) Implementieren Sie eine Schranke für die Anzahl der besuchten Suchknoten (sinnvolle Ausgabe!).
Testen Sie Ihren Code auf den Sudoku-Problemen mit den beiden eingebauten
Solvern (BacktrackingSolver und BacktrackingForwardCheckingSolver).
Aufgabe 3
Implementieren Sie eine erweiterte Version des Backtracking-Solvers, die zu Beginn der Suche und nach jeder Variablenzuweisung mit dem AC3-Algorithmus
Kantenkonsistenz herstellt. Verwenden Sie dazu das bereits bestehende Grundgerüst für die Klasse BacktrackingAC3Solver und testen Sie Ihren Algorithmus
zum Beispiel auf den Sudoku-Problemen auf der ersten Ausgabe.
Aufgabe 4
(a) Der gegebene Backtracking-Solver belegt die Variablen meistens in keiner
besonders sinnvollen Reihenfolge. Implementieren Sie in einer abgeleiteten
Klasse die Heuristik minimum remaining values zur Auswahl der Reihenfolge der Variablenbelegung. Wo diese Heuristik nicht zu einer eindeutigen
Entscheidung führt, verwenden Sie zusätzlich die degree-Heuristik.
(b) Evaluieren Sie die drei Lösungsalgorithmen Backtracking, Backtracking
mit Forward-Checking sowie Backtracking mit Kantenkonsistenz jeweils
in den Varianten mit und ohne Variablenordnung. Bestimmen Sie dazu
Knotenzahl und Laufzeit auf den drei Sudoku-Problemen und n-DamenProblemen verschiedener Größe. (Das Repository enthält eine Formalisierung der n-Damen-Probleme.)
Aufgabe 5
Greater-Than-Sudokus sind eine Variante gewöhnlicher Sudokus. Als Ausgangssituation ist ein leeres Sudoku-Feld gegeben, in dem je zwei (horizontal oder
vertikal) benachbarte Zellen mit einem Constraint größer als“ oder kleiner
”
”
als“ versehen sind. Ansonsten gelten die üblichen Sudoku-Regeln.
Formalisieren Sie dieses Greater-Than-Sudoku als CSP (kein Abtippen nötig:
siehe greater than sudoku.py) und lösen Sie es mit einem der vorgegebenen
Algorithmen oder einem der Algorithmen aus den vorigen Aufgaben.
Aufgabe 6
Implementieren Sie den Min-Conflicts-Algorithmus zur lokalen Suche als neue
von Solver abgeleitete Klasse. Testen Sie das Verfahren anhand des n-DamenProblems für Werte von n im Bereich {1, . . . , 30}.
Ist nach einer vorgegeben Anzahl von besuchten Knoten restart limit keine
Lösung gefunden worden, soll das Verfahren neu gestartet werden. Ermitteln
Sie eine vernünftige Größe für restart limit für die n-Damen-Probleme.
Hausaufgaben
Aufgabe 7 (TetraVex/Eternity-II-Puzzle)
(a) TetraVex
Formalisieren Sie TetraVex (http://en.wikipedia.org/wiki/Tetravex)
als ein Constraint-Satisfaction-Problem. Implementieren Sie dazu eine Modellierungsfunktion in dem Modul tetravex, die aus einer gegebenen Liste
von Puzzleteilen ein CSP mit binären Constraints generiert. Evaluieren Sie
die Performanz des CSP-Solvers (Backtracking-Suche mit/ohne ForwardChecking bzw. Kantenkonsistenz) auf den bereits im Modul enthaltenen
Instanzen. Das Limit für die maximale Anzahl an besuchten Knoten kann
auf 1000 gesetzt werden.
Um die volle Punktzahl zu erlangen, muss der CSP-Solver mit der implementierte Modellierung in der Lage sein, die gegebenen Instanzen bis
einschließlich zur Größe 6 × 6 zu lösen, ohne dabei mehr als 1000 Knoten
zu besuchen.
(b) Eternity-II-Puzzle
Eine Variation von TetraVex stellt das Eternity-II-Puzzle (http://en.
wikipedia.org/wiki/Eternity II Puzzle) dar. Gegenüber TetraVex ist
es hier erlaubt, Puzzleteile zu rotieren. Außerdem müssen alle Teile, die
am Rand liegen, zu der Randfarbe passen.
Implementieren Sie eine passende Modellierungsfunktion in dem Modul
eternity 2 puzzle, die aus einer gegebenen Liste von Puzzleteilen ein
CSP mit binären Constraints generiert. Evaluieren Sie die Performanz
des CSP-Solvers (Backtracking-Suche mit/ohne Forward Checking bzw.
Kantenkonsistenz) auf den bereits im Modul enthaltenen Instanzen. Das
Knotenlimit kann wieder mit 1000 angesetzt werden.
Für die volle Punktzahl muss der CSP Solver mit der Modellierung in der
Lage sein, die 4 × 4-Instanzen innerhalb des Knotenlimits zu lösen.
Bonuspunkt: Gruppen, mit deren Formalisierung auch die Instanzen aus unserer
Evaluationsmenge jenseits der geforderten Problemgröße innerhalb von 1000
Suchknoten gelöst werden können, erhalten einen Bonuspunkt.
Aufgabe 8 (Soft Constraints)
An der Universität von F-Stadt wird ein Seminar mit dem Titel Selbstgefällig”
keit“ (CHAUVI) veranstaltet. 20 Studentinnen (A–T) nehmen daran teil. 24
Themen (1–24) stehen zur Auswahl. Jede Studentin hat eine geordnete Liste
mit fünf Lieblingsthemen aufgestellt. Diese Präferenzen sind in folgender Tabelle wiedergegeben:
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
S
T
1.
8
1
13
9
11
2
9
5
7
12
17
17
17
17
7
2
1
14
15
19
2.
17
24
8
4
12
9
11
7
1
13
7
15
22
18
20
7
2
18
24
12
3.
18
12
10
12
2
17
10
12
2
1
8
19
4
15
8
1
7
15
14
11
4.
6
6
15
5
13
6
17
17
9
18
9
10
6
11
3
22
9
2
18
10
5.
7
18
17
18
14
19
5
9
17
19
15
18
14
14
18
17
22
4
17
14
Wir wollen mittels CSP-Techniken eine gute Verteilung der Themen auf die
Studentinnen berechnen. Jede Studentin muss genau ein Thema bearbeiten,
und jedes Thema darf von höchstens einer Studentin bearbeitet werden.
Für jede Studentin X legen wir die individuelle Nutzenfunktion uX wie folgt
fest: ihr Nutzen bei einer Verteilung s der Seminararbeitsthemen sei gleich 5,
wenn sie in s ihr liebstes Thema erhält, 4 beim zweitliebsten, usw. Die Wohlfahrtsfunktion U berechne sich für eine gegebene Themenverteilung
s als die
P
Summe der individuellen Nutzenfunktionen, d.h., U (s) := X∈{A,...,T } uX (s).
Implementieren Sie ein generelles Verfahren, das eine möglichst gute Verteilung
der Seminararbeitsthemen findet
Hinweis: Zwei mögliche Ansätze sind lokale Suche oder Branch-and-BoundVerfahren.
Bonuspunkt: Die Gruppe, deren Verfahren bei den für die Auswertung benutzten
Probleminstanzen die besten Lösungen findet, erhält einen Bonuspunkt.
Aufgabe 9 (Killer-Sudoku)
Killer-Sudokus sind eine Variante gewöhnlicher Sudokus, bei denen zusätzlich
zu den üblichen Sudoku-Constraints bestimmte Gebiete abgegrenzt sind, deren
Summe einen vorgegebenen Wert erreichen muss (siehe http://en.wikipedia.
org/wiki/Killer Sudoku). Außerdem müssen in jedem abgegrenzten Gebiet
alle Einträge verschieden sein. Beispiel:
Erweitern Sie einen der Backtracking-basierten CSP-Algorithmen so, dass er
sich zur Verwendung von Killer-Sudokus verwenden lässt. Sie müssen ihn dazu
auf mehrstellige Constraints erweitern, aber es reicht aus, wenn ihre Implementierung nicht allgemein ist, sondern für die bei Killer-Sudokus auftretenden
Constraints spezifisch. In dieser Aufgabe dürfen Sie beliebige Modifikationen am
CSP-Algorithmus vornehmen, inklusive Killer-Sudoku-spezifischer ConstraintPropagierungs-Regeln.
Um die volle Punktzahl zu erlangen, muss der CSP-Solver in der Lage sein,
das gezeigte Beispiel sowie drei weitere unbekannte Probleminstanzen in vertretbarer Zeit zu lösen. (Die weiteren Probleminstanzen sind teilweise deutlich
schwieriger als das gezeigte Beispiel.)
Herunterladen