程序猿声

代码黑科技的分享区

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

往期回顾:

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

代码框架

代码分为5个包,第一部分Data为用到的各类结构,第二部分GA为GA部分+第一个TS,第三部分主函数,第四、五部分是两个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>的形式表示。

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

总结

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

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

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

参考

[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车间调度算法_混合算法(GA+TS)求解作业车间调度问题代码解读+完整JAVA代码...相关推荐

  1. ga设置迭代次数_种群进化+邻域搜索的混合算法(GA+TS)求解柔性作业车间调度问题(FJSP)算法介绍...

    程序猿声 代码黑科技的分享区 过去小编简单了解过作业车间调度问题(JSP),这两个月简单接触了柔性车间调度问题(FJSP),但是因为一些原因打算暂时研究到这里.在研究的时候,小编发现网上这方面的中文资 ...

  2. 求解作业车间调度问题的改进遗传算法

    作业车间调度问题的求解目标是得到一个科学.合理的调度方案. 一个科学.合理的调度方案能够有效提高生产效率.降低加工成本. 调度方案主要是确定各工件的加工次序和加工机器, 这是典型的 NP-hard 问 ...

  3. Tabu Search求解作业车间调度问题(Job Shop Scheduling)-附Java代码

    本文来源于公众号[程序猿声],作者舟寒丶 作业车间调度问题 问题模型 举个栗子 有关禁忌搜索算法的内容,公众号内有详细教程: 干货 |[算法]禁忌搜索算法(Tabu Search,TS)超详细通俗解析 ...

  4. 干货 | Tabu Search求解作业车间调度问题(Job Shop Scheduling)-附Java代码

    本文来源于公众号[程序猿声],作者舟寒丶 作业车间调度问题 问题模型 举个栗子 有关禁忌搜索算法的内容,公众号内有详细教程: 干货 |[算法]禁忌搜索算法(Tabu Search,TS)超详细通俗解析 ...

  5. 作业调度问题java代码_Tabu Search求解作业车间调度问题(Job Shop Scheduling)-附Java代码...

    本文来源于公众号[程序猿声],作者舟寒丶 作业车间调度问题 问题模型 举个栗子 有关禁忌搜索算法的内容,公众号内有详细教程: 大家可以点击超链接回顾相关知识,这里就不再细说了. 一般而言,用禁忌搜索算 ...

  6. c语言java是女朋友_程序猿选女朋友 你希望她是你的什么星座代码?

    计算机语言的实质其实是为了让人类能够更好与计算机打交道,最终结果都是通过编译成二进制代码或通过解释器转译成二进制代码的形式,由计算机来执行.而二进制就是0和1,假设1代表男生,0代表女生,那么瞬间就可 ...

  7. consplan r语言_模拟退火算法实现:求解中国31个城市TSP问题

    最近在学习玻尔兹曼机,里面用到了模拟退火算法,经过一天的实验,总算顺利完成,本文打算记录这一过程,以作备忘. 本文内容如下: 1.实验环境 2.算法原理简介 3.TSP案例代码实现 4.运行结果解析 ...

  8. java sorted排序_【算法】排序算法之计数排序

    前几回,我们已经对冒泡排序.直接插入排序.希尔排序.选择排序.快速排序.归并排序.堆排序做了说明分析.本回,将对计数排序进行相关说明分析. 一.排序算法系列目录说明 冒泡排序(Bubble Sort) ...

  9. 快速排序 java导包_排序算法-快速排序(Java实现)

    上篇我们讲了冒泡排序,这次我们讲它的升级版快速排序,"快速",一看就是个好算法~ 快速排序(QuickSort)是啥? 我们先看下百度百科的介绍快速排序(Quicksort)是对冒 ...

最新文章

  1. ecplise 设置代码自动提示功能的设置
  2. 逆天改命,机械飞升:渐冻症科学家拒绝等死,将自己改造成了「半机械人」...
  3. jsp cookie 中文乱码 的解决方法
  4. Blocks与Dispatch Queue的使用
  5. vue 怎么在字符串中指定位置插入字符_vue项目中在可编辑div光标位置插入内容的实现代码...
  6. Microsoft Dynamics CRM 2015 新增功能 介绍 高级查找功能
  7. 前端学习(2398):回顾
  8. linuxc线程信号-pthread_cond_wait理解
  9. Android 下使用 JSON 实现 HTTP 请求,外加几个示例!
  10. Eclipse添加git插件上传项目到github
  11. arduino 嗡鸣器 音乐_arduino蜂鸣器怎么输出指定的音乐
  12. discuz2.0升级后不能自动跳转问题
  13. atittit.表单验证的实现方式以及原理本质以及选型以及自定义兼容easyui dsl规则的表单验证
  14. ug80浩强工具_浩强工具下载|浩强UG工具下载 v2.59 最新版 - 比克尔下载
  15. signature=04e0c5d9acfe5aef92fda679f27fba71,恶意软件分析 URL链接扫描 免费在线病毒分析平台 | 魔盾安全分析...
  16. yaml配置Mybatis
  17. mhw跳过结尾_怪物猎人世界怎么跳过剧情
  18. Cadence Allegro如何导出与导入规则
  19. Flask结合flask_sqlalchemy教程
  20. 创造与魔法怎么自建服务器,创造与魔法如何搭建出梦想中的房屋

热门文章

  1. Python爬虫学习(六)爬取mzitu网图片
  2. Spring AOP 原理 (面试必备)
  3. 嵌入式linux开发,mqtt库移植
  4. 会员管理系统的需求分析
  5. MYSQL配置环境变量
  6. JAVA使用POI写入excel 工具类【通用】
  7. (转)最新版谷歌浏览器每次都要允许flash解决方法
  8. 1024程序员节神评整理,要笑死了哈哈
  9. 思科ASA系列防火墙配置手册
  10. 小程序毕设作品之微信企业公司小程序毕业设计(7)中期检查报告