es算法matlab编程,matlab练习程序(演化策略ES)

该博客介绍了如何使用遗传算法求解二维高斯函数的最优化问题。首先,通过设置种群大小和迭代次数初始化算法,然后利用随机数生成父代并结合正弦和余弦公式进行变异生成后代。接着,计算每个后代的适应度,并更新全局最优解。在MATLAB中实现这一过程,通过迭代和选择机制逐步优化。最后,绘制了目标函数的图形以直观展示问题。
摘要由CSDN通过智能技术生成

% 算法步骤如下:

% 1.设定种群个体数和需要迭代的次数。

% 2.选择父代中的个体按照公式:

% z1=sqrt(-2*ln(u1))*sin(2*pi*u2)*m,

% z2=sqrt(-2*ln(u1))*cos(2*pi*u2)*m

% 这里u1,u2都是随机值,m是控制因子,演化次数越多m,

% m越小,父代通过与z1,z2相加得到后代。

% 3.计算后代的适应性。

% 4.选择后代中最优的适应性作为全局最优适应性。

7d8cee260148fce323985915ed2ad78b.png

%% matlab 代码开始

clc;

clear all;

close all;

%% 绘出所求函数图形

[x,y] = meshgrid(-100:100,-100:100);

sigma = 50;

img = (1/(2*pi*sigma^2))*exp(-(x.^2 + y.^2)/(2*sigma^2));

mesh(img);

axis([-100,100,-100,100,2e-5,8e-5]);

hold on

%% 初始化种群

pop_size = 20;%种群规模

pop = struct([]);

iterative = 100;

for i = 1:pop_size

pop(i).x = -100 + 200*rand();

pop(i).y = -100 + 200*rand();

pop(i).fit = compute_fit(pop(i));

end

pop_best = pop(1);

%% 演化开始

p1 = plot3(pop_best.x +100,pop_best.y+100,pop_best.fit,‘k.‘,‘markersize‘,30);

for i = 1:iterative

set(p1, ‘xdata‘,pop_best.x+100,‘ydata‘,pop_best.y+100,‘zdata‘,pop_best.fit)

drawnow

pause(.1)

[pop,pop_best] = select_and_combin(pop,pop_best,pop_size,i,iterative);

end

function [new_pop,pop_best] = select_and_combin(pop,pop_best,pop_size,k,iterative)

mul = (iterative - k) / iterative;

new_pop = pop;

% z1=sqrt(-2*ln(u1))*sin(2*pi*u2)*m,

% z2=sqrt(-2*ln(u1))*cos(2*pi*u2)*m

for i = 1:pop_size

%随机数

u1 = rand();

u2 = rand();

z1 = sqrt(-2*log(u1))*sin(2*pi*u2)*mul;

z2 = sqrt(-2*log(u1))*cos(2*pi*u2)*mul;

%变异

new_pop(i).x = pop(i).x + z1;

new_pop(i).y = pop(i).y + z2;

%计算适应值

new_pop(i).fit = compute_fit(new_pop(i));

if new_pop(i).fit < pop(i).fit

new_pop(i) = pop(i);

end

if pop_best.fit < new_pop(i).fit

pop_best = pop(i);

end

end

end

function re = compute_fit(pop)

x = pop.x;

y = pop.y;

sigma = 50;

if x < -100 || x > 100 || y < -100 || y > 100

re = 0;

else

re =(1/(2*pi*sigma^2))*exp(-(x^2 + y ^2)/(2 * sigma^2));

end

http://www.cnblogs.com/tiandsp/p/3165388.html

原文:http://www.cnblogs.com/Kermit-Li/p/4051915.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
clear format long u=15; %个体数 %a=1.4; %a=1.6 %a=1.8; %a=2.0; %a=2.5; %a=3.0; %a=3.5; %a=4.0; %a=4.5; a=5.0; lemda=7.*u;% 扩充的个体数 x=rand(u,1); y=((exp(a.*x)-exp((-a).*x))./(exp(a.*x)+exp((-a).*x)))-x;%计算函数值 shizhi=1./(1+y.^2);%计算适应度值 f=zeros(u,1);%初始群体的适应度值空间 f=shizhi; ff=zeros(lemda,1);%经过重组、变异后的群体的适应度值空间 [maxf,index]=max(shizhi);%将最大的适应度值取出来 mbig=maxf(end); episilon=0.999999999; sigma=zeros(lemda,1); sigma(:,:)=3.0; r=1; r1=1; s=0; xx=zeros(lemda,1); while(mbig<episilon) %重组----任选两个个体第k1(:,1),k1(:,2)个 for i=1:lemda k1=floor(u*rand(lemda,2))+1; xx(i,1)=x(k1(i,1),1)*0.5+x(k1(i,2),1)*0.5;%对群体(群体为整数)进行黄金分割重组 Sigma(i,1)=sigma(k1(i,1),1)*0.5+sigma(k1(i,2),1)*0.5;%对标准差也进行黄金分割重组 end %突变 ra=2.*rand(lemda,1)-1; ra1=2.*rand(lemda,1)-1; Sigma=Sigma.*exp(r1.*ra1+r.*ra); xx=xx+Sigma.*ra;%扩充后的群体 for i=1:lemda if xx(i,1)1 xx(i,1)=rand(1,1); end end y1=((exp(a.*xx)-exp((-a).*xx))./(exp(a.*xx)+exp((-a).*xx)))-xx;%计算函数值 shizhi1=1./(1+y1.^2);%适应度值得大小 [maxff,index]=sort(shizhi1);%将最大的适应值取出来 mbig=maxff(end); %扩充后的最大的适应度 %下面选择最优的u个个体 x=xx(index(lemda-u+1:end),:);%从经过突变后的新个体中选取最优的u个个体作为下一代的初始群体 sigma=Sigma(index(lemda-u+1:end),:); x(end,1); s=s+1 end x(end) %取最优的系数解
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值