精华内容
下载资源
问答
  • 带-提琴 使用创建人工智能规划程序的... 直接在网络浏览器中运行您最喜欢的 STRIPS PDDL 程序。 在尝试一下 如果您不熟悉 STRIPS 自动规划,这里有一个很棒的可以帮助您入门。 STRIPS-Fiddle 由 node.js 库提供支持。
  • PDDL4J库 1.联系方式 达米恩·佩里尔(Damien Pellier)( ) 2.说明 PDDL4J是LGPL许可下的开源库。 PDDL4J的目的是促进基于PDDL语言(规划域描述语言)的Java for自动规划工具的开发。 在相关文献中,自动计划和...
  • PDDLGym:PDDL→OpenAI体育馆 该库由和。 通讯: 和 。 纸 请参阅该描述了PDDLGym背后的设计决策和实现细节。 地位 我们支持PDDL1.2的以下子集: 带子 打字(包括分层) 量词(永远存在) 析取(或) 平等 常数...
  • PDDL

    2021-03-23 04:38:32
    Pddl 开始 #f03c15 注意:这项工作正在进行中,每周更新一次。 欢迎来到学习PDDL,一个简短的指南,开始使用PDDL。 本指南专为首次阅读的读者、需要复习的人以及像我这样的有时需要一些语法理智检查的其他人而...

    从 Pddl 开始
    #f03c15 注意:这项工作正在进行中,每周更新一次。

    欢迎来到学习PDDL,一个简短的指南,开始使用PDDL。

    本指南专为首次阅读的读者、需要复习的人以及像我这样的有时需要一些语法理智检查的其他人而设计。

    如果你在这里读到任何你认为需要改进的东西,请在GitHub上为它做贡献。

    介绍
    PDDL 是少数为创建人工智能 (AI) 规划标准而设计的语言之一。它于1998年开发,并在ICAPS推出,经过多年的改进和扩展[1]。

    目前最流行的PDDL是PDDL2.1,它是PDDL的扩展,用于表达时间域[2]:PDDL 3 [3]为 PDDL 2.1 增加了轨迹限制和偏好,PDDL+ +4 允许在 PDDL 中建模混合离散连续域。

    环境设置
    您可以使用您自己的文本编辑器,但我建议使用带有包控制的崇高文本。这样,您可以使用myPDDL 包,这将给你语法高光。

    PDDL 的组件
    在我们开始编写 PDDL 之前,我们需要了解如何在 PDDL 中模拟"世界"。

    一个世界是由一组国家描述的,每个国家都包含一个事实和/或对象列表。一个世界从初始状态开始,并受一组规则和约束的制约,这些规则和约束限制了每个状态中可以采取哪些行动,并且每个动作通常代表向不同状态的过渡。

    在"世界"中,有些事情我们需要跟踪。

    对象:我们感兴趣的世界的东西。
    谓词:我们感兴趣的事实(例如物体的属性),可以是真或假。
    初始状态:我们开始的世界状态,即一开始是真实的事物。
    目标规范:我们想结束的世界状态,即我们希望在最后成为真实事物。
    行动/操作者:改变世界状况的方法,即改变事实的事情。
    PDDL 语法
    首先你需要知道,PDDL文件通常有扩展。.pddl

    有两个PDDL文件,你需要学习的语法:

    域文件
    域名文件建立了世界的上下文。它决定了各州可以包括哪些细节(谓词),以及我们可以做些什么来在世界各州之间移动(行动)。

    域文件的基本语法是:

    (define (domain )
    (:predicates

    )

    (:action

    )
    )
    世界的名字在哪里?

    在下面的例子中,谓词和行动都将变得更加清晰。

    问题文件
    问题文件表示我们在该域中建立的世界的实例。它决定了计划开始时的真实情况(初始状态),以及我们希望在计划结束时的真实情况(目标状态)。

    问题文件的基本语法是:

    (define (problem )<br/> (:domain )<br/> (:objects<br/> <br/> )

    (:init
    	<predicates>
    )
    (:goal 
    	<predicates>
    )
    


    问题文件的标题在哪里,并指相应的域名文件的名称。

    简单的例子:让我们吃!
    Gripper

    试想一下,我们有一个机器人抓手手臂,一个纸杯蛋糕和一个盘子。夹板是空的,纸杯蛋糕在桌子上,我们想把纸杯蛋糕放在盘子里。

    在我们在 PDDL 中建模之前,让我们来看看 PDDL 问题的组件:

    首先,我们定义域。

    (define (domain letseat)
    然后,我们定义对象:盘子,抓手,纸杯蛋糕。我们还将将纸杯蛋糕和手臂标记为可游荡的,一个小黑客,以帮助我们使用我们稍后将创建的谓词查询这些对象的位置。

    (:requirements :typing)

    (:types
    location locatable - object
    bot cupcake - locatable
    robot - bot
    )
    我们还需要定义一些谓词。握把臂是空的吗?纸杯蛋糕在哪里?

    (:predicates
    (on ?obj - locatable ?loc - location)
    (holding ?arm - locatable ?cupcake - locatable)
    (arm-empty)
    (path ?location1 - location ?location2 - location)
    )
    We’ll also have to define actions/operators. We need to be able to pick up and drop the cupcake, as well as move the arm between the table and the plate.

    (:action pick-up
    :parameters
    (?arm - bot
    ?cupcake - locatable
    ?loc - location)
    :precondition
    (and
    ; Note how we use the same variable loc
    ; in both lines below. This is to make
    ; sure it’s looking at the same location.
    (on ?arm ?loc)
    (on ?cupcake ?loc)
    (arm-empty)
    )
    :effect
    (and
    (not (on ?cupcake ?loc))
    (holding ?arm ?cupcake)
    (not (arm-empty))
    )
    )

    (:action drop
    :parameters
    (?arm - bot
    ?cupcake - locatable
    ?loc - location)
    :precondition
    (and
    (on ?arm ?loc)
    (holding ?arm ?cupcake)
    )
    :effect
    (and
    (on ?cupcake ?loc)
    (arm-empty)
    (not (holding ?arm ?cupcake))
    )
    )

    (:action move
    :parameters
    (?arm - bot
    ?from - location
    ?to - location)
    :precondition
    (and
    (on ?arm ?from)
    (path ?from ?to)
    )
    :effect
    (and
    (not (on ?arm ?from))
    (on ?arm ?to)
    )
    )
    把以上所有内容放入一个文件,你有一个域名文件!

    现在,我们将查看问题文件。我们将首先让它知道它与哪个域关联,并定义世界上存在的对象。

    (define (problem letseat-simple)
    (:domain letseat)
    (:objects
    arm - robot
    cupcake - cupcake
    table - location
    plate - location
    )
    然后,我们将定义初始状态:抓手是空的,蛋糕在桌子上,手臂可以在两者之间移动。

    (:init
    (on arm table)
    (on cupcake table)
    (arm-empty)
    (path table plate)
    )
    最后,我们定义了目标规格:盘子里的纸杯蛋糕。

    (:goal
    (on cupcake plate)
    )
    把这一切放在一起,你会有问题的文件!

    如果您使用OPTIC运行此方案,您将获得此解决方案:

    Initial heuristic = 3
    Initial stats: t=0s, 4299060kb
    b (2 @ n=3, t=0s, 4300084kb)b (1 @ n=6, t=0s, 4308276kb)
    ;;;; Solution Found
    ; Time 0.00
    ; Peak memory 4308276kb
    ; Nodes Generated: 5
    ; Nodes Expanded: 3
    ; Nodes Evaluated: 6
    ; Nodes Tunneled: 1
    ; Nodes memoised with open actions: 0
    ; Nodes memoised without open actions: 6
    ; Nodes pruned by memoisation: 0
    0: (pick-up arm cupcake table) [1]
    1: (move arm table plate) [1]
    2: (drop arm cupcake plate) [1]
    练习:
    下面是一些任务,使其更加复杂,并加强您的理解。

    在桌子上添加第二个纸杯蛋糕,并将其添加到目标规格中,以确保它也放在盘子里。
    在域中添加独角兽对象,使独角兽吃蛋糕的目标。独角兽只能吃纸杯蛋糕,如果它在盘子里。
    不太简单的示例
    如果你想检查出一些更复杂的东西,看看驱动程序的域名。

    过去的基础知识
    如果您是第一个定时器,请在完全了解基本知识之前不要冒险进入此部分。

    持久行动
    实际上,您可以在时间域中提供操作持续时间。

    每个条件和效果都给出了它应该发生的时间。

    有几种类型的时间限制:

    (at start (<condition/effect>)),这意味着这必须是真实的或发生在行动的开始。 ,这意味着这必须是真实的或发生在行动的结尾。(at end (<condition/effect>))(over all ())

    下面是我们上一个示例转化为持久动作的操作示例。(move)

    (:durative-action move
    :duration (= ?duration 10) ; Duration goes here.
    :parameters
    (?arm - bot
    ?from - location
    ?to - location)
    :condition ; Note how this is “condition” not “pre-condition”
    (and
    (at start (on ?arm ?from))
    (over all (path ?from ?to))
    )
    :effect
    (and
    (at start (not (on ?arm ?from)))
    (at end (on ?arm ?to))
    )
    )
    功能
    Tbc

    流程与事件
    Tbc

    贡献
    票价阿拉布德(作者)
    安德鲁·科尔斯博士(编辑)
    如果您想被列为贡献者,请提出拉取请求。

    引用
    [1] PDDL 的维基百科页面

    [2] 福克斯, M. 和朗, D. (2003).PDDL2.1:用于表达时间规划域的PDDL扩展。[在线]提供于:http://www.jair.org/papers/paper1129.html[2017年11月20日访问]。

    [3] 格列维尼, A. 和长, D. (2005) 计划限制和偏好在 PDDL3.第27卷,第235-297页。[在线]http://www.cs.yale.edu/homes/dvm/papers/pddl-ipc5.pdf提供

    [4] 福克斯,M.和朗,D.(2006)建模混合离散连续域规划。第27卷,第235-297页。[在线]http://www.jair.org/papers/paper2044.html提供

    展开全文
  • 在 Python 中具有类似 PDDL 的问题规范的 STRIPS 规划器 作者:加里·多兰 ( ) 安装 PyDDL 可以使用pip安装: pip install -e git+https://github.com/garydoranjr/pyddl.git#egg=pyddl 或通过运行安装脚本: ...
  • 该系列文章主要介绍PDDL人工智能知识,规划领域定义语言,是一种解决人工智能规划问题的比较前沿的方法。PDDL常用于解决智能规划问题,例如机器人将一个屋子的球搬运到另一间屋子里,通过合理的组织流程建造一间房子...

    该系列文章主要介绍PDDL人工智能知识,由于自己也是初学者,所以欢迎大家批评指正,也希望文章对您有所帮助,一起加油喔~

    一.PDDL简介

    PDDL:Planning Domain Definition Language
    规划领域定义语言,是一种解决人工智能规划问题的比较前沿的方法。PDDL常用于解决智能规划问题,例如机器人将一个屋子的球搬运到另一间屋子里,通过合理的组织流程建造一间房子等。PDDL的规划任务(planning task)由五部分组成。

    • Objects(对象)
      Things in the world that interest us.
    • Predicates(谓词)
      Properties of objects that we are interested in; can be true or false.
    • Initial state(初始状态)
      The state of the world that we start in.
    • Goal specification(目标规范)
      Things that we want to be true.
    • Actions/Operators(操作/运算符)
      Ways of changing the state of the world.

    PDDL指定的规划任务分为两个文件,domain 文件和 problem 文件。

    1. A domain file(域文件) for predicates and actions.
    2. A problem file(问题文件) for objects, initial state and goal specification.

    在这里插入图片描述

    Domain Files
    域文件定义如下:

    在这里插入图片描述

    (define (domain <domain name>)
    	<PDDL code for predicates>
    	<PDDL code for first action>
    	[...]
    	<PDDL code for last action>
    )
    
    • <域名>:domain name,是标识规划域的字符串,例如gripper,后续gripper.pddl会详细介绍。

    Problem Files
    问题文件定义如下:

    在这里插入图片描述

    (define (problem <problem name>)
    	(:domain <domain name>)
    	<PDDL code for objects>
    	<PDDL code for initial state>
    	<PDDL code for goal specification>
    )
    
    • <问题名称>:problem name,是一个标识计划任务的字符串,例如gripper-four-balls。
    • <域名>:domain name,必须与对应域名文件中的域名匹配,详见gripper-four.pddl文件。

    推荐下列参考资料:


    二.VSCode安装教程

    第一步,在VSCode中安装PDDL插件。

    • 点击扩展按钮
    • 搜索PDDL
    • 点击安装“Install”按钮即可

    在这里插入图片描述

    安装成功后如下图所示:

    在这里插入图片描述

    第二步,在VSCode中安装VAL语法检查。

    在这里插入图片描述

    在VS Code安装PDDL成功后,打开PDDL Overview进行安装VAL。

    • View -> Command Palette -> PDDL: show overview page

    在这里插入图片描述

    安装过程如下图所示,对应“VAL tools”点击“Download”。

    在这里插入图片描述

    第三步,安装成功之后,可以看到详细的配置信息如下:

    • planning engine(在线规划引擎)
      Planning service: http://solver.planning.domains/solve
    • PDDL parser(PDDL解析器)
      c:\Users\xxx\AppData\Roaming\Code\User\globalStorage\jan-dolejsi.pddl\val\Val-20210215.2-win64\bin\Parser.exe
    • Plan Validator(规划验证器)
      c:\Users\xxx\AppData\Roaming\Code\User\globalStorage\jan-dolejsi.pddl\val\Val-20210215.2-win64\bin\Validate.exe

    在这里插入图片描述

    此时,我们可以进入后续的PDDL代码编写过程。同时,存在部分在线访问的问题,后续尝试解决。

    VSCode PDDL
    VSCode是建模规划域的良好工具,其扩展将PDDL引入了一流的编程语言家族中,让其与C#、Python、JavaScript等处于同等级别。PDDL旨在通过以下功能帮助新手并为专家赋能。

    • 规划领域建模
      planning domain modeling
    • 通过回归或可扩展性测试用例的数量规划域验证
      planning domain validation by number of regression or scalability test cases
    • 通过从模板生成问题文件来规划工业化解决方案
      planning solution industrializing by problem file generation from templates
    • 计划验证
      plan validation

    当扩展在 .pddl 文件(通常包含域或问题定义)或选定的PDDL命令被激活时,即可配置解释器(parser)或规划器(planner)。


    三.PDDL基础案例快速入门

    1.Getting started

    创建PDDL文件并运行计划程序,下面是官方最简单的入门步骤:

    • (1) 点击 File > Open Folder 打开VS Code中一个空白文件夹。
    • (2) 点击 File > New File 创建两个名为 domain.pddlquestion.pddl 的空白文件,这两个文件将显示在资源管理器窗格中,在编辑器中并排打开它们。
    • (3) 打开 domain.pddl 文件并输入 domain。自动模板会插入域文件的整个结构,使用 Tab 和 Enter 键跳过占位符并进行选择。
    • (4) 打开 problem.pddl 文件并输入 problem 。自动模板会插入问题文件的整个结构,确保此处的(域名)与域文件中选择的名称匹配。
    • (5) 当提示安装 VAL(验证器 Validator)工具时,请按照说明进行操作。这将为您带来一个PDDL解析器和计划验证实用程序。
    • (6) 当准备在域和问题文件上运行规划器时,可以通过文件内容或编辑器选项卡的上下文菜单,或通过Alt + P快捷方式调用规划器(planner)。这个 planning.domains 解析器也将被使用,因此不要发送任何敏感的PDDL代码。
    • (7) 按照说明配置您自己的 PDDL 规划器。

    在这里插入图片描述

    同时补充一个在线编辑PDD的网站。

    在这里插入图片描述


    2.创建文件

    第一步,点击 File > Open Folder 打开VS Code中一个空白文件夹。

    在这里插入图片描述

    第二步,点击 File > New File 创建两个名为 domain.pddlquestion.pddl 的空白文件,这两个文件将显示在资源管理器窗格中,在编辑器中并排打开它们。

    在这里插入图片描述

    第三步,打开 domain.pddl 文件并输入 domain。自动模板会插入域文件的整个结构,使用 Tab 和 Enter 键跳过占位符并进行选择。

    在这里插入图片描述

    第四步,打开 problem.pddl 文件并输入 problem 。自动模板会插入问题文件的整个结构,确保此处的(域名)与域文件中选择的名称匹配。

    在这里插入图片描述

    在这里插入图片描述

    此时的代码如下所示,仅仅是一个PDDL规划问题的框架基础代码。

    domain.pddl

    ;Header and description
    
    (define (domain domain_name)
    
    ;remove requirements that are not needed
    (:requirements :strips :fluents :durative-actions :timed-initial-literals :typing :conditional-effects :negative-preconditions :duration-inequalities :equality)
    
    (:types ;todo: enumerate types and their hierarchy here, e.g. car truck bus - vehicle
    )
    
    ; un-comment following line if constants are needed
    ;(:constants )
    
    (:predicates ;todo: define predicates here
    )
    
    (:functions ;todo: define numeric functions here
    )
    
    ;define actions here
    )
    

    problem.pddl

    (define (problem problem_name) (:domain domain_name)
    (:objects 
    )
    
    (:init
        ;todo: put the initial state's facts and numeric values here
    )
    
    (:goal (and
        ;todo: put the goal condition here
    ))
    
    ;un-comment the following line if metric is needed
    ;(:metric minimize (???))
    )
    

    3.调用在线规划器

    由于作者不太会安装VAL工具(学习中),所以先介绍在线运行的过程。

    当准备在域和问题文件上运行规划器时,可以通过文件内容或编辑器选项卡的上下文菜单,或通过 Alt + P 快捷方式调用规划器(planner)。这个 planning.domains 解析器将将被使用,因此不要发送任何敏感的PDDL代码。

    第一步,编写一个 domain 示例代码。

    • predicates:谓词定义
    • action:动作包括pick、move和drop

    domain.pddl

    (define (domain gripper-strips)
        (:predicates (room ?r)
                    (ball ?b)
                    (at ?b ?r)
                    (at-robby ?r)
                    (gripper ?g)
                    (free ?g)
                    (carry ?b ?g))
        (:action pick
            :parameters(?obj ?room ?gripper)
            :precondition 
                (and 
                    (ball ?obj) 
                    (room ?room) 
                    (gripper ?gripper)
                    (free ?gripper) 
                    (at ?obj ?room) 
                    (at-robby ?room)
                )
            :effect 
                (and 
                    (not 
                        (free ?gripper)
                    ) 
                    (carry ?obj ?gripper) 
                    (not (at ?obj ?room))
                )
            )
        (:action move
            :parameters (?from ?to)
            :precondition 
                (and 
                    (room ?from) 
                    (room ?to) 
                    (at-robby ?from)
                )
            :effect 
                (and 
                    (at-robby ?to)
                    (not 
                        (at-robby ?from)
                    )
                )
        )
        (:action drop
            :parameters (?room ?ball ?gripper)
            :precondition
                (and 
                    (room ?room) 
                    (ball ?ball) 
                    (at-robby ?room) 
                    (gripper ?gripper)
                    (not 
                        (free ?gripper)
                    ) 
                    (carry ?ball ?gripper)
                    (at-robby ?room))
            :effect 
                (and 
                    (free ?gripper) 
                    (at ?ball ?room) 
                    (not
                        (carry ?ball ?gripper)
                    )
                )
            )
    )
    

    第二步,编写一个 problem 示例代码。

    • objects:两个房间,两个球,左右移动
    • init:初始化

    question.pddl

    (define (problem solve)
        (:domain gripper-strips)
        (:objects 
            rooma roomb ball1 ball2 left right
        )
        (:init 
            (room rooma)
            (room roomb) 
            (ball ball1) 
            (ball ball2)
            (gripper left) 
            (gripper right) 
            (free left) 
            (free right)
            (at ball1 rooma) 
            (at ball2 rooma) 
            (at-robby rooma)
        )
        (:goal 
            (and
                (at ball1 roomb)
                (at ball2 roomb)
            )
        )
    )
    

    第三步,如果右键选中直接运行或按 alt+P 运行planner,它会提示错误。

    在这里插入图片描述

    在这里插入图片描述

    第四步,点击如下图所示的“Test”按钮并创建。

    在这里插入图片描述

    生成如下图所示的测试树状图,并且准备调用远程的 planning.domains 服务器

    • Planning service: http://solver.planning.domains/solve
    • Domain: gripper-strips, Problem: solve

    在这里插入图片描述

    第五步,点击“domain”右边的三角运行按钮,生成如下图所示的测试报告。注意,右边的“Planner output”是一个规划路径的输出方案。

    在这里插入图片描述

    同时,我们可以双栏打开窗口。

    在这里插入图片描述

    在这里插入图片描述

    注意,其实我们直接在Explorer中选中PDDL文件,右键“PDDL: Run the planner and display the plan”按钮可以生成运行的规划结果。不需要创建Test,如下图所示,但仍然会进行远程连接。

    在这里插入图片描述

    至此,我们线上运行PDDL规划器的方法介绍完毕。该代码具体的含义及基础语法我们将在第四部分详细介绍。

    Finished executing tests from VSCode/PDDL-test01/domain.ptest.json.
    Planning service: http://solver.planning.domains/solve
    Domain: gripper-strips, Problem: solve
     --- OK.
     Match tree built with 18 nodes.
    
    PDDL problem description loaded: 
    	Domain: GRIPPER-STRIPS
    	Problem: SOLVE
    	#Actions: 18
    	#Fluents: 14
    Landmarks found: 2
    Starting search with IW (time budget is 60 secs)...
    rel_plan size: 5
    #RP_fluents 7
    Caption
    {#goals, #UNnachieved,  #Achieved} -> IW(max_w)
    
    {2/2/0}:IW(1) -> [2][3][4]rel_plan size: 4
    #RP_fluents 6
    {2/1/1}:IW(1) -> [2][3][4][5][6][7];; NOT I-REACHABLE ;;
    Total time: -8.64267e-10
    Nodes generated during search: 42
    Nodes expanded during search: 35
    IW search completed
    Starting search with BFS(novel,land,h_add)...
    --[4294967295 / 8]--
    --[1 / 8]--
    --[1 / 6]--
    --[1 / 5]--
    --[1 / 4]--
    --[1 / 2]--
    --[1 / 1]--
    --[1 / 0]--
    --[0 / 0]--
    Total time: -1.51992e-09
    Nodes generated during search: 22
    Nodes expanded during search: 7
    Plan found with cost: 7
    BFS search completed
    0.00100: (pick ball2 rooma left)
    0.00200: (move rooma roomb)
    0.00300: (drop roomb ball2 left)
    0.00400: (move roomb rooma)
    0.00500: (pick ball1 rooma left)
    0.00600: (move rooma roomb)
    0.00700: (drop roomb ball1 left)
    ☑ question.pddl (1.176 sec)
    Planner found 1 plan(s) in 1.177secs.
    

    补充知识点
    在VS Code中,如果PDDL存在错误或警告,我们是可以动态修复的,比如上述代码存在 “Undeclared requirement :negative-preconditions” 问题。

    在这里插入图片描述
    点击则可以进行修复,“Add missing requirement: negative preconditions”。

    在这里插入图片描述
    修改后如下图所示。
    在这里插入图片描述


    4.本地规划器配置

    上述方法非常依赖网络,因此官方不建议将私有代码上传运行。如果断网情况下,它会提示错误“Error: PDDL Planning Service returned code 400 Invalid header received from client”。

    在这里插入图片描述

    此时,我们需要尝试配置您自己的 PDDL 规划器,并在本地能运行代码。

    在这里插入图片描述

    作者尝试本地配置规划器一直失败,希望了解的读者能评论分享下,谢谢。

    第一步,点击“Show configuration”,接着会显示PDDL Overview页面,显示“AI Planning and PDDL support in VS Code”。

    在这里插入图片描述

    该页面显示的配置信息如下:

    • planning engine(在线规划引擎)
      Planning service: http://solver.planning.domains/solve
    • PDDL parser(PDDL解析器)
      c:\Users\xxx\AppData\Roaming\Code\User\globalStorage\jan-dolejsi.pddl\val\Val-20210215.2-win64\bin\Parser.exe
    • Plan Validator(规划验证器)
      c:\Users\xxx\AppData\Roaming\Code\User\globalStorage\jan-dolejsi.pddl\val\Val-20210215.2-win64\bin\Validate.exe

    在这里插入图片描述

    第二步,点击“Add a PDDL Planner”按钮,添加规划引擎。

    在这里插入图片描述

    选择POPF选项,选择对应的popf.exe程序(未找到)。

    在这里插入图片描述

    第三步,继续点击“Planning engine”后面的加号,添加本地请求的网址。

    • http://localhost:8080/request

    在这里插入图片描述

    最后还是失败,o(╥﹏╥)o,知道的大佬救救孩子吧!

    在这里插入图片描述


    四.PDDL基础语法知识

    四个球移动的任务(Gripper task with four balls):假设有一个机器人可以在两个房间之间移动,并用两条手臂中的任何一条捡起或扔掉球。 最初,所有球和机器人都在第一个房间,我们希望移动球到第二个房间中。

    • 对象: 两个房间、四个球和两个机械臂。
      Objects:The two rooms, four balls and two robot arms.
    • 谓词:x是一个房间? x是球? 球x在房间y内?机械臂x是空的吗?
      Predicates:Is x a room? Is x a ball? Is ball x inside room y? Is robot arm x empty? […]
    • 初始状态:所有球和机器人都在第一个房间, 所有机器人手臂都是空的。
      Initial state:All balls and the robot are in the first room. All robot arms are empty. […]
    • 目标说明:所有球必须在第二个房间。
      Goal specification:All balls must be in the second room.
    • 动作/操作:机器人可以在房间之间移动、捡球或丢球。
      Actions/Operators:The robot can move between rooms, pick up a ball or drop a ball.

    接下来简单给出基本定义,由于其英语直译非常明确,这里仅给出描述,下一篇文章再进行详细的语法介绍。

    Gripper task: Objects

    在这里插入图片描述

    Gripper task: Predicates

    在这里插入图片描述

    Gripper task: Initial state

    • 初始状态四个球都在房间rooma中

    在这里插入图片描述

    Gripper task: Goal specification

    • 目标:将四个球移动到roomb中

    在这里插入图片描述

    Gripper task: Movement operator

    • 移动操作:机器人从x移动到y

    在这里插入图片描述

    Gripper task: Pick-up operator

    • pick-up操作:机器人使用z从y中捡起x

    在这里插入图片描述

    Gripper task: Drop operator

    • drop操作:机器人使用z从y中丢掉x

    在这里插入图片描述

    A Note on Action Effects

    在这里插入图片描述


    五.总结

    写到这里,本文就介绍完毕,希望对您有所帮助。

    • 一.PDDL简介
    • 二.VSCode安装教程
    • 三.PDDL基础案例快速入门
      1.Getting started
      2.创建文件
      3.调用在线规划器
      4.本地规划器配置
    • 四.PDDL基础语法知识
    • 五.总结

    大学之道在明明德,
    在亲民,在止于至善。
    这周又回答了很多博友的问题,有大一学生的困惑,有论文的咨询,也有老乡和考博的疑问,还有无数博友奋斗路上的相互勉励。虽然自己早已忙成狗,但总忍不住去解答别人的问题。最后那一句感谢和祝福,永远是我最大的满足。虽然会花费我一些时间,但也挺好的,无所谓了,跟着心走。不负遇见,感恩同行。莫愁前路无知己,继续加油。晚安娜和珞。

    在这里插入图片描述


    参考文献:

    展开全文
  • navigation_experiments_mc_bts_pddl_base 该教程旨在使MROS生态系统充分发挥作用,以执行实验,以行为控制和行为树和PDDL对具有元控件的导航任务进行编程。 目录 安装MROS生态系统 MROS是在Ubuntu20.04和ROS2 Foxy...
  • PDDL语言语法

    2018-05-02 14:37:26
    关于人工智能领域PDDL的语法说明,包含domain和problem的定义以及其中模块的说明
  • SMTPlan + 通过编译到SMT进行PDDL +规划 项目网站上的完整描述: : SMTPlan目录中的安装和用户说明: : 内容 SMTPlan:SMTPlan +的源代码 基准:PDDL2.1和PDDL +基准域和问题
  • pddl thrift AccessServer

    2018-01-23 08:54:53
    p distributed database framework AccessServer is the wrapper
  • 语法2pddl 将语法转换为PDDL,运行计划程序以生成多个计划,将计划转换为可训练的规则管道并将其训练在数据集上的代码。
  • PDDL基准实例 涉及国际计划竞赛的PDDL实例 概述 该存储库以一致的结构包含PDDL基准实例。 当前,该存储库涵盖了国际规划竞赛(IPC)的基准实例。 格式 对于每个IPC域,都有一个顶级自述文件,其中包含对该域的非...
  • 河内塔问题是以下形式的谜题:给我们三个杆,以及一组可以滑到任何杆上的不同大小的圆盘。 谜题以圆锥形堆叠的圆盘开始,这取决于它们在一根杆上的大小升序。 目标是将整个磁盘堆移动到另一个棒上,遵守以下规则: ...
  • PDDL、Planner、Planning的友好学习指南,定期更新!!!

    此文章我会根据自身经验对有兴趣学习PDDL的同学做出一定的简单介绍与相关工具推荐,并且会一直对此博文进行更新。(2021/12/02)

    一、简介

    PDDL发展多年,目前已经有PDDL1.0最初的Strips版本发展到如今PDDL3.1加强时态版。当我们打算开始学习PDDL的时候一定要清楚的知道自己所要解决的问题应使用何种PDDL版本进行求解,如果涉及到时态问题,那就是PDDL2.1、PDDL2.2、PDDL3 +的范围。但是一定要注意,有时候一个规划器虽写明支持相应PDDL版本语法,但是它可能只是支持部分语法,我个人尝试经验中就发现PDDL3的语法是90%(保守)以上的规划器都不支持的,所以如果需要PDDL3的语法进行问题求解请慎重考虑自己的想法,或许可以换条路走。

    总结:推荐使用经典的PDDL2.1语法进行问题规划。

    二、基础学习资料介绍:

    第一步: 基本语法的学习

    首先我们需要了解基本的PDDL语法,清楚其可以以何种形式去定义求解问题后,我们才能继续进行学习,所以这里推荐通过半天或一天的时间速阅过所有PDDL版本以及其语法点后再进行下一步的学习。

    有一定基础的可以看这下MOOC视频,增加对问题求解的认知。

    第二步:通过大量代码案例来进一步加强语法了解

    我们可以通过往届规划器比赛所使用案例进行学习,其中案例可以在Vscode插件所提供的planning.domains中进行本地请求加载或是去国际规划器比赛的代码库直接找Demo。

    International Planner Competition (国际规划器比赛)

    1、使用VScode本地运行
    搜索"PDDL"安装此插件,同时进入插件配置安装语法检查器

    2、使用线上editer运行: 线上规划器官网地址/
    在Vscode默认的“alt+p”调用规划器就是调用的这个网站的api地址: http://solver.planning.domains/

    !!!注意:线上规划器默认是不支持时态规划语法的,需通过加载相应插件才能解析。

    第三步:选择自己的规划器

    如果你不清楚你所需要的PDDL语法,请返回前面查看相应条目进行基础学习,明确版本。

    具体自己的问题后再选择合适的规划器

    !!!事先说明:大部分规划器编译环境都较为古早,如Ubuntu14、Ubuntu16等,如下载后遇到编译问题,可以尝试更换系统版本或gcc、g++、cmake等软件版本进行调试。

    1、Temporal Related (时态相关)

    2、STRIP | ADL Related (无时态要求)

    • JavaFF: https://github.com/dpattiso/javaff
      基于FF的java版本,需自行编译打包

    • Metric FF: https://fai.cs.uni-saarland.de/hoffmann/metric-ff.html
      基于FF写的Metric版本,可以说Metric很强,不仅支持ADL,同时扩充了Numeric Fluents的支持(比如在action的前提中加入数值的判定),不过虽然NF是PDDL2.1的语法,但是Metric-FF版本没有加入Durative-action的求解,所以推荐无时态要求的同学进行使用。

    3. 容器封装

    • Planutils: https://github.com/AI-Planning/planutils (2020新鲜出炉)
      1、可通过docker直接部署调用planutils,多个规划器任你选用。(Docker里面也是安装singularity进行规划器调用的)
      2、Python安装,https://pypi.org/project/planutils/
      大家也可以自己使用singularity容器对规划器进行快速调用:singularity安装地址,其中支持singularity部署的规划器可以在IPC2018找到(比赛要求使用singularity封装)

    通过以上三步我相信大家会对PDDL有了一个基本了解,剩下的就是不断完善自己的问题定义,并结合所选规划器的性能、设计、语法支持去进行这样一个求解问题的学习,如有任何问题都可以私信询问或是邮箱联系,由于时间安排,消息不一定能够及时回复也请谅解。

    展开全文
  • 多模式货物路由域 PDDL 生成器 多模式货运路线 (MMCR) 域 PDDL 生成器是一个 Java 程序,它允许使用图形用户界面 (GUI) 在 MMCR 域内创建规划问题。 MMCR 域描述了一个涉及无向无环图 G 的问题。该图包含一组节点或...
  • PDDL的requirements整理

    2019-10-28 15:27:06
    PDDL中Requirements是非常重要的,一般我们可以从不同版本的PDDL的all Requirements中获取到当前版本PDDL所支持的语法,同时在requirements中添加参数可以判断所使用规划器是否支持某项语法(也可以直接看规划器所...

    PDDL中Requirements是非常重要的,一般我们可以从不同版本的PDDL的all Requirements中获取到当前版本PDDL所支持的语法,同时在requirements中添加参数可以判断所使用规划器是否支持某项语法(也可以直接看规划器所对应的论文中提到的requirements入手),可以说requirements是学习每个版本PDDL不可缺少的一步。

    (上图为PDDL2.2的requirements)

    下面是我整理的从PDDL到PDDL3.0所有的requirements以及其简单介绍

    Requirements

     

    Examples

     

    :STRIPS

    (:requirements :strips)

    允许使用STRIPS中指定的基本添加和删除效果。

    Add:

    :effect (walls-built ?s)

    Delete:

    :effect (not (walls-built ?s))

     

    :TYPING

    (:requirements :typing)

    允许使用对象键入。键入类似于面向对象编程中的类和子类

    (:types

        site material - object

        bricks cables windows - material

    )

    :Preferences

    (:requirements :preferences)

    允许在问题定义(软目标)中使用偏好。

     

     

     

    :Constraints

    (:requirements :constraints)

    允许在域定义中使用约束(必须在每个 state中满足的目标)

    (:constraints

        (and

        (forall (?l - lorry ?loc - location) (at-most-once (at ?l ?      loc)))

    )

    )

    :Numeric Fluents

    (:requirements :numeric-fluents)

    允许包含:function表示域中数字变量的块。

    (:functions

        (battery-amount ?r - rover)

    )

     

    :Durative Actions

    (:requirements :durative-actions)

    允许durative-action在域定义中使用。持续行动是指具有完成持续时间的行动。

    (:durative-action move

        :parameters (<arguments>)

        :duration (= ?duration 5)

        :condition (logical_expression)

        :effect (logical_expression)

    )

    :Durative Inequalities

    (:requirements :durative-inequalities)

    允许使用不等式来表示持续时间。我们可以表达一个动作具有使用不等式的持续时间范围,而不是表达动作具有固定的时间长度。

     

    :continuous Effects

    (:requirements :continuous-effects)

    允许在持续行动中对数字使用连续效果。由于持续性操作需要一段时间,因此我们可以将数值中的更改建模为时间函数。实际上支持这种不稳定。线性函数对于规划者来说相对容易,但非线性效应仍然是研究领域。

     

     

     

    :Negative Preconditions

    (:requirements :negative-preconditions)

    允许not在前提条件下使用。一些规划者模仿行动的方式意味着他们无法处理负前提条件。对于每个谓词来说,这是一个严重的设计缺陷,这更加带来不便,因为它们是一个对立的谓词,当它是假的时候是真的。即rover-charged并且rover-not-charged是相互排斥的。在负前提条件不支持的情况下,我们可以引入第二个谓词,它表示我们想要表达负前提条件的谓词的否定。

     

     

     

    :derived Predicates

    (:requirements :derived-predicates)

    允许在域中使用派生谓词

    (:derived (train-usable ?t

        (and

        (train-has-guard ?t

        (train-has-driver ?t

        )

    )

    :Timed Initial Literals

    (:requirements :timed-initial-literals)

    允许在定义问题时使用Timed Initial Literals

    (at 10 (train-not-in-use t1))

    :Disjunctive Preconditions

    (:requirements :disjunctive-preconditions)

    允许使用or目标和前提条件

    (or

        (walls-built ?s)

        (windows-fitted ?s)

    )

    :Equality

    (:requirements :equality)

    (not (= ?s1 ?s2))

    :Existential Preconditions

    (:requirements :existential-preconditions)

    (exists (?c - crane)

        (crane-is-free ?c)

    )

    :Universal Preconditions

    (:requirements :universal-preconditions)

    (forall (?c - crane)

        (crane-is-free ?c)

    )

    :Quantified Preconditions

    (:requirements :quantified-preconditions)

    相当于

    (:requirements :existential-preconditions :universal-preconditions)

     

     

     

     

    :Conditional Effects

    (:requirements :conditional-effects)

    允许使用when表达动作效果。基本上说如果某些事情是真的,那么也应用这个效果。

    (when

        ;Antecedent

        (and (has-hot-chocolate ?p ?c) (has-marshmallows ?c))

        ;Consequence

        (and (person-is-happy ?p))

    )

     

    :Action Expansions

    (:requirements :action-expansions)

    允许使用动作扩展。这允许定义变体条件和动作的效果。从本质上讲,我们可以定义一个MOVE动作来描述一个人的运动,但包括不同的扩展来描述飞机,火车,汽车或步行的运动。 这已经变得多余,因为我们只是表达多个动作,如MOVE-BY-PLANE和MOVE-BY-TRAIN。

     

     

    :Foreach Expansions

    (:requirements :foreach-expansions)

    允许使用foreach动作扩展,基本上允许在一种对象或所有对象中应用效果。该要求意味着要求的存在,:action-expansions因此等同于(:requirements :action-expansions :foreach-expansions)

     

     

     

    :DAG Expansions

    (:requirements :dag-expansions)

    允许标记Action Expansions中描述的扩展,以便您可以区分计划程序选择的子操作。例如,如果我们定义了一个move使用不同传输模式的动作,我们可能想要确切地知道标记使用了什么模式。该要求意味着要求的存在,:action-expansions因此等同于(:requirements :action-expansions :dag-expansions)

     

    :Domain Axioms

    (:requirements :domain-axioms)

    允许使用公理。公理本质上是其他谓词隐含的谓词。

    参阅PDDL 1.2域参考中的公理部分

     

    :subgoals through Axioms

    (:requirements :subgoals-through-axioms)

     

     

    :Safety Constraints

    (:requirements :safety-constraints)

     

    :expression Evaluation

    (:requirements :expression-evaluation)

     

    :Fluents

    (:requirements :fluents)

     

     

     

    :Open World

    (:requirements :open-world)

    在计划中,假定所有未知值都是假的。也就是说,如果我们不知道谓词的值,那么我们认为它是假的。这被称为“封闭世界”假设。这个要求改变了计划者做出“开放世界”的假设。也就是说,未知的值不一定是错误的。这在现代规划者中很少得到支持,并且通常是计划执行中的标志,而不是域中的要求。

     

    :True Negation

    (:requirements :true-negation)

     

    :ADL

    (:requirements :adl)

     

    :UCPOP

    (:requirements :ucpop)

     

    请注意并不是每个requirements规划器都需要支持的,不同规划器“特长”不同及其支持的语法也各有不同。

    更为详细或具体的requirements可以去planning.wiki中查看。

    展开全文
  • 一个PDDL简单教程

    千次阅读 2020-05-07 22:36:05
    ##首先介绍一下pddl结构: 我的理解是,这是一个strips的模型实现语言 pddl➡️planner➡️plan 对于strips来说,包含的元素有p(predicates),f(fluents/facts),I(only one initial state),g(a set of goal...
  • PDDL语法学习-Domain篇-5

    2019-08-05 21:56:09
    PDDL以前的所有安装一样,PDDL 3.0引入了新的要求。它还引入了定义约束的语法。约束是目标的一种形式,必须在计划的所有状态中得到满足。 另外,虽然约束可能会给状态空间增加更多的复杂性,但通常它允许我们通过...
  • PDDL语法学习-Domain篇-2

    2019-04-29 22:15:40
    PDDL+为PDDL中的域引入了两种新的结构,一种是过程,另一种是 Events,本质上可以分别看作是不可控制的持续行为( uncontrollable durative actions)和不可控制的瞬时行为( uncontrollable instantaneous actions ...
  • PDDL语法学习-Problem篇-1

    千次阅读 2019-08-05 21:56:48
    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 ...
  • PDDL-plan-validator-源码

    2021-03-11 03:28:22
    PDDL计划验证器 Java PDDL解析器/验证器 Compilação Com Gradle 您可以根据自己的喜好来编写程序,也可以根据需要对程序进行补充。 'gradle build'-编译Java脚本。 “渐进式运行”-执行一个有趣的demonstraçã...
  • ACUMOS PDDL Action Planner组件的文档。 费利克斯·英格兰(FélixIngrand)< > 这个项目包含一个ACUMOS分量,充当GRPC服务器,能够拨打电话PDDL行动策划者( ff , fd , popf和optic现在)。 这更多地是关于...
  • PDDL 使用

    千次阅读 2019-01-09 10:42:31
    1 下载 Fast-Downward-a8d82c9506b5.zip 2 安装cmake ..../fast-downward.py domain.pddl problem.pddl --search "astar(lmcut())" (define (problem solve) (:domain gripper-strips) ...
  • 文章目录classical planningDomain-Independence Automated Planning=GPSplan validation什么是planplan的最优解和次优解planner的更新换代transition systemsSTRIPSSAS+PDDLPDDL2.1 Hierachy(5 levels)PDDL2.2...
  • 针对单个智能(AI)规划器在解决Web服务组合问题时通用性不高以及性能受问题搜索空间影响较大的情况,基于本体描述语言(OWL-S)和规划描述语言(PDDL)结构上有极大的相似性,提出了一种将Web服务转化为PDDL描述的...
  • PDDL规划器使用 (2020)

    千次阅读 2020-05-25 12:04:10
    关于PDDL规划器选择,一般要看你要处理的问题,如果你是刚入门刚接触(解决Strips等问题,ADL和时态的另说) 一、快速安装上手说明: 1、使用VScode配合第三方插件 (1)插件安装: 搜索PDDL安装,同时进入插件配置...
  • 最近楼主了解到pddl语言能做问题的描述、求解规划,想请教这方面的大佬是否有关于pddl语言的资料。还有编写好domain、problem文件后的规划器(或者是叫做pddl语言的编译器吧)哪些比较通用、易安装。看到很多论文里...
  • PDDL规划器使用

    千次阅读 2019-08-05 22:23:00
    关于PDDL规划器选择,一般要看你要处理的问题,如果你是刚入门刚接触(解决Strips等问题,ADL和时态的另说) 使用VScode配合第三方插件 加上 1、VAL语法检查https://github.com/KCL-Planning/VAL,在vscode...
  • PDDL语法学习-Domain篇-1

    千次阅读 2019-04-29 22:11:11
    PDDL 1.2中的域文件定义了问题的“通用(universal)”方面。本质上,这些方面是不会改变的,不管我们试图解决什么特定的情况。在PDDL 1.2中,这主要是模型中可能存在的对象类型、谓词和操作。 先引入一个简单的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 849
精华内容 339
关键字:

pddl

友情链接: vlan.rar