学习凸优化的过程中,首先要接触到仿射集与凸集的定义,非常有必要完全理解。
关于锥、凸锥参看另一篇博文:https://blog.csdn.net/robert_chen1988/article/details/78828727
一、仿射集(Affine set),凸集(Convex set)定义
设
x
1
x_1
x1 与
x
2
x_2
x2 是定义在实数集合
C
C
C 中任意两个不同的点,即
x
1
≠
x
2
x_1\neq x_2
x1=x2, 对任意一个实数
θ
\theta
θ,都有
θ
x
1
+
(
1
−
θ
)
x
2
∈
C
o
r
x
2
+
θ
(
x
1
−
x
2
)
∈
C
\theta x_1+(1-\theta)x_2\in C\quad or\quad x_2+\theta(x_1-x_2)\in C
θx1+(1−θ)x2∈Corx2+θ(x1−x2)∈C
则称
C
C
C 为一个仿射集。若仅要求
0
≤
θ
≤
1
0\leq\theta\leq 1
0≤θ≤1,则
C
C
C 为一个凸集。可见一个仿射集必属于凸集,而凸集不一定属于仿射集。(锥跟仿射集并没有隶属关系)
仿射集的定义也可以拓展到多个点的情况,即对于多个点: x 1 , … , x k x_1,\dots,x_k x1,…,xk, 以及 θ 1 + ⋯ + θ k = 1 \theta_1+\dots+\theta_k=1 θ1+⋯+θk=1,都有
θ 1 x 1 + ⋯ + θ k x k ∈ C \theta_1 x_1+\dots+\theta_kx_k\in C θ1x1+⋯+θkxk∈C
仿射集与凸集的几何意义是:
- 一个集合为凸集:该集合中任意两点的线段上的点,仍然属于这个集合
- 一个集合为仿射集:该集合中任意两点的连线上的点,仍然属于这个集合
上面的表述中,连线比线段的范围更广,连线是包含该线段的直线:除了包含两点连接在一起的线段,还包括线段外无限延伸的部分。具体,可以结合下面的图片理解。
注:每一个线性方程组 A x = b Ax=b Ax=b 的解为一个仿射集。
为什么称作仿射呢? 定义
y
=
θ
x
1
+
(
1
−
θ
)
x
2
y=\theta x_1+(1-\theta) x_2
y=θx1+(1−θ)x2,该表达式可以化为
y
=
x
2
+
θ
(
x
1
−
x
2
)
y=x_2+\theta(x_1-x_2)
y=x2+θ(x1−x2)
y
y
y 可以表示为通过基点
x
2
x_2
x2,方向为
x
1
−
x
2
x_1-x_2
x1−x2,大小为
θ
(
x
1
−
x
2
)
\theta(x_1-x_2)
θ(x1−x2) 的一个箭头的末端,如下图所示:
import matplotlib.pyplot as plt
import numpy as np
plt.arrow(2, 3, 4, 8, width = 0.08, color = 'c', length_includes_head = True)
plt.plot(2, 3, 'ro')
plt.annotate('$x_2$', xy = (2.2, 2.8))
plt.plot(5, 9, 'ro')
plt.annotate('$x_1$', xy = (5.2, 8.8))
plt.plot(6, 11, 'ro')
plt.annotate('$y=x_2+\\theta (x_1-x_2), \\theta = 2$', xy = (6.2, 10.8))
plt.xlim((0, 10))
plt.ylim((0, 16))
plt.show()
上面的图片中,若
0
≤
θ
≤
1
0\leq\theta\leq1
0≤θ≤1,
y
y
y 必定落在
x
1
x_1
x1 与
x
2
x_2
x2 之间的线段内,若仅要求
θ
\theta
θ 为一个实数,则
y
y
y 还可能落在该线段上下无限延伸的直线上。
若
C
C
C 是一个仿射集,
x
1
x_1
x1,
…
\dots
…,
x
k
∈
C
x_k\in C
xk∈C,并且
θ
1
+
⋯
+
θ
k
=
1
\theta_1+\dots+\theta_k=1
θ1+⋯+θk=1, 则
θ
1
x
1
+
⋯
+
θ
k
x
k
∈
C
\theta_1x_1+\dots+\theta_k x_k\in C
θ1x1+⋯+θkxk∈C
其中,
θ
1
x
1
+
⋯
+
θ
k
x
k
\theta_1x_1+\dots+\theta_k x_k
θ1x1+⋯+θkxk 称作点
x
1
,
…
,
x
k
x_1, \dots, x_k
x1,…,xk 的仿射组合。
若要求
θ
i
≥
0
,
i
=
1
,
…
,
k
\theta_i\geq 0, i = 1, \dots, k
θi≥0,i=1,…,k, 则
θ
1
x
1
+
⋯
+
θ
k
x
k
\theta_1x_1+\dots+\theta_k x_k
θ1x1+⋯+θkxk 称作点
x
1
,
…
,
x
k
x_1, \dots, x_k
x1,…,xk 的凸组合。
二、子空间(Subspace)
子空间一般默认的是线性子空间,定义为:
对于任意两个实数 a a a, b b b 及向量空间非空子集 S S S 中的任意两个向量 x \bm x x, y \bm y y,都有 a x + b y ∈ S a\bm x+b\bm y\in S ax+by∈S,则集合 S S S 可以称作线性子空间。( a a a, b b b 可以都是零,所以零向量一定属于子空间; 子空间内任意两个向量的加和,单向量与标量的乘积也在子空间里)
若子空间的维度小于实数集合 R n \mathbb{R}^n Rn,则为完美子空间。( R n \mathbb{R}^n Rn 是一个向量空间)
还有一个仿射子空间:对于一个仿射集
C
C
C,及其内部任意一点
x
0
x_0
x0,集合
V
=
C
−
x
0
=
{
x
−
x
0
∣
x
∈
C
}
V=C-x_0=\{x-x_0\mid x\in C\}
V=C−x0={x−x0∣x∈C}
属于子空间。
仿射子空间可以视作线性子空间的移动。例如:在一个 n 维向量空间里,经过原点的平面为一个线性子空间,而其他不经过原点的平面为仿射子空间。
下面的性质都是针对子空间:
性质1:一个子空间
V
V
V 为仿射集。
性质2:一个子空间
V
V
V 为凸锥。
性质3:一个子空间
V
V
V 为凸集。
证明:对于
V
V
V 中任意两点
v
1
v_1
v1 与
v
2
v_2
v2,它们的线性组合是
α
v
1
+
β
v
2
\alpha v_1+\beta v_2
αv1+βv2,因为
α
v
1
+
β
v
2
+
x
0
=
α
(
v
1
+
x
0
)
+
β
(
v
2
+
x
0
)
+
(
1
−
α
−
β
)
x
0
∈
C
\alpha v_1+\beta v_2 + x_0= \alpha(v_1+x_0)+\beta(v_2+x_0)+(1-\alpha-\beta)x_0\in C
αv1+βv2+x0=α(v1+x0)+β(v2+x0)+(1−α−β)x0∈C
(因为
v
1
+
x
0
∈
C
v_1+x_0\in C
v1+x0∈C,
v
2
+
x
0
∈
C
v_2+x_0\in C
v2+x0∈C, 以及仿射集的定义)
所以
α
v
1
+
β
v
2
∈
V
\alpha v_1+\beta v_2 \in V
αv1+βv2∈V,即一个子空间中任意两点的线性组合仍然属于该子空间。
特别的,我们令
α
=
1
−
β
\alpha=1-\beta
α=1−β,则根据仿射集定义,子空间属于一个仿射集。
特别的,我们令
α
>
0
,
β
>
0
\alpha>0,\beta>0
α>0,β>0,则根据凸锥的定义,子空间属于一个凸锥。
若我们令
α
=
1
−
β
,
0
≤
α
≤
1
\alpha=1-\beta, 0\leq\alpha\leq 1
α=1−β,0≤α≤1,则估计凸集定义,子空间属于一个凸集。
□
\Box
□
一条直线是一个仿射集合,一个通过原点的直线属于子空间(证明过程类似上面)
注1:子空间为线性方程组 Ax=0 的解。
注2:若
x
x
x 属于子空间,那么
−
x
-x
−x 也属于子空间。
三、仿射包(affine hull)
一个集合
C
C
C 内所有点的仿射组合,称作该集合的仿射包, 即 aff
C
C
C:
aff
C
=
{
θ
1
x
1
+
⋯
+
θ
k
x
k
∣
x
1
,
…
,
x
k
∈
C
,
θ
1
+
⋯
+
θ
k
=
1
}
\text{aff}~ C=\{\theta_1x_1+\dots+\theta_kx_k\mid x_1,\dots, x_k\in C, \theta_1+\dots+\theta_k=1\}
aff C={θ1x1+⋯+θkxk∣x1,…,xk∈C,θ1+⋯+θk=1}