📄 rosenbrokemin.m
字号:
%genetic algorithm for function f(x1,x2) optimum(Rosenbroke)
clear all;
close all;
%参数
Size=80; %80个个体
G=100; %遗传100代
Codel=10; %编码长10位
umax=10;
umin=-10; %参数取值范围(十进制)
E=round(rand(Size,2*Codel)); %初始编码(0,1),随机产生80*20,round取整四舍五入
%*********************************主程序************************************
for k=1:1:G %循环100代
time(k)=k;
for s=1:1:Size %对80个个体进行编码
m=E(s,:); %m取每个个体,即E的每一行
y1=0; %y1,y2对应二进制编码的十进制数
y2=0;
%编码
m1=m(1:1:Codel);
for i=1:1:Codel
y1=y1+m1(i)*2^(i-1);
end
x1=(umax-umin)*y1/1023+umin; %x1,x2分别对应取值范围内的十进制数
m2=m(Codel+1:1:2*Codel);
for i=1:1:Codel
y2=y2+m2(i)*2^(i-1);
end
x2=(umax-umin)*y1/1023+umin;
F(s)=100*(x1^2-x2)^2+(1-x1)^2; %求80个个体的rosenbroke函数值,以进行适应度的比较
end
Ji=1.-F; %求倒数值,作为目标函数
%***************** step1 选出最佳目标函数值****************************
BestJ(k)=max(Ji); %求rosenbroke函数的极大值,就是求目标函数的极小值。
%返回目标函数的极小值
fi=Ji; %适应度函数
[Oderfi,Indexfi]=sort(fi); %将适应度的值安从小到大排序
Bestfi=Oderfi(Size); %令Bestfi=max(fi)
BestS=E(Indexfi(Size),:); %令BestS=E(m),m为max(fi)所在的行
bfi(k)=Bestfi;
%***************** step2 选择,复制操作*********************************
fi_sum=sum(fi); %适应度求和
fi_Size=(Oderfi/fi_sum)*Size; %各适应度的值除以适应度的平均值
fi_S=floor(fi_Size); %floor向负无穷取整,得到各个体的复制值
kk=1;
for i=1:1:Size
for j=1:1:fi_S(i) %根据各个体复制值的大小进行选择复制
TempE(kk,:)=E(Indexfi(i),:);
kk=kk+1; %kk用于记录
end
end
%**************** step3 交叉操作*****************************************
pc=0.6; %交叉的概率为0.6
n=ceil(20*rand); %向正无穷取整得到(1--20)之间的随机整数,作为交叉点n
for i=1:2:(Size-1)
temp=rand; %产生(0--1)之间的随机数
if pc>temp %交叉条件
for j=n:1:20
TempE(i,j)=E(i+1,j);
TempE(i+1,j)=E(i,j); %将复制之前和之后的两个种群进行交叉,放到种群2(TempE)
end
end
end
TempE(Size,:)=BestS; %保留最好的个体
E=TempE; %覆盖种群1(E)
%*************** step4 变异操作****************************************
%pm=0.001; %变异概率一般取0.001
%p=0.001-[1:1:Size]*(0.001)/Size; %大的适应度,小的变异概率
%pm=0.0; %不变异
pm=0.1; %大的变异概率
for i=1:1:Size
for j=1:1:2*Codel
temp=rand; %产生(0--1)之间的随机数
if pm>temp %变异条件
if TempE(i,j)==0;
TempE(i,j)=1;
else
TempE(i,j)=0;
end
end
end
end
TempE(Size,:)=BestS; %保留最好的个体
E=TempE; %覆盖种群1(E)
end
%*********************画图**********************************
Max_Value=Bestfi %最大适应度值
BestS %最佳参数值
x1 %最佳参数值对应到取值范围内的值
x2
figure(1);
plot(time,BestJ);
xlabel('Times');ylabel('Best J'); %每代的最佳目标函数值
figure(2);
plot(time,bfi);
xlabel('Times');ylabel('Best F'); %每代的最佳适应度函数值
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -