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

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

%% 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

这是函数的三维图
matlab使用遗传算法找函数极值_第1张图片
计算出的最优个体:
x =

1.2274   10.7630

这里取值范围已经超出界限了,我也不知道哪里出错了,有明白的大佬请指正。
我要是弄明白了也会及时修改代码。

你可能感兴趣的:(机器学习,matlab,遗传算法)