无法找到机器人路径规划的解决方案

我刚开始学习PDDL。我需要找到一个解决方案,让机器人可以将不同的物体放置在不同的目标单元格中。我使用的是来自http://www.fast-downward.org/的软件。然而,问题在于我的动作无法按要求找到解决方案。限制条件是,即使机器人携带物体,同一房间内也不能有两个物体。附件:领域文件:

(define (domain gripper-strips)(:predicates (ROOM ?x) ;如果x是一个房间    (OBJECT ?x) ;如果x是一个物体    (HAND ?x) ;如果x是机器人的手    (FREE ?x) ;如果x是机器人的手且没有拿物体    (ROBOT-AT ?x) ;如果x是一个房间且机器人位于x    (OBJECT-AT ?x ?y) ;如果x是一个物体且y是一个房间且x位于y    (PATH ?x ?y) ;如果x和y都是房间且它们之间没有墙    (CARRY ?x) ;如果x是一个物体且机器人正在携带它)  (:action MoveWithoutObject   :parameters  (?room1 ?room2 ?hand)   :precondition (and  (ROOM ?room1) (ROOM ?room1) (HAND ?hand) (not(=?room1 ?room2))           (FREE ?hand) (ROBOT-AT ?room1) (PATH ?room1 ?room2))   :effect (and  (ROBOT-AT ?room2)         (not (ROBOT-AT ?room1)))) (:action MoveWithObject   :parameters  (?room1 ?room2 ?obj ?hand)   :precondition (and  (ROOM ?room1) (ROOM ?room2) (OBJECT ?obj) (HAND ?hand) (not(=?room1 ?room2))           (not (OBJECT-AT ?obj ?room1)) (not (OBJECT-AT ?obj ?room2))           (ROBOT-AT ?room1) (not(FREE ?hand))           (PATH ?room1 ?room2))   :effect (and  (ROBOT-AT ?room2)         (not (ROBOT-AT ?room1)))) (:action Pickup   :parameters (?obj ?room ?hand)   :precondition  (and  (OBJECT ?obj) (ROOM ?room) (HAND ?hand)            (OBJECT-AT ?obj ?room) (ROBOT-AT ?room) (FREE ?hand) (not(CARRY ?obj)))   :effect (and (CARRY ?obj) (not (OBJECT-AT ?obj ?room)) (not (FREE ?hand)))) (:action Release   :parameters  (?obj ?room ?hand)   :precondition  (and (OBJECT ?obj) (ROOM ?room) (HAND ?hand)            (not(OBJECT-AT ?obj ?room)) (ROBOT-AT ?room) (not(FREE ?hand)) (CARRY ?obj))   :effect (and (OBJECT-AT ?obj ?room)        (not(CARRY ?obj))        (FREE ?hand))))

以及问题文件:

(define (problem strips-gripper-x-8)(:domain gripper-strips)(:objects room1 room2 room3 room4 room5 room6 room7 room8 room9     object1 object2 object3         hand)  (:init (ROOM room1)(ROOM room2)(ROOM room3)(ROOM room4)(ROOM room5)(ROOM room6)(ROOM room7)(ROOM room8)(ROOM room9)  (OBJECT object1)(OBJECT objec21)(OBJECT object3)  (HAND hand)  (FREE hand)  (ROBOT-AT room1)  (OBJECT-AT object1 room6)(OBJECT-AT object2 room4)(OBJECT-AT object3 room7)  (PATH room1 room4)(PATH room4 room1)  (PATH room4 room5)(PATH room5 room4)  (PATH room5 room6)(PATH room6 room5)  (PATH room5 room8)(PATH room8 room5)  (PATH room6 room9)(PATH room9 room6)  (PATH room6 room3)(PATH room3 room6)  (PATH room3 room2)(PATH room2 room3)  (PATH room8 room7)(PATH room7 room8))  (:goal (and (OBJECT-AT object1 room7)(OBJECT-AT object2 room2)(OBJECT-AT object3 room9))))

回答:

你的方法看似正确,但你的文件中有一些拼写错误,阻碍了找到解决方案的可能性。

  1. problem.pddl:

    (OBJECT object1)(OBJECT objec21)(OBJECT object3)

    改为

    (OBJECT object1) (OBJECT object2) (OBJECT object3)
  2. domain.pddl: 修改

    (ROOM ?room1) (ROOM ?room1)

    在动作MoveWithoutObject中改为

    (ROOM ?room1) (ROOM ?room2)

编辑:

  1. 由于我最初不知道这种语言,所以第一次检查时没有注意到这一点,我以为对变量有全称量词。你还需要像这样修复MoveWithObject

    (:action MoveWithObject :parameters  (?room1 ?room2 ?obj1 ?obj2 ?obj3 ?hand) :precondition (and  (ROOM ?room1) (ROOM ?room2) (HAND ?hand) (not(=?room1 ?room2))   (OBJECT ?obj1) (OBJECT ?obj2) (OBJECT ?obj3)    (not (OBJECT-AT ?obj1 ?room1)) (not (OBJECT-AT ?obj1 ?room2))   (not (OBJECT-AT ?obj2 ?room1)) (not (OBJECT-AT ?obj2 ?room2))   (not (OBJECT-AT ?obj3 ?room1)) (not (OBJECT-AT ?obj3 ?room2))   (not (= ?obj1 ?obj2))   (not (= ?obj1 ?obj3))   (not (= ?obj2 ?obj3))   (ROBOT-AT ?room1) (not (FREE ?hand)) (PATH ?room1 ?room2))   :effect (and  (ROBOT-AT ?room2)         (not (ROBOT-AT ?room1))))

现在求解器找到了以下解决方案:

    找到解决方案!    实际搜索时间:2.23336s [t=4.41504s]    movewithoutobject room1 room4 hand (1)    movewithoutobject room4 room5 hand (1)    movewithoutobject room5 room6 hand (1)    pickup object1 room6 hand (1)    movewithobject room6 room3 object1 object2 object3 hand (1)    release object1 room3 hand (1)    movewithoutobject room3 room6 hand (1)    movewithoutobject room6 room5 hand (1)    movewithoutobject room5 room8 hand (1)    movewithoutobject room8 room7 hand (1)    pickup object3 room7 hand (1)    movewithobject room7 room8 object1 object2 object3 hand (1)    movewithobject room8 room5 object1 object2 object3 hand (1)    movewithobject room5 room6 object1 object2 object3 hand (1)    movewithobject room6 room9 object1 object2 object3 hand (1)    release object3 room9 hand (1)    movewithoutobject room9 room6 hand (1)    movewithoutobject room6 room3 hand (1)    pickup object1 room3 hand (1)    movewithobject room3 room6 object1 object2 object3 hand (1)    movewithobject room6 room5 object1 object2 object3 hand (1)    movewithobject room5 room8 object1 object2 object3 hand (1)    movewithobject room8 room7 object1 object2 object3 hand (1)    release object1 room7 hand (1)    movewithoutobject room7 room8 hand (1)    movewithoutobject room8 room5 hand (1)    movewithoutobject room5 room4 hand (1)    pickup object2 room4 hand (1)    movewithobject room4 room5 object1 object2 object3 hand (1)    movewithobject room5 room6 object1 object2 object3 hand (1)    movewithobject room6 room3 object1 object2 object3 hand (1)    movewithobject room3 room2 object1 object2 object3 hand (1)    release object2 room2 hand (1)    计划长度:33步。    计划成本:33

我使用以下策略找到了这个解决方案,其他策略可能会找到更长的路径:

 $ fast-downward.py --alias seq-opt-bjolp problem.pddl

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注