💥💥💥💞💞💞欢迎来到本博客❤️❤️❤️💥💥💥
🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。
⛳️座右铭:行百里者,半于九十。
目录
💥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