Nous avons créé un site Web avec l'historique de tous les systèmes de planification de la famille PANDA, des liens vers tous les projets logiciels pertinents et des informations générales supplémentaires, notamment des pointeurs expliquant les techniques déployées par les systèmes respectifs.
Il s'agit de l'utilitaire d'analyse du système de planification pandaPI. Il est conçu pour analyser les problèmes de planification HTN. Sa langue d'entrée principale (et actuellement la seule) est le HDDL (voir l'article suivant).
Si vous utilisez pandaPIparser dans l'un de vos travaux publiés, nous vous demanderons de bien vouloir nous citer (voir référence ci-dessous).
L'analyseur peut actuellement produire deux formats de sortie différents :
Notez que la traduction en (J)SHOP2 est nécessairement incomplète car (J)SHOP2 ne peut pas exprimer d'ordres partiels arbitraires dans ses contraintes d'ordre. Par exemple, une méthode avec les cinq sous-tâches (a,b,c,d,e) et les contraintes d'ordre a < c, a < d, b < d et b < e ne peut pas être formulée dans (J)SHOP2.
Remarque : Le pandaPIparser est actuellement sensible à la casse. C'est-à-dire qu'il interprète HDDL dans une version sensible à la casse. Le vérificateur de plan peut passer en mode indulgent dans lequel il interprétera un plan donné sans tenir compte de la casse.
Pour compiler pandaPIparser, vous avez besoin de g++, make, flex et bison. Aucune bibliothèque n'est requise. Vous avez besoin d'une version récente de bison (les versions 3.7.2 et 3.5.1 sont connues pour fonctionner) et flex au moins en version 2.6. Votre compilateur C++ doit prendre en charge C++17.
Pour créer l'exécutable, exécutez simplement make -j
dans le dossier racine, ce qui créera un exécutable appelé pandaPIparser
Si vous utilisez MacOSX, les versions par défaut de bison et flex sont assez anciennes. Vous devez installer une version récente de bison et flex via Brew. Par défaut, le chemin d'accès pour flex et bison est défini sur l'emplacement le plus courant dans une installation Brew (qui sont /opt/homebrew/opt/bison/bin/bison
et /opt/homebrew/opt/flex/bin/flex
). Si ces chemins ne conviennent pas à votre système, vous pouvez les modifier en modifiant les variables BISON
et FLEX
comme suit :
BISON=/opt/homebrew/opt/bison/bin/bison FLEX=/opt/homebrew/opt/flex/bin/flex make -j
Remarque Si vous utilisez MacOSX, nous compilons l'analyseur sans les indicateurs -static
et -static-libgcc
car la compilation statique ne fonctionne pas sous MacOSX. Cela peut ralentir l'analyseur, mais cela ne devrait pas être significatif.
Si vous avez besoin d'une version de débogage (ce qui amènera l'analyseur à générer de nombreuses informations de débogage sur stdout
), vous pouvez appeler la cible make debug
. Sachez que vous devrez peut-être effectuer une reconstruction complète pour que cela fonctionne correctement, c'est-à-dire un make -Bj debug
.
L'analyseur est appelé avec au moins deux arguments : le domaine et le fichier problématique. Les deux doivent être écrits en HDDL.
La traduction de HDDL vers le format de fichier interne de PANDA est le comportement par défaut de pandaPIparser. Par défaut, l'analyseur affichera l'instance donnée au format interne de pandaPI sur notre standard. Si vous transmettez un troisième nom de fichier, pandaPIparser affichera à la place la représentation interne de l'instance dans ce fichier. A titre d'exemple, vous pouvez appeler
./pandaPIParser transport.hddl pfile01.hddl transport-pfile01.htn
Cela générera un fichier transport-pfile01.htn
qui contient une version améliorée, mais lisible par machine, du domaine et du problème qui est lue par pandaPIgrounder.
pandaPIparser propose également la possibilité d'écrire la sortie au format d'entrée de (J)SHOP2. Pour ce faire, ajoutez -shop
comme l'un des arguments de ligne de commande (la position n'a pas d'importance). Avec -shop
vous pouvez spécifier jusqu'à quatre fichiers comme arguments de ligne de commande : le domaine d'entrée, le problème d'entrée, le domaine de sortie et le problème de sortie. À titre d'exemple, considérons
./pandaPIParser --shop transport.hddl pfile01.hddl shop-transport.lisp shop-pfile01.lisp
Noter que
__top
.call
sera renommée en _call
, car call
est un mot-clé pour (J)SHOP2.forall
actuelles dans les conditions préalables sont entièrement instanciées. pandaPIparser prend également en charge la sortie de (J)SHOP1. C'est essentiellement la même chose que la sortie de (J)SHOP2 avec la seule différence que les traits de soulignement seront remplacés par des moins et que les moins de début sont précédés d'un x
. Pour appeler le traducteur dans ce mode de compatibilité, utilisez --shop1
au lieu de --shop
comme argument de ligne de commande.
pandaPIparser propose également la possibilité d'écrire la sortie sur HPDL. Pour ce faire, ajoutez --hpdl
comme l'un des arguments de ligne de commande (la position n'a pas d'importance). Au niveau des paramètres, --hpdl
fonctionne exactement comme --shop
Si vous rencontrez des problèmes avec pandaPIparser – ou si vous avez des questions concernant son utilisation, veuillez contacter Gregor Behnke.
Si vous souhaitez citer pandaPIparser, vous pouvez le faire en vous référant à l'article suivant :
{% brut %}
@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}
}
{% retirer %}