如果规划器超时,如何调试 PDDL domain/problem?
How to debug a PDDL domain/problem if the planner is timing out?
我正在尝试编写一个简单的 PDDL 域和问题,但是 planning.domains returns 上的规划器出现此错误:
{
"killed": false,
"code": 124,
"signal": null,
"cmd": "timeout 5 python /app/process_solution.py /tmp/solver_planning_domains_tmp_4myYaB2oSdNQC/domain.pddl /tmp/solver_planning_domains_tmp_4myYaB2oSdNQC/problem.pddl /tmp/solver_planning_domains_tmp_4myYaB2oSdNQC/plan /tmp/solver_planning_domains_tmp_4myYaB2oSdNQC/log"
}
如何调试这个?当我的语法不正确时,错误消息更有帮助。我尝试可视化对象层次结构和问题定义,但找不到问题所在。 Torchlight 不能与 ADL 一起使用,其他分析工具似乎需要一个计划。是否缺少我应该使用的工具?
为了记录,这些是我的域和问题定义(基于 AIPS-1998 assembly and IPC 2011 grippers domains/problems):
(define (domain assembly-simple)
(:requirements :adl)
(:types assembly - object
robot - robot)
(:predicates (available ?x - object)
(complete ?a - assembly)
(incorporated ?part ?whole - assembly)
(part-of ?part ?whole - assembly)
(assemble-order ?part1 ?part2 ?whole - assembly)
(robot-carries-an-object ?r - robot)
(robot-carries-this-object ?r - robot ?o - object))
(:action pick
:parameters (?robot - robot ?part - object)
:precondition (and (available ?part)
(not (robot-carries-an-object ?robot)))
:effect (and (robot-carries-an-object ?robot)
(robot-carries-this-object ?robot ?part)
(not (available ?part))))
(:action assemble
:parameters (?robot - robot ?part ?whole - assembly)
:precondition (and (robot-carries-this-object ?robot ?part)
(part-of ?part ?whole)
(forall (?prev - assembly)
(imply (assemble-order ?prev ?part ?whole)
(incorporated ?prev ?whole))))
:effect (and
(not (robot-carries-this-object ?robot ?part))
(not (robot-carries-an-object ?robot))
(incorporated ?part ?whole)
(not (available ?part))
(when (not (exists (?p - assembly)
(and (part-of ?p ?whole)
(not (= ?p ?part))
(not (incorporated ?p ?whole)))))
(and (complete ?whole)
(available ?whole)))))
)
问题:
(define (problem simple-prob)
(:domain assembly-simple)
(:objects base-plate motor-plate sub-assembly - assembly
bot - robot)
(:init (not (robot-carries-an-object bot))
(available base-plate)
(available motor-plate)
(available sub-assembly)
(part-of base-plate sub-assembly)
(part-of motor-plate sub-assembly)
(assemble-order base-plate motor-plate sub-assembly))
(:goal (complete sub-assembly)))
提前感谢您的指点。
这里发生的错误实际上是由于解决方案的 post 处理,而不是规划器本身。该步骤需要更好的错误处理(我刚刚创建了问题here),但不幸的是我暂时没有时间处理这个问题。
如果非要我猜的话,我怀疑是 post 处理未处理的动作效果的复杂性。整个在线求解基础设施将在即将到来的 weeks/months 中进行全面检查,因此希望这个问题能够作为其中的一部分得到解决。
如果您想以不同的方式进行测试,那么我建议考虑 Docker 专门用于规划的工具:https://hub.docker.com/r/aiplanning/planutils
在那里,您应该可以 运行 downward
或 lama
并直接访问规划器。
我正在尝试编写一个简单的 PDDL 域和问题,但是 planning.domains returns 上的规划器出现此错误:
{
"killed": false,
"code": 124,
"signal": null,
"cmd": "timeout 5 python /app/process_solution.py /tmp/solver_planning_domains_tmp_4myYaB2oSdNQC/domain.pddl /tmp/solver_planning_domains_tmp_4myYaB2oSdNQC/problem.pddl /tmp/solver_planning_domains_tmp_4myYaB2oSdNQC/plan /tmp/solver_planning_domains_tmp_4myYaB2oSdNQC/log"
}
如何调试这个?当我的语法不正确时,错误消息更有帮助。我尝试可视化对象层次结构和问题定义,但找不到问题所在。 Torchlight 不能与 ADL 一起使用,其他分析工具似乎需要一个计划。是否缺少我应该使用的工具?
为了记录,这些是我的域和问题定义(基于 AIPS-1998 assembly and IPC 2011 grippers domains/problems):
(define (domain assembly-simple)
(:requirements :adl)
(:types assembly - object
robot - robot)
(:predicates (available ?x - object)
(complete ?a - assembly)
(incorporated ?part ?whole - assembly)
(part-of ?part ?whole - assembly)
(assemble-order ?part1 ?part2 ?whole - assembly)
(robot-carries-an-object ?r - robot)
(robot-carries-this-object ?r - robot ?o - object))
(:action pick
:parameters (?robot - robot ?part - object)
:precondition (and (available ?part)
(not (robot-carries-an-object ?robot)))
:effect (and (robot-carries-an-object ?robot)
(robot-carries-this-object ?robot ?part)
(not (available ?part))))
(:action assemble
:parameters (?robot - robot ?part ?whole - assembly)
:precondition (and (robot-carries-this-object ?robot ?part)
(part-of ?part ?whole)
(forall (?prev - assembly)
(imply (assemble-order ?prev ?part ?whole)
(incorporated ?prev ?whole))))
:effect (and
(not (robot-carries-this-object ?robot ?part))
(not (robot-carries-an-object ?robot))
(incorporated ?part ?whole)
(not (available ?part))
(when (not (exists (?p - assembly)
(and (part-of ?p ?whole)
(not (= ?p ?part))
(not (incorporated ?p ?whole)))))
(and (complete ?whole)
(available ?whole)))))
)
问题:
(define (problem simple-prob)
(:domain assembly-simple)
(:objects base-plate motor-plate sub-assembly - assembly
bot - robot)
(:init (not (robot-carries-an-object bot))
(available base-plate)
(available motor-plate)
(available sub-assembly)
(part-of base-plate sub-assembly)
(part-of motor-plate sub-assembly)
(assemble-order base-plate motor-plate sub-assembly))
(:goal (complete sub-assembly)))
提前感谢您的指点。
这里发生的错误实际上是由于解决方案的 post 处理,而不是规划器本身。该步骤需要更好的错误处理(我刚刚创建了问题here),但不幸的是我暂时没有时间处理这个问题。
如果非要我猜的话,我怀疑是 post 处理未处理的动作效果的复杂性。整个在线求解基础设施将在即将到来的 weeks/months 中进行全面检查,因此希望这个问题能够作为其中的一部分得到解决。
如果您想以不同的方式进行测试,那么我建议考虑 Docker 专门用于规划的工具:https://hub.docker.com/r/aiplanning/planutils
在那里,您应该可以 运行 downward
或 lama
并直接访问规划器。