1.完整项目描述和程序获取
>面包多安全交易平台:https://mbd.pub/o/bread/ZJaalJ1u
>如果链接失效,可以直接打开本站店铺搜索相关店铺:
>如果链接失效,程序调试报错或者项目合作也可以加微信或者QQ联系。
2.部分仿真图预览
3.算法概述
4.部分源码
function [newp,newTN] = GWO(fit,p,TN,N,m,n,s,a)
newp = cell(N,1);
newTN = cell(N,1);
fit_sort = sort(fit);
fit_1 = fit_sort(1);
fit_2 = fit_sort(1);
fit_3 = fit_sort(1);
pos = find(fit == fit_1);
if length(pos)>=3;
p1 = p{pos(1)};
p2 = p{pos(2)};
p3 = p{pos(3)};
elseif length(pos) == 2
p1 = p{pos(1)};
p2 = p{pos(2)};
pos1 = find(fit==fit_3);
p3 = p{pos1(1)};
elseif length(pos) == 1 && length(find(fit ==fit_2))>=2
p1 = p{pos(1)};
pos2 = find(fit ==fit_2);
p2 = p{pos2(1)};
p3 = p{pos2(2)};
elseif length(pos) == 1 && length(find(fit ==fit_2))==1
p1 = p{pos(1)};
p2 = p{find(fit ==fit_2)};
pos3 = find(fit == fit_3);
p3 = p{pos3(1)};
end
for i=1:N
p5=p1; %为防止p1,p2,p3的数值发生变化,赋值给p5,p6,p7
p6=p2;
p7=p3;
if i == 1 %将前三个最好的解放入下一代数的前三个解,保证最优解不会变坏
newp{1} = p5;
elseif i==2
newp{2}= p6;
elseif i==3
newp{3} = p7;
elseif i>3
p4 = p{i-3}; %将其余的灰狼取出
for ii=1:m %进行位置信息转换
for j =1:n
if length(find(s{ii,j}(1,:)==p5(ii,j)))>1
p5(ii,j) = 0;
else
p5(ii,j) = find(s{ii,j}(1,:)==p5(ii,j));
end
if length(find(s{ii,j}(1,:)==p6(ii,j)))>1
p6(ii,j) = 0;
else
p6(ii,j) = find(s{ii,j}(1,:)==p6(ii,j));
end
if length(find(s{ii,j}(1,:)==p7(ii,j)))>1
p7(ii,j) = 0;
else
p7(ii,j) = find(s{ii,j}(1,:)==p7(ii,j));
end
if length(find(s{ii,j}(1,:)==p4(ii,j)))>1
p4(ii,j) = 0;
else
p4(ii,j) = find(s{ii,j}(1,:)==p4(ii,j));
end
end
end
p4 = ceil((p5-(2*a*rand-a).*((2*rand).*p5-p4)+p6-(2*a*rand-a).*((2*rand).*p6-p4)+p7-(2*a*rand-a).*((2*rand).*p7-p4))/3);
%灰狼位置更新公式
for ii = 1:m %将位置信息转换回机器号
for j = 1:n
if length(s{ii,j}(1,:))>p4(ii,j) || length(s{ii,j}(1,:))<p4(ii,j)
p4(ii,j) = s{ii,j}(1,ceil(rand*length(s{ii,j}(1,:))));
else
p4(ii,j) = s{ii,j}(1,p4(ii,j));
end
end
end
newp{i} = p4;
end
for ii = 1:m %对机器号对应的时间进行更新
for j= 1:n
pos = find(s{ii,j}(1,:)==newp{i}(ii,j));
p8(ii,j) = s{ii,j}(2,pos(1));
end
end
newTN{i} = p8;
end
A584