栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

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

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

(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

转发采用请注明出处~

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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/657726.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号