1 JSHOP2背景

JSHOP2规划器是最著名的 HTN 规划器之一,它是 SHOP2规划器的 java 实现的版本。二者具有相同的 HTN 规划算法。JSHOP2 是一个 HTN 规划的修改版本,它基于有序任务分解,并且也是一个领域无关的智能规划器,这意味着规划任务也会按照相同的顺序执行。

相比其他 HTN 规划器 JSHOP2 具有以下恃点:
(1)JSHOP2 规划原理是从系统初始状态开始采用前向搜索的方式进行规划,规划过程中的每个节点都知道当前的系统状态
(2)JSHOP2 是与领域无关的规划器,即可以使用其语法对具体的问题建模求解,从而解决不同领域的问题。
(3)JSHOP2 知识表示能力强大。它从 PDDL 中吸收了很多的知识描述语法特点,在方法(method)和操作(operator)的前提条件描述中支持与或非等逻辑描述、函数计算、以及调用外部函数,并且容易扩展。
(4)采用了 unordered 关键字,利用这个关键字可以使 JSHOP2 完成不固定顺序的多任务规划。

为了求解一个实际的规划问题,必须提前给出关于这个规划问题的特定规划域描述 domain 即对规划问题进行建模,包括设定目标任务、规划的中间层次任务、合适的分解方法(method)以及原子任务等。 JSHOP2 为了扩展更多的功能支持使用 call 来调用函数,除了其内置加减乘除等函数,也可以根据需求进行补充修改,增加需要的函数,使其可以解决更多的问题。

2 JSHOP2语法

JSHOP2的语法与PDDL有许多共同之处,其基本语法如下:

2.1 变量符号(Variable Symbol)

变量符号是以问号开头的字符串:?x 、?y、?hello-there等等。变量符号通常可以作为方法(method)的头部(head)、操作(operator)的头部(head)以及描述状态的参数。

2.2 原子任务(Primitive Task)

原子任务是名称以感叹号开头的任何字符串(例如!unstack 或!putdown)。原子任务是可直接执行的任务,在描述时通常作为 operator 的头部。

2.3 常量符号,谓词符号,复合任务符号

这三者的描述为名称以字母或下划线开头的任何符号。其中复合任务(Compound Task)指非原子任务,可分解为一系列的复合任务和原子任务。复合任务可以是推理过程的中间层次任务,也可以是作为规划输入的目标任务。它将由相应的 method 分解成相应的子任务集合。

2.4 逻辑表达式(Logical Expressions)

指逻辑原子或以下任何复杂表达式:连词(and),析取(or),否定(not),含义(imply),通用量化(forall),赋值(assign)以及调用表达式(call)。

2.5 公理(Axioms)

(:⁣−a[name1]L1[name2]L2...[namen]Ln)(:\!-\ a [name_1] L_1\ [name_2] L_2 ... [name_n] L_n) (:− a[name1​]L1​ [name2​]L2​...[namen​]Ln​)

公理的头部是逻辑原子 aaa,其尾部是:[name1]L1[name2]L2……[namen]Ln[name_1] L_1\ [name_2] L_2\ …… [name_n] L_n[name1​]L1​ [name2​]L2​ ……[namen​]Ln​,LiL_iLi​ 为逻辑前提,namei 为其名字(可以省略)。该公理的意思是,如果 L1L_1L1​为真;或L1L_1L1​为假但L2L_2L2​为真;……;或者L1,L2……Ln−1L_1, L_2 …… L_{n-1}L1​,L2​……Ln−1​为假,但LnL_nLn​为真,则aaa为真。

2.6 操作(Operators)

(:operatorheadPreDelAdd)(:operator\ head\ Pre\ Del\ Add) (:operator head Pre Del Add)

其中 head(运算符的头部)是一个原子任务;Pre(运算符的前置条件)为逻辑前提条件;Del 为操作的删除列表;Add 为操作的增加列表。

2.7 方法(Methods)

(:methodh[name1]L1T1[name2]L2T2...[namen]LnTn)(:method\ h [name_1]\ L_1\ T_1\ [name_2] L_2\ T_2 ... [name_n] L_n\ T_n) (:method h[name1​] L1​ T1​ [name2​]L2​ T2​...[namen​]Ln​ Tn​)

hhh(方法的头部)是复合普通任务;LiL_iLi​为该方法的前提条件;TiT_iTi​是一个任务列表; nameiname_inamei​是后续(LiTiL_i\ T_iLi​ Ti​)对的名称(可以省略)。 JSHOP2 主要的 HTN 形式化描述如下: 方法表明方法头部中指定的任务可以是通过在满足尾部前提条件时执行方法尾部之一中的所有任务来执行。分解方法更多依靠的是领域经验知识,应针对具体问题来确定。该部分的设定也将影响规划效率。

2.8 规划域(Planning Domain)

规划域的形式:
(de⁣fdomaindomain⁣−⁣name(d1d2...dn))(de\!fdomain \ domain\!-\!name(d_1\ d_2 ... \ d_n)) (defdomain domain−name(d1​ d2​... dn​))其中 domain-name 是符号,每个项djd_jdj​是以下之一:操作(operator),方法(method)或公理(axioms)。规划域是规划器对规划问题进行求解的依据,与规划问题(problem)共同作为规划器的输入。规划域是对问题求解的核心所在,在 HTN 规划中它的设计尤其是 method 的设计很可能会影响到规划的效率,所以有必要根据具体问题去将其转化为合适的规划域。

2.9 规划问题(Planning Problem)

规划问题的形式:
(de⁣fproblemproblem⁣−⁣namedomain⁣−⁣name([a1,1a1,2...a1,n])T1...([am,1am,2...am,n])Tm)(de\!fproblem\ problem\!-\!name\ domain\!-\!name ([a_{1,1}\ a_{1,2} . . . a_{1,n}])\ T_1 ... ([a_{m,1} a_{m,2} . . . a_{m,n}])\ T_m) (defproblem problem−name domain−name([a1,1​ a1,2​...a1,n​]) T1​...([am,1​am,2​...am,n​]) Tm​)其中 problem-name 和 domain-name 是符号,每个 ai,ja_{i,j}ai,j​是一个逻辑原子,每个TiT_iTi​是一个任务列表。这种形式定义了域 domain-name 中的 m 个规划问题,每个 domain-name 都可以通过用原子 ai,1a_{i,1}ai,1​ 到 ai,na_{i,n}ai,n​ 定义的初始状态来解决 TiT_iTi​ 中的任务来解决。规划域和规划问题构成了 JSHOP2 的输入,应根据实际问题来完成二者的设计。


3 应用例子

JSHOP2资源包里面有算例,下面会先从简单的例子(JSHOP2\examples\basic)开始解释。
创建的规划域如下:
定义规划问题如下:基于规划域basic(上面那个文件),初始状态是have(kiwi)为TRUE,have(banjo)为FALSE,需要操作一个复合普通任务swap(banjo,kiwi)。
看到这里大家应该基本明白了使用方式,这个简单的规划问题的解也是显而易见的,调用JSHOP2求解(见上一篇博客《JSHOP2的环境配置——详细教程(原创)》),求解结果如下:

上述的Plan #1 表示找到一种规划方案(有兴趣的小伙伴可以看看test案例,其中的解为多种规划方案),Plan cost表示该计划的费用。


这个算例明显太简单了,想必大家还没有玩够。作为一个优秀的物流人才,之后我会和大家分享的案例为Logistics案例,并给出自己对这个案例的一些思考和变形,帮助大家更好的熟悉JSHOP2规划器。

4 参考文献

吴迪. 基于HTN规划技术在航天器上的应用研究[D]. 2019.

Documentation for JSHOP2 Okhtay Ilghami, Department of Computer Science, University of Maryland, College Park, MD 20742, USA

PDDL - The Planning Domain Definition Language, [Ghallab, M. Howe, A. Knoblock, C. McDermott, D. Ram, A. Veloso, M. Weld, D. Wilkins, D.]

