Answer Set Programming (ASP) ist ein deklaratives Paradigma der Logikprogrammierung, bei dem ein Problem als logisches Programm beschrieben wird und ein Answer-Set-Solver die Lösungen — die sogenannten stable models — berechnet. Die Semantik geht auf Michael Gelfond und Vladimir Lifschitz (1988) zurück und erweitert die klassische Logikprogrammierung um default negation (Negation als Fehlen von Beweisen).
Grundidee
Ein ASP-Programm besteht aus Fakten, Regeln und Constraints. Regeln haben die Form Kopf :- Körper; der Kopf gilt, wenn alle Bedingungen im Körper erfüllt sind. Constraints sind Regeln ohne Kopf — sie schließen unerwünschte Lösungen aus. Ein Stable Model ist eine Menge von atomaren Aussagen, die alle Regeln erfüllt und sich selbst „stützt“.
Typische Befehle
Der klassische Workflow trennt Grounding und Solving. Das Potassco-Ökosystem der Universität Potsdam bündelt beides:
gringo programm.lp | clasp -n 0
Der Grounder gringo instanziiert die Variablen (erzeugt ein variablenfreies Programm), der Solver clasp berechnet die Stable Models. Das moderne Werkzeug clingo vereint beide Schritte in einem Programm:
clingo programm.lp -n 0
Wichtige Optionen: -n 0 liefert alle Modelle, --stats zeigt Statistiken, --opt-mode=optN steuert die Optimierung, --enum-mode beeinflusst die Modell-Aufzählung. Neben Potassco gibt es mit DLV einen weiteren verbreiteten ASP-Solver.
Einsatzgebiete
- Konfigurations- und Planungsprobleme (z.B. Produktkonfiguration)
- Diagnose und Fehlererkennung in technischen Systemen
- Wissensrepräsentation mit nichtmonotonem Schließen
- Kombinatorische Optimierung (Team-Zusammenstellung, Stundenplanung)
Verwandte Grundlagen: Clingo-Befehle, Picat-Befehle, Prolog-Befehle.