基于遗传算法、元胞自动机邻域和随机重启爬山混合优化算法(GA-RRHC)的柔性车间调度研究(Matlab代码实现)

news2025/1/23 9:14:54

 💥💥💞💞欢迎来到本博客❤️❤️💥💥

🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者

⛳️座右铭:行百里者,半于九十。

目录

💥1 概述

📚2 运行结果

🎉3 参考文献

🌈4 Matlab代码实现

💥1 概述

文献来源:

      本文提出了一种新的混合算法GA-RRHC,该算法基于遗传算法(GA)和随机重启爬山(RRHC)算法,用于优化具有高度灵活性的柔性作业车间调度问题(FJSSP)(其中每个操作都可以由大量机器完成)。特别是,不同的GA交叉和简单变异算子与细胞自动机(CA)启发的邻域一起使用,以执行全局搜索。该方法通过基于RRHC的局部搜索进行改进,使计算实现变得简单。通过在GA-RRHC中应用CA型邻域并混合上述两种技术,获得了新的点,这易于理解和实现。GA-RRHC通过文献中广泛使用的四组实验进行测试,并使用相对百分比偏差(RPD)和弗里德曼测试将其结果与最近的六种算法进行比较。实验表明,对于FJSSP实例,GA-RRHC与其他最近的算法相比是一种具有竞争力的方法,具有很高的灵活性。 

本文提出了一种新的混合技术,称为GA-RRHC,它结合了两种元启发式技术:第一种是使用遗传算法(GA)算子进行全局搜索,另一种是基于细胞自动机(CA)概念的邻域,主要用于操作顺序的编程。作为第二步,每个解决方案都通过应用随机重新启动爬坡(RRHC)的局部搜索来细化,特别是为了对关键操作的机器进行最佳选择,这对于具有高度灵活性的问题更为方便。重启被用作一种简单的策略,以避免解决方案过早收敛,这项研究的贡献在于最初使用了两种易于实现的运算符来定义一种稳健的混合技术,该技术可以为FJSSP的实例找到满意的解决方案,以最小化所有作业的处理时间(或制造时间)。

本文的结构如下:第2节提供了FJJSP的正式表示。第3节提出了新的GA-RRHC方法,解释了所使用的遗传算子、解决方案种群进化的CA启发邻域以及RRHC的操作,以细化每个解决方案。第4节讨论了GA-RRHC的参数调整,与文献中常用的四个FJSSP数据集中的其他六个最近发表的算法进行了比较,并根据非参数Friedman检验和相对百分比偏差(RPD)进行了统计分析。第5节给出了本文的结论。

📚2 运行结果

 部分代码:

archivo=fopen(nombreArchivo,'r');
datos=fscanf(archivo,'%f');
numeroTrabajos=datos(1);
numeroMaquinas=datos(2);
vectorOperaciones=[];
%Indices to take jobs, operations and positions
indice=4;
nt=1;
%Loop for jobs
while(nt<=numeroTrabajos)
    vectorNumOperaciones(nt)=datos(indice);
    vectorInicioOperaciones(nt)=sum(vectorNumOperaciones(1:nt-1));
    operacionesTrabajo=ones(1,vectorNumOperaciones(nt))*nt;
    vectorOperaciones=[vectorOperaciones operacionesTrabajo];
    %Loop for operations
    for numOper=1:vectorNumOperaciones(nt)
        indice=indice+1;
        numMaq=datos(indice);
        %Loop for machines
        for i=1:numMaq
            indice=indice+1;
            maquina=datos(indice);
            indice=indice+1;
            tiempo=datos(indice);
            tablaTiempos(vectorInicioOperaciones(nt)+numOper,maquina)=tiempo;
        end
    end
    %Next job
    indice=indice+1;
    nt=nt+1;
end

%Operation number
numeroOperaciones=length(vectorOperaciones);
%Available machines per operation
tablaMaquinasFactibles=[];
for oper=1:length(tablaTiempos)
    indices_factibles = tablaTiempos(oper,:) ~= 0;
    tablaMaquinasFactibles=[tablaMaquinasFactibles; indices_factibles];
end
end

%Algorithm GA_RRHC
function [mejorSO, mejorSM, mejorMakespan, PoblacionSO, PoblacionSM, PoblacionMakespan, convergencia, contIt] = GA_RRHC(numIndividuos, numGeneraciones, numEstancamiento, probElitista, numeroTrabajos, numeroMaquinas, numOperaciones, vectorNumOperaciones, vectorInicioOperaciones, vectorOperaciones, tablaTiempos, tablaMaquinasFactibles,numVecinos,probMutacion,iteracionesTotalesEscalada,iteracionesReinicioEscalada,probOperCrit,bandImp)
%Initialize values
mejorSO = []; 
mejorSM = []; 
mejorMakespan = inf;
convergencia = [];
%Population vectors
PoblacionSO=zeros(numIndividuos,numOperaciones);
PoblacionSM=zeros(numIndividuos,numOperaciones);
PoblacionMakespan=zeros(numIndividuos,1);

