Table Of ContenteXamen.press
eXamen.pressisteineReihe,dieTheorieund
PraxisausallenBereichenderInformatikfür
dieHochschulausbildungvermittelt.
Petra Hofstedt · Armin Wolf
Einführung
in die Constraint-
Programmierung
Grundlagen,Methoden,Sprachen,Anwendungen
Mit49Abbildungen
123
PetraHofstedt
FakultätfürElektrotechnikundInformatik
TechnischeUniversitätBerlin
Franklinstr.28/29
10587Berlin
[email protected]
ArminWolf
Fraunhofer-Institutfür
RechnerarchitekturundSoftwaretechnik
Kekuléstr.7
12489Berlin
armin.wolf@first.fraunhofer.de
BibliografischeInformationderDeutschenNationalbibliothek
DieDeutscheNationalbibliothekverzeichnetdiesePublikationinderDeutschen
Nationalbibliografie;detailliertebibliografischeDatensindimInternetüber
http://dnb.d-nb.deabrufbar.
ISSN1614-5216
ISBN978-3-540-23184-4 SpringerBerlinHeidelbergNewYork
DiesesWerkisturheberrechtlichgeschützt.DiedadurchbegründetenRechte,insbesondere
diederÜbersetzung,desNachdrucks,desVortrags,derEntnahmevonAbbildungenund
Tabellen,derFunksendung,derMikroverfilmungoderderVervielfältigungaufanderenWe-
genundderSpeicherunginDatenverarbeitungsanlagen,bleiben,auchbeinurauszugsweiser
Verwertung,vorbehalten.EineVervielfältigungdiesesWerkesodervonTeilendiesesWerkes
istauchimEinzelfallnurindenGrenzendergesetzlichenBestimmungendesUrheberrechts-
gesetzesderBundesrepublikDeutschlandvom9.September1965inderjeweilsgeltenden
Fassungzulässig.Sieistgrundsätzlichvergütungspflichtig.Zuwiderhandlungenunterliegen
denStrafbestimmungendesUrheberrechtsgesetzes.
SpringeristeinUnternehmenvonSpringerScience+BusinessMedia
springer.de
©Springer-VerlagBerlinHeidelberg2007
DieWiedergabevonGebrauchsnamen,Handelsnamen,Warenbezeichnungenusw.indiesem
WerkberechtigtauchohnebesondereKennzeichnungnichtzuderAnnahme,dasssolche
NamenimSinnederWarenzeichen-undMarkenschutz-Gesetzgebungalsfreizubetrachten
wärenunddahervonjedermannbenutztwerdendürften.TextundAbbildungen wurden
mitgrößterSorgfalterarbeitet.VerlagundAutorkönnenjedochfüreventuellverbliebene
fehlerhafteAngabenundderenFolgenwedereinejuristischeVerantwortungnochirgendeine
Haftungübernehmen.
Satz:DruckfertigeDatenderAutoren
Herstellung:LE-TEX,Jelonek,Schmidt&VöcklerGbR,Leipzig
Umschlaggestaltung:KünkelLopkaWerbeagentur,Heidelberg
GedrucktaufsäurefreiemPapier 33/3142YL – 543210
Für Stephan und Frank
Für Silke
Vorwort
Die Constraint-Programmierung ist eine sehr elegante Form der Programmie-
rung, die es dem Nutzer erlaubt, in einfacher Weise deklarativ Probleme zu
beschreiben und mit fortgeschrittenen Techniken zu lösen.
Ein Ausgangspunkt der Entwicklung der Constraint-Programmierung wa-
ren die logischen Sprachen mit ihrem bekanntesten Vertreter prolog, die
inzwischen meist als Untermenge der Constraint-Sprachen betrachtet werden.
Sprachen dieser Form der Programmierung haben sich seit etwa Anfang bis
Mitte der 80er Jahre herausgebildet, mittlerweile gibt es eine große Anzahl
solcher Sprachen, viele Constraint-Domänen und -Lösungsmechanismen sind
entwickelt und ausführlich untersucht worden und haben Anwendung in der
Praxis gefunden. Die Constraint-Programmierung ist heute ein bedeutendes
und stetig wachsendes Forschungs- und Anwendungsfeld. In der Praxis wird
Constraint-ProgrammierungzumSchließenmitunvollständigemWissen,zum
Lösen kombinatorischer Probleme, zur Modellierung, Simulation und Diagno-
se und in vielen anderen Bereichen auch industriell angewendet.
Unser Lehrbuch gibt eine kompakte Einführung in die Constraint-Pro-
grammierung. Dabei werden neben allgemeinen theoretischen Grundlagen
auch Sprachen, Methoden und Verfahren zur Modellierung und Lösung von
Constraint-Problemen vorgestellt sowie deren Anwendungsfelder betrachtet
und anhand typischer Beispiele wie Terminplanung, Optimierung, Analyse,
Simulation und Diagnose vergegenständlicht. Wir haben dabei auch Entwick-
lungen und Anwendungen aus unseren eigenen Arbeitsbereichen einfließen
lassen. Die Kapitel 1 bis 3 sowie 5 bis 7 gehen im Wesentlichen auf Petra
Hofstedt zurück, die Kapitel 8, 10 bis 12 und 14 hauptsächlich auf Armin
Wolf. Die Kapitel 4, 9 und 13 haben wir gemeinsam verfasst.
Das Buch ist aus einer Vorlesung im Hauptstudium der Technischen Uni-
verstitätBerlinhervorgegangenundrichtetsichanStudierendederInformatik
und Ingenieurwissenschaften sowie an Anwender in der Praxis.
An dieser Stelle möchten wir uns bei all jenen bedanken, die am Gelin-
gen dieses Buchs Anteil hatten. Zuerst zählen hierzu unsere Kollegen der Ar-
VIII Vorwort
beitsgruppen Übersetzerbau und Programmiersprachen an der Technischen
UniversitätBerlinundPlanungstechnikamFraunhoferInstitutRechnerarchi-
tekturundSoftwaretechniksowiederenLeiterPeterPepperundUlrichGeske,
dieunsbeidiesemProjektunterstütztundbestärkthaben.Unserbesonderer
Dank gilt (in alphabetischer Reihenfolge) Silke Bartsch, Martin Grabmüller,
Matthias Hoche, Dirk Kleeblatt, Olaf Krzikalla, Florian Lorenzen und Henry
Müller für viele fruchtbare Diskussionen, die sorgfätige Durchsicht von Teilen
unseres Buchs sowie für viele wertvolle Vorschläge und Anmerkungen. Aber
vor allem schulden wir Stephan Frank besonderen Dank, der inhaltlich durch
Diskussionen, Hinweise und Korrekturen einen großen Beitrag geleistet hat
und uns auch technisch stets mit Rat und Tat zur Seite stand. Schließlich
möchten wir den Mitarbeitern des Springer-Verlags für die freundliche und
kompetente Unterstützung und Beratung unseren Dank aussprechen. Sie ha-
ben die Entstehung dieses Buchs erst möglich gemacht.
Berlin, im Dezember 2006 Petra Hofstedt
Armin Wolf
Inhaltsverzeichnis
Teil I Einführung
1 Prädikatenlogik............................................ 3
1.1 Signaturen und Strukturen ............................... 3
1.2 Terme, Formeln und Gültigkeit............................ 5
1.3 Aufgaben............................................... 11
2 Logische Programmierung ................................. 13
2.1 Syntax ................................................. 13
2.1.1 Listen............................................ 16
2.2 Substitutionen und Unifikation............................ 17
2.3 Die Semantik logischer Programme ........................ 21
2.3.1 Logische Konsequenz und korrekte Antwort........... 21
2.3.2 SLD-Resolution und berechnete Antwort ............. 23
2.3.3 Negation und Clarksche Vervollständigung............ 29
2.4 PROLOG ............................................... 32
2.4.1 Die Berechnungsstrategie von PROLOG .............. 33
2.4.2 Arithmetik ....................................... 33
2.4.3 Cut.............................................. 36
2.4.4 Negation ......................................... 40
2.5 Logische Programmierung mit Constraints – CLP ........... 41
2.6 Aufgaben............................................... 48
Teil II Constraints, Constraint-Systeme und Constraint-Löser
3 Constraints und Constraint-Löser.......................... 53
3.1 Constraints und Constraint-Systeme ....................... 53
3.2 Erfüllbarkeit und Lösungen ............................... 58
3.3 Constraint-Löser ........................................ 60
3.3.1 Erfüllbarkeit...................................... 60
Description:Die Constraint-Programmierung liefert Methoden zur effizienten Modellierung von Systemen oder zur L?sung von Problemen, f?r die nur unvollst?ndige Informationen vorliegen. Ebenso hilft sie kombinatorische Probleme zu l?sen oder komplexe Deduktionssysteme zu entwickeln. Dieses kompakte Lehrbuch f?hrt