1.完整项目描述和程序获取
>面包多安全交易平台:https://mbd.pub/o/bread/ZJWTmphr
>如果链接失效,可以直接打开本站店铺搜索相关店铺:
>如果链接失效,程序调试报错或者项目合作也可以加微信或者QQ联系。
2.部分仿真图预览
3.算法概述
模拟退火算法(Simulated Annealing,SA)最早的思想是由N. Metropolis [1] 等人于1953年提出。1983 年,S. Kirkpatrick 等成功地将退火思想引入到组合优化领域。它是基于Monte-Carlo迭代求解策略的一种随机寻优算法,其出发点是基于物理中固体物质的退火过程与一般组合优化问题之间的相似性。模拟退火算法从某一较高初温出发,伴随温度参数的不断下降,结合概率突跳特性在解空间中随机寻找目标函数的全局最优解,即在局部最优解能概率性地跳出并最终趋于全局最优。模拟退火算法是一种通用的优化算法,理论上算法具有概率的全局优化性能,目前已在工程中得到了广泛应用,诸如VLSI、生产调度、控制工程、机器学习、神经网络、信号处理等领域。
4.部分源码
.........................................................................
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,
step
for q=1:swarminitNum,
fitlist(q)=timedecode(swarminit{q},restrictmatrixM,restrictmatrixT,machineNum) ;
end % 计算当前粒子群每个粒子的适应度
[minval,sub] = min(fitlist); % 求得这代粒子的适应度最小值及其下标
if(trace(step) > minval) ,
trace(step) = minval;
bestparticle = swarminit{sub};
end
if(step~= gen) ,
trace(step + 1) = trace(step); % 全局最佳适应度及最佳粒子调整
end
T=0.97*T;
for i = 1:s,
tt=fitlist(i)-bestfit(i);
if(tt<0)|(min(1,exp(-tt/T))>=rand(1,1));
bestfit(i) = fitlist(i);
bestpar{i} = swarminit{i};
end
end % 个体历史最佳粒子及适应度调整 ;
for j = 1:s,
if rand(1,1)<w1,
bestparticle1=bianyi(bestparticle,changeNum,swarminitLong);
else
bestparticle1=bestparticle;
end %粒子变异;
l1=1000;
l2=1;
l3=1000;
l4=1;
while (l1-l2)>swarminitLong,
m=fix(swarminitLong*rand(1,1));
n=fix(swarminitLong*rand(1,1));
l1=max(m,n)+1;
l2=min(m,n)+1;
end
while (l3-l4)>swarminitLong,
m1=fix(swarminitLong*rand(1,1));
n1=fix(swarminitLong*rand(1,1));
l3=max(m1,n1)+1;
l4=min(m1,n1)+1;
end
swarminit{j}=cross(bestpar{j},swarminit{j},l2,l1);
swarminit{j}=cross(bestparticle1,swarminit{j},l4,l3);%粒子交叉;
end
error(step)=min(fitlist);
end
gant(bestparticle,swarminitLong,restrictmatrixM,restrictmatrixT,b)
figure;
plot(error);
A356