📄 ymsga.m
字号:
function [Best,Gen,BestF,AvrF,gen,pt]=ymSGA(m,n,g,op_pre,MM,d,Xlu,O,C,P,a,b,c)
[n1,n2]=size(Xlu);
%Best=ones(1,n1+1);
%a=.2;
% BestF=zeros(); %各代的最优的适应值
% AvrF=zeros(); %各代适应值的平均值
% Best=[]; %最优个体
% gen=0; %寻得最优个体的代数
% Gen=0; %算法收敛代数
% t=0;
%种群的初始化
P=rejudge(P,d,n,O,Xlu,C);
P=refresh(P,d);
Best=P(1,:);
Best=ymfitness1(Best);
%进化操作
I=20;
%知识的大小
%a=0.4;%每代提取百分比
%b=0.3;
for i=1:g
P=ymfitness1(P); %适应值即为目标值
[Fmx,Fs]=min(P(:,1));
BestF(i)=Fmx;
AvrF(i)=mean(P(:,1));
if Fmx<Best(:,1)
Best=P(Fs,:);
gen=i;
end
newP1=ymLS_selector(P,m);
newP2=ymcrossover(newP1,m,n,Xlu);
newP2=refresh(newP2,d);
newP2=ymfitness1(newP2);
newP2=updown(newP2,a);
if mod(i,c)==0
for k=1:m*b
person(k,:)=replace(BesT,d,m,n,MM,O,Xlu,pt);
end
pn=xutubiao(person,d);
newP2(m-m*b:m-1,:)=pn;
else
newP3=ymmutation(newP2,m,n,d,Xlu,O);
end
newP3=rejudge(newP3,d,n,O,Xlu,C);
P=newP3;
P=refresh(P,d);
[P,P0]=updown(P,a);
if i<=ceil(I/(m*a))
BesT((i-1)*m*a+1:(i-1)*m*a+m*a,:)=P0;
[v1,v2]=size(BesT);
if v1>I
BesT=updown(BesT,a);
BesT=BesT(1:I,:);
end
else
BesT(I+1:I+m*a,:)=P0;
BesT=updown(BesT,a);
BesT=BesT(1:I,:);
end
if mod(i,2)==0
pt(i/2,:)=finder(BesT,d);
end
P(m,:)=Best; %最优个体保留
if i>=5
% if abs(AvrF(i)-AvrF(i-1))<op_pre&abs(AvrF(i-2)-AvrF(i-1))<op_pre
if abs(Best(1,1)-AvrF(i))<op_pre
Gen=i;
break
end
end
end
if i==g
fprintf('达到最大进化代数')
Gen=i;
% gen=i;
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -