【matlab基础知识代码】(十九)全局最优解&可行解区域

【matlab基础知识代码】(十九)全局最优解&可行解区域

码农世界 2024-05-17 前端 66 次浏览 0个评论

 Minimize Rastrigins' Function Using ga, Problem-Based - MATLAB & Simulink - MathWorks 中国

基准测试函数——Rastrigin函数

 >>  ezsurf('20+x1^2+x2^2-10*(cos(pi*x1)+cos(pi*x2))') 

 俯视图

>> view(0,90),shading flat

 

function [x,f0]=fminunc_global(f,a,b,n,N,varargin)
k0=0;f0=Inf;if strcmp(class(f),'struct'),k0=1;end
for i=1:N,x0=a+(b-a)*rand(n,1);
    if k0==1,f.x0=x0;[x1 f1 key]=fminunc(f);
    else, [x1 f1 key]=fminunc(f,x0,varargin{:}); end
    if key>0 & f1 

有时,仅利用目标函数提供的信息,很难得到精确 的最优解。这是由于求解某些最优化问题收敛速度 一般较慢,尤其是变量较多的最优化问题。可以利用梯度信息解决上述问题。

求函数的无约束最优化问题

 >> [x,y]=meshgrid(0.5:0.01:1.5); z=100*(y.^2-x).^2+(1-x).^2;contour3(x,y,z,100), zlim([0,310])

f=@(x)100*(x(2)-x(1)^2)^2+(1-x(1))^2;ff=optimset; ff.TolX=1e-10; ff.TolFun=1e-20; x=fminunc(f,[0;0],ff) % 不用梯度信息求解

求梯度矩阵

>> syms x1 x2; f=100*(x2-x1^2)^2+(1-x1)^2; J=jacobian(f,[x1,x2])

 

J =

 

[2*x1 - 400*x1*(- x1^2 + x2) - 2, - 200*x1^2 + 200*x2]

包含梯度的目标函数   引入梯度信息

function [y,Gy]=c6fun3(x)

y=100*(x(2)-x(1)^2)^2+(1-x(1))^2;

Gy=[-400*(x(2)-x(1)^2)*x(1)-2+2*x(1);200*x(2)-200*x(1)^2];

这个时候就不适合使用匿名函数了,因为匿名函数只能返回一个变量

>> ff.GradObj='on'; x=fminunc(@c6fun3,[0;0],ff)

x =

    1.0000

    1.0000

可行解区域

可行解区域描述

fminsearchbnd, fminsearchcon - File Exchange - MATLAB Central (mathworks.cn)

用这个网站注册一下,然后解压之后,添加路径即可。

 >>  f=@(x)[100*(x(2)-x(1)^2)^2+(1-x(1))^2]; xm=[2,3]; xM=[4,6]; x=fminsearchbnd(f,[0,0],xm,xM)

x =

    2.0000    4.0000

>> f=@(x)[100*(x(2)-x(1)^2)^2+(1-x(1))^2];  x=fminsearchbnd(f,[0,0],[2,3],[4,6]), format long%显示15位小数

x =

   2.000000000241948   3.999999672561708

转载请注明来自码农世界,本文标题:《【matlab基础知识代码】(十九)全局最优解&可行解区域》

百度分享代码,如果开启HTTPS请参考李洋个人博客
每一天,每一秒,你所做的决定都会改变你的人生!

发表评论

快捷回复:

评论列表 (暂无评论,66人围观)参与讨论

还没有评论,来说两句吧...

Top