非线性规划
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.=⎩⎪⎪⎪⎪⎨⎪⎪⎪⎪⎧A⋅x≤b,Aeq⋅x=beqc(x)=0lb≤x≤ub - 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默认的参数设置。 nonlcon是c(x),ceq(x);option定义了优化参数,可以用MATLAB默认的参数设置。
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.=⎩⎪⎨⎪⎧A⋅x≤b,Aeq⋅x=beq,lb≤x≤ub
(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)+M∑i=1rmax(gi(x),0)−M∑j=1smin(hj(x),0)+M∑m=1t∣km(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.=⎩⎪⎪⎪⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎪⎪⎪⎧A⋅x≤b,Aeq⋅x=beqlb≤x≤ubc(x)≤0ceq(x)≤0Ki(x,wi)≤0,1≤i≤n
[
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)的函数,有两个输入参数x和s,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.=⎩⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎧A⋅x≤b,Aeq⋅x=beqc(x)≤0ceq(x)=0lb≤x≤ub
[
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] |