【PDDL语法学习】 了解问题文件(Problem)第一篇:PDDL1.2

​原文地址:https://planning.wiki/ref/pddl/problem
推荐通过原文了解更多没有翻译到位的内容。​

简介

一个 problem 文件是规划问题的另外一部分。在这个领域中,我们需要定义具体问题的全局设置,比如我们可以执行哪些操作,以及我们所规划的世界中存在哪些类型的对象。
然后,通过准确定义对象的存在、它们的真实情况以及最终的目标是什么,这个问题巩固了这个表达式。一旦规划完成,我们希望世界处于什么样的状态。

先引入一个简单的例子:

(define
    (problem buildingahouse)
    (:domain construction)
    ;(:situation <situation_name>) ;deprecated
    (:objects
        s1 - site
        b - bricks
        w - windows
        c - cables
    )
    (:init
        (on-site b s1)
        (on-site c s1)
        (on-site w s1)
    )
    (:goal (and
            (walls-built ?s1)
            (cables-installed ?s1)
            (windows-fitted ?s1)
        )
    )
)

内容:

  • Problem Name
  • Domain
  • Situation
  • Objects
  • Init(Initial State)

Goal
1、Problem Name

(problem <name>)

每个问题都有一个名称,通常这是唯一的标识符。它允许使用可以扩展问题的 situation 关键字。然而,虽然这个名称通常包含在大多数问题中,但是利用情境来扩展问题并不常见。大多数问题名称都缺乏想象力,比如 prob1p1

(problem buildingahouse)

2、Domain

(:domain <domain_name>)

domain参数引用problem文件所关联的Domain文件。不过这个参数通常是多余的,因为大多数规划器直接从命令行获取领域和问题文件地址参数,并假设其中定义的领域对应于所提供的问题文件。不过不是一定的,建议指定域名防止异常为好。

(:domain construction)

3、Situation (少用)

(:situation <parent_problem_name>)

situation 参数从另一个问题文件继承 qualities 。在某些情况下,我们所有的问题都有一些共同的特性,我们可以将这些特性表示为 situation 文件的一部分。例如,我们所有的问题都有两个 site,一个贮藏库和一个建筑工地。因此,我们可以将其表示为一种情况的一部分,然后在问题文件中只表示特定问题特有的方面。

situation的使用并不常见,大多数问题文件甚至会在每个文件中定义公共元素。它在一些新型的规划器不支持,弃用。

(:situation generalbuildingproblem)

4、Objects

(:objects
    object_name_1 ... object_name_n - some_object_type
    ...
    object_name_1 ... object_name_n - some_object_type
)

对象块允许我们声明存在于我们的问题中的一组对象。每个对象名称必须是惟一的,并且应该类型化。如果没有类型化,则它们通常采用基类型 object 的属性(有关详细信息,请参阅 (Domain - Object Types)

(:objects
    s1 s2 s3 - site
    ba bb bc - bricks
    windowAlpha windowBeta windowCharlie - windows
    uierjiae faufhf uihrai - cables
)

请注意,虽然传统上我们只使用一个缩写后跟数字,但我们不需要这样做,甚至可以使用一些毫无用处的名称(如上所示,但是还是遵守下变量命名规范为好)。

(:objects
    s1 - site
    b - bricks
    w - windows
    c - cables
)

5、Init

(:init
    <predicate>
    ...
    <predicate>
)

初始状态(init)特别定义了在问题开始时哪些谓词为真。这不是一个逻辑表达式,因为它只是一个为真谓词列表。除非规划器或 domain 指定了其他方法,否则所有问题都应用了“ closed world”的假设,即任何未指定为真都被认为是假的。因此,我们只需要列出真实的东西

(:init
    (on-site b s1)
    (on-site c s1)
    (on-site w s1)
)

就我们的领域和问题而言,唯一True的事件是,我们需要构建的材料是 on-site。

6、Goal

(:goal logical_expression)

目标是谓词的逻辑表达式,为了将计划视为解决方案,必须满足这些谓词。本质上,这就是我们希望世界最终的样子。注意,作为逻辑表达式,如果这个表达式排除了某个谓词,那么该谓词的值就不重要。 这意味着一个目标不仅应该有为真的谓词组成,而且还应该有为假的谓词组成。

注意,所有标准逻辑操作符(如 or 和 forall )都是目标的一部分,这意味着我们可以表示多个不同的目标状态,所有这些状态都是可接受的

(:goal (and
        (walls-built ?s1)
        (cables-installed ?s1)
        (windows-fitted ?s1)
    )
)

通常,大多数目标只是连接和否定,因为在规划的最后只有一个理想的状态。

And(合取)

(and (predicate_1) ... (predicate_n))

And表示谓词的“并列”,表示所有值必须为真,才能求值为真。如。

(and (walls-built ?s) (windows-fitted ?s))

Or(析取)

(or (predicate_1) ... (predicate_n))

Or表示谓词的“或”,表示至少一个值必须为真,才能求值为真。如。

(or (windows-fitted ?s) (cables-installed ?s))

Imply(蕴含)

(imply (antecedent_predicate) (consequent_predicate))

Imply在前提谓词和结果谓词之间蕴含。当先行词为假,或先行词和结果为真时,就意味着计算为真。如

(imply (walls-built ?s) (foundations-set ?s))

Not(非)

(not (logical_expression/predicate_name))

Not否定谓词值或逻辑表达式。在前置条件下,它表示某个谓词值或逻辑表达式为假。在效果上,它将false赋给谓词值。

(not (material-used ?b))

Forall

(forall (argument) logical_expression)

forall接受一个参数,并表示某个逻辑表达式在参数值进入后依然为真。在本例中, domain 中的所有bricks对象都没有被使用

(forall (?b - bricks)
    (not (material-used ?b))
)

When

(forall (argument)
    when (inclusion_expression)
        logical expression
)

when扩展一个forall条件以指定包含条件。本质上是说, forall检查when中这些条件是否满足。如。

(forall (?c - bricks)
    when (on-site ?c ?s)
        (material-used ?c)
)

表示 forall 的bricks满足条件 on-site ?c ?s,它们还必须满足已经使用过的条件 material-used ?c

Exists

(exists (argument) logical_expression)

exists 表达的意思与 forall相同,除了不是表示给定类型的每个对象都满足一个逻辑表达式, 它表示至少有一个符合逻辑表达式就可以。

(exists
    (?c - bricks)
        (not (material-used ?c))
)

References

  • PDDL - The Planning Domain Definition Language, [Ghallab, M. Howe, A. Knoblock, C. McDermott, D. Ram, A. Veloso, M. Weld, D. Wilkins, D.]
  • OPTIC - Optimising Preferences and Time Dependent Costs

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值