Eine Einführung in das EcliPse System
... [ Seminarthemen SS01 ] ... [ Inhaltsverzeichnis ] ... [ Das ECLiPSe System ] ...
Einführung in CLP
Einleitung
Allgemein betrachtet besteht ein Algorithmus aus zwei Hauptkomponenten, der Logik und der Steuerung.
Die Logik ist verantwortlich für das WAS (Was wollen wir berechnen), während die Kontrolle für das
WIE (Wie soll dieses Ergebnis erreicht werden) zuständig ist.
Die Idealform einer Programmiersprache sollte sich zunächst mit der Logik und erst dann mit der Steuerung
beschäftigen. Das Interessante an dem Ansatz der logischen Programmierung ist, daß es dieser Idealform
sehr nahe kommt, indem es diese beiden Komponenten voneinander trennt. Der Programmierer ist für die Beschreibung
des Problems, der Computer für die Lösung zuständig.
Damit steht die Methodik der logischen Programmierung der der herkömmlichen Programmiersprachen diametral
gegenüber. Hierin liegt aber der Grund, warum sich die logische Programmierung mehr als andere Programmiersprachen
für die Lösung von komplexen kombinatorischen Such- und Optimierungsproblemen eignen, in der die Elemente
mittels sogenannter Constraints (Bedingungen) in Beziehung stehen.
Constraints
Das englische Wort "Constraints" bedeutet Einschränkung oder Bedingung. Constraints eignen sich für die
Beschreibung unvollständiger Informationen, also zur Beschreibung der Eigenschaften und Beziehungen von teilweise
unbekannten Objekten. Zur Verdeutlichung sei ein einfaches Beispiel angeführt: Gerhard hat die letzte Ziffer
seiner EC-Geheimzahl vergessen. Er weiß nur noch, daß es sich um eine ungerade Zahl handelt, die eine Primzahl ist.
Desweiteren ist er sich sicher, daß es sich nicht um die eins handelt. Mit dieser Einschränkung beschränkt
sich der Suchraum auf nur drei Zahlen, die er ohne Probleme am Automaten durchprobieren kann.
Etwas formaler gefaßt definieren Constraints Beziehungen zwischen einer Menge von Variablen X={x1,...,xn},
wobei die Werte, die von den Variablen angenommen werden können, im Vordergrund stehen.
Die Wertemenge Wi einer Variablen xi wird Domain genannt. Das Ziel ist es, eine eindeutige
Belegung für alle Variablen zu finden, so daß keine Widersprüche bezüglich der aufgestellten Menge von Constraints entstehen,
das heißt, die Werte der Variablen erfüllen die Constraints.
Es werden drei Arten von Constraints unterschieden:
- unäre Constraints
- binäre Constraints
- n-äre Constraints
Die unären Constraints beziehen sich auf eine, die binären auf zwei und die u-nären setzen mehr
als zwei Variablen miteinander in Beziehung, z.B. "X1+X2=X3". Die meisten Algorithmen der Constraint-Programmierung
basieren allerdings auf einer Repräsentation des Problems mit maximal binären Constraints.
Es wurden deshalb Verfahren entwickelt, n-äre Constraints auf binäre Constraints zurückzuführen.
Constraint-Programmierung
Mit der Einbettung von Constraints in die Logikprogrammiersprachen wurde es möglich, schnell und effizient
komplexe Probleme mittels einer Kombination von Constraintlösen und Suche zu lösen.
Der wesentliche Vorteil basiert auf der Forschungsarbeit die im Bereich der Constraints Solver geleistet
wurde. Das Lösen von Constraints zielt auf das Vermeiden des "generate and test" Paradigmas durch
die Verkleinerung des Suchraumes. Es wird also nicht ein vollständiger Suchbaum aufgezogen,
in dem durch Tiefensuche gültige Lösungen gesucht werden, sondern es wird versucht zunächst die
Constraints zu lösen, um ein Suchbaum aufzuspannen, der im günstigsten Fall nur noch aus gültigen
Lösungen besteht. Die Realisation einer solchen Methode nennt man das "constrain-and-generate" Paradigma.
Dieses Kombination ist bekannt als CLP(X) Schemata, wobei X für die Art der zu behandelnden Elemente steht.
CLP(R) zum Beispiel wird genutzt, wenn das Programm mit reellen Werten arbeitet, ein Thema zu dem in einem der
folgenden Vorträge noch mehr gesagt werden wird.
Diese Ausarbeitung wird sich mit CLP(FD) näher beschäftigen. FD steht für finite domains, also endliche
Wertebereiche.
... [ Seminarthemen SS01 ] ... [ Inhaltsverzeichnis ] ... [ Das ECLiPSe System ] ...