1.禁忌搜索(TS)
请看我的另一篇文章:
【车间调度】基于k-insertion的禁忌搜索算法求解经典FJSP问题(Java源码)
2.遗传算法(GA)
请看我的另一篇文章:
【车间调度】遗传算法求解经典FJSP问题(Java源码)
3.混合算法(HA)
其实就是在遗传算法每一代选择交叉变异之后,选择一些个体执行禁忌搜索算法,加快遗传算法的局部寻优能力。
完整代码请进入仓库查看(如果觉得有用的话,留下一个star吧~):
https://gitee.com/xcy-ghl/tradition_fjsp.git
https://gitee.com/xcy-ghl/tradition_fjsp.git
4.可视化及求解效果
参数设置为:种群500个,精英选择150个,交叉概率0.95,变异概率0.1,迭代300次,最大允许无更优解的代数5次,选择5%的个体执行禁忌搜索,禁忌搜索代数1000代,禁忌搜索局部搜索100次,禁忌表长度30。
(原文献中禁忌搜索会根据遗传算法的代数增大而开始执行,代数比较小的时候是不会执行的或者只对很少的个体执行。且禁忌搜索的参数也会随着遗传算法的代数而改变,这种参数设置才比较合理。这里我随便取了几个参数进行测试,这些参数是不合理的,仅供我测试算法正确性使用)
使用测试数据BRData进行测试:
算例名称 | 计算结果(makespan) | 计算时间(ms) |
---|---|---|
MK01 | 40 | 37468 |
MK02 | 27 | 59223 |
MK03 | 204 | 86572 |
MK04 | 60 | 85546 |
MK05 | 173 | 145644 |
MK06 | 59 | 349690 |
MK07 | 141 | 331084 |
MK08 | 523 | 201611 |
MK09 | 307 | 203091 |
MK10 | 210 | 378312 |
速度非常慢……禁忌搜索k-insertion实现太慢了。计算头长度和尾长度我用了dfs,然而使用bfs效率会更高。
可视化代码请见我的另一篇文章:
【车间调度】车间调度甘特图可视化(Java源码)
MK05的可视化: