找回密码
 注册
Simdroid-非首页
查看: 32|回复: 0

进化规划算法(EP)的Matlab代码

[复制链接]
发表于 2011-7-19 20:35:33 | 显示全部楼层 |阅读模式 来自 大连理工大学
本帖最后由 caoyuanlang 于 2011-7-20 14:19 编辑

%****************************************************
%问题描述
%min f(x)=-2πx-∑sin(2^(i+1)πx),i=0,1,...,10
%s.t. x∈[0,1]
%****************************************************
%枚举法获得最优值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);
% [f_min,index]=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
[f_min,index_min]=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
    [f_sort,index]=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
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-4-27 12:40 , Processed in 0.031181 second(s), 13 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表