Programmierung des Anrufbeantworters - Answer set programming

Answer Set Programming ( ASP ) ist eine Form der deklarativen Programmierung , die auf schwierige ( hauptsächlich NP - harte ) Suchprobleme ausgerichtet ist . Es basiert auf der Semantik des stabilen Modells (Antwortsatz) der Logikprogrammierung . In ASP werden Suchprobleme auf die Berechnung stabiler Modelle reduziert, und Lösungssatzlöser – Programme zum Generieren stabiler Modelle – werden verwendet, um die Suche durchzuführen. Der Rechenprozess, der beim Design vieler Lösungssatzlöser verwendet wird, ist eine Erweiterung des DPLL-Algorithmus und im Prinzip immer terminiert (im Gegensatz zur Prolog- Abfrageauswertung, die zu einer Endlosschleife führen kann ).

Allgemeiner gesagt umfasst ASP alle Anwendungen von Antwortsätzen zur Wissensrepräsentation und die Verwendung von Abfrageauswertungen im Prolog-Stil zur Lösung von Problemen, die in diesen Anwendungen auftreten.

Geschichte

Die 1993 von Dimopoulos, Nebel und Köhler vorgeschlagene Planungsmethode ist ein frühes Beispiel für die Programmierung von Antwortmengen. Ihr Ansatz basiert auf der Beziehung zwischen Plänen und stabilen Modellen. Soininen und Niemelä wandten auf das Problem der Produktkonfiguration die sogenannte Antwortsatzprogrammierung an . Die Verwendung von Lösungssatz-Lösern für die Suche wurde von Marek und Truszczyński in einem Papier, das in einer 25-Jahres-Perspektive über das Logikprogrammierparadigma veröffentlicht wurde, 1999 und in [Niemelä 1999] als neues Programmierparadigma identifiziert . Tatsächlich wurde die neue Terminologie von "Antwortmenge" anstelle von "stabilem Modell" zuerst von Lifschitz in einem Aufsatz vorgeschlagen, der in demselben retrospektiven Band wie der Aufsatz von Marek-Truszczynski erscheint.

Antwortsatz-Programmiersprache AnsProlog

Lparse ist der Name des Programms, das ursprünglich als Grundierungswerkzeug (Frontend) für den Lösungssatz- Solver smodels erstellt wurde . Die von Lparse akzeptierte Sprache heißt jetzt allgemein AnsProlog, kurz für Answer Set Programming in Logic . Es wird nun auf die gleiche Art und Weise in vielen anderen Antwortsatz Löser, einschließlich verwendet Assat , Spange , cmodels , gNt , nomore ++ und pbmodels . ( dlv ist eine Ausnahme; die Syntax von ASP-Programmen, die für dlv geschrieben wurden, ist etwas anders.)

Ein AnsProlog-Programm besteht aus Regeln der Form

<head> :- <body> .

Das Symbol :-("if") wird weggelassen, wenn <body>es leer ist; solche Regeln werden Fakten genannt . Die einfachste Art von Lparse-Regeln sind Regeln mit Einschränkungen .

Ein weiteres nützliches Konstrukt, das in dieser Sprache enthalten ist, ist die Auswahl . Zum Beispiel die Wahlregel

{p,q,r}.

sagt: Wählen Sie willkürlich, welches der Atome in das stabile Modell aufgenommen werden soll. Das Lparse-Programm, das diese Auswahlregel und keine anderen Regeln enthält, hat 8 stabile Modelle – beliebige Teilmengen von . Die Definition eines stabilen Modells wurde auf Programme mit Auswahlregeln verallgemeinert. Auswahlregeln können auch als Abkürzungen für Aussagenformeln unter der stabilen Modellsemantik behandelt werden . Zum Beispiel kann die obige Auswahlregel als Kurzform für die Konjunktion von drei „ ausgeschlossenen mittleren “ Formeln angesehen werden:

Die Sprache von Lparse ermöglicht es uns auch, "eingeschränkte" Auswahlregeln zu schreiben, wie zum Beispiel

1{p,q,r}2.

Diese Regel besagt: Wähle mindestens 1 der Atome , aber nicht mehr als 2. Die Bedeutung dieser Regel unter der stabilen Modellsemantik wird durch die Aussageformel dargestellt

Kardinalitätsgrenzen können auch im Hauptteil einer Regel verwendet werden, zum Beispiel:

:- 2{p,q,r}.

Das Hinzufügen dieser Einschränkung zu einem Lparse-Programm eliminiert die stabilen Modelle, die mindestens 2 der Atome enthalten . Die Bedeutung dieser Regel kann durch die Aussagenformel dargestellt werden

Variablen (groß geschrieben, wie in Prolog ) werden in Lparse verwendet, um Sammlungen von Regeln abzukürzen, die dem gleichen Muster folgen, und auch um Sammlungen von Atomen innerhalb derselben Regel abzukürzen. Zum Beispiel das Lparse-Programm

p(a). p(b). p(c).
q(X) :- p(X), X!=a.

hat die gleiche Bedeutung wie

p(a). p(b). p(c).
q(b). q(c).

Das Programm

p(a). p(b). p(c).
{q(X):-p(X)}2.

ist eine Abkürzung für

p(a). p(b). p(c).
{q(a),q(b),q(c)}2.

Ein Bereich hat die Form:

(start..end)

wobei start und end arithmetische Ausdrücke mit konstantem Wert sind. Ein Bereich ist eine Notation, die hauptsächlich verwendet wird, um numerische Domänen auf kompatible Weise zu definieren. Zum Beispiel die Tatsache

a(1..3).

ist eine Abkürzung für

a(1). a(2). a(3).

Bereiche können auch in Regelkörpern mit derselben Semantik verwendet werden.

Ein bedingtes Literal hat die Form:

p(X):q(X)

Wenn die Erweiterung von q {q(a1),q(a2), ... ,q(aN)} ist, ist die obige Bedingung semantisch äquivalent zum Schreiben von {p(a1),p(a2), ... , p(aN)} anstelle der Bedingung. Zum Beispiel,

q(1..2).
a :- 1 {p(X):q(X)}.

ist eine Abkürzung für

q(1). q(2).
a :- 1 {p(1), p(2)}.

Generieren stabiler Modelle

Um ein stabiles Modell des Lparse-Programms zu finden, das in einer Datei gespeichert ist, verwenden ${filename}wir den Befehl

% lparse ${filename} | smodels

Option 0 weist smodels an, alle stabilen Modelle des Programms zu finden. Zum Beispiel, wenn die Datei testdie Regeln enthält

1{p,q,r}2.
s :- not p.

dann erzeugt der Befehl die Ausgabe

% lparse test | smodels 0
Answer: 1
Stable Model: q p 
Answer: 2
Stable Model: p 
Answer: 3
Stable Model: r p 
Answer: 4
Stable Model: q s 
Answer: 5
Stable Model: r s 
Answer: 6
Stable Model: r q s

Beispiele für ASP-Programme

Diagrammfärbung

Ein - Einfärben eines Graphen ist eine Funktion derart , dass für jedes Paar von benachbarten Scheiteln . Wir möchten ASP verwenden, um eine -Färbung eines gegebenen Graphen zu finden (oder festzustellen, dass es nicht existiert).

Dies kann mit dem folgenden Lparse-Programm erreicht werden:

c(1..n).                                           
1 {color(X,I) : c(I)} 1 :- v(X).             
:- color(X,I), color(Y,I), e(X,Y), c(I).

Zeile 1 definiert die Zahlen als Farben. Gemäß der Auswahlregel in Zeile 2 sollte jedem Scheitelpunkt eine eindeutige Farbe zugewiesen werden . Die Einschränkung in Zeile 3 verbietet es, Scheitelpunkten dieselbe Farbe zuzuweisen und wenn eine Kante sie verbindet.

Wenn wir diese Datei mit einer Definition von kombinieren , wie z

v(1..100). % 1,...,100 are vertices
e(1,55). % there is an edge from 1 to 55
. . .

und führen Sie smodels darauf aus, wobei der numerische Wert von in der Befehlszeile angegeben ist, dann werden die Atome des Formulars in der Ausgabe von smodels eine -Farbgebung von darstellen .

Das Programm in diesem Beispiel veranschaulicht die Organisation "Generieren und Testen", die häufig in einfachen ASP-Programmen zu finden ist. Die Auswahlregel beschreibt eine Menge von „potenziellen Lösungen“ – eine einfache Obermenge der Lösungsmenge des gegebenen Suchproblems. Es folgt ein Constraint, der alle möglichen Lösungen ausschließt, die nicht akzeptabel sind. Der Suchprozess, der von smodels und anderen Lösungssatzlösern verwendet wird, basiert jedoch nicht auf Versuch und Irrtum .

Große Clique

Eine Clique in einem Graphen ist eine Menge paarweise benachbarter Knoten. Das folgende Lparse-Programm findet eine Clique der Größe in einem gegebenen Graphen oder stellt fest, dass sie nicht existiert:

