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

本文介绍了使用Java实现的混合遗传算法(GA)+ Tabu Search求解车间调度问题的代码解读,包括Solution类、Graph类的解析,以及GA和Tabu Search的主要函数和参数设置。提供代码下载及算例,同时引用了相关研究文献。
摘要由CSDN通过智能技术生成

37b1ca35495cf2e217f4d8e5ec2df5d7.png

程序猿声

代码黑科技的分享区node

2c1fbd93316b2c2eca17b8167f8a1689.png

b04d0ab8fde949b981cf42e5.html

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

往期回顾:算法

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

代码框架框架

5c68070eab1dd9dc442fca5ab7cf14da.png

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

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

Main学习

算例输入:

3d673e02b85683705e21c9e2349bf6e6.png

Main中还有一个输出为CSV的函数,须要一个jar包,已经放在下载连接里了,不须要的同窗也能够删除。

78687e287550539feb69b71bb6fd3a42.png

Data

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

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

016b74224da66a15a69e69841e8eb407.png

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

7a1d62b687be609c1a70a3eb44624268.png

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

d481a0fa44c043a38d57372cc40adcf9.png

GA

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

0436059bfcd84fd171762554b1825031.png

选择哪一种Tabu:

20013a194bd37309cd0d74ecdf74c996.png

读者在阅读的时候请本身注意。

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

4f8ace44a4df0f05f052f4b965a67863.png

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

NeighbourSearch

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

c44d6be5430595275fd854daf3833ae9.png

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

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

ac47715dac3090273f8f00362696e4b5.png

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

2203dc8a4ec73ee17b2ee9619e335e38.png

b49b0f8457af04aa823d5ace217f70b4.png

NeighbourSearch2

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

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

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

79919d3300a4971c10c847caef7285ba.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.

推荐阅读:

b04d0ab8fde949b981cf42e5.html

记得点个

在看

支持下哦~

b04d0ab8fde949b981cf42e5.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值