1 模型介绍
模型参考这里。
2 部分代码
-
clc clear %=========数据录入,参数调整================= swarminitNum=20;%初始生成的粒子数; MM=[1 2 3 4 5 6 6 6 6 6 6 6];%工件、工序数量矩阵,MM第一行表示工件,第二行表示每个工件的工序数; machineNum=6; %加工机器数; initT=1000; %模拟退火初始温度; gen=500; %循环迭代数; w1=0.35; %变异率; changeNum=3; %变异变换对数; restrictmatrixM=[3 1 2 4 6 5 2 3 5 6 1 4 3 4 6 1 2 5 2 1 3 4 5 6 3 2 5 6 1 4 2 4 6 1 5 3];%job-shop机器约束矩阵; restrictmatrixT=[1 3 6 7 3 6 8 5 10 10 10 4 5 4 8 9 1 7 5 5 5 3 8 9 9 3 5 4 3 1 3 3 9 10 4 1];%job-shop时间约束矩阵; %===============PSO算法========================== swarminit=cell(1,swarminitNum); swarminitLong=sum(MM(2,:)); %所有工序数即粒子长度; for i=1:swarminitNum, swarminit{i}=randomparticle(MM) ; end %随机生成初始粒子群体 [popu,s] = size(swarminit); trace = ones(1,gen); trace(1) = 10000; % 初始全局最佳适应度设为足够大 for i = 1:s, bestfit(i) = 10000; % 初始个体历史最佳适应度设为足够大 end bestpar = swarminit; % 个体历史最佳粒子初始化 for u=1:swarminitNum, fitlist=[0]; end T=initT; for step = 1:gen, for q=1:swarminitNum, swarminit{j}=cross(bestparticle1,swarminit{j},l4,l3);%粒子交叉; end end [a,b,c]=timedecode2(bestparticle,restrictmatrixM,restrictmatrixT,machineNum); disp(['优化目标: 最小平均流动时间']) disp(['粒子数:' int2str(swarminitNum) ' 循环代数:' int2str(gen)]) disp(['变异率:' num2str(w1) ' 变异变换对数:' int2str(changeNum)]) disp(['模拟退火初始值:' int2str(initT) ' 模拟退火终值:' int2str(T)]) disp(['迭代循环值:' int2str(trace)]) disp(['最小平均流动时间:' int2str(a) ' 最大完工时间:' int2str(b) ' 最小间隙时间:' int2str(c) ]) disp(['最优粒子' int2str(bestparticle)]) pause gant(bestparticle,swarminitLong,restrictmatrixM,restrictmatrixT,b)3 仿真结果
4 参考文献
[1]潘全科, 段俊华, 赵清理,等. 解决车间调度问题的改进模拟退火算法[J]. 机械科学与技术, 2007(01):112-114.
博主简介:擅长智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab仿真,相关matlab代码问题可私信交流。
部分理论引用网络文献,若有侵权联系博主删除。