最优化问题matlab求解-fminsearch()和fmincon()函数的使用

matlab可以求解无约束最优化问题、有约束最优化问题和线性规划、二次型规划问题等,同时实现了最小二乘法的曲线拟合方法。matlab求解优化问题的步骤为:

  1. 写标准型
  2. 描述目标函数:M-函数或匿名函数
  3. fminunc()fmincon()等函数求解原问题。
  4. 检验得出的解,如随机变换求解的初值,观察是否能得到更好的解。
  5. 传统最优化方法的最大问题是无法保证得到全局最优解,可以考虑调用matlab的进化算法,如遗传算法和粒子群算法来求解原问题。

1. 无约束最优化问题求解-fminsearch()

无约束最优化问题一般描述为:

min ⁡ x f ( x ) \min _{\boldsymbol{x}} f(\boldsymbol{x}) xminf(x)

我们的目标是选取合适的 x \boldsymbol{x} x(一个向量)使得目标函数 f ( x ) f(\boldsymbol{x}) f(x)的值最小,最小化是最优化问题的通用描述,如果要求解最大化问题,可以给目标函数 f ( x ) f(\boldsymbol{x}) f(x)添加一个负号转化为求解最小值问题。

matlab提供了基于单纯形法求解无约束的函数的fminsearch(),该函数调用格式为

[ x , f opt  , key , c ] =  fminsearch (Fun  , x 0 ,  options,附加参数 ) \left.\left[\boldsymbol{x}, f_{\text {opt }},\text {key},\text {c}\right]=\text { fminsearch (Fun }, \boldsymbol{x}_{0}, \text { options,\text{附加参数}}\right) [x,fopt ,key,c]= fminsearch (Fun ,x0, options,附加参数)

其中

  • Fun \text{Fun} Fun:要求解问题的数学描述,是一个matlab函数也可以是是一个函数句柄;
  • x 0 \boldsymbol{x}_{0} x0:自变量的起始搜索点,需要用户自己定义;
  • x \boldsymbol{x} x:寻找到最优值下的自变量的结果。
  • f o p t {f}_{\mathrm{opt}} fopt:最优化的目标函数结果。
  • key \text{key} key:函数返回的条件,正整数表示已经求解方程的解。而0或负整数表示未搜索到方程的解;
  • c \text{c} c:解的附加信息,该变量是一个结构体变量,包含 + iteration: 迭代的次数; + funcCount: 目标函数的调用次数

另外matlab最优化工具箱提供fminunc()fminsearch()的功能很像,有时候求解无约束最优化问题可以选择该函数。

1.1 例子

我们现在考虑二元函数

min ⁡ x , y f ( x , y ) = ( x 2 − 2 x ) e − x 2 − y 2 − x y \min _{{x,y}}f(x,y)=(x^2-2x)\mathrm{e}^{-x^2-y^2-xy} x,yminf(x,y)=(x22x)ex2y2xy


我们需要做变量代换:令 x 1 = x x_1=x x1=x x 2 = y x_2=y x2=y x = [ x 1 , x 2 ] T \boldsymbol{x}=[x_1,x_2]^T x=[x1,x2]T,于是转化目标函数为:

f ( x ) = ( x 1 2 x 1 ) e − x 1 2 − x 2 2 − x 1 x 2 f(\boldsymbol{x})=(x_1^2x_1)\mathrm{e}^{-x_1^2-x_2^2-x_1x_2} f(x)=(x12x1)ex12x22x1x2

f=@(x)(x(1)^2-2*x(1))*exp(-x(1)^2-x(2)^2-x(1)*x(2));
x0=rand(2,1);[x,f1]=fminsearch(f,x0)

解得:

在这里插入图片描述

2. 有约束最优化问题求解-fmincon()

min ⁡ x f ( x )  s.t.  { A x ⩽ B A e q x = B e q x m ⩽ x ⩽ x M C ( x ) ⩽ 0 C e q ( x ) = 0 \min _{\boldsymbol{x}} f(\boldsymbol{x})\\ \text { s.t. }\left\{\begin{array}{l} \boldsymbol{A} \boldsymbol{x} \leqslant \boldsymbol{B} \\ \boldsymbol{A}_{\mathrm{eq}} \boldsymbol{x}=\boldsymbol{B}_{\mathrm{eq}} \\ \boldsymbol{x}_{\mathrm{m}} \leqslant \boldsymbol{x} \leqslant \boldsymbol{x}_{\mathrm{M}} \\ \boldsymbol{C}(\boldsymbol{x}) \leqslant \mathbf{0} \\ \boldsymbol{C}_{\mathrm{eq}}(\boldsymbol{x})=\mathbf{0} \end{array}\right. xminf(x) s.t.  AxBAeqx=BeqxmxxMC(x)0Ceq(x)=0

可以看到约束可以是线性等式约束(第1个式子)也可以是线性不等式约束(第2个式子),可以是有界约束(第3个式子),还可以是非线性约束(第4个和第5个式子)。在matlab里提供了一个fmincon()函数,专门用于求解各种约束下的最优化问题,其调用方式为:

[ x , f opt , key,c ] = fmincon ( Fun , x 0 , A , B , A e q , B e q , x m , x M , CFun,OPT ) \left[\boldsymbol{x}, f_{\text {opt}}, \text {key,c}\right]=\text {fmincon}\left(\text {Fun}, \boldsymbol{x}_{0}, \boldsymbol{A}, \boldsymbol{B}, \boldsymbol{A}_{\mathrm{eq}}, \boldsymbol{B}_{\mathrm{eq}}, \boldsymbol{x}_{\mathrm{m}}, \boldsymbol{x}_{\mathrm{M}}, \text {CFun,OPT}\right) [x,fopt,key,c]=fmincon(Fun,x0,A,B,Aeq,Beq,xm,xM,CFun,OPT)

其中

  • Fun \text{Fun} Fun:给目标函数写的m-函数;
  • x 0 \boldsymbol{x}_{0} x0:自变量的起始搜索点,需要用户自己定义;
  • 线性约束如果不存在用空矩阵来占位
  • x \boldsymbol{x} x:寻找到最优值下的自变量的结果。
  • f o p t {f}_{\mathrm{opt}} fopt:最优化的目标函数结果。
  • CFun \text{CFun} CFun:给非线性函数写的m-函数;
  • OPT \text{OPT} OPT:控制选项。
    如果在最优化过程中发现找不到可行解,在求解结束后将给出提示:No feasible solution found

有约束优化还有几种特殊的方式,如线性规划、二次型规划问题,可以使用工具箱的linprog()quadprog()函数直接求解。此外,整数规划、0-1规划等问题可以由专门的工具求解,下面给出一般非线性规划问题的最优化求解。

2.1 例子1

min ⁡ x 0.6224 x 1 x 2 x 3 x 4 + 1.7781 x 2 x 3 2 + 3.1661 x 1 2 x 4 + 19.84 x 1 2 x 3 )  s.t.  { 0.0193 x 3 − x 1 ≤ 0 0.00954 x 3 − x 2 ≤ 0 750 × 1728 − π x 3 2 x 4 − 4 π x 3 3 / 3 ≤ 0 x 4 − 240 ≤ 0 0.0625 ≤ x 1 , x 2 ≤ 6.1875 , 10 ≤ x 3 , x 4 ≤ 200 \min _{\boldsymbol{x}} 0.6224x_1x_2x_3x_4+1.7781x_2x_3^2+3.1661x_1^2x_4+19.84x_1^2x_3)\\ \text { s.t. }\left\{\begin{array}{l} 0.0193x_3-x_1\le0\\ 0.00954x_3-x_2\le0\\ 750\times 1728-\pi x_3^2x_4-4\pi x_3^3/3\le0 x_4-240\le0\\ 0.0625\le x_1,x_2\le 6.1875,10\le x_3,x_4\le 200 \end{array}\right. xmin0.6224x1x2x3x4+1.7781x2x32+3.1661x12x4+19.84x12x3) s.t.  0.0193x3x100.00954x3x20750×1728πx32x44πx33/30x424000.0625x1,x26.1875,10x3,x4200


main

% 定义目标函数
f=@(x)0.6224*x(1)*x(2)*x(3)*x(4)+1.7781*x(2)*x(3)^2+3.1661*x(1)^2*x(4)+19.84*x(1)^2*x(3);
% 定义求解条件
xm=[0.0625,0.0625,10,10];
xM=[6.1875,6.1875,200,200];
A=[];
B=[];
Aeq=[];
Beq=[];
x0=(xm+xM)/2;
ff=optimset;
ff.Tolx=1e-10;
ff.TolFun=1e-20;
[x,f]=fmincon(f,x0,A,B,Aeq,Beq,xm,xM,@constraint,ff)

由于约束函数要返回两个变量:等式约束 c e q \mathrm{ceq} ceq和不等式约束 c \mathrm{c} c。这里便不能用匿名函数来定义,原问题只有不等式约束,没有等式约束,所以返回的是空矩阵
constraint

% 定义非线性约束
function [c,ceq] = constraint(x)
c=[0.0193*x(3)-x(1);
    0.00954*x(3)-x(2);
    750*1728-pi*x(3)^2*x(4)-4*pi*x(3)^3/3;
    x(4)-240];
ceq=[];
end

运行main函数,最后我们得到的是:

在这里插入图片描述

有时候我们可能找不到最优解,这时候我们会提示:

Maximum number of function evaluations exceeded:
increase options.MaxFunEvals

这时候我们可能需要改进搜索的初值,或者修改控制参数OPT,再进行寻优,得到期望的最优值。

2.2 例子2

min ⁡ q , w , k k  s.t.  { q 3 + 9.625 q 1 w + 16 q 2 w + 16 w 2 + 12 − 4 q 1 − q 2 − 78 w = 0 16 q 1 w + 44 − 19 q 1 − 8 q 2 − q 3 − 24 w = 0 2.25 − 0.25 k ≤ q 1 ≤ 2.25 + 0.25 k 1.5 − 0.5 k ≤ q 2 ≤ 1.5 + 0.5 k 1.5 − 1.5 k ≤ q 3 ≤ 1.5 + 1.5 k \min _{\boldsymbol{q},w,k} k\\ \text { s.t. }\left\{\begin{array}{l} q_3+9.625q_1w+16q_2w+16w^2+12-4q_1-q_2-78w=0\\ 16q_1w+44-19q_1-8q_2-q_3-24w=0\\ 2.25-0.25k\le q_1\le 2.25+0.25k\\ 1.5-0.5k\le q_2\le 1.5+0.5k\\ 1.5-1.5k\le q_3\le 1.5+1.5k \end{array}\right. q,w,kmink s.t.  q3+9.625q1w+16q2w+16w2+124q1q278w=016q1w+4419q18q2q324w=02.250.25kq12.25+0.25k1.50.5kq21.5+0.5k1.51.5kq31.5+1.5k

我们首先需要对变量做替换:

x 1 = q 1 , x 2 = q 2 , x 3 = q 3 , x 4 = w , x 5 = k x_1=q_1,x_2=q_2,x_3=q_3,x_4=w,x_5=k x1=q1,x2=q2,x3=q3,x4=w,x5=k

并且需要对不等式重新进行整理:

min ⁡ x x 5  s.t.  { x 3 + 9.625 x 1 x 4 + 16 x 2 x 4 + 16 x 4 2 + 12 − 4 x 1 − x 2 − 78 x 4 = 0 16 x 1 x 4 + 44 − 19 x 1 − 8 x 2 − x 3 − 24 x 4 = 0 − 0.25 x 5 − x 1 ≤ − 2.25 x 1 − 0.25 x 5 ≤ 2.25 − 0.5 x 5 − x 2 ≤ − 1.5 x 2 − 0.5 x 5 ≤ 1.5 − 1.5 x 5 − x 3 ≤ − 1.5 x 3 − 1.5 x 5 ≤ 1.5 \min _{\boldsymbol{x}} x_5\\ \text { s.t. }\left\{\begin{array}{l} x_3+9.625x_1x_4+16x_2x_4+16x_4^2+12-4x_1-x_2-78x_4=0\\ 16x_1x_4+44-19x_1-8x_2-x_3-24x_4=0\\ -0.25x_5-x_1\le-2.25\\ x_1-0.25x_5\le 2.25\\ -0.5x_5-x_2\le-1.5\\ x_2-0.5x_5\le 1.5\\ -1.5x_5-x_3\le-1.5\\ x_3-1.5x_5\le 1.5\\ \end{array}\right. xminx5 s.t.  x3+9.625x1x4+16x2x4+16x42+124x1x278x4=016x1x4+4419x18x2x324x4=00.25x5x12.25x10.25x52.250.5x5x21.5x20.5x51.51.5x5x31.5x31.5x51.5

原问题有两个非线性等式约束,没有不等式约束。非线性约束条件描述
constraint

function [c,ceq] = constraint(x)
c=[];
ceq=[x(3)+9.625*x(1)*x(4)+16*x(2)*x(4)+16*x(4)^2+12-4*x(1)-x(2)-78*x(4);
16*x(1)*x(4)+44-19*x(1)-8*x(2)-x(3)-24*x(4)];
end

线性不等式约束我们写作 A x ≤ b \mathbf{Ax}\le \mathbf{b} Axb,其中:

A = [ − 1 0 0 0 − 0.25 1 0 0 0 − 0.25 0 − 1 0 0 − 0.5 0 1 0 0 − 0.5 0 0 − 1 0 − 1.5 0 0 1 0 − 1.5 ] , b = [ − 2.25 2.25 − 1.5 1.5 − 1.5 1.5 ] \mathbf{A}=\begin{bmatrix} -1& 0& 0 & 0 & -0.25\\ 1& 0 & 0 & 0 & -0.25\\ 0 & -1 & 0 & 0 & -0.5\\ 0 & 1 & 0 & 0 & -0.5\\ 0 & 0 & -1 & 0 & -1.5\\ 0 & 0 & 1 &0 &-1.5 \end{bmatrix},\mathbf{b}=\begin{bmatrix} -2.25\\ 2.25 \\ -1.5 \\ 1.5\\ -1.5 \\ 1.5 \end{bmatrix} A= 1100000011000000110000000.250.250.50.51.51.5 ,b= 2.252.251.51.51.51.5

该问题没有线性等式约束,也没有决策变量的下界和上界约束,所以可以将这些约束用空矩阵表示:

main

f=@(x)x(5);
xm=[];
xM=[];
A=[-1,0,0,0,-0.25;1,0,0,0,-0.25;0,-1,0,0,-0.5;0,1,0,0,-0.5;0,0,-1,0,-1.5;0,0,1,0,-1.5];
B=[-2.25;2.25;-1.5;1.5;-1.5;1.5];
Aeq=[];
Beq=[];
x0=2*rand(5,1);

[x,f]=fmincon(f,x0,A,B,Aeq,Beq,xm,xM,@constraint)

求解的时候很可能求出局部最优解 x 5 = 1.1448 x_5=1.1448 x5=1.1448,多调用几次就会得到全局最优解 x = [ 2.4544 , 1.9088 , 2.7263 , 1.3510 , 0.8175 ] T \boldsymbol{x}=[2.4544,1.9088,2.7263,1.3510,0.8175]^T x=[2.4544,1.9088,2.7263,1.3510,0.8175]T,目标函数为 0.8175 0.8175 0.8175

在这里插入图片描述

在这里插入图片描述

其他的典型的优化问题比如线性规划或者二次规划可以使用MATLAB的标准的函数来解决,可以点击下面的链接来得到具体的使用方法:

参考资料:
[1] 薛定宇.《控制系统仿真与计算机辅助设计》.第3版

matlab最优化程序包括:无约束一维极值问题、进退法、黄金分割法、斐波那契法、牛顿法基本牛顿法、全局牛顿法、割线法、抛物线法、三次插值法、可接受搜索法、Goidstein法、Wolfe Powell法、单纯形搜索法、Powell法、最速下降法、共轭梯度法、牛顿法、修正牛顿法、拟牛顿法、信赖域法、显式最速下降法、Rosen梯度投影法、罚函数法、外点罚函数法、內点罚函数法、混合罚函数法、乘子法、G-N法、修正G-N法、L-M法、线性规划、单纯形法、修正单纯形法、大M法、变量有界单纯形法、整数规划、割平面法、分支定界法、0-1规划、二次规划、拉格朗曰法、起作用集算法、路径跟踪法、粒子群优化算法、基本粒子群算法、带压缩因子的粒子群算法、权重改进的粒子群算法、线性递减权重法、自适应权重法、随机权重法、变学习因子的粒子群算法、同步变化的学习因子、异步变化的学习因子、二阶粒子群算法、二阶振荡粒子群算法 (matlab optimization process includes Non-binding one-dimensional extremum problems Advance and retreat method Golden Section Fibonacci method of basic Newton s method Newton s method Newton s Law of the global secant method parabola method acceptable to the three interpolation search method Goidstein France Wolfe.Powell France Simplex search method Powell steepest descent method Conjugate gradient method Newton s method Newton s method to amend Quasi-Newton Method trust region method explicitly steepest descent method, Rosen gradient projection method Penalty function method outside the penalty function method within the penalty function method Mixed penalty function multiplier method G-N was amended in G-N method L-M method Of linear programming simplex method, revised simplex method Big M method variables bounded simplex method, Cutting Plane Method integer programming branch and bound method 0-1 programming quadratic programming )
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值