【车间调度】基于全球邻域和爬坡来优化模糊柔性作业车间调度问题(Matlab代码实现)

news/2024/7/7 20:25:17

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

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

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

目录

💥1 概述

📚2 运行结果

🎉3 参考文献

👨‍💻4 Matlab代码实现

💥1 概述

      模糊柔性作业车间调度问题(FFJSP)继承了柔性作业车间调度问题(FJSP)的特点,同时增加了灵活的处理时间和到期日特性。本文对FFJSP进行了一个约束,即新作业插入,并指出完成操作的完成时间对重新调度解决方案有很大影响。

📚2 运行结果

部分代码:

%Random initial population of smart-cells
for i=1:numIndividuos
    [PoblacionSO(i,:),PoblacionSM(i,:)] = generarIndividuoAleatorio(numeroMaquinas,numOperaciones,vectorOperaciones,tablaMaquinasFactibles);
end

%Evaluate population
[PoblacionMakespan, PoblacionPosMk, PoblacionTablaTrabajos, PoblacionTablaMaquinas, PoblacionVectorMaquinas, PoblacionVectorOrdenMaq, PoblacionPosTT, PoblacionPosTM] = calificarPoblacion(PoblacionSO, PoblacionSM, PoblacionMakespan, PoblacionPosMk, PoblacionTablaTrabajos, PoblacionTablaMaquinas, PoblacionVectorMaquinas, PoblacionVectorOrdenMaq, PoblacionPosTT, PoblacionPosTM, numeroTrabajos, numeroMaquinas, numOperaciones,numIndividuos,vectorNumOperaciones,vectorInicioOperaciones, tablaTiempos, 1);
%Select the best smart-cell
[mejorSO, mejorSM, mejorMakespan] = mejorIndividuo(PoblacionSO, PoblacionSM, PoblacionMakespan);

%Elitist smart-cells
numIndEl=round(numIndividuos*probElitista);
if mod(numIndividuos-numIndEl,2)==1
    numIndEl = numIndEl+1;
end

contIt=1;
contEst=1;
banderaCiclo=1;

%Convergence vector
convergencia=[];
convergencia(contIt,:)=mejorMakespan;
 
%Optimization loop
while(banderaCiclo)
    %Selection
    [PoblacionSO, PoblacionSM, PoblacionMakespan,PoblacionPosMk, PoblacionTablaTrabajos, PoblacionTablaMaquinas, PoblacionVectorMaquinas, PoblacionVectorOrdenMaq, PoblacionPosTT, PoblacionPosTM] = seleccion(PoblacionSO, PoblacionSM, PoblacionMakespan, PoblacionPosMk, PoblacionTablaTrabajos, PoblacionTablaMaquinas, PoblacionVectorMaquinas, PoblacionVectorOrdenMaq, PoblacionPosTT, PoblacionPosTM, numIndividuos, numIndEl, 2);
    %GN-HC neigborhood
    [PoblacionSO, PoblacionSM, PoblacionMakespan,PoblacionPosMk, PoblacionTablaTrabajos, PoblacionTablaMaquinas, PoblacionVectorMaquinas, PoblacionVectorOrdenMaq, PoblacionPosTT, PoblacionPosTM] = aplicacionVecindadGN_HC(PoblacionSO, PoblacionSM, PoblacionMakespan, PoblacionPosMk, PoblacionTablaTrabajos, PoblacionTablaMaquinas, PoblacionVectorMaquinas, PoblacionVectorOrdenMaq, PoblacionPosTT, PoblacionPosTM, tamVecindad, numIndividuos, numeroTrabajos, numeroMaquinas, numOperaciones, vectorInicioOperaciones, tablaTiempos, tablaMaquinasFactibles, vectorNumOperaciones, numIndEl);
    %Hill climbing
    [PoblacionSO, PoblacionSM, PoblacionMakespan,PoblacionPosMk, PoblacionTablaTrabajos, PoblacionTablaMaquinas, PoblacionVectorMaquinas, PoblacionVectorOrdenMaq, PoblacionPosTT, PoblacionPosTM] = busquedaPoblacionalEscaladaColina(PoblacionSO, PoblacionSM, PoblacionMakespan, PoblacionPosMk, PoblacionTablaTrabajos, PoblacionTablaMaquinas, PoblacionVectorMaquinas, PoblacionVectorOrdenMaq, PoblacionPosTT, PoblacionPosTM, numIndividuos, iteracionesTotalesEscalada, iteracionesReinicioEscalada, numeroTrabajos, numeroMaquinas, numOperaciones, vectorInicioOperaciones, tablaTiempos, tablaMaquinasFactibles, vectorNumOperaciones, numIndEl);
    %Select best solution in the iteration
    [nuevaMejorSO, nuevaMejorSM, nuevaMejorMakespan] = mejorIndividuo(PoblacionSO, PoblacionSM, PoblacionMakespan);
    %If improved, update best solution 
    [~,pos] = mayor_difuso(mejorMakespan,nuevaMejorMakespan);
    if pos==1
        suma=sum(mejorMakespan==nuevaMejorMakespan);
        if suma<3
            mejorSO = nuevaMejorSO;
            mejorSM = nuevaMejorSM;
            mejorMakespan = nuevaMejorMakespan;
            contEst=1;
        else
            %Increase stagnation
            contEst=contEst+1;
        end
    else
        contEst=contEst+1;
    end
    %Halt condition
    if ((contEst>=numEstancamiento) || (contIt>=numGeneraciones))
        banderaCiclo=0;
    end
    %Print best fuzzy makespan
    if mod(contIt,20)==0 && bandImp==1
        disp(['Iteracion: ' num2str(contIt) ' Makespan: ' num2str(mejorMakespan)]) 
    end
    contIt=contIt+1;
    %Keep convergence
    convergencia(contIt,:)=mejorMakespan;
