es算法matlab编程,matlab练习程序(演化策略ES)
% 算法步驟如下:
% 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.選擇后代中最優的適應性作為全局最優適應性。
%% 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
總結
以上是生活随笔為你收集整理的es算法matlab编程,matlab练习程序(演化策略ES)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: case when用法java,sql之
- 下一篇: oracle v$ 表,【学习笔记】Or