非线性规划中的交替变量线性化(Alternating Variable Linearization, AVL)算法进阶题
一、题目描述
考虑以下非线性规划问题:
\[\begin{aligned} \min_{x, y} \quad & f(x, y) = e^{x_1 + 2x_2} + (y_1 - 1)^4 + (y_2 + 2)^2 \\ \text{s.t.} \quad & x_1^2 + x_2^2 + y_1^2 + y_2^2 \leq 10, \\ & x_1 + 2x_2 + y_1 - y_2 = 3, \\ & -2 \leq x_i \leq 2, \quad i = 1, 2, \\ & -3 \leq y_j \leq 3, \quad j = 1, 2. \end{aligned} \]
其中,\(x = (x_1, x_2)\),\(y = (y_1, y_2)\)。目标函数包含指数项和高次幂,约束包含一个非线性不等式和一个线性等式,以及变量边界。
本题要求使用交替变量线性化(Alternating Variable Linearization, AVL)算法求解,并详细解释其迭代步骤、线性化技巧、收敛条件及注意事项。
二、算法思想与适用场景
AVL适用于目标函数或约束可分解为多个变量子集,且固定一部分变量时,剩余子问题较易求解的情形。其核心思想是:
- 将变量划分为若干组(本题分为 \(x\) 和 \(y\) 两组)。
- 在每次迭代中,固定其中一组变量,对另一组变量对应的子问题进行局部线性化近似,然后求解该近似问题,更新该组变量。
- 交替更新各组变量,直至满足收敛条件。
本题中,固定 \(x\) 时,关于 \(y\) 的子问题为目标函数含四次项、约束为二次与线性;固定 \(y\) 时,关于 \(x\) 的子问题含指数项,均适合在迭代点做一阶线性化简化。
三、解题步骤
步骤1:初始化
选取初始可行点。例如,令
\[x^{(0)} = (0, 0), \quad y^{(0)} = (0, 0). \]
检查可行性:
- 不等式约束:\(0^2 + 0^2 + 0^2 + 0^2 = 0 \leq 10\) ✅
- 等式约束:\(0 + 0 + 0 - 0 = 0 \neq 3\) ❌ 不满足。
修正初始点:可解一个可行性问题,但为简单起见,调整 \(y^{(0)} = (1, 0)\),则等式约束:
\(0 + 0 + 1 - 0 = 1 \neq 3\) 仍不满足。
进一步取 \(y^{(0)} = (1, -2)\),则 \(0 + 0 + 1 - (-2) = 3\) ✅
检查不等式:\(0 + 0 + 1 + 4 = 5 \leq 10\) ✅
边界:\(x\) 和 \(y\) 均在范围内。
故初始可行点:
\[x^{(0)} = (0, 0), \quad y^{(0)} = (1, -2). \]
步骤2:固定 \(y = y^{(k)}\),线性化关于 \(x\) 的子问题
在第 \(k\) 步,固定 \(y = y^{(k)}\)。目标函数中 \(e^{x_1 + 2x_2}\) 关于 \(x\) 非线性的,在点 \(x^{(k)}\) 处作一阶泰勒展开:
\[e^{x_1 + 2x_2} \approx e^{x_1^{(k)} + 2x_2^{(k)}} \left[ 1 + (x_1 - x_1^{(k)}) + 2(x_2 - x_2^{(k)}) \right]. \]
将 \(f(x, y^{(k)})\) 近似为线性函数(注意 \((y_1^{(k)} - 1)^4 + (y_2^{(k)} + 2)^2\) 为常数,不影响 \(x\) 的优化)。
约束处理:
- 非线性不等式 \(x_1^2 + x_2^2 + (y_1^{(k)})^2 + (y_2^{(k)})^2 \leq 10\) 在 \(x\) 空间中是二次的,但为保持子问题为线性规划(LP),在点 \(x^{(k)}\) 处也对约束线性化:
对 \(x_1^2 + x_2^2\) 在 \(x^{(k)}\) 处线性化:
\[x_1^2 \approx (x_1^{(k)})^2 + 2x_1^{(k)}(x_1 - x_1^{(k)}), \quad x_2^2 \approx (x_2^{(k)})^2 + 2x_2^{(k)}(x_2 - x_2^{(k)}). \]
记 \(C = (y_1^{(k)})^2 + (y_2^{(k)})^2\),则原不等式化为:
\[2x_1^{(k)} x_1 + 2x_2^{(k)} x_2 + C + (x_1^{(k)})^2 + (x_2^{(k)})^2 - 2((x_1^{(k)})^2 + (x_2^{(k)})^2) \leq 10. \]
即:
\[2x_1^{(k)} x_1 + 2x_2^{(k)} x_2 + C - ((x_1^{(k)})^2 + (x_2^{(k)})^2) \leq 10. \]
- 等式约束 \(x_1 + 2x_2 + y_1^{(k)} - y_2^{(k)} = 3\) 已经是 \(x\) 的线性等式。
- 边界 \(-2 \leq x_i \leq 2\) 为线性。
于是得到关于 \(x\) 的线性规划(LP)子问题,可用单纯形法或内点法求解,得新解 \(x^{(k+1)}\)。
步骤3:固定 \(x = x^{(k+1)}\),线性化关于 \(y\) 的子问题
目标函数中 \((y_1 - 1)^4\) 在 \(y^{(k)}\) 处线性化(一阶展开):
\[(y_1 - 1)^4 \approx (y_1^{(k)} - 1)^4 + 4(y_1^{(k)} - 1)^3 (y_1 - y_1^{(k)}). \]
同理,\((y_2 + 2)^2\) 线性化:
\[(y_2 + 2)^2 \approx (y_2^{(k)} + 2)^2 + 2(y_2^{(k)} + 2)(y_2 - y_2^{(k)}). \]
\(e^{x_1^{(k+1)} + 2x_2^{(k+1)}}\) 视为常数。
约束处理:
- 非线性不等式 \((x_1^{(k+1)})^2 + (x_2^{(k+1)})^2 + y_1^2 + y_2^2 \leq 10\) 在 \(y\) 空间中是二次的,在 \(y^{(k)}\) 处对 \(y_1^2, y_2^2\) 线性化:
\[y_1^2 \approx (y_1^{(k)})^2 + 2y_1^{(k)}(y_1 - y_1^{(k)}), \quad y_2^2 \approx (y_2^{(k)})^2 + 2y_2^{(k)}(y_2 - y_2^{(k)}). \]
记 \(D = (x_1^{(k+1)})^2 + (x_2^{(k+1)})^2\),则约束化为:
\[2y_1^{(k)} y_1 + 2y_2^{(k)} y_2 + D - ((y_1^{(k)})^2 + (y_2^{(k)})^2) \leq 10. \]
- 等式约束:\(x_1^{(k+1)} + 2x_2^{(k+1)} + y_1 - y_2 = 3\) 已经是 \(y\) 的线性等式。
- 边界 \(-3 \leq y_j \leq 3\) 为线性。
得到关于 \(y\) 的LP子问题,求解得 \(y^{(k+1)}\)。
步骤4:迭代与收敛判断
重复步骤2和步骤3,直到满足以下收敛条件之一:
- 变量变化量小:\(\|x^{(k+1)} - x^{(k)}\|_2 + \|y^{(k+1)} - y^{(k)}\|_2 < \epsilon\)(如 \(\epsilon = 10^{-4}\))。
- 目标函数值变化小:\(|f^{(k+1)} - f^{(k)}| < \epsilon\)。
- 达到最大迭代次数(如 100 次)。
由于每次子问题是原问题的局部线性化,AVL 不保证全局收敛,但对凸约束和适当初始点往往可收敛到局部最优解。为保证可行性,可在线性化后的约束中添加信赖域约束,例如限制 \(\|x - x^{(k)}\|_\infty \leq \delta\),在迭代中自适应调整 \(\delta\)。
步骤5:具体数值迭代示例(第1次迭代)
初始点:\(x^{(0)} = (0, 0), y^{(0)} = (1, -2)\),目标值 \(f^{(0)} = e^{0} + (0)^4 + (0)^2 = 1\)。
-
固定 \(y^{(0)}\),更新 \(x\):
目标近似:\(e^{0}[1 + x_1 + 2x_2] = 1 + x_1 + 2x_2\)(常数项 \((1-1)^4 + (-2+2)^2 = 0\))。
不等式线性化:
\(C = 1^2 + (-2)^2 = 5\),
\(2\cdot0\cdot x_1 + 2\cdot0\cdot x_2 + 5 - (0+0) \leq 10 \) → \(5 \leq 10\) 恒成立,但线性化后约束为 \(0 \cdot x_1 + 0 \cdot x_2 + 5 \leq 10\),即无有效约束?这里需小心:实际上线性化约束在 \(x^{(0)}\) 处给出 \(0 \leq 10\),对 \(x\) 无限制,但应加入信赖域约束,例如 \(\|x - x^{(0)}\|_\infty \leq 0.5\)。
等式:\(x_1 + 2x_2 + 1 - (-2) = 3\) → \(x_1 + 2x_2 = 0\)。
边界:\(-2 \leq x_i \leq 2\)。
求解 LP:\(\min\; x_1 + 2x_2\),s.t. \(x_1+2x_2=0\),得 \(x_1 = -2x_2\)。在边界内最小化目标,取 \(x_2 = 1\) 则 \(x_1 = -2\) 满足边界,但需满足信赖域:\(|x_1 - 0| \leq 0.5\) 不满足。需在信赖域内求解,得 \(x^{(1)} = (-0.5, 0.25)\)(举例,实际需解 LP)。 -
固定 \(x^{(1)}\),更新 \(y\):
类似地线性化目标与约束,求解 LP 得 \(y^{(1)}\)。
重复至收敛。
四、注意事项
- 线性化可能导致不可行:原约束可行,线性化后可能无解。可添加信赖域约束或使用逐步凸近似(SCA) 思想,保证可行性。
- 收敛性:AVL 本质是一种块坐标下降的变体,对非凸问题可能陷入局部最优,初始点敏感。
- 目标函数下降:由于线性化近似,每次子问题求解后目标函数不一定下降,可能需要线搜索或接受准则。
- 扩展:可结合序列凸规划(SCP),每次求解凸近似子问题并更新线性化点,提高稳定性。
五、总结
AVL 算法通过交替固定变量组 + 局部线性化,将原非线性规划分解为一系列线性规划子问题。其优势是子问题易于求解,适合中规模、可分离结构的优化;缺点是收敛速度线性且依赖初始点。在实际中,常与信赖域结合以保证收敛。