本文为阅读笔记,仅供学习交流使用!!!
由于这本身就是一个研究领域,因此需要付出相当大的努力才能完全理解相关的理论和算法。MPC所需的二次规划数值解通常被认为是MPC应用中的一个障碍。然而,我们可以做的是理解二次规划的本质,这样就可以生成所需的基本计算程序。这样做的好处是,如果出现任何问题,可以修改原始代码;还可以编写用于实时应用的单元软件。这在工业应用中非常重要。为了与二次规划的文献一致,决策变量用x表示。目标函数和约束表示为:
其中E, F, M和
γ
\gamma
γ为与二次规划问题中一致的矩阵和向量。在不丧失一般性的情况下,假定E是对称的和正定的。
1.等式约束的二次规划
最简单的二次规划问题是求一个具有线性等式约束的正定二次型函数的最小值。每一个线性等式约束定义了一个超平面。正定二次函数的水平面是超椭球。直观地说,约束最小值位于可行集边界与极小超椭球体的切点处。
例1:求最小值:
使得:
解:在没有约束的情况下,全局最小值在:
处取得。
可行解是满足线性等式的x1和x2的组合。根据约束条件,x2的可行解为:
代入目标函数得:
对x1求偏导得:
当
x
1
=
0.5
x_1=0.5
x1=0.5的时候J取得最小值。代入约束条件为
x
2
=
1
−
x
1
x_2=1-x_1
x2=1−x1。
下图在
(
x
1
,
x
2
)
(x_1,x_2)
(x1,x2)平面表示了优化解。等式约束定义了一条直线,正定二次型函数的水平面为圆形,约束最小值就是与直线相切的最小圆,也就是
x
1
=
0.5
,
x
2
=
0.5
x_1=0.5, x_2=0.5
x1=0.5,x2=0.5的位置。
上述例子的求解过程很容易理解,演示了约束最小值的位置。接下来讲解一种具有等式约束的约束优化的一般方法。
拉格朗日乘数
在等式约束下最小化目标函数,首先来考虑拉格朗日表达式:
很容易看出,满足等式约束
M
x
=
γ
Mx=\gamma
Mx=γ的式2.30的值与原始目标函数相同。现在可以将式2.30当作一个有n+m个变量x和
γ
\gamma
γ的目标函数。
上式对向量x和
γ
\gamma
γ的一阶偏导为零时,目标函数取得最小值,即:
线性方程2.31和2.32有n+m个变量x和
γ
\gamma
γ。向量
γ
\gamma
γ的元素称为拉格朗日乘数。
拉格朗日表达式的最小化非常简单。可以通过2.31和2.32中一些列线性方程求出:
注意,2.34可以写成两项:
其中
x
0
=
−
E
−
1
F
x^0=-E^{-1}F
x0=−E−1F是使原始代价函数无约束时最小的全局最优解。第二项是由于约束产生的修正项。
以下例子展现了等式约束的最小化过程。
例2:求最小值:
使得:
其中:
解:在没有约束时,最优解为:
将2.35的约束条件改写成矩阵的形式,可以得到M和
γ
\gamma
γ:
式2.33中需要的矩阵如下:
矩阵的秩为
d
e
t
(
M
E
−
1
M
T
)
=
62
det(ME^{-1}M^T)=62
det(ME−1MT)=62,因此矩阵
M
E
−
1
M
T
ME^{-1}M^T
ME−1MT可逆。则根据2.33可得:
根据2.34可得使目标函数最小的x向量为:
例3:在这个例子中研究了当线性约束相互依赖时,约束最优解会发生什么变化。假设目标函数为:
其中,
等式约束为:
由图1可以看出,没有能满足等式约束2.37的可行解。请证明矩阵
M
E
−
1
M
T
ME^{-1}M^T
ME−1MT不可逆。
图1 没有满足两个等式约束的可行解,实线:
x
1
+
x
2
=
1
x_1+x_2=1
x1+x2=1;粗实线:
2
x
1
+
2
x
2
=
6
2x_1+2x_2=6
2x1+2x2=6
解:由图中可以看出,两个约束定义了两条平行的直线,由于两条直线没有交点,所以不存在满足所有约束的最优解。接下来考察一下这种情况下拉格朗日乘数。M和
γ
\gamma
γ矩阵为:
然后计算矩阵:
它的秩为0,不可逆。
总之,为了找到最优约束解,线性等式约束必须是线性独立的。
例4:这个例子考察约束条件个数如何影响约束优化的解。与例1的目标函数相同,其中,
增加一个约束条件:
解:增加的约束与原来的两个约束是独立的。唯一满足所有约束条件的解为:
这是约束条件2.38的唯一解。进行目标函数的优化没有意义,因为唯一可行的解是约束最优解。
总之,等式约束的数量必须小于或等于决策变量的数量。如果等式约束的数量等于决策变量的数量,则唯一可行的解是满足约束的解决方案,并且x中没有可用于优化原始目标函数的附加变量。如果等式约束的数量大于决策变量的数量,那么就没有可行的解,满足所有约束条件。
2.不等式约束的最小值
在不等式约束的最小值问题中,约束的数量可以比决策变量的数量多。不等式约束 M x ≤ γ Mx\le{\gamma} Mx≤γ包含了活动约束与非活动约束。如果不等式 M i x ≤ γ i M_ix\le{\gamma}_i Mix≤γi满足 M i x = γ i M_ix={\gamma}_i Mix=γi则是活动约束,如果 M i x < γ i M_ix<{\gamma}_i Mix<γi则是非活动约束。其中, M i M_i Mi和 γ i \gamma_i γi组成了第i个约束,表示M矩阵的第i行和 γ \gamma γ向量的第i个元素。在这里引入了Kuhn-Tucker条件,它用拉格朗日乘子定义了活动约束和非活动约束。
Kuhn-Tucker条件
优化问题的必要条件(Kuhn-Tucker条件)为:
其中,向量
λ
\lambda
λ包含了拉格朗日乘数。这些条件可以用一组活动约束的简单形式表示。令
S
a
c
t
S_{act}
Sact表示活动约束的索引集,那么必要条件就变成:
其中,
M
i
M_i
Mi表示矩阵M的第i行。即在第i行,
M
i
x
−
γ
i
=
0
M_ix-\gamma_i=0
Mix−γi=0意味着这是一个等式约束,也就是一个活动约束。相反,在2.41中,
M
i
x
−
γ
i
<
0
M_ix-\gamma_i<0
Mix−γi<0表示约束已经满足了,所以它是一个非活动约束。对于活动约束,对应的拉格朗日乘数是非负的,如果是非活动约束,拉格朗日乘数是零。
很明显的是,如果已知活动约束集,原始问题可以替换为仅具有等式约束的相应问题。如果给定了
M
a
c
t
M_{act}
Mact和
λ
a
c
t
\lambda_{act}
λact那么不等式约束的最优解具有封闭形式:
例5:例3表明,如果等式约束相互不独立,就没有可行解。基于这个例子,将约束改成不等式,看看会发生什么。假设目标函数为:
其中:
约束条件为:
解:很显然如果变量满足2.47不等式,也会满足2.48。在图2中表示出来了。因此,2.47就是活动约束,而2.48是非活动约束。可以发现,约束条件等价于等式约束:
x
1
+
x
2
=
1
x_1+x_2=1
x1+x2=1,最优解为
x
1
=
0.5
,
x
2
=
0.5
x_1=0.5,x_2=0.5
x1=0.5,x2=0.5,可以验证这个解满足2.48。
图2 不等式约束优化问题,实线:
x
1
+
x
2
=
1
x_1+x_2=1
x1+x2=1;粗实线:
2
x
1
+
2
x
2
=
6
2x_1+2x_2=6
2x1+2x2=6
活动集方法
活动集方法的思想是在算法的每一步定义一组约束,称为工作集,将其视为活动集。工作集被选择为在当前点实际处于活动状态的约束的子集,因此当前点对于工作集是可行的。然后,该算法继续在由约束工作集定义的曲面上移动到改进点。在活动集方法的每个步骤中,都会解决等式约束问题。如果所有的拉格朗日乘数
λ
i
≥
0
\lambda_i\ge{0}
λi≥0,那么这一点就是原问题的局部最优解。另一方面,如果存在
λ
i
<
0
\lambda_i<{0}
λi<0,那么可以通过放松约束i从而减小目标函数值(例如从约束条件中删除)。在最小化过程中,有必要监控其他约束的值,以确保不违反这些约束,因为算法定义的所有点都必须是可行的。在工作表面上移动时,经常会遇到新的约束边界。有必要将此约束添加到工作集,然后继续重新定义的工作曲面。为了说明活动集方法的基本思想,让我们看看下面的示例。
例6:求使目标函数最小化的最优解,其中:
不等式约束条件为:
解:对应2.49不等式约束的可行解为如下线性方程组的解:
将这三个等式约束作为第一组工作集。根据这三个等式约束计算拉格朗日乘数为:
显然,向量
λ
\lambda
λ的第三个元素小于零,因此第三个约束是非活动约束,需要从约束方程中删除。选择前两个约束为活动约束,求解优化问题:最小化
使得:
这与例2中的等式约束问题相同。例2中已经求解过:
向量
λ
\lambda
λ的第二个元素小于零,将第二个约束删除,问题变成求解:
使得:
求解这个等式约束问题,得到
λ
=
5
/
3
\lambda=5/3
λ=5/3,决策变量为:
x
=
[
0.3333
1.3333
−
0.6667
]
T
x=[0.3333\ 1.3333\ -0.6667]^T
x=[0.3333 1.3333 −0.6667]T,很明显满足等式约束。也可以验证它也满足所有不等式约束条件。
有如下几点需要注意:
1.在等式约束中,约束的个数不能超过决策变量的个数。在这个例子中,约束有3个,唯一的可行解需要满足2.50的等式方程。不同的是,在不等式约束中,只要约束不全是活动约束,那么约束的个数可以大于决策变量的个数。在本例中,只有一个约束是活动约束,所以原问题变成了等式约束问题。一旦最优解满足了活动约束条件,那么其他不等式约束也能自动满足。
2.显然需要一个迭代过程来解决不等式约束的优化问题,因为不知道哪个约束会成为活动约束。如果可以提前识别活动集,那么迭代过程就会缩短。
3.不等式约束的条件比施加等式约束的条件更宽松。例如,约束个数可以比决策变量更多;不等式约束集允许是线性相关的。然而这些宽松的条件有一个前提,就是活动约束需要是线性独立的,而且活动约束的个数只能小于或等于决策变量的个数。