温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

怎么用JAVA解决车间调度问题

发布时间:2021-11-30 13:34:45 来源:亿速云 阅读:144 作者:iii 栏目:大数据

这篇文章主要介绍“怎么用JAVA解决车间调度问题”,在日常操作中,相信很多人在怎么用JAVA解决车间调度问题问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么用JAVA解决车间调度问题”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

代码框架

怎么用JAVA解决车间调度问题

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

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

Main

算例输入:

怎么用JAVA解决车间调度问题

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

怎么用JAVA解决车间调度问题

Data

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

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

怎么用JAVA解决车间调度问题

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


怎么用JAVA解决车间调度问题


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


怎么用JAVA解决车间调度问题

GA

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

怎么用JAVA解决车间调度问题


选择哪种Tabu:

怎么用JAVA解决车间调度问题


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

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

怎么用JAVA解决车间调度问题

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

NeighbourSearch

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

怎么用JAVA解决车间调度问题


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

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

怎么用JAVA解决车间调度问题

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

怎么用JAVA解决车间调度问题

怎么用JAVA解决车间调度问题

NeighbourSearch3

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

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

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

怎么用JAVA解决车间调度问题

到此,关于“怎么用JAVA解决车间调度问题”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI