next up previous contents index
Nächste Seite: 4.5.2 Bibliotheken Aufwärts: 4.5 Verfügbare Constraint-Systeme Vorherige Seite: 4.5 Verfügbare Constraint-Systeme   Inhalt   Index

4.5.1 Integrierte Constraint-Solver

Die Allgemeinheit des CSP-Ansatzes und die Effizienz der Lösungsverfahren haben zur Entwicklung von Programmiersprachen geführt, die Constraint-Verfahren für bestimmte Problemklassen zur Verfügung stellen. Verfügbare Constraint-Systeme sind deshalb häufig Constraint-Lösungsmechanismen, die als Ergänzung innerhalb logischer Programmiersprachen basierend auf Prolog implementiert wurden. Neben spezifischen global constraints aus dem Bereich CP, d.h. zur Programmierung mit Constraints (vgl. Abschnitt 4.1), werden i.d.R. ebenso allgemeine, algebraische Constraints unterstützt. Die Entwicklung dieser CLP-Sprachen begann 1982 mit Prolog II und führte in der zweiten Hälfte der 80er Jahre zur Entwicklung der CLP-Sprachen CLP(R), CHIP und Prolog III. Während CLP(R) und Prolog III mathematische Lösungsmechanismen für linear-arithmetische Ausdrücke boten (linear programming), gab es in CHIP (Constraint Handling in Prolog) außerdem erstmals die Möglichkeit, boolesche Constraints und Constraints über benutzerdefinierte finite Domänen mit Lösungsmechanismen aus dem Bereich der Künstlichen Intelligenz innerhalb einer logischen Programmiersprache zu verarbeiten vgl. Frühwirth und Abdennadher, 1997, S. 37; Van Hentenryck, 1995, S. 566. Ein moderner Prolog-Dialekt, der Lösungsmechanismen sowohl für linear-arithmetische Ausdrücke als auch für finite Domänen innerhalb eines Systems vereint, ist z.B. SICStus Prolog (vgl. SICStus, 2004). Während diese CLP-Systeme auf die Berechnung linearer Constraints beschränkt sind,4.28 wurden durch das System CAL (Contrainte Avec Logique) bzw. dessen parallel arbeitendem Nachfolger GDCC (Guarded Definite Clauses with Constraints)4.29 mathematische Verfahren implementiert, mit denen sich auch nichtlineare (polynomielle) Constraints direkt lösen lassen vgl. Frühwirth et al., 1992, S. 23; Frühwirth und Abdennadher, 1997, S. 119; Hollman und Langemyr, 1993, S. 113.

Ein anderes Vorgehen zur Lösung nichtlinearer Constraints wurde erstmals innerhalb von BNR Prolog umgesetzt: In der logischen Programmiersprache BNR Prolog kamen intervallwertige Domänen zur Repräsentation von reellwertigen Lösungen und eine entsprechende Intervallarithmetik zu deren Berechnung zum Einsatz vgl. Frühwirth et al., 1992, S. 23; Frühwirth und Abdennadher, 1997, S. 119. Moderne CLP-Systeme arbeiten häufig mit Intervalldomänen und komplexen numerisch-mathematischen Lösungsmethoden sowie Konsistenz- und Suchverfahren zur Berechnung von Constraint-Ausdrücken. Weitere Beispiele für derartige CLP-Systeme, die zusammenfassend auch CLP(Intervals) genannt werden, sind CLP(BNR), Interlog, CIAL, Prolog IV, ECL$^i$PS$^e$, DecLIC, CLIP, Newton und Numerica. Diese Systeme sind zudem häufig hybrid, d.h. es lassen sich Constraints mit unterschiedlichen Wertebereichen spezifizieren und auswerten. Dies betrifft neben diskreten und reellwertigen Domänen ebenso intervallwertige und boolesche Wertebereiche vgl. Benhamou und Van Hentenryck, 1997, S. 107; Frühwirth und Abdennadher, 1997, S. 121 f.; Van Hentenryck, 1995, S. 584; Van Hentenryck und Saraswat, 1996, S. 715 ff..4.30

Eine grundsätzliche Hürde in Bezug auf die Anbindung von CLP-Systemen zur Constraint-Propagation stellt das von der Java-Architektur von ENGCON abweichende, deklarative Paradigma der (constraint-)logischen Programmierung dar. Bei einer Anbindung auf programmiersprachlicher Ebene an die objektorientierte Implementierung von ENGCON ist daher mit erhöhtem Integrationsaufwand zu rechnen. Zur Generierung von Constraint-Netzen in CLP-Systemen können Constraint-Gleichungen i.A. nicht direkt an einer stringbasierten Schnittstelle übergeben werden. Stattdessen wird die Erzeugung von CLP-Programmen in Prolog-Syntax in Form von logischen Klauseln notwendig. Dies kann sich negativ auf die Skalierung auswirken, wenn umfangreiche Abhängigkeiten als Constraint-Netz repräsentiert werden müssen. Zudem sind auf Prolog basierende CLP-Systeme oftmals, weil keine direkte Schnittstelle vorhanden ist, nur unter Zuhilfenahme einer Zwischenschicht (C, C++, CORBA, Sockets, etc.) in eine Java-Architektur integrierbar, was ebenso den erforderlichen Aufwand und die Komplexität der Schnittstelle erhöht.

