function [pchrom,mchrom]=mutation(pchrom,mchrom) global SH N H NM M; %进行工序变异 p1=ceil(rand*SH); %第一个变异位点 p2=ceil(rand*SH); %第二个变异位点 while (p1==p2)||(pchrom(p1)==pchrom(p2)) %确保两个变异位点不同,且所对应的工序号不同 p2=ceil(rand*SH); end t=pchrom(p1); pchrom(p1)=pchrom(p2); %将两个工序进行交换 pchrom(p2)=t; %进行机器变异 s1=pchrom; s2=zeros(1,SH); p=zeros(1,N); for i=1:SH p(s1(i))=p(s1(i))+1; s2(i)=p(s1(i));%工件加工次数 end s3=mchrom; p1=ceil(rand*SH); %第一个变异位点 转换为一个介于1到SH之间的整数,作为变异位点。 p2=ceil(rand*SH); %第二个变异位点 while(p1==p2) p2=ceil(rand*SH); end n=NM{s1(p1),s2(p1)}; m=ceil(rand*n); x=M{s1(p1),s2(p1),m}; if n>1 while(s3(p1)==m) m=ceil(rand*n); x=M{s1(p1),s2(p1),m}; end end mchrom(1,sum(H(1,1:s1(p1)-1))+s2(p1))=x; n=NM{s1(p2),s2(p2)}; m=ceil(rand*n); x=M{s1(p2),s2(p2),m}; if n>1 while(s3(p1)==m) m=ceil(rand*n); x=M{s1(p2),s2(p2),m}; end end mchrom(1,sum(H(1,1:s1(p2)-1))+s2(p2))=x; end
时间: 2024-04-26 15:22:38 浏览: 65
这段代码是一个基因算法中的变异函数,用于对染色体进行变异操作。根据代码的注释,可以看出其具体的操作步骤是:
1. 随机选择两个不同的变异位点p1和p2,保证其对应的工序号不同;
2. 将p1和p2所对应的工序进行交换,进行工序变异;
3. 随机选择两个不同的变异位点p1和p2,对应于机器上的加工位置;
4. 从可能的加工选项中随机选择一个加工操作进行变异;
5. 重复步骤4,直到选择出不同于原来的加工操作为止。
其中,NM和M是保存了工件加工次数和加工操作的矩阵,H和N是与机器和工件相关的矩阵。在变异函数中,通过这些矩阵来确定变异的位置和可能的加工操作,从而实现对染色体的变异操作。
阅读全文