如何解决pddl域文件中的“未声明的谓词:<”错误?

时间:2019-11-08 05:37:09

标签: pddl

我正在尝试使用Fast Downward Planner解决一个简单的pddl问题。每当我使用诸如><>=decrease之类的数字表达式时,就会发生以下错误:

Undeclared predicate: < 

问题文件:

(define (problem prob-gift)
  (:domain gift)
  (:objects
   chocolate hairband hairclip gift

  )
  (:init

     (=(amount_c chocolate)5)
     (=(amount_hb hairband)5)
     (=(amount_hr hairclip)5)

     (=(made gift)0)


  )
  (:goal
    (and
    (=(made gift)5)
    )
  )
)

域文件:

(define (domain gift) 

(:types chocolate hairband hairclip gift )

(:predicates      
  )
(:functions
   (made ?x ) 
         (amount_hb ?y ) 
         (amount_hr ?z ) 
         (amount_c ?a ) 

)



(:action make
     :parameters (?x ?y  ?z ?a)
     :precondition (and 
     (<(made ?x)5)
         (>=(amount_hb ?y)1)
         (>=(amount_hr ?z)1)
         (>=(amount_c ?a)1)


     )
     :effect (and
          (increase(made ?x)1)
                  (decrease(amount_hb ?y)1)
                  (decrease(amount_hr ?z)1)
                  (decrease(amount_c ?a)1)

           ))

)

输出:

Parsing...
Undeclared predicate: <

translate exit code: 30

Driver aborting after translate

2 个答案:

答案 0 :(得分:2)

不幸的是,我在https://gitlab.com/graphs4IB/ai-planning容器化的popf的版本对ADL的了解并不深刻,并且在典型情况下令人窒息

Constructing lookup tables:
Post filtering unreachable actions: 
A problem has been encountered, and the planner has to terminate.
-----------------------------------------------------------------
Unfortunately, at present, the planner does not fully support ADL
unless in the rules for derived predicates.  Only two aspects of
ADL can be used in action definitions:
- forall conditions, containing a simple conjunct of propositional and
  numeric facts;
- Conditional (when... ) effects, and then only with numeric conditions
  and numeric consequences on values which do not appear in the
  preconditions of actions.

To use this planner with your problem, you will have to reformulate it to
avoid ADL.  Alternatively, if you have a particularly compelling case
for them, please contact the authors to discuss it with them, who may be able to
extend the planner to meet your needs.

我从https://github.com/LCAS/popf.git获得了这个版本的popf,与在Sourceforge上发布的具有重大代码差异的版本相反。

您可以通过设置以下“自定义计划者” URL:Jan's session

https://young-spire-39208.herokuapp.com上进行快速测试。

或者,您也可以在本地运行Docker映像,假设您的domain.pddlproblem.pddl在当前目录中:

docker run --rm -v $PWD:/tmp registry.gitlab.com/graphs4ib/ai-planning:latest popf /tmp/domain.pddl /tmp/problem.pddl

这是在Debian Stretch Docker容器中编译popf。如果您方便使用Debian 9(Stretch)或10(Buster)环境,则可以手动编译popf:

sudo apt-get -qy install git g++ cmake coinor-libcbc-dev coinor-libcgl-dev coinor-libclp-dev coinor-libcoinutils-dev bison flex \
&& git clone https://github.com/LCAS/popf.git \
&& cd popf \
&& mkdir build \
&& cd build \
&& cmake ../src -DCMAKE_BUILD_TYPE=Release -DCMAKE_VERBOSE_MAKEFILE=TRUE \
&& make -j \
&& make install

答案 1 :(得分:1)

Jonaki,我相信您的PDDL模型中类型的使用存在问题。同样,通常,当您选择的计划者不接受您的模型(或无法解决您的问题)时,您应该削减它并从最简单的版本重新构建它,同时不断地对计划者进行测试。这样,您将确切地看到引起它的问题。有时打印的消息不具有代表性。

您正在使用数字流利,因此,应将(:requirements :fluents)包含在domain中。不支持:fluents的计划者可能会执行<=decrease操作。

顺便说一句:您无需在此模型中使用类型。您已将功能声明为对各种礼品对象的接地。因此,您可以删除类型,然后查看模型是否有效。此处提供了该模型的已删除类型的版本: http://editor.planning.domains/#read_session=jugsVFKksh 您可以通过点击解决> 计划按钮进行测试。规划器因分段错误而失败。它不提供任何特定的错误。 但是,我尝试使用POPF计划程序解决此问题,并且它可以工作。如您在此屏幕截图中所见。

POPF solution

我没有方便的Fast-downward,但是我认为它是http://solver.planning.domains/solve服务背后的引擎,尽管您的错误消息与我看到的错误消息并不相同。您是否使用的是最新版本的快速向下?

此外,如果您可以描述要建模的内容,也许我们可以帮助您找到一种合适的方式在PDDL中对其建模。