Criámos um website com a história de todos os sistemas de planeamento da família PANDA, ligações para todos os projectos de software relevantes e mais informações básicas, incluindo indicações que explicam as técnicas implementadas pelos respectivos sistemas.
Este é o utilitário de análise do sistema de planejamento pandaPI. Ele foi projetado para analisar problemas de planejamento HTN. Seu principal (e atualmente único) idioma de entrada é HDDL (veja o artigo a seguir).
Se você usar o pandaPIparser em algum de seus trabalhos publicados, pedimos a gentileza de nos citar (veja a referência abaixo).
O analisador pode atualmente produzir dois formatos de saída diferentes:
Observe que a tradução para (J)SHOP2 é necessariamente incompleta, pois (J)SHOP2 não pode expressar pedidos parciais arbitrários em suas restrições de pedido. Por exemplo, um método com as cinco subtarefas (a,b,c,d,e) e as restrições de ordenação a < c, a < d, b < d e b < e não pode ser formulado em (J)SHOP2.
Nota : O pandaPIparser atualmente diferencia maiúsculas de minúsculas. Ou seja, ele interpreta HDDL em uma versão que diferencia maiúsculas de minúsculas. O verificador de plano pode ser alternado para o modo tolerante, no qual interpretará um determinado plano sem distinção entre maiúsculas e minúsculas.
Para compilar o pandaPIparser você precisa de g++, make, flex e bison. Nenhuma biblioteca é necessária. Você precisa de uma versão recente do bison (sabe-se que as versões 3.7.2 e 3.5.1 funcionam) e flex pelo menos na versão 2.6. Seu compilador C++ precisa oferecer suporte a C++17.
Para criar o executável, basta executar make -j
na pasta raiz, que criará um executável chamado pandaPIparser
Se você estiver usando MacOSX, as versões padrão do bison e flex são bastante antigas. Você precisa instalar uma versão recente do bison e flex via brew. Por padrão, o caminho para flex e bison é definido para o local mais comum dentro de uma instalação brew (que são /opt/homebrew/opt/bison/bin/bison
e /opt/homebrew/opt/flex/bin/flex
). Se esses caminhos não estiverem corretos para o seu sistema, você poderá alterá-los alterando as variáveis BISON
e FLEX
da seguinte forma:
BISON=/opt/homebrew/opt/bison/bin/bison FLEX=/opt/homebrew/opt/flex/bin/flex make -j
Nota Se você estiver usando MacOSX, compilamos o analisador sem os sinalizadores -static
e -static-libgcc
, pois a compilação estática não funciona no MacOSX. Isto pode tornar o analisador mais lento, mas não deve ser significativo.
Se você precisar de uma compilação de depuração (o que fará com que o analisador envie muitas informações de depuração para stdout
), você pode chamar o destino make debug
. Esteja ciente de que pode ser necessário fazer uma reconstrução completa para que isso funcione corretamente, ou seja, um make -Bj debug
.
O analisador é chamado com pelo menos dois argumentos: o domínio e o arquivo do problema. Ambos devem ser escritos em HDDL.
A tradução do HDDL para o formato de arquivo interno do PANDA é o comportamento padrão do pandaPIparser. Por padrão, o analisador produzirá a instância fornecida no formato interno do pandaPI no padrão our. Se você passar um terceiro nome de arquivo, o pandaPIparser produzirá a representação interna da instância para esse arquivo. Como exemplo você pode ligar
./pandaPIParser transport.hddl pfile01.hddl transport-pfile01.htn
Isso gerará um arquivo transport-pfile01.htn
que contém uma versão elevada, mas legível por máquina, do domínio e do problema que é lido pelo pandaPIgrounder.
pandaPIparser também oferece a opção de gravar a saída no formato de entrada do (J)SHOP2. Para fazer isso, adicione -shop
como um dos argumentos da linha de comando (a posição não importa). Com -shop
você pode especificar até quatro arquivos como argumentos de linha de comando: o domínio de entrada, o problema de entrada, o domínio de saída e o problema de saída. Como exemplo considere
./pandaPIParser --shop transport.hddl pfile01.hddl shop-transport.lisp shop-pfile01.lisp
Observe que
__top
.call
será renomeada para _call
, pois call
é uma palavra-chave para (J)SHOP2.forall
atuais em pré-condições são totalmente instanciadas. pandaPIparser também suporta a saída do (J)SHOP1. Isso é essencialmente o mesmo que a saída para (J)SHOP2, com a única diferença de que os sublinhados serão substituídos por sinais de menos e os sinais de menos à esquerda serão prefixados com um x
. Para chamar o tradutor neste modo de compatibilidade, use --shop1
em vez de --shop
como argumento de linha de comando.
pandaPIparser também oferece a opção de gravar a saída em HPDL. Para fazer isso, adicione --hpdl
como um dos argumentos da linha de comando (a posição não importa). Em termos de parâmetros --hpdl
funciona exatamente como --shop
Se você tiver algum problema com o pandaPIparser - ou tiver alguma dúvida relacionada ao seu uso, entre em contato com Gregor Behnke.
Se você quiser citar o pandaPIparser, poderá fazê-lo consultando o seguinte artigo:
{% cru %}
@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}
}
{% sacar %}