使用遗传算法寻找函数极值
%% 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
这里取值范围已经超出界限了,我也不知道哪里出错了,有明白的大佬请指正。
我要是弄明白了也会及时修改代码。