Hemos creado un sitio web con la historia de todos los sistemas de planificación de la familia PANDA, enlaces a todos los proyectos de software relevantes y más información general, incluidos consejos que explican las técnicas implementadas por los respectivos sistemas.
Esta es la utilidad de análisis del sistema de planificación pandaPI. Está diseñado para analizar problemas de planificación de HTN. Su idioma de entrada principal (y actualmente único) es HDDL (consulte el siguiente documento).
Si utiliza pandaPIparser en cualquiera de sus trabajos publicados, le rogamos que nos cite (consulte la Referencia a continuación).
Actualmente, el analizador puede producir dos formatos de salida diferentes:
Tenga en cuenta que la traducción a (J)SHOP2 es necesariamente incompleta ya que (J)SHOP2 no puede expresar órdenes parciales arbitrarias en sus restricciones de ordenación. Por ejemplo, un método con las cinco subtareas (a,b,c,d,e) y las restricciones de orden a < c, a < d, b < d y b < e no se pueden formular en (J)SHOP2.
Nota : actualmente pandaPIparser distingue entre mayúsculas y minúsculas. Es decir, interpreta HDDL en una versión que distingue entre mayúsculas y minúsculas. El verificador de planes se puede cambiar a un modo indulgente en el que interpretará un plan determinado sin distinguir entre mayúsculas y minúsculas.
Para compilar pandaPIparser necesitas g++, make, flex y bison. No se requieren bibliotecas. Necesita una versión reciente de bison (se sabe que las versiones 3.7.2 y 3.5.1 funcionan) y flex al menos en la versión 2.6. Su compilador de C++ debe ser compatible con C++17.
Para crear el ejecutable, simplemente ejecute make -j
en la carpeta raíz, lo que creará un ejecutable llamado pandaPIparser
Si utiliza MacOSX, las versiones predeterminadas de bison y flex son bastante antiguas. Necesita instalar una versión reciente de bison y flex vía brew. De forma predeterminada, la ruta para flex y bison se establece en la ubicación más común dentro de una instalación de elaboración de cerveza (que son /opt/homebrew/opt/bison/bin/bison
y /opt/homebrew/opt/flex/bin/flex
). Si estas rutas no son correctas para su sistema, puede modificarlas cambiando las variables BISON
y FLEX
de la siguiente manera:
BISON=/opt/homebrew/opt/bison/bin/bison FLEX=/opt/homebrew/opt/flex/bin/flex make -j
Nota Si está utilizando MacOSX, compilamos el analizador sin los indicadores -static
y -static-libgcc
ya que la compilación estática no funciona en MacOSX. Esto puede ralentizar el analizador, pero no debería ser significativo.
Si necesita una compilación de depuración (lo que hará que el analizador genere mucha información de depuración en stdout
), puede llamar al destino make debug
. Tenga en cuenta que es posible que deba realizar una reconstrucción completa para que esto funcione correctamente, es decir, una make -Bj debug
.
Se llama al analizador con al menos dos argumentos: el dominio y el archivo del problema. Ambos deben estar escritos en HDDL.
La traducción de HDDL al formato de archivo interno de PANDA es el comportamiento predeterminado de pandaPIparser. De forma predeterminada, el analizador generará la instancia dada en el formato interno de pandaPI en nuestro estándar. Si pasa un tercer nombre de archivo, pandaPIparser generará la representación interna de la instancia en ese archivo. Como ejemplo puedes llamar
./pandaPIParser transport.hddl pfile01.hddl transport-pfile01.htn
Esto generará un archivo transport-pfile01.htn
que contiene una versión levantada, pero legible por máquina, del dominio y el problema que lee pandaPIgrounder.
pandaPIparser también ofrece la opción de escribir la salida en el formato de entrada de (J)SHOP2. Para hacerlo, agregue -shop
como uno de los argumentos de la línea de comando (la posición no importa). Con -shop
puedes especificar hasta cuatro archivos como argumentos de línea de comando: el dominio de entrada, el problema de entrada, el dominio de salida y el problema de salida. Como ejemplo considere
./pandaPIParser --shop transport.hddl pfile01.hddl shop-transport.lisp shop-pfile01.lisp
Tenga en cuenta que
__top
.call
pasará a llamarse _call
, ya que call
es una palabra clave para (J)SHOP2.forall
actuales en condiciones previas están completamente instanciadas. pandaPIparser también admite la salida de (J)SHOP1. Esto es esencialmente el mismo que el resultado de (J)SHOP2 con la única diferencia de que los guiones bajos se reemplazarán por signos negativos y los signos negativos iniciales se antepondrán con una x
. Para llamar al traductor en este modo de compatibilidad, use --shop1
en lugar de --shop
como argumento de la línea de comando.
pandaPIparser también ofrece la opción de escribir la salida en HPDL. Para hacerlo, agregue --hpdl
como uno de los argumentos de la línea de comando (la posición no importa). En cuanto a parámetros, --hpdl
funciona exactamente como --shop
Si tiene algún problema con pandaPIparser o tiene alguna pregunta relacionada con su uso, comuníquese con Gregor Behnke.
Si desea citar pandaPIparser, puede hacerlo consultando el siguiente documento:
{% crudo %}
@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}
}
{% dibujar %}