📄 update.m
字号:
function [update_a,update_b]=update(pop_size,machine_total,job_total,T,best_bin,total_mintime,mutation_a,mutation_b)
update_a=mutation_a;
update_b=mutation_b;
for m=1:pop_size
[init,cc]=decode(mutation_a,machine_total,job_total,pop_size);
[st,t]=matrix1(machine_total,job_total,pop_size,T,init);
[P,time]=fitness1(t);
if time(m,:)>total_mintime
for i=1:job_total*(ceil(log2(job_total))+1)
if cc(m,i)==0 && best_bin(i)==1
Q=0.05*pi;
if mutation_a(m,i)*mutation_b(m,i)>0
s=-1;
elseif mutation_a(m,i)*mutation_b(m,i)<0
s=1;
elseif mutation_a(m,i)==0
s=1*sign(randn);
else mutation_b(m,i)==0
s=0;
end
elseif cc(m,i)==1 && best_bin(i)==0
Q=0.025*pi;
if mutation_a(m,i)*mutation_b(m,i)>0
s=1;
elseif mutation_a(m,i)*mutation_b(m,i)<0
s=-1;
elseif mutation_b(m,i)==0
s=1*sign(randn);
else mutation_a(m,i)==0
s=0;
end
elseif cc(m,i)==1 && best_bin(i)==1
Q=0.025*pi;
if mutation_a(m,i)*mutation_b(m,i)>0
s=1;
elseif mutation_a(m,i)*mutation_b(m,i)<0
s=-1;
elseif mutation_b(m,i)==0
s=1*sign(randn);
else mutation_a(m,i)==0
s=0;
end
else
Q=0;
s=0;
end
update_a(m,i)=cos(s*Q)*mutation_a(m,i)-sin(s*Q)*mutation_b(m,i);
update_b(m,i)=sin(s*Q)*mutation_a(m,i)+cos(s*Q)*mutation_b(m,i);
end
end
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -