我正在尝试使用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
答案 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.pddl
和problem.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计划程序解决此问题,并且它可以工作。如您在此屏幕截图中所见。
我没有方便的Fast-downward,但是我认为它是http://solver.planning.domains/solve服务背后的引擎,尽管您的错误消息与我看到的错误消息并不相同。您是否使用的是最新版本的快速向下?
此外,如果您可以描述要建模的内容,也许我们可以帮助您找到一种合适的方式在PDDL中对其建模。