您的位置:首页 > 编程语言 > MATLAB

matlab使用遗传算法找函数极值

2018-02-05 13:14 543 查看
使用遗传算法寻找函数极值

%% I. 清空环境变量
clear all
clc

%% II. 绘制函数曲面
xx = -2:0.01:2;
yy = -2:0.01:2;
[x,y] = meshgrid(xx,yy);
z =  x*cos(2*pi*y) + y*sin(2*pi*x) ;

mesh(x,y,z)

shading interp
xlabel('x');ylabel('y');zlabel('z')
title('z =  x*cos(2*pi*y) + y*sin(2*pi*x)')
axis tight

%% III. 初始化种群
%初始种群50,
initPop = initializega(100,[[-1 1],[-1 1]],'fitness');

aa = ones(2,1)*[-2,2];
%% IV. 遗传算法优化
[x endPop bpop trace] = ga([-2 2],'fitness',[],initPop,[1e-6 1 1],'maxGenTerm',25,...
'normGeomSelect',0.08,'arithXover',2,'nonUnifMutation',[2 25 3]);

%% V. 输出最优解并绘制最优点
x
hold on
xx = endPop(:,1);
yy = endPop(:,2);
[x,y] = meshgrid(xx,yy);
z =  x*cos(2*pi*y) + y*sin(2*pi*x) ;
plot3 (x,y,z,'ro')

%% VI. 绘制迭代进化曲线
figure(2)
plot(trace(:,1),trace(:,3),'b:')
hold on
plot(trace(:,1),trace(:,2),'r-')
xlabel('Generation'); ylabel('Fittness');
legend('Mean Fitness', 'Best Fitness')


function [sol, fitnessVal] = fitness(sol, options)

x = sol(1);
y = sol(2);
fitnessVal = x*cos(2*pi*y) + y*sin(2*pi*x);

end


这是函数的三维图



计算出的最优个体:

x =

1.2274   10.7630


这里取值范围已经超出界限了,我也不知道哪里出错了,有明白的大佬请指正。

我要是弄明白了也会及时修改代码。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  matlab 遗传算法