这个算法很反人类,迭代过程相当复杂,最优化老师说:“明确地告诉你要考的。”
起作用集方法适用于消元法和Lagrange方法无法处理的不等式约束二次规化问题。其主要思想是:以已知点为可行点,只考虑将该点的起作用约束,最小化
f(x),得到新的可行点后重复以上做法。
一、起作用集法适用情形
适用于具有不等式约束的二次规划问题
min f(x)=21xTHx+cTxs.t. Ax⩾b
二、起作用集法求解步骤
由于步骤太过繁琐,算法总是跳来跳去,所以在这里我只放上了我自己对于算法的分步与理解。算法可以分为一个初始+三个域,三个域分别为:解
δ域、求
α
k 域、算L乘子
λ域。
(1)初始化:初始可行点
x(1),作用约束集
I(1),置
k=1;
(2)解增量
δ:这时构建增量求解问题:
min 21δTHδ+▽f(x(k))Tδs.t. aiδ=0,i∈I(k) 得到最优解
δ(k)。此时进行第一次分流分析:
若
δ(k)=0,则说明
x(k)无法再继续变动,则跳到第4步计算L乘子,判断最优解;
若
δ(k)=0,需要对
x(k)进行变动,则跳到第3步,求解步长。
(3)求步长
α
k:
上一步求解出了增量
δ,这一步将增量视为移动方向
d,即
d(k)=δ(k)。变动过程为:
x(k+1)=x(k)+α
kd(k) 步长的选取首先要保证新点是一个可行点,不能违背
x(k)的非作用下标集中约束,即:
ai(x(k)+α
kd(k))⩾bi , i∈/I(k) 在特定情况下左侧孤立
α
k:
if aid(k)<0 : α
k=aid(k)bi−aix(k) 考察所有非作用约束集对应的约束式,可以求出多个
α
k,进而对其求最小。同时还要注意,最终
α
k的取值还要跟1进行比较:
αk=min(1,α
k) 得到步长,此时进行第二次分流分析:(这一步无论结果如何都要更新
x(k),只是一个回去,一个继续)
若
αk<1,原来非作用约束集中有一个约束式变为作用约束,小数步长直接更新
x(k+1)(算法中唯一更新x的地方),返回步骤2,重新计算增量
δ;
若
αk=1,此时的变动不会触动任何非作用约束,1步长直接更新
x(k+1)(算法中唯一更新x的地方),跳到第4步计算L乘子,判断最优解。
(4)计算L乘子
λ:
这一步是算法的出口,通过Lagrange方法最后给出的公式计算乘子
λ:
λ=Rgk=(AH−1AT)−1AH−1gk 其中
gk=▽f(x(k)),是当前迭代点的梯度。
得到每个作用约束对应的乘子之后,进行第三次分流分析:
若
λ<0,挑选出最小的
λ,在起作用约束集
I中去掉下标,返回步骤2计算增量
δ。
若
λ⩾0,当前解
x(k)是最优解。
三、注
这个方法思想简单,但是每一块的计算都很精密,过程很繁琐。考试的时候一定要把思路写清楚。