(Matlab)车间调度中的变异 *** 作

(Matlab)车间调度中的变异 *** 作,第1张

(Matlab)车间调度中的变异 *** 作

 变异是根据[码丽莲梦露]博主写的变异 *** 作,按照自己的理解,编写了matlab代码。

用python实现改遗传算法解柔性作业车间调度问题的交叉和变异 *** 作_太剧烈的快乐与太剧烈的悲哀是有相同之点的——同样地需要远离人群!-CSDN博客_pox交叉 python

所谓变异,就是通过改变某些基因,而使染色体发生变化,最终提高解的质量。

首先,随机取几个位置,再判断每一个位置的工件所对应的是第几道工序,最后对这个位置所对应的机器片段,选择最短的加工时间机器。

下面附上代码:

%变异 *** 作 随机选取一个位置,将该位置所对应的加工机器换为加工时间最短的机器

function NewChrom = mutate(Chrom,MUTR,Jm,T)
%UNTITLED 此处显示有关此函数的摘要
%   此处显示详细说明
%初始化
[NIND,WNumber]=size(Chrom);
WNumber=WNumber/2;
NewChrom=Chrom;
for i=1:NIND               
    %取一个个体
    S=Chrom(i,:);
    number=randperm(WNumber);
    r=randi([1,WNumber]);
%     WPNumberTemp=Number; 
    for k=1:r
       pos=number(k); 
       workpiece=S(pos);
       numbershunxu =0;
       %% 判断现在是第几道工序
       for b=1:pos
           if S(b)==workpiece
               numbershunxu=numbershunxu+1;
           end
       end
       JMTemp=Jm{workpiece, numbershunxu};
       SizeTemp=length(JMTemp);
          
            %是否变异
       if MUTR>rand       
                %选择机器( 加工时间少)
            if SizeTemp==1  
                 S(pos+WNumber)=1; 
            else
                a=T{workpiece, numbershunxu};
                [~,index]=min(a);
                 S(pos+WNumber)=index;%
            end
       end
   end         
    %数据放入新群
  NewChrom(i,:)=S;
end
end

转发采用请注明出处~

欢迎批评指正,欢迎点赞~

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5659801.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存