%Table with the characteristics of each solution concerning the jobs,
%It is sorted by jobs and the order of their operations (J_11, J_12, ... Jnm-1, Jnm)
%Rows keep in this order the information:
%Machine assigned
%Processing position on the assigned machine
%End of operation time
%Operation duration
%Tail time 
%Operation position in SO
%Operation position in SM
PoblacionTablaTrabajos=zeros(6,numOperaciones,numIndividuos);

%Table with the characteristics of each solution concerning the machines,
%It is sorted by machines and the order of their operations (M_11, M_12, ... Mmo-1, Jmo)
%Rows keep in this order the information:
%Scheduled work
%Operation of scheduled work
%Final operation time
%Operation duration
%Tail time
%Operation position in SO
%Operation position in SM
PoblacionTablaMaquinas=zeros(6,numOperaciones,numIndividuos);

🎉3 参考文献

部分理论来源于文献,如有侵权请;联系删除。

🌈4 Matlab代码实现

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/5075.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

LeetCode50天刷题计划第二季(Day 27 — 寻找旋转排序数组中的最小值(9.50- 11.20)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录前言一、题目寻找旋转排序数组中的最小值示例提示&#xff1a;二、思路三、代码前言 芜湖 一、题目 寻找旋转排序数组中的最小值 已知一个长度为 n 的数组&#…

web前端期末大作业——基于HTML+CSS+JavaScript实现中国茶文化(30页)

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…

大数据开发是做什么的?怎样入门?

其实现在有很多小伙伴看中了大数据的发展前景&#xff0c;但是其实不知道大数据开发具体是做什么的&#xff0c;又该怎么学习&#xff1f;学习了之后又该做什么&#xff1f; 下面具体给你分析下大数据开发是做什么的&#xff0c;又需要学习和掌握哪些技能~ 大数据开发做什么&a…

致远OA ajax.do 任意文件上传 (CNVD-2021-01627) 漏洞复现

为方便您的阅读&#xff0c;可点击下方蓝色字体&#xff0c;进行跳转↓↓↓01 漏洞描述02 影响范围03 验证方式04 利用方式05 修复方案01 漏洞描述 致远OA是一套办公协同管理软件。由于致远OA旧版本某些接口存在未授权访问&#xff0c;以及部分函数存在过滤不足&#xff0c;攻…

大数据实战之前戏

开发背景 因为要开发一套通话详单系统。该系统上每天产生1亿条通话话单&#xff0c;要保存一个月的通话话单。也就是保存30亿条通话&#xff0c;能够做到准实时的通话详单查询。于是采用大数据架构进行话单的保存和查询。 服务器规划 为了验证系统的可用性&#xff0c;我先搭…

从零学习 InfiniBand-network架构(七) ——IB协议中数据如何传输

从零学习 InfiniBand-network架构&#xff08;七&#xff09; —— IB协议中数据如何传输 &#x1f508;声明&#xff1a; &#x1f603;博主主页&#xff1a;王_嘻嘻的CSDN主页 &#x1f511;未经作者允许&#xff0c;禁止转载 &#x1f6a9;本专题部分内容源于《InfiniBand-n…

C++ 智能指针最佳实践源码分析

智能指针在 C11 标准中被引入真正标准库&#xff08;C98 中引入的 auto_ptr 存在较多问题&#xff09;&#xff0c;但目前很多 C开发者仍习惯用原生指针&#xff0c;视智能指针为洪水猛兽。但很多实际场景下&#xff0c;智能指针却是解决问题的神器&#xff0c;尤其是一些涉及多…

QT之Windows开发及源码调试环境搭建

QT之Windows开发及源码调试环境搭建1. QT 安装2. 配置源码调试2.1 QTCreator2.2 Visual Studio 20193. 参考1. QT 安装 QT对5.15以及以上版本提供在线安装工具 官方链接清华镜像&#xff0c;但是这里面没由Windows的在线安装工具(2022/11/11查看的时候没有) 这里安装以QT 5.…

全是狠活!SpringBoot文档也太那个了,图文并茂详尽讲解

前沿 SpringBoot是由Pivotal团队提供的在Spring框架基础之上开发的框架&#xff0c;其设计目的是用来简化应用的初始搭建以及开发过程。 SpringBoot本身并不提供Spring框架的核心特性以及扩展功能&#xff0c;只是用于快速、敏捷地开发新一代基于Spring框架的应用程序。也就是…

【JavaSE】继承

文章目录1. 如何继承2. 子类如何访问父类的成员2.1 子类中访问父类的成员变量2.2 子类中访问父类的成员方法3. super关键字4. 如何写构造方法前言&#xff1a;为方便讲解一个java文件写多个类。 1. 如何继承 class Cat {public String name;public int age;public String sex;…

c++基础篇(一篇文章带你进入c++的新手村)

前沿&#xff1a; c作为目前比较的流行的语言之一&#xff0c;在就业上也是运用比较广泛的语言之一&#xff0c;并且经过这么多年的历练久经不衰&#xff0c;所以说选择学c是一个不错的选择^_^&#xff0c;前面看到一个段子&#xff0c;如何在21天精通c&#xff0c;我动态里有这…

git 记录

git 工作区介绍 workspace&#xff1a;工作区&#xff0c;就是平时存放项目代码的地方。Index/Stage&#xff1a;暂存区&#xff0c;用于临时存放你的改动&#xff0c;事实上只是一个文件&#xff0c;保存即将提交到文件列表信息。Repository&#xff1a;仓库区&#xff08;或版…

单机hbase-2.4.15配置snappy压缩

单机hbase配置snappy压缩 前言 1. 过程比较坎坷&#xff0c;网上帖子说法不一&#xff0c;以下过程是参考几个帖子亲自走过一遍&#xff0c;并最终可以成功建表。2. 本人安装的所有目录均为/data/test-hbase&#xff0c;涉及目录的替换为自己的目录即可。参考连接 https://bl…

【黑马程序员】Redis 课程 P37 的练习_三种方式实现功能_【黑马点评项目】给店铺类型查询业务添加缓存

本博客内容对应的视频为&#xff1a;https://www.bilibili.com/video/av766995956/?p37补充介绍&#xff1a;【黑马点评项目】是黑马官方于 2022-02-28 在 BiliBili 发表的学习视频教程的练手项目 1.简介 练习&#xff1a;给店铺类型查询业务添加缓存 店铺类型在首页和其它多…

栈和队列(顺序表、单链表形式)

栈和队列栈栈.顺序表结构体的设计栈的初始化栈的销毁入栈出栈获取栈顶数据判断栈空栈中有效元素的个数Stack.hStack.ctest.c栈.单链表结构体设计栈的初始化栈的销毁入栈出栈获取栈顶元素判断栈是否为空获取栈中元素个数Stack.hStack.ctest.c队列队列.顺序表结构体的设计队列的初…

学生HTML个人网页作业作品 简单的IT技术个人简历模板html下载 简单个人网页设计作业 静态HTML个人博客主页

&#x1f389;精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业…

Python老手也会犯的20个新手级错误

Python编码时应避免的常见错误 编程&#xff08;不仅Python&#xff0c;也包括其它编程语言&#xff09;最好的一点是&#xff0c;有多种方法来实现同一解决方案。 使用不同的方法来达到相同的结果&#xff08;图像由作者绘制&#xff09; 由于下述原因&#xff0c;有些方法会比…

几款很好看的爱心表白代码(动态)

分享几款好看的爱心表白代码❤️爱心代码❤️&#xff08;C语言&#xff09;❤️流动爱心❤️&#xff08;htmlcssjs&#xff09;❤️线条爱心❤️&#xff08;htmlcssjs&#xff09;❤️biu表白爱心❤️&#xff08;htmlcssjs&#xff09;❤️matlab爱心函数❤️&#xff08;需…

Java类和对象(一)

&#x1f380;作者&#xff1a;爱塔居的博客_CSDN博客-领域博主 &#x1f32d;专栏&#xff1a;JavaSE &#x1f367;作者简介&#xff1a;大三学生&#xff0c;想要努力地变得更好&#xff01; 附上一张可可爱爱的猫猫图~ &#x1f353;&#x1f353;&#x1f353;&#x1f35…

论文学习——多度量水文时间序列相似性分析

文章目录摘要1 研究背景1.1 主要研究内容1.2 研究背景1.3 启发2 基于改进BORDA投票法的多度量水文时间序列相似性分析2.1 研究方法2.2 BORDA投票法的改进2.2.1 BORDA 的缺点2.2.2 改进的BORDA投票法3 实验验证与分析3.1 实验数据3.2 实验结果分析4 结语多度量组合可以提高相似性…