近期,笔者要求转换了一个资源调运的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的区别相关推荐

  1. css inport作用,浅谈css和@import区别及用法详解

    下面小编就为大家带来一篇浅谈css和@import区别及用法.小编觉得挺不错的,现在就分享给大家,也给大家做个参考.一起跟随小编过来看看吧 css和@import都是调用外部样式表的方法. 一.用法 ...

  2. 浅谈Lua与C#区别

    浅谈Lua 与 C# 区别 此文为本博主第一次小试牛刀,虽尽心尽力但难免有不足之处,各位客官多多海涵,话不多说,进入正题:lua与c#区别:1.数据类型:lua八大类型:(1)number 表示双精度 ...

  3. serverlet 区别_浅谈JSP serverlet的区别与联系

    jsp是html包含java servlet是java包含html jsp请求到tomcat---tomcat封装了jsp到servlet实现. 所以jsp请求时候,会自动创建session 而不用在 ...

  4. [深度学习-原理]浅谈Attention Model

    系列文章目录 深度学习NLP(一)之Attention Model; 深度学习NLP(二)之Self-attention, Muti-attention和Transformer; 深度学习NLP(三) ...

  5. [Linux学习笔记] 浅谈信号(文章含不少学习资源)

    百金买骏马,千金买美人,万金买爵禄,何处买青春? 目录 信号的概念 信号的种类: kill -l 命令可以查看信号列表 man 7 signal 查看信号详细内容 信号的产生 补充知识 Core Du ...

  6. 学习笔记--浅谈LoRa与LoRaWAN

    浅谈LoRa与LoRaWAN 1.什么是LoRa LoRa是semtech公司创建的低功耗局域网无线标准,低功耗一般很难覆盖远距离,远距离一般功耗高,要想马儿不吃草还要跑得远,好像难以办到. LoRa ...

  7. Linux学习路线浅谈

    很多同学接触Linux不多,对Linux平台的开发更是一无所知.而现在的趋势越来越表明,作为一个优秀的软件开发人员,或计算机IT行业从业人员,掌握Linux是一种很重要的谋生资源与手段.下来我将会结合 ...

  8. 养成良好的学习习惯-浅谈学习方法(1)

    1.老男孩教育要培训什么? 思想技术 知识 2.养成良好的学习习惯和听课习惯 1)带一支笔和本,记录老师讲解的内容 2  总结时 ,记录关键的信息,抓重点 3) 听课习惯:调动所有感官学习 眼睛看.勤 ...

  9. 菜鸟学习计划浅谈之Linux系统

    人这一生都是在不断地学习,不断地进步中度过的,刚开始学习任何一门知识的时候,我们都习惯性的称自己为菜鸟,觉得自己对这方面的知识欠缺,水平很low,我也是如此.但我擅长总结,对于自己学习的新知识,总结学 ...

  10. 图神经网络学习一(浅谈embedding)

    最近在做图神经网络(GNN)有关的项目,这个图就是数据结构里面的那个图.在学习的过程中接触到了embedding.由于我以前做的比较多的都是卷积神经网络,而embedding常用于自然语言处理(NLP ...

最新文章

  1. WIN10 右键 powershell 修改
  2. CentOS命令行界面与图形界面切换(图文详解)
  3. 阿里云人工智能ET夺肺结节诊断世界冠军
  4. Astyle 一键格式化项目代码
  5. jflash view log_塑胶产品上的“LOG”是怎么来的?
  6. 目标检测之空间变形网络(STN)
  7. 【小松教你手游开发】【unity实用技能】InvalidOperationException: ou
  8. 用c语言实现strncmp,strncat,memset, memcmp
  9. 写给大忙人看的java_《写给大忙人看的Java核心技术》读后感
  10. CentOS7.3上部署安装Oracle12c
  11. Java项目开发流程
  12. C语言文件加密解密软件
  13. 番茄时间管理法:一个番茄是如何让你工作更有效率的
  14. 简述Handler机制原理
  15. 快速创建ppt中的动画效果图。
  16. rdl报表 mysql_SSRS报表服务随笔(rdl报表服务)-报表参数
  17. 编程导师Ivor Horton新作《Java 7入门经典》即将出版
  18. storm windows 机制
  19. 用于持续医疗监测的无袖带血压估计算法【翻译】
  20. 数字加密和解密(Java)

热门文章

  1. 郑州大学编译原理实验三算符优先分析算法JAVA
  2. Error: Cannot find module 'util-deprecate'
  3. Vue过滤器filter和filters的使用详解
  4. Ext Gwt 实用例子--类似meebo的聊天界面
  5. 微信小程序图书管理系统
  6. 算法岗实习面试经历(机器学习/强化学习岗实习生)
  7. php中file_get_contents与curl性能比较分析
  8. Window串口编程
  9. 肠道菌群失调与炎症性肠病的关联
  10. python竞赛猜名次_五人预测比赛结果均答对一半,求比赛名次