n {in(X) : v(X)}.
:- in(X), in(Y), v(X), v(Y), X!=Y, not e(X,Y), not e(Y,X).

Dies ist ein weiteres Beispiel für die Generieren-und-Testen-Organisation. Die Auswahlregel in Zeile 1 "erzeugt" alle Sets, die aus Knoten bestehen. Die Einschränkung in Zeile 2 "räumt" die Sets aus, die keine Cliquen sind.

Hamilton-Zyklus

Ein Hamilton - Operator - Zyklus in einem gerichteten Graphen ist ein Zyklus , der genau einmal durch jeden Knoten des Graphen verläuft. Das folgende Lparse-Programm kann verwendet werden, um einen Hamiltonkreis in einem gegebenen gerichteten Graphen zu finden, falls er existiert; wir nehmen an, dass 0 einer der Knoten ist.

{in(X,Y)} :- e(X,Y).

:- 2 {in(X,Y) : e(X,Y)}, v(X).
:- 2 {in(X,Y) : e(X,Y)}, v(Y).

r(X) :- in(0,X), v(X).
r(Y) :- r(X), in(X,Y), e(X,Y).

:- not r(X), v(X).

Die Auswahlregel in Zeile 1 "erzeugt" alle Teilmengen der Kantenmenge. Die drei Beschränkungen "sortieren" die Teilmengen aus, die keine Hamiltonschen Zyklen sind. Der letzte von ihnen verwendet das Hilfsprädikat (" ist erreichbar von 0"), um die Knoten zu verbieten, die diese Bedingung nicht erfüllen. Dieses Prädikat wird in den Zeilen 6 und 7 rekursiv definiert.

Dieses Programm ist ein Beispiel für die allgemeinere Organisation "Generieren, Definieren und Testen": Es enthält die Definition eines Hilfsprädikats, das uns hilft, alle "schlechten" Lösungsmöglichkeiten zu eliminieren.

Abhängigkeitsanalyse

In der Verarbeitung natürlicher Sprache kann abhängigkeitsbasiertes Parsing als ASP-Problem formuliert werden. Der folgende Code analysiert den lateinischen Satz "Puella pulchra in villa linguam latinam discit", "das hübsche Mädchen lernt Latein in der Villa". Der Syntaxbaum wird durch die Arc- Prädikate ausgedrückt, die die Abhängigkeiten zwischen den Wörtern des Satzes darstellen. Die berechnete Struktur ist ein linear geordneter Wurzelbaum.

% ********** input sentence **********
word(1, puella). word(2, pulchra). word(3, in). word(4, villa). word(5, linguam). word(6, latinam). word(7, discit).
% ********** lexicon **********
1{ node(X, attr(pulcher, a, fem, nom, sg));
   node(X, attr(pulcher, a, fem, abl, sg)) }1 :- word(X, pulchra).
node(X, attr(latinus, a, fem, acc, sg)) :- word(X, latinam).
1{ node(X, attr(puella, n, fem, nom, sg));
   node(X, attr(puella, n, fem, abl, sg)) }1 :- word(X, puella).
1{ node(X, attr(villa, n, fem, nom, sg));
   node(X, attr(villa, n, fem, abl, sg)) }1 :- word(X, villa).
node(X, attr(linguam, n, fem, acc, sg)) :- word(X, linguam).
node(X, attr(discere, v, pres, 3, sg)) :- word(X, discit).
node(X, attr(in, p)) :- word(X, in).
% ********** syntactic rules **********
0{ arc(X, Y, subj) }1 :- node(X, attr(_, v, _, 3, sg)), node(Y, attr(_, n, _, nom, sg)).
0{ arc(X, Y, dobj) }1 :- node(X, attr(_, v, _, 3, sg)), node(Y, attr(_, n, _, acc, sg)).
0{ arc(X, Y, attr) }1 :- node(X, attr(_, n, Gender, Case, Number)), node(Y, attr(_, a, Gender, Case, Number)).
0{ arc(X, Y, prep) }1 :- node(X, attr(_, p)), node(Y, attr(_, n, _, abl, _)), X < Y.
0{ arc(X, Y, adv) }1 :- node(X, attr(_, v, _, _, _)), node(Y, attr(_, p)), not leaf(Y).
% ********** guaranteeing the treeness of the graph **********
1{ root(X):node(X, _) }1.
:- arc(X, Z, _), arc(Y, Z, _), X != Y.
:- arc(X, Y, L1), arc(X, Y, L2), L1 != L2.
path(X, Y) :- arc(X, Y, _).
path(X, Z) :- arc(X, Y, _), path(Y, Z).
:- path(X, X).
:- root(X), node(Y, _), X != Y, not path(X, Y).
leaf(X) :- node(X, _), not arc(X, _, _).

Sprachstandardisierung und ASP-Wettbewerb

Die ASP-Standardisierungsarbeitsgruppe hat eine Standardsprachspezifikation namens ASP-Core-2 erstellt, auf die neuere ASP-Systeme konvergieren. ASP-Core-2 ist die Referenzsprache für den Answer Set Programming Competition, bei dem ASP-Löser periodisch mit einer Reihe von Referenzproblemen verglichen werden.

Vergleich der Implementierungen

Frühe Systeme wie Smodels verwendeten Backtracking , um Lösungen zu finden. Im Zuge der Weiterentwicklung von Theorie und Praxis der Booleschen SAT-Solver wurden eine Reihe von ASP-Solvern auf den SAT-Solvern aufgebaut, darunter ASSAT und Cmodels. Diese konvertierten die ASP-Formel in SAT-Propositionen, wendeten den SAT-Solver an und konvertierten dann die Lösungen wieder in die ASP-Form. Neuere Systeme wie Clasp verwenden einen hybriden Ansatz, der konfliktgesteuerte Algorithmen verwendet, die von SAT inspiriert sind, ohne vollständig in eine boolesche logische Form umzuwandeln. Diese Ansätze ermöglichen signifikante Leistungsverbesserungen, oft um eine Größenordnung, gegenüber früheren Backtracking-Algorithmen.

Das Potassco- Projekt fungiert als Dach für viele der unten aufgeführten Systeme, darunter clasp , Erdungssysteme ( gringo ), inkrementelle Systeme ( iclingo ), Constraint Solver ( clingcon ), Action Language to ASP Compiler ( coala ), verteilte MPI-Implementierungen ( claspar ) , und viele andere.

Die meisten Systeme unterstützen Variablen, aber nur indirekt, indem sie die Erdung erzwingen, indem sie ein Erdungssystem wie Lparse oder Gringo als Frontend verwenden. Die Notwendigkeit einer Erdung kann zu einer kombinatorischen Explosion von Klauseln führen; Daher könnten Systeme, die eine fliegende Erdung durchführen, einen Vorteil haben.

Abfragegesteuerte Implementierungen der Antwortmengenprogrammierung, wie das Galliwasp-System, s(ASP) und s(CASP) vermeiden eine Erdung insgesamt, indem sie eine Kombination aus Auflösung und Koinduktion verwenden .

Plattform Merkmale Mechanik
Name Betriebssystem Lizenz Variablen Funktionssymbole Explizite Sätze Explizite Listen Disjunktive (Wahlregeln) Unterstützung
ASPeRiX Linux GPL Jawohl Nein On-the-fly-Erdung
ASSAT Solaris Freeware SAT-Solver basiert
Lösungsset-Löser für Klammern Linux , macOS , Windows MIT-Lizenz Ja, auf Clingo Jawohl Nein Nein Jawohl inkrementell, SAT-Solver-inspiriert (nicht gut, konfliktgetrieben)
CModelle Linux , Solaris GPL Erfordert Erdung Jawohl inkrementell, SAT-Solver-inspiriert (nicht gut, konfliktgetrieben)
Diff-SAT Linux , macOS , Windows ( Java Virtual Machine ) MIT-Lizenz Erfordert Erdung Jawohl SAT-Solver inspiriert (nicht gut, konfliktgetrieben). Unterstützt die Lösung probabilistischer Probleme und das Sampling von Antwortsätzen
DLV Linux , macOS , Windows kostenlos für akademische und nicht-kommerzielle Bildungszwecke sowie für gemeinnützige Organisationen Jawohl Jawohl Nein Nein Jawohl nicht Lparse-kompatibel
DLV-Komplex Linux , macOS , Windows GPL Jawohl Jawohl Jawohl Jawohl auf DLV aufbauend — nicht Lparse-kompatibel
GnT Linux GPL Erfordert Erdung Jawohl auf Smodels gebaut
nicht mehr++ Linux GPL kombiniert wörtlich+regelbasiert
Schnabeltier Linux , Solaris , Windows GPL verteilt, multithreaded nomore++, smodels
Pbmodels Linux ? pseudo-boolescher Solver basierend
Modelle Linux , macOS , Windows GPL Erfordert Erdung Nein Nein Nein Nein
Smodels-cc Linux ? Erfordert Erdung SAT-Solver-basiert; Modelle mit Konfliktklauseln
Sup Linux ? SAT-Solver basiert

Siehe auch

Verweise

Externe Links