📄 wh_by.m
字号:
%-----------------------------------------------------------------------------变异开始,变异率设为5%
function [y,p]=wh_BY(BY_Probability_Set,G_Sample_Sum,G_Sample_Sum_Dimension,End,Initial_Group)
BY_Probability=round(G_Sample_Sum*BY_Probability_Set/100);
if (BY_Probability<1)
BY_Probability=1;
end
for by_Probability=1:BY_Probability
while(1)%A---产生变异的初始条件
BY_G_Sample_Sum_Rand=round(G_Sample_Sum*rand(1));%产生变异个体的位置
BY_G_Sample_Sum_Dimension_Rand=round(G_Sample_Sum_Dimension*rand(1));%产生变异个体元素的位置BY_G_Sample_Sum_Dimension_Rand,
BY_End_Rand=round(End*rand(1));%变异元素的数值BY_End_Rand
if and(and((BY_G_Sample_Sum_Dimension_Rand~=0),(BY_End_Rand~=0)),(BY_G_Sample_Sum_Rand~=0))
break;
end
end%A---while
while(1)%B---开始变异
Initial_Group(BY_G_Sample_Sum_Rand,BY_G_Sample_Sum_Dimension_Rand)=BY_End_Rand;%对Initial_Group(BY_G_Sample_Sum_Rand,BY_G_Sample_Sum_Dimension_Rand)实现变异
TTT=0;
for k=1:G_Sample_Sum_Dimension%保证变异后的个体(行向量)的元素间互异
for l=1:G_Sample_Sum_Dimension
if and((k~=l),(Initial_Group(BY_G_Sample_Sum_Rand,k)==Initial_Group(BY_G_Sample_Sum_Rand,l)))
TTT=1;
end
end%l
end%k
if (TTT==0)
break;
end
end%B---while
for j=1:G_Sample_Sum_Dimension%完成变异的个体中的元素升序排列
for k=1:G_Sample_Sum_Dimension
if (Initial_Group(BY_G_Sample_Sum_Rand,j)<Initial_Group(BY_G_Sample_Sum_Rand,k))
TT=Initial_Group(BY_G_Sample_Sum_Rand,j);Initial_Group(BY_G_Sample_Sum_Rand,j)=Initial_Group(BY_G_Sample_Sum_Rand,k);Initial_Group(BY_G_Sample_Sum_Rand,k)=TT;
end
end %k
end%j
end%for--------------by_Probability
%-------------------------------------------------------------------------------------------------变异结束
y=Initial_Group(BY_G_Sample_Sum_Rand,:);
p=BY_G_Sample_Sum_Rand;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -