MATLAB-----2019/7/10

非线性规划

1.定义:
   若目标函数或约束条件中包含非线性函数,就成这种规划问题为非线性规划。
2.非线性规划的一般形式:
m i n f ( x ) min \quad f(x) minf(x)
s . t . = { h j ( x ) ≤ 0 , j = 1 , ⋯   , q g i ( x ) ≤ 0 , i = 1 , ⋯   , p s_{.}t_{.}=\left\{ \begin{aligned} h_{j}(x) \leq 0 ,j=1,\cdots,q \\ g_{i}(x) \leq 0 ,i=1,\cdots,p \end{aligned} \right. s.t.={hj(x)0,j=1,,qgi(x)0,i=1,,p
3.非线性规划与线性规划的区别:
   如果线性规划最优解存在,则最优解只能在其可行域的边界上达到(特别是可行域顶点处达到);如果非线性规划最优解存在,则最优解可能在其可行域的任何一点上达到。
4.非线性规划的MATLAB解法:

  • 标准形式:
    m i n f ( x ) min \quad f(x) minf(x)
    s . t . = { A ⋅ x ≤ b , A e q ⋅ x = b e q c ( x ) = 0 l b ≤ x ≤ u b s_{.}t_{.}=\left\{ \begin{aligned} A \cdot x \leq b , \\ Aeq \cdot x=beq \\ c(x)=0 \\ lb \leq x \leq ub \end{aligned} \right. s.t.=Axb,Aeqx=beqc(x)=0lbxub
  • MATLAB中的命令是:
    [ x , f v a l ] = f m i n c o n ( f u n , x 0 , A , b , A e q , b e q , l b , u b , n o n l c o n , o p t i o n s ) [x,fval]=fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options) [x,fval]=fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options)
    n o n l c o n 是 c ( x ) , c e q ( x ) ; o p t i o n 定 义 了 优 化 参 数 , 可 以 用 M A T L A B 默 认 的 参 数 设 置 。 nonlcon是c(x),ceq(x);option定义了优化参数,可以用MATLAB默认的参数设置。 nonlconc(x),ceq(x);optionMATLAB

5.无约束问题的MATLAB解法:
过程:
① 求一阶导数
②求Hessian阵
③求驻点,若在驻点出Hessian阵为正定阵,则在该点处取最小值;若在驻点出Hessian阵为负定阵,则在该点处取最大值;若在驻点出Hessian阵为不定阵,则在该驻点不是极值点。

6.无约束极值问题的数值解

 Ⅰ [ x , f v a l ] = f m i n u n c ( f u n , x 0 , o p t i o n ) [x,fval]=fminunc(fun,x0,option) [x,fval]=fminunc(fun,x0,option),求解多维无约束非线性优化问题。其中 x x x是所求的极小值点, f v a l fval fval是函数的极小值点。
    f u n fun fun是一个M函数,若 f u n fun fun只有一个返回值,则它的返回值是函数 f ( x ) f(x) f(x); 若 f u n fun fun只有两个返回值,则它的第二个返回值是函数 f ( x ) f(x) f(x)的梯度向量(梯度向量(矢量),表示某一函数在该点处的方向导数沿着该方向取得最大值,即函数在该点处沿着该方向(此梯度的方向)变化最快,变化率最大); 若 f u n fun fun有三个返回值,则它的第三个返回值是函数 f ( x ) f(x) f(x)的二阶导数阵(Hessian阵)。

 Ⅱ [ x , f v a l ] = f m i n s e a r c h ( f u n , x 0 , o p t i o n ) [x,fval]=fminsearch(fun,x0,option) [x,fval]=fminsearch(fun,x0,option)可用来求多元函数的极小值。
 Ⅲ [ x , f v a l , e x i t f l a g , o u t p u t ] = f m i n b n d ( f u n , x 0 , o p t i o n ) [x,fval,exitflag,output]=fminbnd(fun,x0,option) [x,fval,exitflag,output]=fminbnd(fun,x0,option)可用来求解一维搜索问题。
总结:三种命令不同的适用条件
f m i n u n c = { 多 维 无 约 束 非 线 性 优 化 fminunc= \begin{cases} 多维无约束非线性优化 \end{cases} fminunc={线
$$
fminbnd=
\begin{cases}
它用于求解一维设计变量在固定区间内的目标函数的最小值 \

\end{cases}
$$

7.约束极值问题

  • 定义: 带有约束条件的极值问题成为约束极值问题。为简化其优化工作,将约束问题化为无约束问题;将非线性问题化为线性问题。(思想为化繁为简,感觉有点类似于数据结构中的归并排序)

  • 二次规划
    (1)
    形 成 条 件 = { 某 非 线 性 规 划 的 目 标 函 数 为 自 变 量 x 的 二 次 函 数 约 束 条 件 为 全 线 性 的 形成条件= \begin{cases} 某非线性规划的目标函数为自变量x的二次函数 \\ 约束条件为全线性的 \\ \end{cases} ={线x线
    注:两条件缺一不可

    (2) MATLAB中二次规划的数学模型:
    m i n 1 2 x T H x + f T x , min \quad\frac{1}{2}x^{T}Hx+f^{T}x, min21xTHx+fTx,
    s . t . = { A ⋅ x ≤ b , A e q ⋅ x = b e q , l b ≤ x ≤ u b s_{.}t_{.}=\left\{ \begin{aligned} A \cdot x \leq b , \\ Aeq \cdot x=beq , \\ lb \leq x \leq ub \end{aligned} \right. s.t.=Axb,Aeqx=beq,lbxub
    (3)MATLAB中解二次规划的命令为:
    [ x , f v a l ] = q u a d p r o g ( f u n , x 0 , A , b , A e q , b e q , l b , u b , o p t i o n s ) [x,fval]=quadprog(fun,x0,A,b,Aeq,beq,lb,ub,options) [x,fval]=quadprog(fun,x0,A,b,Aeq,beq,lb,ub,options)

  • 罚函数法(用来将非线性规划问题的求解转化为一系列无约束求值问题

    (1) 思想:利用问题中的约束函数做出适当的罚函数。由此构出带参数的增广目标函数,把问题转化为一系列无约束求值问题。

    (2)
    罚 函 数 = { 外 罚 函 数 内 罚 函 数 罚函数=\left\{ \begin{aligned} 外罚函数 \\ 内罚函数 \end{aligned} \right. ={
    (3)外罚函数:
    一般形式:
    m i n f ( x ) min \quad f(x) minf(x)
    s . t . = { g i ( x ) ≤ 0 , i = 1 , ⋯   , r h j ( x ) ≥ 0 , j = 1 , ⋯   , s k m ( x ) = 0 , m = 1 , ⋯   , t s_{.}t_{.}=\left\{ \begin{aligned} g_{i}(x) \leq 0,\qquad i=1,\cdots,r \\ h_{j}(x) \geq 0,\qquad j=1,\cdots,s \\ k_{m}(x)=0,\qquad m=1,\cdots,t \\ \end{aligned} \right. s.t.=gi(x)0,i=1,,rhj(x)0,j=1,,skm(x)=0,m=1,,t
    取一个充分大的数 M > 0 M >0 M>0,构造函数:
    P ( x , M ) = f ( x ) + M ∑ i = 1 r m a x ( g i ( x ) , 0 ) − M ∑ j = 1 s m i n ( h j ( x ) , 0 ) + M ∑ m = 1 t ∣ k m ( x ) ∣ P(x,M)=f(x)+M\sum_{i=1}^{r}{max(g_{i}(x),0)}-M\sum_{j=1}^{s}{min(h_{j}(x),0)}+M\sum_{m=1}^{t}{|k_{m}(x)|} P(x,M)=f(x)+Mi=1rmax(gi(x),0)Mj=1smin(hj(x),0)+Mm=1tkm(x)

  • 在MATLAB中用于求约束最优化问题的函数:
    f m i n b n d 函 数 \quad fminbnd 函数 fminbnd:
    求单变量非线性函数在区间上的极小值
    一般形式:
    m i n x f ( x ) , x ∈ ( x 1 , x 2 ) \mathop{min}\limits_{x}f(x),x\in(x1,x2) xminf(x),x(x1,x2)

[ x , f v a l ] = f m i n b n d ( f u n , x 1 , x 2 , o p t i o n s ) [x,fval]=fminbnd(fun,x1,x2,options) [x,fval]=fminbnd(fun,x1,x2,options)

f s e m i n f 函 数 \quad fseminf 函数 fseminf:
一般形式:
m i n f ( x ) min \quad f(x) minf(x)
s . t . = { A ⋅ x ≤ b , A e q ⋅ x = b e q l b ≤ x ≤ u b c ( x ) ≤ 0 c e q ( x ) ≤ 0 K i ( x , w i ) ≤ 0 , 1 ≤ i ≤ n s_{.}t_{.}=\left\{ \begin{aligned} A \cdot x \leq b , \\ Aeq \cdot x=beq \\ lb \leq x \leq ub \\ c(x)\leq0 \\ ceq(x)\leq0 \\ K_{i}(x,w_{i})\leq0, 1\leq i \leq n \end{aligned} \right. s.t.=Axb,Aeqx=beqlbxubc(x)0ceq(x)0Ki(x,wi)0,1in
[ x , f v a l ] = f s e m i n f ( f u n , x 0 , n t h e t a , s e m i n f c o n , A , b , A e q , b e q , l b , u b ) [x,fval]=fseminf(fun,x0,ntheta,seminfcon,A,b,Aeq,beq,lb,ub) [x,fval]=fseminf(fun,x0,ntheta,seminfcon,A,b,Aeq,beq,lb,ub)

ntheta: 半 无 穷 约 束 K i ( x , w i ) 半无穷约束K_{i}(x,w_{i}) Ki(x,wi)的个数;
seminfcon: 用 于 定 义 c ( x ) , c e q ( x ) , K i ( x , w i ) 的 函 数 , 有 两 个 输 入 参 数 x 和 s , s 是 推 荐 步 长 用于定义c(x),ceq(x),K_{i}(x,w_{i})的函数,有两个输入参数x和s,s是推荐步长 c(x),ceq(x),Ki(x,wi),xs,s

f m i n i m a x 函 数 fminimax函数 fminimax
一般形式:
m i n x m a x i F i ( x ) \mathop{min}\limits_{x} \mathop{max}\limits_{i} \quad F_{i}(x) xminimaxFi(x)
s . t . = { A ⋅ x ≤ b , A e q ⋅ x = b e q c ( x ) ≤ 0 c e q ( x ) = 0 l b ≤ x ≤ u b s_{.}t_{.}=\left\{ \begin{aligned} A \cdot x \leq b , \\ Aeq \cdot x=beq \\ c(x)\leq0 \\ ceq(x)=0 \\ lb \leq x \leq ub \end{aligned} \right. s.t.=Axb,Aeqx=beqc(x)0ceq(x)=0lbxub
[ x , f v a l ] = q u a d p r o g ( f u n , x 0 , A , b , A e q , b e q , l b , u b , o p t i o n s ) [x,fval]=quadprog(fun,x0,A,b,Aeq,beq,lb,ub,options) [x,fval]=quadprog(fun,x0,A,b,Aeq,beq,lb,ub,options)

注:以上我所写内容均来自于《数学建模算法与应用(第二版)》(司守奎,孙兆亮主编),仅为我个人按书上写的练习所用


LATEX中属于符号:\in 内容

举例:$x\in[0,5]$ 显示: x ∈ [ 0 , 5 ] x\in[0,5] x[0,5]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值