0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

混合算法求解作业车间调度问题代码解读+完整JAVA代码

电子设计 来源:电子设计 作者:电子设计 2020-12-24 16:51 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

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

往期回顾:

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

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

代码下载请关注公众号,后台回复【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<ArrayList<Operation>> 的形式表示。

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

总结

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

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

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

审核编辑:符乾江
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 算法
    +关注

    关注

    23

    文章

    4760

    浏览量

    97126
  • JAVA
    +关注

    关注

    20

    文章

    2997

    浏览量

    115639
  • 代码
    +关注

    关注

    30

    文章

    4940

    浏览量

    73120
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    Arm Neoverse CPU上大代码Java应用的性能测试

    Java 是互联网领域广泛使用的编程语言。Java 应用的一些特性使其性能表现与提前编译的原生应用(例如 C 程序)大相径庭。由于 Java 字节码无法直接在 CPU 上执行,因此通常运行时在
    的头像 发表于 11-05 11:25 367次阅读
    Arm Neoverse CPU上大<b class='flag-5'>代码</b>量<b class='flag-5'>Java</b>应用的性能测试

    Java 25正式发布,重要特性详解(附代码示例):灵活构造函数体、模块导入声明、AOT方法分析等

    Java 25现已发布,更多新特性来了!配合Perforce JRebel,代码修改即时生效,无需重启服务,即可实现“改完就看效果”。新特性+快工具,让你的Java开发体验双倍提升!
    的头像 发表于 10-29 13:16 837次阅读
    <b class='flag-5'>Java</b> 25正式发布,重要特性详解(附<b class='flag-5'>代码</b>示例):灵活构造函数体、模块导入声明、AOT方法分析等

    外壳防护等级(IP代码)全解读

    什么是外壳防护等级(IP代码)IP代码,全称为“国际防护等级”,是由国际电工委员会制定的全球通用标准。这一标准旨在为电子设备外壳的防护能力提供一个清晰、统一的评判体系。简单来说,IP代码就是电子设备
    的头像 发表于 10-14 12:13 425次阅读
    外壳防护等级(IP<b class='flag-5'>代码</b>)全<b class='flag-5'>解读</b>

    【产品介绍】Altair PBS Professional HPC工作负载管理器和作业调度管理系统

    AltairPBSProfessional行业领先的HPC工作负载管理器和作业调度管理系统PBSProfessional是一款快速、强大的工作负载管理器和作业调度管理系统,旨在提高生产
    的头像 发表于 09-19 17:03 376次阅读
    【产品介绍】Altair PBS Professional HPC工作负载管理器和<b class='flag-5'>作业</b><b class='flag-5'>调度</b>管理系统

    HarmonyOSAI编程智能代码解读

    CodeGenie > Explain Code,开始解读当前代码内容。 说明 最多支持解读20000字符以内的代码片段。 使用该功能需先完成CodeGenie登录授权。 本文主
    发表于 09-02 16:29

    Perforce JRebel 简介:即时加载代码变更,加速Java应用开发

    Perforce JRebel 专为Java开发提速而生!支持跳过构建与重新部署,实时加载代码变更,支持100+框架,无缝集成主流IDE与应用服务器。
    的头像 发表于 08-14 14:35 486次阅读
    Perforce JRebel 简介:即时加载<b class='flag-5'>代码</b>变更,加速<b class='flag-5'>Java</b>应用开发

    HarmonyOS AI辅助编程工具(CodeGenie)代码智能解读

    。 选中.ets文件或者.cpp文件中需要被解释的代码行或代码片段,右键选择CodeGenie > Explain Code,开始解读当前代码内容。 说明 最多支持
    发表于 07-17 17:02

    HarmonyOS AI辅助编程工具(CodeGenie)代码测试

    放置于方法名称上或框选完整的待测试方法代码块,右键选择CodeGenie > Generate UT,开始生成单元测试用例。 说明 最多支持解读20000字符以内的代码片段。Ar
    发表于 07-14 17:33

    【经验分享】玩转FPGA串口通信:从“幻觉调试”到代码解析

    FPGA开发,思路先行!玩FPGA板子,读代码是基本功!尤其对从C语言转战FPGA的“宝贝们”来说,适应流水线(pipeline)编程可能需要点时间。上篇点灯代码解读了基础,而如果能亲手写出串口通讯
    的头像 发表于 06-05 08:05 874次阅读
    【经验分享】玩转FPGA串口通信:从“幻觉调试”到<b class='flag-5'>代码</b>解析

    OLED代码分享

    OLED代码
    发表于 04-29 17:04 1次下载

    Java开发者必备的效率工具——Perforce JRebel是什么?为什么很多Java开发者在用?

    Perforce JRebel是一款Java开发效率工具,旨在帮助java开发人员更快地编写更好的应用程序。JRebel可即时重新加载对代码的修改,无需重启或重新部署应用程序,就能让开发者即时看到
    的头像 发表于 04-27 13:44 638次阅读
    <b class='flag-5'>Java</b>开发者必备的效率工具——Perforce JRebel是什么?为什么很多<b class='flag-5'>Java</b>开发者在用?

    18个常用的强化学习算法整理:从基础方法到高级模型的理论技术与代码实现

    本来转自:DeepHubIMBA本文系统讲解从基本强化学习方法到高级技术(如PPO、A3C、PlaNet等)的实现原理与编码过程,旨在通过理论结合代码的方式,构建对强化学习算法的全面理解。为确保内容
    的头像 发表于 04-23 13:22 1292次阅读
    18个常用的强化学习<b class='flag-5'>算法</b>整理:从基础方法到高级模型的理论技术与<b class='flag-5'>代码</b>实现

    沐渥科技:氮气柜故障代码解读及处理建议

    氮气柜的故障代码因品牌和型号不同而有所差异,但通常涵盖一些常见问题。以下是沐渥科技对故障代码解读及处理建议:一、代码解读和原因分析1、E1
    的头像 发表于 03-20 13:18 936次阅读
    沐渥科技:氮气柜故障<b class='flag-5'>代码</b><b class='flag-5'>解读</b>及处理建议

    提取LSM6DSV16X内置低功耗融合算法输出的四元数后,转换成欧拉角后遇到一个问题求解

    各位大佬好,在提取LSM6DSV16X内置低功耗融合算法输出的四元数后,转换成欧拉角后遇到一个问题,当Y轴与重力方向平行时,输出的角度与惯性测量单元绕自身Y轴转过的角度对应不上,且抖动增加,请问有什么解决方法吗?
    发表于 03-14 06:55

    村田电容标签材质代码如何看?

    村田电容的标签上通常包含一系列代码,用以表示电容的具体参数和特性。以下是如何解读村田电容标签上的材质代码的步骤: ​一、识别基本型号 村田电容的型号通常以字母开头,如GRM、GR3、GRJ等,这些
    的头像 发表于 01-13 14:14 1418次阅读