Wir haben eine Website mit der Geschichte aller Planungssysteme der PANDA-Familie, Links zu allen relevanten Softwareprojekten und weiteren Hintergrundinformationen inklusive Hinweisen zur Erläuterung der von den jeweiligen Systemen eingesetzten Techniken zusammengestellt.
Dies ist das Parsing-Dienstprogramm des pandaPI-Planungssystems. Es dient zur Analyse von HTN-Planungsproblemen. Seine wichtigste (und derzeit einzige) Eingabesprache ist HDDL (siehe das folgende Dokument).
Wenn Sie pandaPIparser in einer Ihrer veröffentlichten Arbeiten verwenden, bitten wir Sie, uns zu zitieren (siehe Referenz unten).
Der Parser kann derzeit zwei verschiedene Ausgabeformate erzeugen:
Beachten Sie, dass die Übersetzung in (J)SHOP2 notwendigerweise unvollständig ist, da (J)SHOP2 in seinen Ordnungsbeschränkungen keine beliebigen Teilordnungen ausdrücken kann. Beispielsweise kann eine Methode mit den fünf Teilaufgaben (a,b,c,d,e) und den Ordnungsbeschränkungen a < c, a < d, b < d und b < e nicht in (J)SHOP2 formuliert werden.
Hinweis : Beim pandaPIparser wird derzeit zwischen Groß- und Kleinschreibung unterschieden. Dh es interpretiert HDDL in einer Version, bei der die Groß-/Kleinschreibung beachtet wird. Der Planprüfer kann in den nachsichtigen Modus geschaltet werden, in dem er einen bestimmten Plan ohne Berücksichtigung der Groß- und Kleinschreibung interpretiert.
Zum Kompilieren von pandaPIparser benötigen Sie g++, make, flex und bison. Es sind keine Bibliotheken erforderlich. Sie benötigen eine aktuelle Version von Bison (die Versionen 3.7.2 und 3.5.1 funktionieren bekanntermaßen) und Flex mindestens in Version 2.6. Ihr C++-Compiler muss C++17 unterstützen.
Um die ausführbare Datei zu erstellen, führen Sie einfach make -j
im Stammordner aus, wodurch eine ausführbare Datei namens pandaPIparser
erstellt wird
Wenn Sie MacOSX verwenden, sind die Standardversionen von Bison und Flex ziemlich alt. Sie müssen eine aktuelle Version von Bison und Flex über Brew installieren. Standardmäßig ist der Pfad für Flex und Bison auf den häufigsten Speicherort innerhalb einer Brew-Installation eingestellt (das sind /opt/homebrew/opt/bison/bin/bison
und /opt/homebrew/opt/flex/bin/flex
). Wenn diese Pfade für Ihr System nicht korrekt sind, können Sie sie ändern, indem Sie die BISON
und FLEX
Variablen wie folgt ändern:
BISON=/opt/homebrew/opt/bison/bin/bison FLEX=/opt/homebrew/opt/flex/bin/flex make -j
Hinweis Wenn Sie MacOSX verwenden, kompilieren wir den Parser ohne die Flags -static
und -static-libgcc
da die statische Kompilierung unter MacOSX nicht funktioniert. Dies kann den Parser verlangsamen, sollte aber nicht erheblich sein.
Wenn Sie einen Debug-Build benötigen (der dazu führt, dass der Parser viele Debug-Informationen an stdout
ausgibt), können Sie das Ziel make debug
aufrufen. Beachten Sie, dass Sie möglicherweise einen vollständigen Neuaufbau durchführen müssen, damit dies ordnungsgemäß funktioniert, z. B. ein make -Bj debug
.
Der Parser wird mit mindestens zwei Argumenten aufgerufen: der Domäne und der Problemdatei. Beide müssen in HDDL geschrieben sein.
Die Übersetzung von HDDL in das interne Dateiformat von PANDA ist das Standardverhalten von pandaPIparser. Standardmäßig gibt der Parser die angegebene Instanz im internen Format von pandaPI auf der Standardseite aus. Wenn Sie einen dritten Dateinamen übergeben, gibt pandaPIparser stattdessen die interne Darstellung der Instanz in diese Datei aus. Als Beispiel können Sie anrufen
./pandaPIParser transport.hddl pfile01.hddl transport-pfile01.htn
Dadurch wird eine Datei transport-pfile01.htn
generiert, die eine angehobene, aber maschinenlesbare Version der Domäne und des Problems enthält, die vom pandaPIgrounder gelesen wird.
pandaPIparser bietet auch die Möglichkeit, die Ausgabe in das Eingabeformat von (J)SHOP2 zu schreiben. Fügen Sie dazu -shop
als eines der Befehlszeilenargumente hinzu (die Position spielt keine Rolle). Mit -shop
können Sie bis zu vier Dateien als Befehlszeilenargumente angeben: die Eingabedomäne, das Eingabeproblem, die Ausgabedomäne und das Ausgabeproblem. Betrachten Sie als Beispiel
./pandaPIParser --shop transport.hddl pfile01.hddl shop-transport.lisp shop-pfile01.lisp
Beachten Sie, dass
__top
kompiliert.call
wird in _call
umbenannt, da call
ein Schlüsselwort für (J)SHOP2 ist.forall
Anweisungen in Vorbedingungen werden vollständig instanziiert. pandaPIparser unterstützt auch die Ausgabe von (J)SHOP1. Dies entspricht im Wesentlichen der Ausgabe für (J)SHOP2, mit dem einzigen Unterschied, dass Unterstriche durch Minuszeichen ersetzt werden und führenden Minuszeichen ein x
vorangestellt wird. Um den Übersetzer in diesem Kompatibilitätsmodus aufzurufen, verwenden Sie --shop1
anstelle von --shop
als Befehlszeilenargument.
pandaPIparser bietet auch die Möglichkeit, die Ausgabe in HPDL zu schreiben. Fügen Sie dazu --hpdl
als eines der Befehlszeilenargumente hinzu (die Position spielt keine Rolle). Parametermäßig funktioniert --hpdl
genau wie --shop
Wenn Sie Probleme mit pandaPIparser haben oder Fragen zur Verwendung haben, wenden Sie sich bitte an Gregor Behnke.
Wenn Sie pandaPIparser zitieren möchten, können Sie dies unter Bezugnahme auf das folgende Dokument tun:
{% roh %}
@inproceedings { Behnke2020Grounding,
Title = {On Succinct Groundings of {HTN} Planning Problems},
Year = {2020},
Booktitle = {Proceedings of the 34th {AAAI} Conference on Artificial Intelligence ({AAAI} 2020)},
Publisher = {{AAAI Press}},
Author = {Behnke, Gregor and H{"o}ller, Daniel and Schmid, Alexander and Bercher, Pascal and Biundo, Susanne}
}
{% endraw %}