Constraint-Programmierung

Constraint programming represents one of the closest approaches computer science has yet made to the Holy Grail of programming: the user states the problem, the computer solves it.

Eugene C. Freuder: Constraints. April 1997.

Constraint-Programmierung erlaubt eine klare (deklarative) Beschreibung und effiziente Lösung von Problemen mit unvollständiger Information.

Während man mit imperativen Sprachen, wie z.B. C, C++ und Java, beschreibt, wie ein Problem gelöst wird, erlauben deklarative Sprachen eine Programmierung nahe an der Problemspezifikation und -domäne. Der Nutzer beschreibt hier lediglich, was das Problem und seine Lösung ausmacht. Die Beschreibung des Lösungsprozesses wird weitgehend dem Lauzeitsystem überlassen. Die Problembeschreibung erfolgt in mathematischer Weise basierend auf Relationen und/oder Funktionen. Dementsprechend unterscheidet man logische, constraint-basierte und funktionale Sprachen.

Constraint-Programmierung hat in den vergangenen zwei Jahrzehnten eine rapide Entwicklung vollzogen. Seine Ursprünge hat dieses Paradigma auf der einen Seite in der Mathematik und auf der anderen Seite in der Künstlichen Intelligenz. Während in den Anfängen vor allem logische Sprachen wie z.B. Prolog um Constraints erweitert wurden, gibt es heute verschiedenste constraint-basierte Sprachen, Spracherweiterungen und Bibliotheken, sowohl in der deklarativen als auch in der imperativen Welt.

Mit Constraint Programming beschäftigen wir uns zum einen im Rahmen der Integration von Constraints in Programmiersprachen. Ein weiteres Forschungsthema liegt im Bereich der Kooperation und der Koordination von Lösungstechniken.  Das Paradigma der Constraint-Programmierung bietet effiziente Mechanismen zur Behandlung von Constraints verschiedener Domänen. Die Lösung komplexerer Probleme, die mit einzelnen Constraint-Lösern nicht ausreichend behandelt werden können, wird durch die Kombination mehrerer Constraint-Löser ermöglicht. Aufbauend auf einer einheitlichen Schnittstelle für Constraint-Löser wurde ein allgemeines Framework Meta-S für die Kooperation verschiedener Löser entwickelt. Meta-S erlaubt die Integration neuer Löser und die Definition von Kooperationsstrategien für die beteiligten Löser in Abhängigkeit verschiedenster Einflüsse.

Schließlich sind wir an Anwendungsfeldern der constraint-basierten Programmierung interessiert. Hierunter zählen neben den klassischen Gebieten der Constraint-Programmierung, wie Planung, Scheduling und Konfiguration, Anwendungen

  • im Compilerbau mit dem Ziel der Sicherheit und der Qualität von Software und
  • zur Beschreibung spezieller Anforderungen beispielsweise im Bereich verteilter Anwendungen.