JSHOP2学习4:浅谈与SHOP2的区别
近期,笔者要求转换了一个资源调运的SHOP2代码为JSHOP2代码,转换过程中发现些许问题,二者的代码并不是完全兼容的,遂写此文记录。
毫无疑问,两种都是基于HTN的规划器,也是基于规划空间规划的规划器。SHOP2是采用LISP语言开发的,而JSHOP2是之后诞生的,是采用Java语言开发的。二者的出现相隔了几年,且开发的语言不同,故在使用上有些许区别。
官方指南《JSHOP2》附录中介绍了JSHOP2与SHOP2区别:
- 在SHOP2中,运算符(Operator)的前提条件可以省略,但在JSHOP2中是不允许的。
- 在变量命名的范围大小上,JSHOP2的命名范围较于SHOP2稍窄一些。这个笔者在转换SHOP2代码的时候未发现有啥bug。
- 诸如:task,:ordered和list等关键字不允许在JSHOP2中出现。当然,这些关键字在SHOP2中都有替代使用的方式,故这一操作并没一降低JSHOP2强大的领域知识描述能力。如:ordered关键字在缺省的时候默认为按顺序排列。
- 用于Debug的eval术语在JSHOP2中是不允许使用的。此外,SHOP2中只保留后向兼容性的结构(make-problem和make-domain)都在JSHOP2中不在出现。
- 在call术语的使用条件上,JSHOP2的解决了相关bug,使得call术语可以出现在任何我们期望出现的地方。
- 二者在first关键字上的表达形式有些许不一致。在JSHOP2中,表达形式为(:first L),其中L为逻辑表达式;在SHOP2中,表达形式为(:first L1 L2 … Ln),Li都是逻辑表达式。两种表达形式是等价的,但是前者更加直观。
- 任意的LISP表达语句可以出现在SHOP2的两个地方,赋值(assign)语句和运算符的成本(cost)计算中。而在JSHOP2中,任意的术语都可以夹杂着使用LISP表达。此外,在排序(sort)的前提条件语法中,LISP表达式被替换为用户定义或内置比较函数。这一段笔者可能理解有误,未经过验证。
- defproblem命令可以使用一种表达方式定义几种规划问题,这一语法在JSHOP2中是允许使用的,而在SHOP2中不允许。
在测试过程中,笔者还发现了几点区别:
- JSHOP2中Call术语可调用的内置函数个数较SHOP2中更少。具体来说,JSHOP2不能直接使用call调用max,min,floor等基本函数,得通过调用外部函数(自己用Java语言编写)来解决。
- JSHOP2在使用sort-by术语的时候,不可以出现‘#符号,而SHOP2中允许出现。
- JSHOP2较SHOP2更容易封装,这是因为Java语言比LISP语言更易封装决定的。
- 在环境配置的过程中,SHOP2更适合新手使用,而JSHOP2的配置过程有些许复杂。(URL)笔者使用LISP语言的编译器Allegro CL来运行SHOP2,仅需先编译SHOP2源文件,再一起编译domain和problem文件即可。
- SHOP2允许改变调试参数,如改变最大运行时间,设置生成的plan总成本要求小于某个值,是否输出最终Plan等,如:(find-plans 'problem :which :first :optimize-cost :plans :time-limit 5) ,而JSHOP2中出现这段虽然不报错,但貌似没有作用。
- 这一点算是JSHOP2的弊端。当我在运行大规模算例的时候,会导致自动生成的方法中的代码超过65535字节限制,程序出现错误。就必须得修改领域知识,分别进行求解。或者拆分算例分别进行求解。
小节
笔者在修改SHOP2源码到JSHOP2源码的过程中,编译器提示了一些的报错,于是查阅官方文指南,发现这些错误有的还挺麻烦的。比如需要自行写一下max,min等基本函数,使得JSHOP2中Call术语成功调用。其他错误只要跟着报错一步步来,就能够很便利地转换SHOP2代码至JSHOP2代码了。
JSHOP2学习4:浅谈与SHOP2的区别相关推荐
- css inport作用,浅谈css和@import区别及用法详解
下面小编就为大家带来一篇浅谈css和@import区别及用法.小编觉得挺不错的,现在就分享给大家,也给大家做个参考.一起跟随小编过来看看吧 css和@import都是调用外部样式表的方法. 一.用法 ...
- 浅谈Lua与C#区别
浅谈Lua 与 C# 区别 此文为本博主第一次小试牛刀,虽尽心尽力但难免有不足之处,各位客官多多海涵,话不多说,进入正题:lua与c#区别:1.数据类型:lua八大类型:(1)number 表示双精度 ...
- serverlet 区别_浅谈JSP serverlet的区别与联系
jsp是html包含java servlet是java包含html jsp请求到tomcat---tomcat封装了jsp到servlet实现. 所以jsp请求时候,会自动创建session 而不用在 ...
- [深度学习-原理]浅谈Attention Model
系列文章目录 深度学习NLP(一)之Attention Model; 深度学习NLP(二)之Self-attention, Muti-attention和Transformer; 深度学习NLP(三) ...
- [Linux学习笔记] 浅谈信号(文章含不少学习资源)
百金买骏马,千金买美人,万金买爵禄,何处买青春? 目录 信号的概念 信号的种类: kill -l 命令可以查看信号列表 man 7 signal 查看信号详细内容 信号的产生 补充知识 Core Du ...
- 学习笔记--浅谈LoRa与LoRaWAN
浅谈LoRa与LoRaWAN 1.什么是LoRa LoRa是semtech公司创建的低功耗局域网无线标准,低功耗一般很难覆盖远距离,远距离一般功耗高,要想马儿不吃草还要跑得远,好像难以办到. LoRa ...
- Linux学习路线浅谈
很多同学接触Linux不多,对Linux平台的开发更是一无所知.而现在的趋势越来越表明,作为一个优秀的软件开发人员,或计算机IT行业从业人员,掌握Linux是一种很重要的谋生资源与手段.下来我将会结合 ...
- 养成良好的学习习惯-浅谈学习方法(1)
1.老男孩教育要培训什么? 思想技术 知识 2.养成良好的学习习惯和听课习惯 1)带一支笔和本,记录老师讲解的内容 2 总结时 ,记录关键的信息,抓重点 3) 听课习惯:调动所有感官学习 眼睛看.勤 ...
- 菜鸟学习计划浅谈之Linux系统
人这一生都是在不断地学习,不断地进步中度过的,刚开始学习任何一门知识的时候,我们都习惯性的称自己为菜鸟,觉得自己对这方面的知识欠缺,水平很low,我也是如此.但我擅长总结,对于自己学习的新知识,总结学 ...
- 图神经网络学习一(浅谈embedding)
最近在做图神经网络(GNN)有关的项目,这个图就是数据结构里面的那个图.在学习的过程中接触到了embedding.由于我以前做的比较多的都是卷积神经网络,而embedding常用于自然语言处理(NLP ...
最新文章
- WIN10 右键 powershell 修改
- CentOS命令行界面与图形界面切换(图文详解)
- 阿里云人工智能ET夺肺结节诊断世界冠军
- Astyle 一键格式化项目代码
- jflash view log_塑胶产品上的“LOG”是怎么来的?
- 目标检测之空间变形网络(STN)
- 【小松教你手游开发】【unity实用技能】InvalidOperationException: ou
- 用c语言实现strncmp,strncat,memset, memcmp
- 写给大忙人看的java_《写给大忙人看的Java核心技术》读后感
- CentOS7.3上部署安装Oracle12c
- Java项目开发流程
- C语言文件加密解密软件
- 番茄时间管理法:一个番茄是如何让你工作更有效率的
- 简述Handler机制原理
- 快速创建ppt中的动画效果图。
- rdl报表 mysql_SSRS报表服务随笔(rdl报表服务)-报表参数
- 编程导师Ivor Horton新作《Java 7入门经典》即将出版
- storm windows 机制
- 用于持续医疗监测的无袖带血压估计算法【翻译】
- 数字加密和解密(Java)