PDDL forall 语法
Posted
技术标签:
【中文标题】PDDL forall 语法【英文标题】:PDDL forall syntax 【发布时间】:2020-05-13 23:40:21 【问题描述】:我目前正在从事一个 pddl 项目,但我在语法方面遇到了一些困难。现在,我正试图用 forall 将一个楼层的所有工人填满电梯。我不确定这是否是正确的实现,但这是我的代码。提前谢谢!
(define (domain company)
(:requirements
:strips
:negative-preconditions
:equality
)
(:predicates
(worker ?x)
(floor ?x)
(elevator ?x)
(controller ?x)
(goes ?x )
(at ?x ?y)
(in ?x ?y)
(free ?x)
(call ?x ?y)
)
****
(:action insert_elevator
:parameters (?w ?el ?f)
:precondition (and (worker ?w) (floor ?f) (elevator ?el) (at ?w ?f) (at ?el ?f) (free ?el))
:effect (and(not (free ?el))(forall (?w)(in ?w ?el)))
)
****
)
(define (problem pb)
(:domain company)
(:objects floorg floor1 floor2
elevator1
elevator2
worker1 worker2
controller1)
(:init
(floor floorg)
(floor floor1)
(floor floor2)
(worker worker1)
(worker worker2)
(elevator elevator1)
(elevator elevator2)
(controller controller1)
(at elevator1 floor1)
(at elevator2 floor2)
(at worker1 floorg)
(at worker2 floorg)
(free elevator1)
(free elevator2)
)
(:goal
(and(at worker1 floor1)
(at worker2 floor2))
)
)
【问题讨论】:
【参考方案1】:所以显然你也发布了here...仍然有效的 cmets:
您可以使用editor.planning.domains 和保存的“会话”更好地共享您的代码。 (使用只读链接) 您确实应该为这样的域使用类型。insert_elevator
操作有点混乱:
forall
可能需要包含一个条件效果,表明“如果工人在地板上,那么他们就在电梯里”。
您不应在 forall
子句中使用与参数中相同的变量。
【讨论】:
我已经更改了 forall 变量。你可以在这里看到editor.planning.domains/#read_session=Zf2mJgrqse。但是我该如何设置条件效果呢?感谢您的回复! 确保范围正确...(forall parameters (when condition result) )
。请注意,when
子句完全在 forall
子句内。以上是关于PDDL forall 语法的主要内容,如果未能解决你的问题,请参考以下文章
为啥 `forall (a :: j) (b:: k)` 与 `forall (p :: (j,k))` 的工作方式不同?