JSHOP2学习3:基础语法(上)相关推荐

  1. java基本语法心得_Java学习笔记(一)——基础语法(上)

    Java学习笔记(一)--基础语法(上) 软件构造 写在前面 编写Java程序时,应注意以下几点:大小写敏感:Java是大小写敏感的,这就意味着标识符Hello与hello是不同的. 类名:对于所有的 ...

  2. idea编译的文件怎么用cmd打开_JAVA学习册|基础语法|cmd输出HelloWorld

    看到这个标题,估计已经有小伙伴知识本文要讲什么了,好,下面我们就开始正文 学java最开始的地方 很多老师的书和视频中,在安装完jdk,配置好环境变量,都会带大家用记事本写一个HelloWorld,然 ...

  3. python基础语法及知识总结-Python 学习完基础语法知识后,如何进一步提高?

    ---4.30更新---感谢大家支持,点赞都破两千了.给大家整理出来新的资料,需要的小伙伴来自取: Python练手项目视频如下: Python自学基础知识如下: 以下为原文内容: Python 学习 ...

  4. python学习三-基础语法

    python学习三-基础语法(2019-12-24日晚) 1.源码文件 Python源码文件名通常采用小写的方式,常见的扩展名有: py:基本的源码扩展名. pyw:是另一种源码扩展名,跟py唯一的区 ...

  5. 【python零基础入门学习】Python入门,带你快速学习Python 基础语法

    ython 语言与 Perl,C 和 Java 等语言有许多相似之处.但是,也存在一些差异. 在本章中我们将来学习 Python 的基础语法,让你快速学会 Python 编程. 第一个 Python ...

  6. 【Drools二】打工人学习Drools基础语法

    目录 0.项目搭建 1. 规则文件 1.1 构成 1.2规则体 2.基础语法 2.1 注释 2.2 Pattern模式匹配 2.3比较操作符 2.3.1 实践 2.3执行指定规则 3.Drools内置 ...

  7. 从零开始的iOS开发:00 | Swift基础语法(上)

    目录 一.开发环境 二.关于Swift (一)Swift简介 (二)Swift特性 (三)结语 三.Swift基础语法 (一)编程准备 (二)Hello,world! (三)简单值 1.变量与常量 2 ...

  8. 0基础学习Python基础语法(0)-print()与变量

    文章目录 Python[人工智能]时代的立身武器 print 无引号 单引号的用法 双引号的用法 三引号的用法 转义字符 变量和赋值 变量的命名规范 下关预告 Demo 例子:打印 例子:转义字符 要 ...

  9. MySQL学习之基础语法详解

    这篇记录一下MySQL的基础语法 DDL数据定义语言 主要是针对数据库,表,列的操作,即创建,查询,修改,删除 查询所有数据库 show databases; 创建数据库 create databas ...

  10. python语法基础学习-Python基础语法精心总结!看完都知道的可以往下继续学习了...

    原标题:Python基础语法精心总结!看完都知道的可以往下继续学习了 这应该是最详细的Python入门基础语法总结! 定义变量,使用变量 1. input 用户自己输入值 2. print 打印值 可 ...

最新文章

  1. NPM酷库:dateformat 时间字符串格式化
  2. undertow服务器分析_使用undertow构建和测试Websocket服务器
  3. 随机生成六位不重复数值
  4. [KMP]一本通(http://ybt.ssoier.cn:8088) 1698:字符串匹配
  5. BZOJ2017[USACO 2009 Nov Silver 1.A Coin Game]——DP+博弈论
  6. Flutter 之 StatefulWidget和StatelessWidget
  7. 算法思想——贪心(详细举例理解~)
  8. WORD里的背景水印为什么怎么也删除不了呢?
  9. dao层如何调用对象_如何实现DBCP数据库连接池工具类&mvc分层开发web流程操作?...
  10. 安装sql server2008R2
  11. 知了课堂项目初始化数据库 进行数据迁移
  12. 全面了解浏览器(内核)发展史
  13. 求职数据分析师岗位,简历应该如何写?|工科生三个月成功转行数据分析心得浅谈
  14. 对一个浮点数保留两位小数
  15. 小猪短租陈驰:共享经济不是简单的资本游戏
  16. 七彩背景(Background)
  17. 春节了,上张祝福图片,顺祝大家新年好运,工作顺利!
  18. mycat读写分离与主从切换
  19. 图像分类——猫狗大战问题
  20. 【Windows】ping ip+端口

热门文章

  1. [bilibili] B站屏蔽“柳学家”弹幕 正则表达式
  2. Error response from daemon: removal of container XXX is already in progress
  3. win10系统安装和优化
  4. 二十一世纪大学英语读写教程(第三册)学习笔记(原文)——10 - Plain Talk About Handling Stress(浅谈如何缓解压力)
  5. Redis入门总结(三):redis实现分布式锁的正确姿势
  6. 变量、函数、类等编程时常用英文命名和缩写
  7. IDEA控制台设置查找快捷键
  8. Android Sprd省电管理(四)自启动和关联启动管理
  9. 企业微信——定时群机器人布置
  10. 苹果公司为什么储备那么多现金?