📄 wh_creat_group_yuan.m
字号:
function y=wh_Creat_Group_Yuan(End,Sample_Sum,Sample_Sum_Dimension)
End=20;%数组(群体)元素值为1~End
Sample_Sum=20;%数组的行数
Sample_Sum_Dimension=3;%数组的列数
while (1)
B=round(End*rand(Sample_Sum,Sample_Sum_Dimension));
T=0;%代表产生的数组满足要求,每个数组的元素之间值是互异的,并且值不为0
for i=1:Sample_Sum%判断每个行向量的各元素间互异
for j=1:Sample_Sum_Dimension
for k=1:Sample_Sum_Dimension
if and((j~=k),(B(i,j)==B(i,k)))
T=1;
end
end %k
if (B(i,j)==0)
T=1;
end
end%j
end%i
if (T==0)
break;
end
end%while
for i=1:Sample_Sum%实现数组中行向量元素升序排序
for j=1:Sample_Sum_Dimension
for k=1:Sample_Sum_Dimension
if (B(i,j)<B(i,k))
TT=B(i,j);B(i,j)=B(i,k);B(i,k)=TT;
end
end %k
end%j
end%i
while (1)
%---------------------------为保证初始样本间的互异性,对初始群体中相同的样本实现变异
for i=1:Sample_Sum%判断每个行向量的间互异
for j=1:Sample_Sum
if and((i~=j),(B(i,:)==B(j,:)))%如果不互异,就对其实现变异,尽量让初始群体中的样本保证互异
while(1)%A---产生变异的位置Sample_Sum_Dimension_Rand,变异的数值End_Rand,对相同的个体实现变异,保证初始群体的所有个体间的互异
Sample_Sum_Dimension_Rand=round(Sample_Sum_Dimension*rand(1));
End_Rand=round(End*rand(1));
if and((Sample_Sum_Dimension_Rand~=0),(End_Rand~=0))
break;
end
end%A---while
while(1)%B
B(i,Sample_Sum_Dimension_Rand)=End_Rand%对B(i,Sample_Sum_Dimension_Rand)实现变异
TTT=0;
for k=1:Sample_Sum_Dimension%保证变异后B(i,Sample_Sum_Dimension_Rand)各元素间互异
for l=1:Sample_Sum_Dimension
if and((k~=l),B(i,k)==B(i,l))
TTT=1;
end
end%l
end%k
if (TTT==0)
break;
end
end%B---while
end%if and((i~=j),(B(i,:)==B(j,:)))
end%j
end%i
for i=1:Sample_Sum%实现数组中行向量元素升序排序
for j=1:Sample_Sum_Dimension
for k=1:Sample_Sum_Dimension
if (B(i,j)<B(i,k))
TT=B(i,j);B(i,j)=B(i,k);B(i,k)=TT;
end
end %k
end%j
end%i
for i=1:Sample_Sum%判断每个行向量的间互异
for j=1:Sample_Sum
TTT=0;
if and((i~=j),(B(i,:)==B(j,:)))
TTT=1;
end
end
end
if (TTT==1)
break;
end
end%while
for i=1:Sample_Sum%实现数组中行向量元素升序排序
for j=1:Sample_Sum_Dimension
for k=1:Sample_Sum_Dimension
if (B(i,j)<B(i,k))
TT=B(i,j);B(i,j)=B(i,k);B(i,k)=TT;
end
end %k
end%j
end%i
y=B;%输出初始群体
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -