matlab最优化问题的函数fminbnd,(fmincon),globalsearch,multistart(求解函数构造)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/a6333230/article/details/84787529

接上一篇fminbnd

②fmincon(局部最优)

求解非线性多元函数最小值的matlab函数,对有约束优化问题进行求解。
简单理解就是,我们需要求解的函数可以有多个未知量。
fmincon 是一种基于梯度的方法,旨在解决客观和约束函数都是连续的并且具有连续的一阶导数的问题。
利用——拉格朗日的Hessian、目标函数的Hessian

x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options)

列出这个这么多的参数,并非是要说一个公式我需要给这么多输入。其中很多项没有的话就可以直接用**[ ]**代替。这里想解释一下每个参数的含义。

fun
我们需要求最优的函数,这里解释一下,给函数的两种表示形式。
①函数简单

fun = @(x)cos(x(1))+sin(x(2))-5*(x(3));

其中(x(1))、(x(2))、(x(3))代表了需要优化的三个参数。

②函数过于庞大,甚至包含了多种判断语句

function f = fun(x)
f = cos(x(1))+sin(x(2))-5*(x(3))+……x(n);
end

单独构造一个函数,这个函数需要优化的参数是x(1)……x(n)
其目标时f
这里构造的函数可能会遇到一些问题,这些问题在后续论文总结写出。

x0
初始值,初始值的选取有时候决定了你是不是走入了局部极小值
这个初始值的设定,直接翻看上一篇fminbnd的总结部分,很详细。

A和b
用于给出各参数的限制关系式,例如
4x1 + 3x2 <= 7
x1 + 4*x2 <= 5

其A,b写为
A = [4, 3; 1, 4];
b = [7, 5];
其关系为Ax<=b’

Aeq,beq
和A、b类似
唯一的区别
Ax<=b’,Aeq*x=beq’

x1 + x2 = 5

nonlcon
为了补充函数的限制
例子
我们的参数x(1)和x(2)的取值范围为一个圆,圆心(2,2),半径4。并且x(1)+x(2)=4
①先构造函数

[c,ceq] = circlecon(x)
c =(x(1)-2)^ 2 +(x(2)-2)^ 2  - (4)^ 2;
ceq = x(1)^1.2+x(2)-4;

其中隐含的关系为,c是非线性不等式,ceq是非线性等式
c(x) ≤ 0
ceq(x) = 0
②对构造函数进行引入

nonlcon = @circlecon;
x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon)

options
这里设置不设置都行因为此项已为默认

需要输出每步结果

options = optimoptions(' fmincon ','Display','iter','Algorithm','sqp');

输出的选择

[x,fval,exitflag,output,lambda,grad,hessian] = fmincon(problem)
前四项在上一篇博文说明,这里不再赘述

lambda- 包含解决方案中拉格朗日乘数的字段的结构x。
grad- fun解决方案的梯度x。
hessian- Hessian fun的解决方案x。见fmincon Hessian。
在这里插入图片描述

结构体problem构造优化

①构造限制函数

function [c,ceq] = unitdisk(x)
c = x(1)^ 2 + x(2)^ 2  -  5;
ceq = [];

②构造结构体

options = optimoptions(' fmincon ','Display','iter','Algorithm','sqp');
problem.options = options;
problem.solver =' fmincon ';
problem.objective = @(x)100 *(x(2)-x(1)^ 2)^ 2 +(1-x(1))^ 2;
problem.x0 = [0,0];
problem.nonlcon = @unitdisk;

③求解优化

x = fmincon(problem)

globalsearch,multistart以及函数构造在下一篇博文讲解

猜你喜欢

转载自blog.csdn.net/a6333230/article/details/84787529