【问题标题】:How to debug a PDDL domain/problem if the planner is timing out?如果规划器超时,如何调试 PDDL 域/问题?
【发布时间】:2020-07-09 15:13:23
【问题描述】:

我正在尝试编写一个简单的 PDDL 域和问题,但是 Planning.domains 上的规划器返回此错误:

{
  "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 和 IPC 2011 grippers 域/问题):

(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)))

提前感谢您的任何指点。

【问题讨论】:

    标签: planning pddl


    【解决方案1】:

    这里发生的错误实际上是由于解决方案的后处理,而不是规划器本身。该步骤需要更好的错误处理(我刚刚创建了问题here),但不幸的是,我暂时没有时间处理这个问题。

    如果我不得不猜测,我的怀疑是后处理未处理的动作效果的复杂性。整个在线解决方案基础设施将在未来几周/几个月内进行彻底检修,因此希望此问题将作为其中的一部分得到解决。

    如果您想以不同的方式进行测试,那么我建议您考虑专用于规划工具的 Docker:https://hub.docker.com/r/aiplanning/planutils

    在那里,您应该能够运行 downwardlama 并直接访问规划器。

    【讨论】:

    • 有道理,站点上的 Statespace 和 Dovetail 插件也会因服务器错误而失败。由于 planutils 描述中的第一行说“这还不行”,我还没有尝试过,但我会测试它。感谢您的工作,在线界面作为参考非常有用。
    • 好吧,使用 Dovetail 它只适用于较小的状态空间——过于详尽,无法解决较大的问题。也可能假设一个非常不复杂的表示(在动作前提条件和效果中)。 planutils 自述文件的重点是——开发正在进行中,自述文件中的内容是原始设计规范。其中一些现在确实有效,我会更新它。
    猜你喜欢
    • 2020-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-15
    • 2016-09-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多