JSHOP2是一个HTN(hierarchy task network)规划器,是SHOP2(simple hierarchy ordered planner )的java实现版本。

SHOP2的官网链接:http://www.cs.umd.edu/projects/shop/description.html

但是这个链接上是没有JSHOP2的源代码的:)

JSHOP2源代码链接:https://github.com/mas-group/jshop2

SHOP(简单的分层有序计划器),JSHOP和SHOP2是与域无关的自动计划系统。它们基于有序任务分解,它是一种 分层任务网络(HTN)计划。

HTN规划中规划系统从初始的世界状况开始,其目标是创建执行一组任务的计划(需要完成的事情的抽象表示)。HTN计划是通过减少问题来完成的:计划者将任务递归地分解为子任务,并在到达可以由计划操作员直接执行的原始任务时停止。为了告诉计划者如何将非原始任务分解为子任务,它需要一组方法,其中每种方法都是一种架构,用于将特定类型的任务分解为一组子任务(前提是满足某些前提条件)。对于每个任务,可能有不止一种适用的方法,因此有不止一种将任务分解为子任务的方式。规划人员可能必须先尝试其中几种分解方法,然后才能找到可以在较低水平解决的分解方法。与经典规划不同,HTN规划是图灵完备的。

一个有序的任务分解规划师是一个HTN规划师表示,计划在相同的顺序,他们将执行的任务。通过消除有关世界的大量不确定性,这降低了推理的复杂性,从而可以轻松地将大量表达力纳入计划算法中。除了常用的HTN方法和运算符之外,我们的计划人员还可以使用公理,可以混合符号/数字条件,并且可以进行外部函数调用。

我们第一个使用有序任务分解的计划系统是特定域的,即,它们是针对特定应用程序域量身定制的。其中包括EDAPS(一个用于集成产品设计和制造计划的系统)和Bridge Baron(一个玩桥的计算机程序),该程序赢得了1997年的计算机桥世界冠军,并且是成功的商业产品。

我们的第一个与域无关的有序任务分解实现是SHOP(简单分层有序计划程序)。可以将SHOP及其后续产品(最新的是SHOP2和JSHOP2)配置为在许多不同的计划域中工作。

2002年国际规划竞赛中,SHOP2解决了竞赛中每个规划领域的问题,总共解决了近1000个规划问题。SHOP2获得了比赛前四名的奖项之一。

我们最近的计划者是JSHOP2,它是SHOP2的Java实现(用Lisp编写)。除了使用Java外,JSHOP2还使用一种新的计划程序编译技术从SHOP2域描述中综合了与域相关的计划程序。这样,JSHOP2可以进行各种优化来加快执行速度。

jshop2是java开发的,自己动手把它转换为C#版本,并做了好界面用到定义任务描述文件。

代码:

界面如下:

这个是代码生成的一些示例。

这界面用来定义问题文件

示例

JSHOP2的更多相关文章

  1. HTN规划 jshop2

    http://www.cs.umd.edu/projects/shop/description.html 在HTN规划,规划体系从世界的初始状态和创建一个计划来执行一系列任务的目的(需要做的事情,抽象 ...

随机推荐

  1. codeforces 557D Vitaly and Cycle

    题意简述 给定一个图 求至少添加多少条边使得它存在奇环 并求出添加的方案数 (注意不考虑自环) ---------------------------------------------------- ...

  2. linux主机hang住echo 0 > /proc/sys/kernel/hung_task_timeout_secs disables this message

    用dmesg显示如下图信息 问题原因: 默认情况下, Linux会最多使用40%的可用内存作为文件系统缓存.当超过这个阈值后,文件系统会把将缓存中的内存全部写入磁盘, 导致后续的IO请求都是同步的. ...

  3. Python做简单的字符串匹配详解

    Python做简单的字符串匹配详解 由于需要在半结构化的文本数据中提取一些特定格式的字段.数据辅助挖掘分析工作,以往都是使用Matlab工具进行结构化数据处理的建模,matlab擅长矩阵处理.结构化数 ...

  4. QTP read or write XML file

    'strNodePath = "/soapenv:Envelope/soapenv:Body/getProductsResponse/transaction/queryProducts/qu ...

  5. flink批处理中的source以及sink介绍

    一.flink在批处理中常见的source flink在批处理中常见的source主要有两大类: 1.基于本地集合的source(Collection-based-source) 2.基于文件的sou ...

  6. BZOJ 2122 [分块+单调栈+二分](有详解)

    题面 传送门 给定序列d和lim.假设有一个初始价值\(x_0\),则经历第i天后价值变为\(min(x_0+d[i],lim[i])\),记\(f(i,j,x_0)\)表示以初始代价x0依次经过第i ...

  7. Python字典(一)

    数据类型 数据类型划分:可变.不可变 不可变数据类型:元组.bool.int.str  [可哈希] 可变数据类型:list,dict,set [可哈希] 字典格式 dic1={ key(键值):val ...

  8. split slice splice的简单区别

    split slice splice的简单区别 split: 分割 //字符串方法 string.split let str = 'hello world'; //str.split('') 以什么东 ...

  9. elasticsearch painless脚本评分

    painless是一种新支持的脚本语言,语言格式和java十分类似.可以参考以下文档: painless语言介绍 painless api painless 实例 脚本参数 score_mode计算f ...

  10. vue 如何读取编译携带的参数

    vue 环境有很多套,我们需要根据不同环境设置不同的一些参数,如何不装任何依赖的情况下获取参数 下面是我制作官网,需要根据开发还是生产环境配置不同CDN,用vue-cli2+webpack,配置是再: ...