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

    文章

    4609

    浏览量

    92859
  • JAVA
    +关注

    关注

    19

    文章

    2967

    浏览量

    104733
  • 代码
    +关注

    关注

    30

    文章

    4786

    浏览量

    68552
收藏 人收藏

    评论

    相关推荐

    Java代码之美,从遵循样式规范开始

    作者:京东零售 刘仲伟 在软件开发的世界里,代码不仅是程序的基石,更是程序员交流的通用语言。而Java,作为一门广泛应用于企业级应用的编程语言,其代码的可读性和一致性对于项目的长期维护和团队协作
    的头像 发表于 11-27 11:42 189次阅读
    <b class='flag-5'>Java</b><b class='flag-5'>代码</b>之美,从遵循样式规范开始

    对比Python与Java编程语言

    Python与Java都是目前非常流行的编程语言,它们各有其独特的优势和适用场景。以下是对这两种编程语言的对比: 一、语法和易用性 Python 语法简洁,代码更易读,非常适合初学者。 动态类型系统
    的头像 发表于 11-15 09:31 295次阅读

    代码整洁之道-大师眼中的整洁代码是什么样

    几个月前写了一篇文章“如何写出难以维护的代码”,从中能大概了解到不好维护的代码是什么样,有哪些坏味道,那肯定有人会反问,难以维护的代码见的太多了,也知道长什么样,但是对于好维护的代码
    的头像 发表于 09-09 16:30 332次阅读
    <b class='flag-5'>代码</b>整洁之道-大师眼中的整洁<b class='flag-5'>代码</b>是什么样

    java反编译能拿到源码吗

    Java反编译是一种将编译后的Java字节码(.class文件)转换回Java代码的过程。虽然反编译可以帮助理解代码的逻辑和结构,但它并不
    的头像 发表于 09-02 11:03 994次阅读

    java反编译的代码可以修改么

    Java反编译是一种将编译后的Java字节码(.class文件)转换回源代码的过程。反编译后的代码可以进行修改,但是需要注意,反编译代码的质
    的头像 发表于 09-02 11:00 657次阅读

    ida反编译出来代码能直接用吗

    IDA反编译出来的代码通常 不能直接使用 ,这主要基于以下几个方面的原因: 一、代码的不完整性 IDA反编译生成的代码可能缺少原始源代码中的
    的头像 发表于 09-02 10:55 652次阅读

    该如何提高代码容错率、降低代码耦合度?

    提高RT-Thread代码的容错率和降低耦合度是确保代码质量和可维护性的关键,下面列举了几种在编写代码时,提高代码容错率和降低耦合度的思路。让我们一起来看看吧~一、提高
    的头像 发表于 06-26 08:10 659次阅读
    该如何提高<b class='flag-5'>代码</b>容错率、降低<b class='flag-5'>代码</b>耦合度?

    探讨AI编写代码技术,以及提高代码质量的关键:静态代码分析工具Perforce Helix QAC &amp; Klocwork

    令软件开发人员夜不能寐的事情比比皆是。如今,他们最关心的问题不再是如何用自己喜欢的语言(C、C++、Erlang、Java 等)表达最新的算法,而是人工智能(AI)。 本文中,我们将介绍AI编写代码
    的头像 发表于 06-05 14:10 402次阅读

    浅析FreeRTOS任务调度器的三种调度算法和应用

    FreeRTOS在MCU领域应用非常广泛,今天就给大家讲解一下FreeRTOS调度器中的三种调度算法,以及在瑞萨RZ/T2L MPU中的应用。
    的头像 发表于 05-10 14:02 7362次阅读
    浅析FreeRTOS任务<b class='flag-5'>调度</b>器的三种<b class='flag-5'>调度</b><b class='flag-5'>算法</b>和应用

    FreeRTOS任务调度器的三种调度算法讲解(下)

    配置如下时,调度算法就会变成不带时间片的抢占式调度
    的头像 发表于 03-21 13:46 2794次阅读
    FreeRTOS任务<b class='flag-5'>调度</b>器的三种<b class='flag-5'>调度</b><b class='flag-5'>算法</b>讲解(下)

    【鸿蒙】OpenHarmony 4.0蓝牙代码结构简析

    OpenHarmony蓝牙模块 代码仓和目录结构 当前蓝牙完整代码涉及多个代码代码路径 说明 应用接口https://gitee.co
    的头像 发表于 02-26 16:08 1546次阅读
    【鸿蒙】OpenHarmony 4.0蓝牙<b class='flag-5'>代码</b>结构简析

    g代码和m代码表示什么功能

    G代码和M代码是数控机床程序中常用的两种指令代码,用于控制数控机床的工作动作和运动方式。 G代码是指控制机床工作动作的指令代码,它是一种简单
    的头像 发表于 02-14 15:49 4316次阅读

    浅谈代码优化与过度设计

    本文记录了作者从“代码优化”到“过度设计”的典型思考过程,这过程中涉及了很多Java的语法糖及设计模式的东西,很典型,能启发思考,遂记录下来。 有一天Review师妹的代码,看到一行很难看的
    的头像 发表于 01-19 10:05 545次阅读
    浅谈<b class='flag-5'>代码</b>优化与过度设计

    Spring Boot和飞腾派融合构建的农业物联网系统-改进自适应加权融合算法

    接上集: 上次实验我们已经完成多传感器融合算法的设计,本次实验注意完成改进自适应加权融合算法设计。 一、背景 通过利用温室控制系统来管理温室内的各种设备并控制温度、湿度,可以更好地探索和掌握环境因素
    发表于 01-06 12:18

    【飞腾派4G版免费试用】Spring Boot和飞腾派融合构建的农业物联网系统-数据融合算法

    5.提交测试如下图所示: 数据融合算法测试:将提交的数据存入mysql,对融合算法进行测试:步骤如下:1.开启开发板2.将jar复制到开放麒麟的桌面上3.执行java -jar
    发表于 12-26 20:59