作业调度算法代码_混合算法(GA+TS)求解作业车间调度问题代码解读+完整JAVA代码...

5b80f025c8f22853fa800fdd0c580b52.png

程序猿声

代码黑科技的分享区

e7a16dac65a01620e991d0aa81f7c7f0.gif   4daa9a421d649f7b2a060a6735ad5548.png

前两篇文章中,我们介绍了FJSP问题,并梳理了一遍HA算法。这一篇文章对小编实现的(很乱很烂的)代码进行简单解读。

往期回顾:

种群进化+邻域搜索的混合算法(GA+TS)求解作业车间调度问题(JSP)-算法介绍

混合算法(GA+TS)求解作业车间调度问题(JSP)-禁忌搜索部分

代码下载请关注公众号,后台回复【FJSPHA】即可,不包括【】

代码框架

a0f5abedcf99809b411c088a90cd3a25.png

代码分为5个包,第一部分Data为用到的各类结构,第二部分GA为GA部分+第一个TS,第三部分主函数,第四、五部分是两个TS。

算例放置在input文件夹中,这里准备了Mk系列算例,Kacem系列算例和论文中的简单算例test.txt。

Main

算例输入:

31010dc1b5a1799bc9f0bd77a5876814.png

Main中还有一个输出为CSV的函数,需要一个jar包,已经放在下载链接里了,不需要的同学也可以删除。

63acaa62812aff0af820f35a2e1c8a85.png

Data

一堆乱七八糟的结构。这里简单讲一下Solution类和Graph类。

Solution类中包含多个print函数,比较重要的包括绘制甘特图以及check解是否合法。

07971ee792e039a3560e80e807b35e83.png

operationMatrix是解的主题,存放某个工件的某道工序的开始、结束时间,所在加工机器。

dc0bba9cb68cf78560d009ab65a75f29.png

Graph类表示析取图。nodeList是每台机器上的node。其中起始点、终止点我单独提取出来设置了两个类。Graph中还包含了获取critical path的DFS和update starting time & end time的Bellman算法。

c8e93f933ad9048a5987da2801bedf9c.png

GA

MyHybridAlgorithm类是GA的主函数。小编在实现的时候进行了多种测试,比如迭代的noImprove次数达到limit时进行扰动:

dede914ddb2cdc8ff3c196ed50d4ed1c.png

选择哪种Tabu:

62f612caf2abaa20092d068a56ced617.png

读者在阅读的时候请自己注意。

算法相关的参数我都做了初始化,请自行查找修改:

3ed667b30e59e4aa02f74ddb720bd317.png

交叉、变异等操作包含在ChromosomeOperation类中,计算适应度的函数在CaculateFitness类中,TabuSearch1类是基于编码的tabu,这里都不多展示了。

NeighbourSearch

这个包包含的是基于析取图的tabu。NeighbourAlgorithms类相当于Main,包含解转化为图的函数:

ce2e431aeeae4f9fabde810e116a9265.png

TabuSearch2类为tabu主函数。NeighbourGraph类存放析取图邻域搜索产生的解。

DeleteNeighbourGraph类为析取图中暂时去掉某个点后的情况,PM、PJ、SM、SJ代表precede、succeed、machine、job四条边对应的点,deleteNode为删去的点。

48d62e9bed7eea4fd525fabc27166e7b.png

其中还有findLandR位置的二分查找函数,insert时的估值函数:

e2cd2afa8ecf4d8d49e01cb3f70199e2.png

6c7a5af6bb702bbc417a78a59ea5fa37.png

NeighbourSearch2

这个包为第三个基于甘特图的tabu。

RTS类为tabu的主函数。解通过:ArrayList> 的形式表示。

replan函数中包含了在甘特图上进行swap操作后更新解的方法,有详细注释:

6c08842f6dfe7f9746c6cf23b16ff29e.png

总结

到这里已经大致梳理了一遍代码,但其中还有很多细节没有讲到,包括很多东西实现的不好,欢迎随时和我交流。

由于是自己研究时写的代码,其中很多东西会比较乱,但是代码中做了很多注解,仔细阅读应该能看得懂的!

下载的压缩包里包括我学习过程中看过的大部分文献,包括主要参考的文献,大家可以进一步阅读研究。

参考

[1]Li, Xinyu , and L. Gao . "An effective hybrid genetic algorithm and tabu search for flexible job shop scheduling problem." International Journal of Production Economics 174.Apr.(2016):93-110. [2]Zhang, Chao Yong , P. G. Li , and Y. R. Zailin Guan . "A tabu search algorithm with a new neighborhood structure for the job shop scheduling problem." Computers & Operations Research 34.11(2007):3229-3242. [3]Mastrolilli, Monaldo , and L. M. Gambardella . "Effective Neighbourhood Functions for the Flexible Job Shop Problem." Journal of Scheduling 3.1(2015):3-20. [4]Zhang, Guohui , L. Gao , and Y. Shi . "An effective genetic algorithm for the flexible job-shop scheduling problem." Expert Systems with Applications 38.4(2011):3563-3573.

推荐阅读:

干货 | 想学习优化算法,不知从何学起?

干货 | 运筹学从何学起?如何快速入门运筹学算法?

干货 | 学习算法,你需要掌握这些编程基础(包含JAVA和C++)

干货 | 算法学习必备诀窍:算法可视化解密

干货 | 模拟退火、禁忌搜索、迭代局部搜索求解TSP问题Python代码分享
dbdbbbb47c555e321be936c740dc6425.png
记得点个 在看 支持下哦~ e1f367974bdac6731177b3bdfa139d0f.png
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值