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

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

往期回顾:

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

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

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

代码框架

2e801629c6090d3a900632d7691f390d.png

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

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

Main

算例输入:

537481e00c880183df9a5d74c071a1c4.png

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

df5f4c453e332af04b0d8cabcb775fd8.png

Data

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

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

efa3a4375b3b1d64cff6395311948ec4.png

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

d9b28e9d620454e23fe633733fbd0c98.png

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

b69b9d8d6a442c4ebc401f4ad67782dc.png

GA

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

d0c2959a323912215cc475200d61fc5a.png

选择哪种Tabu:

a5db8255221623f43a60b402b06e7fa5.png

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

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

de7a74b0ec1080d1156ce67cab9cc56c.png

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

NeighbourSearch

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

7cd81c372b7cebcba162cbd7c101dc49.png

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

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

d4289a78a6406542117121908509e3ff.png

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

76d5d4ae7d63a53dc993012028d1fbc0.png

4d28621569c8685ab0b3940e45d10141.png

NeighbourSearch2

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

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

replan函数中包含了在甘特图上进行swap操作后更新解的方法,有详细注释:郑州哪个医院看男科好http://www.zztjnk.com/

郑州哪个医院男科专业http://www.ytsgnk.com/

2a836b4fd255603d222bbbaecd4ff328.png

总结

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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值