本节将介绍关于凸集的基本信息,包括概念、基本性质以及常见凸集。
在最优化问题范畴中,凸优化问题是一类常见的、并且性质优秀的优化问题。一些情况下可以通过凸优化问题来解决非凸优化问题。
而凸集合与凸函数决定了该优化问题是凸优化问题。具体表现在:
在
最优化问题概述中我们介绍了
可行域的概念。它可能并不仅仅被
定义域空间描述,并且也可能伴随着
约束条件的限制。在这里为了简化问题,仅观察
定义域空间的描述。
{ min f ( x ) s.t. x ∈ S \begin{cases} \min f(x) \\ \text{s.t. } x \in \mathcal S \end{cases} {minf(x)s.t. x∈S
这里通过两个简单示例描述凸优化相关的优秀性质:
观察左侧函数图像,在 [ a , b ) [a,b) [a,b)区间内,可以找到该函数的最小点,并且该点是一个平稳点——在该点处函数的导数为 0 0 0;
同时观察右侧函数图像,同样可以找到该函数的最小点。只不过区别于左侧函数图像的是:该区间内函数的平稳点存在若干个:
但这些红色点也同样都是
平稳点,也就是说:
仅通过平稳点无法确定其是否为全局最优解。这是
凸函数的重要性质;相反地,右侧图像描述的函数被称作
非凸函数。已知函数: G ( x 1 , x 2 ) = x 1 2 + x 2 2 \mathcal G(x_1,x_2) = x_1^2 + x_2^2 G(x1,x2)=x12+x22,想要求解在可行域 S \mathcal S S内关于 G ( x 1 , x 2 ) \mathcal G(x_1,x_2) G(x1,x2)的最小值。对应优化问题表示如下:
{ min G ( x 1 , x 2 ) = x 1 2 + x 2 2 s.t. ( x 1 , x 2 ) ∈ S \begin{cases} \min \mathcal G(x_1,x_2) = x_1^2 + x_2^2 \\ \text{s.t. } (x_1,x_2) \in \mathcal S \end{cases} {minG(x1,x2)=x12+x22s.t. (x1,x2)∈S
现在存在两个可行域 S 1 , S 2 \mathcal S_1,\mathcal S_2 S1,S2,对应图像表示如下:
从几何角度观察,函数 G ( x 1 , x 2 ) \mathcal G(x_1,x_2) G(x1,x2)描述的图像形状是圆,上述图像中的虚线表示函数图像可能出现的等值线。
观察左侧图像,在可行域 S 1 \mathcal S_1 S1范围内取到合适的 x ∗ ( x 1 ∗ , x 2 ∗ ) x^*(x_1^*,x_2^*) x∗(x1∗,x2∗),使得 G ( x 1 ∗ , x 2 ∗ ) \mathcal G(x_1^*,x_2^*) G(x1∗,x2∗)达到最小,很明显,是上述的红色点。作为最优解的 x ∗ x^* x∗,可以发现: x ∗ x^* x∗点所在位置是函数 G ( x 1 , x 2 ) \mathcal G(x_1,x_2) G(x1,x2)与可行域 S 1 \mathcal S_1 S1描述范围的切点;也就是说: x ∗ x^* x∗点处的负梯度方向 − ∇ G ( x 1 ∗ , x 2 ∗ ) -\nabla \mathcal G(x_1^*,x_2^*) −∇G(x1∗,x2∗)与切线方向垂直。
其中
红色箭头表示负梯度方向。关于负梯度方向,详见
线搜索方法(方向角度)。
这意味着:从可行域 S 1 \mathcal S_1 S1范围内任取一点 x x x,那么向量 x − x ∗ x - x^* x−x∗与负梯度方向之间的夹角总是 ≥ 9 0 o \geq 90^o ≥90o。如果用向量内积的形式表示,必然有:
这里的
G ( x ∗ ) \mathcal G(x^*) G(x∗)表示
∇ G ( x 1 ∗ , x 2 ∗ ) \nabla \mathcal G(x_1^*,x_2^*) ∇G(x1∗,x2∗),后续同理。
− [ ∇ G ( x ∗ ) ] T ( x − x ∗ ) ≤ 0 ∀ x ∈ S 1 -[\nabla \mathcal G(x^*)]^T(x - x^*) \leq 0 \quad \forall x \in \mathcal S_1 −[∇G(x∗)]T(x−x∗)≤0∀x∈S1
最终归纳得到如下等价条件:
x ∗ is Optimal ⇔ − [ ∇ G ( x ∗ ) ] T ( x − x ∗ ) ≤ 0 ∀ x ∈ S 1 x^* \text{ is Optimal } \Leftrightarrow -[\nabla \mathcal G(x^*)]^T(x - x^*) \leq 0 \quad \forall x \in \mathcal S_1 x∗ is Optimal ⇔−[∇G(x∗)]T(x−x∗)≤0∀x∈S1
观察右侧图像,可以按照上述寻找切点的方式去寻找最优解。假设找到了右侧的红色点。但这个最优解并不满足上述的等价条件。
见下图中右侧
两个红色箭头明显是一个锐角。
综上,可行域内任意一点 x x x与最优解 x ∗ x^* x∗之间满足如上等价条件,那么该可行域是凸集;反之为非凸集。从而将可行域 S 1 \mathcal S_1 S1称为凸集;而可行域 S 2 \mathcal S_2 S2称作非凸集。相反,如果一个可行域被确定是凸集,那么它同样存在一些优秀性质:
关于凸集 ( Convex Set ) (\text{Convex Set}) (Convex Set)的定义表示如下:
∀ x , y ∈ C ; ∀ λ ∈ [ 0 , 1 ] ⇒ λ ⋅ x + ( 1 − λ ) ⋅ y ∈ C \forall x,y \in \mathcal C;\forall \lambda \in [0,1] \Rightarrow \lambda \cdot x + (1 - \lambda) \cdot y \in \mathcal C ∀x,y∈C;∀λ∈[0,1]⇒λ⋅x+(1−λ)⋅y∈C
文字的描述可简单表述为:可行域 C \mathcal C C中任意两点间的连线,其连线上的任一点仍属于该可行域 C \mathcal C C。示例图像表示如下:
关于凸集合性质存在如下等价条件:如果某可行域 C \mathcal C C是一个凸集,对于 ∀ x 1 , x 2 , ⋯ , x k ∈ C \forall x_1,x_2,\cdots,x_k \in \mathcal C ∀x1,x2,⋯,xk∈C,且对于 ∀ λ 1 , λ 2 , ⋯ , λ k ≥ 0 \forall \lambda_1,\lambda_2,\cdots,\lambda_k \geq0 ∀λ1,λ2,⋯,λk≥0且 ∑ i = 1 k λ i = 1 \begin{aligned}\sum_{i=1}^{k} \lambda_i = 1\end{aligned} i=1∑kλi=1,必然有:
反之同样可以推出
C \mathcal C C是一个凸集。
∑ i = 1 k λ i ⋅ x i ∈ C \sum_{i=1}^k \lambda_i \cdot x_i \in \mathcal C i=1∑kλi⋅xi∈C
这里以 k = 3 k=3 k=3为例。对于 x 1 , x 2 , x 3 ∈ C , ∀ λ 1 , λ 2 , λ 3 ≥ 0 x_1,x_2,x_3 \in \mathcal C, \forall \lambda_1,\lambda_2,\lambda_3 \geq 0 x1,x2,x3∈C,∀λ1,λ2,λ3≥0且 λ 1 + λ 2 + λ 3 = 1 \lambda_1+\lambda_2 + \lambda_3 = 1 λ1+λ2+λ3=1,对应 λ 1 x 1 + λ 2 x 2 + λ 3 x 3 \lambda_1x_1 + \lambda_2x_2 + \lambda_3x_3 λ1x1+λ2x2+λ3x3在可行域 C \mathcal C C中的描述表示为: x 1 , x 2 , x 3 x_1,x_2,x_3 x1,x2,x3围成的三角形的范围:
显然,该三角形围成的范围是可行域
C \mathcal C C的一部分。
对于表达式 ∑ i = 1 k λ i ⋅ x i \begin{aligned}\sum_{i=1}^k \lambda_i \cdot x_i\end{aligned} i=1∑kλi⋅xi,它称作 x 1 , x 2 , ⋯ , x k x_1,x_2,\cdots,x_k x1,x2,⋯,xk的凸组合 ( Convex Combination ) (\text{Convex Combination}) (Convex Combination)。
条件不能漏掉~
λ i ( i = 1 , 2 , ⋯ , k ) ≥ 0 \lambda_i(i=1,2,\cdots,k) \geq 0 λi(i=1,2,⋯,k)≥0且
∑ i = 1 k λ i = 1 \sum_{i=1}^k \lambda_i = 1 ∑i=1kλi=1。
相应的组合概念如:
很明显,从关于
λ i ( i = 1 , 2 , ⋯ , k ) \lambda_i(i=1,2,\cdots,k) λi(i=1,2,⋯,k)的约束程度角度,有:
凸组合 > > > 仿射组合;非负组合 > > > 线性组合。
关于凸包 ( Convex Hull ) (\text{Convex Hull}) (Convex Hull),它针对的是任意一个集合,并非只有凸集。在选定集合 C \mathcal C C的条件下,从 C \mathcal C C中取点后作凸组合,将所有凸组合结果构成一个新集合,该集合被称作凸包。
凸包的作用:由于凸包是由凸组合构成的集合,因而:对于任意集合 C \mathcal C C(凸、非凸),它的凸包一定是凸集合。从而凸包是优化过程中将非凸集合凸化的一个工具。
这里作为科普,不做过多描述~
常见的凸集合有:
由于一个线性不等式刻画的是
半空间,那么由多个线性不等式
对应半空间的交集/围成的空间就是
多面体。从而又将
线性等式刻画的集合转化为
线性不等式刻画的集合。这里的
∣ ∣ u ∣ ∣ 2 ≤ 1 ||u||_2 \leq 1 ∣∣u∣∣2≤1描述的是中心为
0 0 0,半径为
1 1 1的单位球空间。对应的
r ⋅ u r \cdot u r⋅u则表示对球空间进行放缩;
x c + r ⋅ u x_c + r \cdot u xc+r⋅u则是对放缩后的结果进行平移~
相关文章见下方链接~
其中矩阵
P \mathcal P P是
正定矩阵,否则
P − 1 \mathcal P^{-1} P−1无法求解
。假设在
n + 1 n+1 n+1维的特征空间中,其中
x = ( x 1 , x 2 , ⋯ , x n ) T ∈ R n x = (x_1,x_2,\cdots,x_n)^T \in \mathbb R^n x=(x1,x2,⋯,xn)T∈Rn,最后一维特征表示为
t t t。下面公式则表示为:
前 n n n维的二范数结果 ∣ ∣ x ∣ ∣ 2 ≤ ||x||_2 \leq ∣∣x∣∣2≤第 n + 1 n+1 n+1维的特征结果 t t t。import numpy as np
import matplotlib.pyplot as plt
import math
x = np.linspace(-5,5,50)
y = np.linspace(-5,5,50)
t = 5.0
def f(x,y):
return math.sqrt((x ** 2) + (y ** 2))
ax = plt.axes(projection='3d')
for i in list(x):
for j in list(y):
if f(i,j) <= t:
ax.scatter(i,j,f(i,j),c="tab:blue",s=2)
else:
continue
plt.show()
半定矩阵锥:
可见,集合中的每个元素都是
n n n阶对称矩阵。其中
X ≽ 0 ⇔ Z T X Z ≥ 0 ∀ Z \mathcal X \succcurlyeq 0 \Leftrightarrow \mathcal Z^T \mathcal X \mathcal Z \geq 0 \quad \forall \mathcal Z X≽0⇔ZTXZ≥0∀Z。同上:
X ≻ 0 ⇔ Z T X Z > 0 ∀ Z \mathcal X \succ 0 \Leftrightarrow \mathcal Z^T \mathcal X \mathcal Z > 0 \quad \forall \mathcal Z X≻0⇔ZTXZ>0∀Z对于集合 S + n \mathcal S_{+}^n S+n中的元素 X \mathcal X X,它们必然是半正定矩阵。因而 λ ⋅ X ( ∀ λ ≥ 0 ) \lambda \cdot \mathcal X (\forall \lambda \geq 0) λ⋅X(∀λ≥0)依然是半正定矩阵。因而满足锥集合的定义:
X ∈ S + n ⇒ λ ⋅ X ∈ S + n λ ≥ 0 \mathcal X \in \mathcal S_{+}^n \Rightarrow \lambda \cdot \mathcal X \in \mathcal S_{+}^n \quad \lambda \geq 0 X∈S+n⇒λ⋅X∈S+nλ≥0
因而集合 S + n \mathcal S_{+}^n S+n是锥集合。
新的问题:锥集合 S + n \mathcal S_{+}^n S+n是不是凸集合 ? ? ?根据凸集合的定义,有:
关于半定矩阵锥的图像,以二阶矩阵为例。如果二阶矩阵 ( x y y z ) ∈ S + 2 \begin{pmatrix}x \quad y \\ y \quad z\end{pmatrix} \in \mathcal S_{+}^2 (xyyz)∈S+2,也就是说:该二阶矩阵是一个半正定矩阵。如何判定一个矩阵是半正定的 ? ? ?
这里的图像不容易看,像个船头~大家自己多试试角度~
import numpy as np
import matplotlib.pyplot as plt
import tqdm
x = np.linspace(-5,5,20)
y = np.linspace(-5,5,20)
z = np.linspace(-5,5,20)![请添加图片描述](https://img-blog.csdnimg.cn/2fecd39719bc4af392e4cb9316296f6b.png)
def SequentialPrincipalMinor(x,y,z):
return x * z - (y ** 2)
ax = plt.axes(projection='3d')
for i in tqdm(list(x)):
for j in list(y):
for k in list(z):
if i >= 0 and k >= 0 and SequentialPrincipalMinor(i,j,k) >= 0:
ax.scatter(i,j,k,c="tab:blue",s=2)
else:
continue
plt.show()
最终结果表示如下:
个人理解:集合 S + + n \mathcal S_{++}^n S++n不仅是锥集合,并且也是凸集合。
这个图就不贴了,和上面的结果很像~
Process : 43 : 34 / 1 : 21 : 31 \text{Process}: 43:34/1:21:31 Process:43:34/1:21:31
相关参考:
最优化理论与方法-第二讲-凸集
凸优化笔记1:凸集Convex Sets