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代码了。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

双层蟹黄堡

如果有帮助,请我喝杯咖啡吧55

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值