什么是二次规划?
https://wenku.baidu.com/view/dafc28a99f3143323968011ca300a6c30c22f1bd.html
二次规划是最简单的约束非线性规划问题,对于h和g是线性函数的特殊情况,可以写成:
m
i
n
f
(
x
)
=
1
2
x
T
H
x
+
g
T
x
,
x
∈
R
n
min~~f(x)=\frac{1}{2}x^THx+g^Tx,~~x\in R^n
min f(x)=21xTHx+gTx, x∈Rn
s
.
t
.
a
i
T
x
−
b
i
=
0
,
i
∈
E
=
{
1
,
2...
,
l
}
s.t.~~a_i^Tx-b_i=0,~ i\in E=\{1,2...,l\}
s.t. aiTx−bi=0, i∈E={1,2...,l}
a
i
T
x
−
b
i
≥
0
,
i
∈
I
=
{
l
+
1...
,
m
}
~~~~~~~a_i^Tx-b_i\geq 0,~ i\in I=\{l+1...,m\}
aiTx−bi≥0, i∈I={l+1...,m}
其中
H
∈
R
n
×
n
H\in R^{n\times n}
H∈Rn×n;
a
i
,
g
,
x
∈
R
n
a_i,g,x\in R^n
ai,g,x∈Rn;
b
∈
R
m
b\in R^m
b∈Rm;
我们将上述问题记为问题1 。
- 若 H H H为正定矩阵,则问题称为严格的凸二次规划问题
- 若
H
H
H为半正定矩阵,则问题称为凸二次规划问题。
凸二次规划是 一种特殊的凸二次规划。对于如上特殊形式的约束,可行域只要不空必定是凸集,当目标函数是凸函数时,二次规划的K-T点必为二次规划的全局极小点。
Q1: 什么是KT点?
KT点即满足KT条件的点,KT条件全称为Kuhn-Tucker条件,是线性规划中的一个重要条件。
对于上述问题1, 可利用拉格朗日乘子的方法表示为:
L
(
λ
,
x
)
=
f
(
x
)
+
λ
(
A
x
−
b
)
L(\lambda,x)=f(x)+\lambda(Ax-b)
L(λ,x)=f(x)+λ(Ax−b), 其中
λ
∈
R
m
\lambda\in R^{m}
λ∈Rm。则利用拉格朗日乘子法求解极值的表示为:
(1)
H
x
∗
+
g
−
∑
1
m
λ
i
∗
a
i
=
0
Hx^*+g-\sum_{1}^{m}\lambda_i^*a_i=0
Hx∗+g−∑1mλi∗ai=0
(2)
a
i
T
x
−
b
i
=
0
,
1
≤
i
≤
l
a^T_ix-b_i=0, 1\leq i\leq l
aiTx−bi=0,1≤i≤l
(3)
a
i
T
x
−
b
i
≥
0
,
l
+
1
≤
i
≤
m
a^T_ix-b_i\geq 0, l+1\leq i\leq m
aiTx−bi≥0,l+1≤i≤m
(4)
λ
i
∗
≥
0
,
l
+
1
≤
i
≤
m
\lambda_i^*\geq 0, l+1\leq i\leq m
λi∗≥0,l+1≤i≤m
(5)
λ
i
∗
(
a
i
T
x
∗
−
b
i
)
=
0
,
l
+
1
≤
i
≤
m
\lambda^*_i(a_i^Tx^*-b_i)=0, l+1\leq i\leq m
λi∗(aiTx∗−bi)=0,l+1≤i≤m
Q2: 凸二次规划有哪些类型?
凸二次规划按照约束的类型有三种组合,1、只含有等式的约束。 2、只含有不等式约束。 3、既含有等式约束,又含有不等式约束,如问题1所示。其中仅含有等式约束的凸二次规划问题可以通过直接求解法或拉格朗日乘子法进行求解。而含有不等式约束的问题的求解可以通过有效集的方法进行求解。
Q3: 有效集是什么意思?
下面讲解一些基本概念:
https://wenku.baidu.com/view/bf1f32c83186bceb19e8bbfc.html
基本问题:
问题I
m
i
n
f
(
X
)
s
.
t
.
g
j
(
X
)
≥
0
,
j
=
1
,
.
.
.
,
p
min~~f(X)~~s.t.~~g_j(X)\geq0,~j=1,...,p
min f(X) s.t. gj(X)≥0, j=1,...,p
问题II
m
i
n
f
(
X
)
s
.
t
.
g
j
(
X
)
≥
0
,
j
=
1
,
.
.
.
,
p
;
h
i
(
X
)
=
0
,
i
=
1
,
.
.
.
,
m
min~~f(X)~~s.t.~~g_j(X)\geq0,~j=1,...,p;~~h_i(X)=0,~i=1,...,m
min f(X) s.t. gj(X)≥0, j=1,...,p; hi(X)=0, i=1,...,m
(1)起作用(紧)约束、可行域
X
(
0
)
X^{(0)}
X(0)是I的可行解,若
g
j
(
X
(
0
)
)
=
0
g_j(X^{(0)})=0
gj(X(0))=0, 则称
g
j
(
X
)
≥
0
g_j(X)\geq0
gj(X)≥0 为
X
(
0
)
X^{(0)}
X(0)处起作用(紧)约束。记
J
(
X
(
0
)
)
=
{
j
∣
g
j
(
X
(
0
)
)
=
0
,
1
≤
i
≤
p
}
J(X^{(0)})=\{j|g_j(X^{(0)})=0,1\leq i\leq p\}
J(X(0))={j∣gj(X(0))=0,1≤i≤p}, 为
X
(
0
)
X^{(0)}
X(0)处起作用(紧)约束的下标集。
记
R
=
{
X
∣
g
j
(
X
)
≥
0
,
j
=
1
,
.
.
.
,
p
}
R=\{X|g_j(X)\geq0, j=1,...,p\}
R={X∣gj(X)≥0,j=1,...,p}或
R
=
{
X
∣
g
j
(
X
)
≥
0
,
j
=
1
,
.
.
.
,
p
,
h
i
(
X
)
=
0
,
i
=
1
,
.
.
.
,
m
}
R=\{X|g_j(X)\geq0, j=1,...,p,~h_i(X)=0,i=1,...,m\}
R={X∣gj(X)≥0,j=1,...,p, hi(X)=0,i=1,...,m}为可行域.
(2)可行方向
X
(
0
)
+
λ
D
∈
R
X^{(0)}+\lambda D \in R
X(0)+λD∈R
判断条件:
若
D
D
D是
X
(
0
)
X^{(0)}
X(0)的任一可行方向,则有
∇
g
j
(
X
(
0
)
)
T
D
≥
0
,
j
∈
J
(
X
(
0
)
)
\nabla g_j(X^{(0)})^TD\geq0, j\in J(X^{(0)})
∇gj(X(0))TD≥0,j∈J(X(0))。
(3)下降可行方向
f
(
X
(
0
)
+
λ
D
)
<
f
(
X
(
0
)
)
f(X^{(0)}+\lambda D)<f(X^{(0)})
f(X(0)+λD)<f(X(0)), 称
D
D
D为
X
(
0
)
X^{(0)}
X(0)处的下降方向。下降可行方向为在下降方向的基础上,其方向是可行的。
判断条件:
∇
f
(
X
(
0
)
)
T
D
<
0
\nabla f(X^{(0)})^TD<0
∇f(X(0))TD<0, 且
D
D
D为可行方向。
怎么求解二次规划?
https://wenku.baidu.com/view/dafc28a99f3143323968011ca300a6c30c22f1bd.html
这里针对的是二次凸规划问题。对于不等式约束问题,采用有效集的方法进行求解,基本思想是将不等式约束条件转换为等式约束条件的子问题,然后利用等式约束求解方法进行求解,循环迭代最终求解出全局极小值解。等式约束的求解方法包括1. 拉格朗日乘子法,拉格朗日乘子法将n维状态+m维约束的二次规划问题转换为求解n+m维极值问题,占用空间大。2. 为了解决这个问题,出现了直接消去法的方法,使得问题求解的规模减少了一点,但是其对约束项A的分解过程存在数值求解的稳定性问题。3. 为了进一步解决这个问题,有学者提出了广义直接消去法,将约束项A分解为Null(A)和Range(A), 利用了QR分解的方法。将矩阵空间分解还有其他方法,直接消去法用的实际上也是一种拆分空间的方法,还可以使用SVD的方法分解。
C++有哪些线程的二次规划函数库?
https://github.com/liuq/QuadProgpp
QuadProg++函数库,仅可用于求解严格的二次规划问题。这个函数库有一个缺点,只提供了一般问题的二次规划求解函数,函数的输入参数一定要包括不等式约束和等式约束。对于求解仅具有不等式约束的二次规划问题,需要自己修改函数。