update.m

来自「采用遗传算法对于加工问题的排序,使其最快.」· M 代码 · 共 51 行

M
51
字号
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 + =
减小字号Ctrl + -
显示快捷键?