日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發布時間:2023/12/15 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。