caoyuanlang 发表于 2011-7-19 20:35:33

进化规划算法(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]
查看完整版本: 进化规划算法(EP)的Matlab代码