进化规划算法(EP)的Matlab代码
本帖最后由 caoyuanlang 于 2011-7-20 14:19 编辑%****************************************************
%问题描述
%min f(x)=-2πx-∑sin(2^(i+1)πx),i=0,1,...,10
%s.t. x∈
%****************************************************
%枚举法获得最优值f_min及最优解x_best
% x=0:0.0001:1;
% for i=1:length(x)
% f(i)=-2*pi*x(i);
% for j=0:10
% f(i)=f(i)-sin(2^(j+1)*pi*x(i));
% end
% end
% plot(x,f);
% =min(f);
% x_best=x(index);
%***************************************************
clc
clear
tic
Nmax=40;%种群规模
Gmax=100;%迭代终止次数
sigma=0.9;%变量服从的正态分别的标准差
x=rand(1,Nmax);
for i=1:Nmax
f(i)=-2*pi*x(i);
for j=0:10
f(i)=f(i)-sin(2^(j+1)*pi*x(i));
end
end
=min(f);
t=0;
temp=f_min;
flag=0;%标记是否是第一次计算
flag_stop=0;
while flag_stop<Gmax
if abs(f_min-flag*temp)<1e5
flag_stop=flag_stop+1;
end
flag=1;
temp=f_min;
E(t+1)=f_min;
%压缩因子
if t<=Gmax/2
a=1;
else
a=0.03;
end
for i=1:Nmax
x(Nmax+i)=x(i)+a*normrnd(0,sigma);
while x(Nmax+i)<0||x(Nmax+i)>1
x(Nmax+i)=x(i)+a*normrnd(0,sigma);
end
end
%计算新个体的函数值
for i=1:Nmax
f(Nmax+i)=-2*pi*x(Nmax+i);
for j=0:10
f(Nmax+i)=f(Nmax+i)-sin(2^(j+1)*pi*x(Nmax+i));
end
end
=sort(f);
for i=1:Nmax
xx(i)=x(index(i));
end
f_min=f_sort(1);
x_best=x(index(1));
x(1:Nmax)=xx;
f(1:Nmax)=f_sort(1:Nmax);
t=t+1;
end
toc
plot(E,'*-')
grid on
页:
[1]