变异是根据[码丽莲梦露]博主写的变异操作,按照自己的理解,编写了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
转发采用请注明出处~
欢迎批评指正,欢迎点赞~



