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

这是函数的三维图
这里写图片描述
计算出的最优个体:
x =

1.2274   10.7630

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值