Die für die Microsoft-Windows-Plattform mangelnde Verfügbarkeit (insbesondere frei erhältlicher Systeme) verringert die Anzahl der tatsächlich nutzbaren CLP-Systeme. Einige Systeme lassen sich z.B. durch den Einsatz der ,,Cygwin``-Umgebung4.31 unter Microsoft Windows betreiben. Dieses erhöht allerdings abermals die Komplexität der Schnittstelle und den Integrationsaufwand.

Im Rahmen des ENGCON-Projekts wurde an der Universität Bremen untersucht, wie sich der Constraint-Solver von GNU Prolog4.32 an das Konfigurierungswerkzeug ENGCON anbinden lässt. Der frei verfügbare, unter einer ,,Open-Source``-Lizenz stehende Prolog-Dialekt basiert auf CLP(FD)4.33, einer CLP-Sprache für finite Domänen (vgl. Diaz und Codognet, 2001). Mit GNU Prolog können daher ähnlich wie in CHIP über einen integrierten Constraint-Solver FD-Constraints ausgewertet werden. Die Ausführung und Nutzung von GNU Prolog unter Microsoft Windows ist unter Zuhilfenahme der Cygwin-Umgebung möglich. Das Resultat der Untersuchung war eine prototypische Schnittstelle, deren Kommunikation mit der Java-Applikation ENGCON und auf Basis eines innerhalb von GNU Prolog implementierten Socket-Servers4.34 erfolgt. Diese prototypische Umsetzung wies allerdings sowohl hinsichtlich der Funktionalität und Skalierbarkeit als auch in Bezug auf die Inkrementalität erhebliche Einschränkungen auf:

Auch wenn neuere Ansätze die Anbindung existierender CLP-Systeme erleichtern (vgl. Schlenker und Ringwelski, 2003), ist dennoch für jeden in einer CLP-Sprache integrierten Constraint-Solver ein Wrapper zu implementieren, für den, ähnlich wie bei der Anbindung von GNU Prolog, mit einem relativ hohem Anpassungsaufwand zu rechnen ist.4.36



Fußnoten

...4.28
Ein in CLP-Sprachen wie CLP(R), Prolog III und SICStus Prolog übliches Vorgehen ist in diesem Zusammenhang das Verzögern der Auswertung nichtlinearer Constraints, bis ggf. das Constraint linear geworden ist, weil die Werte von Constraint-Variablen z.T. durch andere Constraints bereits ermittelt werden konnten vgl. Frühwirth und Abdennadher, 1997, S. 119; SICStus, 2004, S. 422.
...4.29
GDCC basiert auf dem CCP-Paradigma (vgl. Abschnitt 4.4.4).
...4.30
Während zur Auswertung von Constraints über boolesche Domänen bspw. in CHIP und Prolog III spezielle Constraint-Solver zum Einsatz kommen, werden in Systemen wie CLP(BNR), Prolog IV, CLP(FD) und ILOG Solver boolesche Constraints als ein spezieller Fall von FD-Constraints behandelt. Boolesche Werte werden demnach als Integer zwischen 0 (false) und 1 (true) verarbeitet (vgl. Van Hentenryck und Saraswat, 1996, S. 715).
...4.31
Eine Linux-API-Emulationsschicht unter Microsoft Windows, welche die Kompilierung und Ausführung einer großen Anzahl Programme erlaubt, die sich mit dem frei verfügbaren GCC-Compiler kompilieren lassen: http://www.cygwin.com.
...4.32
http://gprolog.inria.fr
...4.33
ftp://ftp.inria.fr/INRIA/Projects/contraintes/clp_fd/
...4.34
http://contraintes.inria.fr/~fages/CLPGUI/
...4.35
Für GNU Prolog ist eine Erweiterung namens CLIP verfügbar, mit der es dem Constraint-System ermöglicht wird, reellwertige Intervalle zu verarbeiten (vgl. Hickey, 2000). Die Integration unterliegt allerdings, bedingt durch den Umstand, dass GNU Prolog als ,,Wirtssystem`` genutzt wird, denselben hier angesprochenen Einschränkungen hinsichtlich der Parameterübergabe und der Inkrementalität: http://interval.sourceforge.net/interval/prolog/clip/.
...4.36
Für das von Schlenker und Ringwelski (2003) beschriebene Framework POOC wurde zwar eine Anbindung von GNU Prolog über dessen C-Schnittstelle und das Java Native Interface (JNI) angestrebt (vgl. Stearns, 1997,1998), allerdings bisher nicht umgesetzt (vgl. Abschnitt 4.5.3).

next up previous contents index
Nächste Seite: 4.5.2 Bibliotheken Aufwärts: 4.5 Verfügbare Constraint-Systeme Vorherige Seite: 4.5 Verfügbare Constraint-Systeme   Inhalt   Index