代码黑科技的分享区node


前两篇文章中,咱们介绍了FJSP问题,并梳理了一遍HA算法。这一篇文章对小编实现的(很乱很烂的)代码进行简单解读。web
往期回顾:算法
种群进化+邻域搜索的混合算法(GA+TS)求解做业车间调度问题(JSP)-算法介绍
编程
混合算法(GA+TS)求解做业车间调度问题(JSP)-禁忌搜索部分
微信
代码下载请关注公众号,后台回复【FJSPHA】便可,不包括【】app
代码框架框架
代码分为5个包,第一部分Data为用到的各种结构,第二部分GA为GA部分+第一个TS,第三部分主函数,第4、五部分是两个TS。编辑器
算例放置在input文件夹中,这里准备了Mk系列算例,Kacem系列算例和论文中的简单算例test.txt。函数
Main学习
算例输入:
Main中还有一个输出为CSV的函数,须要一个jar包,已经放在下载连接里了,不须要的同窗也能够删除。
Data
一堆乱七八糟的结构。这里简单讲一下Solution类和Graph类。
Solution类中包含多个print函数,比较重要的包括绘制甘特图以及check解是否合法。
operationMatrix是解的主题,存放某个工件的某道工序的开始、结束时间,所在加工机器。
Graph类表示析取图。nodeList是每台机器上的node。其中起始点、终止点我单独提取出来设置了两个类。Graph中还包含了获取critical path的DFS和update starting time & end time的Bellman算法。
GA
MyHybridAlgorithm类是GA的主函数。小编在实现的时候进行了多种测试,好比迭代的noImprove次数达到limit时进行扰动:
选择哪一种Tabu:
读者在阅读的时候请本身注意。
算法相关的参数我都作了初始化,请自行查找修改:
交叉、变异等操做包含在ChromosomeOperation类中,计算适应度的函数在CaculateFitness类中,TabuSearch1类是基于编码的tabu,这里都很少展现了。
NeighbourSearch
这个包包含的是基于析取图的tabu。NeighbourAlgorithms类至关于Main,包含解转化为图的函数:
TabuSearch2类为tabu主函数。NeighbourGraph类存放析取图邻域搜索产生的解。
DeleteNeighbourGraph类为析取图中暂时去掉某个点后的状况,PM、PJ、SM、SJ表明precede、succeed、machine、job四条边对应的点,deleteNode为删去的点。
其中还有findLandR位置的二分查找函数,insert时的估值函数:
NeighbourSearch2
这个包为第三个基于甘特图的tabu。
RTS类为tabu的主函数。解经过:ArrayList<ArrayList<Operation>> 的形式表示。
replan函数中包含了在甘特图上进行swap操做后更新解的方法,有详细注释:
总结
到这里已经大体梳理了一遍代码,但其中还有不少细节没有讲到,包括不少东西实现的很差,欢迎随时和我交流。
因为是本身研究时写的代码,其中不少东西会比较乱,可是代码中作了不少注解,仔细阅读应该能看得懂的!
下载的压缩包里包括我学习过程当中看过的大部分文献,包括主要参考的文献,你们能够进一步阅读研究。
参考
推荐阅读:
干货 | 学习算法,你须要掌握这些编程基础(包含JAVA和C++)


本文分享自微信公众号 - 程序猿声(ProgramDream)。
若有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一块儿分享。