end

end

🎉3 参考文献

[1]李瑞,龚文引.改进的基于分解的多目标进化算法求解双目标模糊柔性作业车间调度问题[J].控制理论与应用,2022,39(01):31-40.

[2]A global neighborhood with hill climbing algorithm for fuzzy flexible job shop scheduling problem

👨‍💻4 Matlab代码实现


http://lihuaxi.xjx100.cn/news/101265.html

相关文章

python数学建模--线性规划问题案例及求解

目录数学问题&#xff1a;线性规划问题程序设计结果分析实际应用1&#xff1a;加工厂的生产计划设置未知数建立数学模型程序设计结果分析实际应用2&#xff1a;油料加工厂的采购和加工计划设置未知数建立数学模型程序设计结果分析遗留的问题钢管加工用料问题分析scipy.optimize…

全网最全学习攻略【尚硅谷电影推荐系统】附视频代码链接

简述 因为设计任务是开发一款图书推荐系统&#xff0c;但是没有现成的系统开发讲解&#xff0c;于是从网上找到了尚硅谷电影推荐系统的开发教程。 从配置虚拟机到开发各种推荐功能共耗时一个月左右&#xff0c;小破站里的视频教程很多但是有的是武老师少录了&#xff0c;有的是…

拓端tecdat|R语言实现 Copula 算法建模相依性案例分析报告

原文链接&#xff1a;http://tecdat.cn/?p6193 原文出处&#xff1a;拓端数据部落公众号 copula是将多变量分布函数与其边缘分布函数耦合的函数&#xff0c;通常称为边缘。Copula是建模和模拟相关随机变量的绝佳工具。Copula的主要吸引力在于&#xff0c;通过使用它们&#x…

计算机网络——4.1

作业4.1 题量: 38 满分: 138 作答时间:10-18 16:51至10-24 23:55 智能分析 127分 一. 单选题&#xff08;共26题&#xff0c;78分&#xff09; 1. (单选题, 3分)下列IP地址中作为环回地址用于本地软件环回测试的是&#xff08;&#xff09; A. 128.0.0.0B. 192.0.0.0C. 12…

StringBoot 入门初始

目录1、简介1.1、什么是StringBoot ?1.2、为什么使用springboot2、构建一个 SpringBoot 项目&#xff08;helloWorld)2.1、项目创建2.1.1 页面创建2.1.2 IDEA创建2.2、启动项目并访问2.2.1 创建一个HelloController.java2.2.2 启动项目2.3、自定义banner图3、Spring Boot启动器…

CIBERSORT 最全介绍 官网

最全面的免疫浸润分析使用教程&#xff0c;虽晚必到 ——免疫浸润分析里不得不提的神器CIBERSORt CIBERSORTx CIBERSORT初探input输入 output 代码详解 原理解析免疫浸润 反卷积_YoungLeelight的博客-CSDN博客 https://blog.csdn.net/qq_52813185/article/details/127469758?…

【PyTorch深度学习项目实战100例】—— 基于LSTM + 注意力机制(self-attention)进行天气变化的时间序列预测 | 第35例

前言 大家好,我是阿光。 本专栏整理了《PyTorch深度学习项目实战100例》,内包含了各种不同的深度学习项目,包含项目原理以及源码,每一个项目实例都附带有完整的代码+数据集。 正在更新中~ ✨ 🚨 我的项目环境: 平台:Windows10语言环境:python3.7编译器:PyCharmPy…

基于SSM的疫情管控系统

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容&#xff1a;毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 项目介绍…