非线性规划中的Dijkstra风格梯度投影法基础题
字数 2390 2025-11-11 02:43:23
非线性规划中的Dijkstra风格梯度投影法基础题
题目描述
考虑一个带约束的非线性规划问题:
最小化 \(f(x) = (x_1 - 3)^2 + (x_2 - 4)^2\)
约束条件:
\(g_1(x) = x_1 + x_2 - 5 \leq 0\)
\(g_2(x) = -x_1 \leq 0\)
\(g_3(x) = -x_2 \leq 0\)
初始点 \(x^{(0)} = (0, 0)\)。
要求使用Dijkstra风格梯度投影法求解,该方法在梯度投影法中引入类似Dijkstra算法的"最短路径"思想,通过优先级队列管理活跃约束,确保每次迭代优先处理对目标函数下降最关键的约束。
解题过程
-
问题分析
- 目标函数 \(f(x)\) 是凸二次函数,最小值在无约束时为 \((3,4)\),但被约束 \(x_1 + x_2 \leq 5\) 切割。
- 初始点 \((0,0)\) 在约束 \(g_2, g_3\) 的边界上(\(x_1=0, x_2=0\)),且 \(g_1\) 未激活(因 \(0+0-5=-5<0\))。
-
Dijkstra风格梯度投影法原理
- 核心思想:将梯度投影法与Dijkstra算法的优先级队列结合。每次迭代时,计算当前点的负梯度方向(最速下降方向),但需投影到活跃约束边界的交集上。
- 优先级定义:为每个约束分配一个"距离代价",衡量沿投影方向移动时违反约束的程度,优先处理代价最小的约束。
- 队列管理:维护一个优先级队列,存储当前点可能触发的约束,按代价排序。
-
迭代步骤详解
迭代1(从 \(x^{(0)} = (0,0)\) 开始):- 计算梯度:\(\nabla f(x) = (2(x_1-3), 2(x_2-4))\),在 \((0,0)\) 处为 \((-6, -8)\)。
- 初始活跃约束集 \(A = \{g_2, g_3\}\)(因 \(x_1=0, x_2=0\))。
- 投影方向:将负梯度 \((6,8)\) 投影到 \(g_2\) 和 \(g_3\) 边界的交集(即第一象限的轴)。投影后方向为 \((6,8)\)(因本身已在第一象限)。
- 优先级计算:
- 沿方向移动的步长 \(\alpha\) 需满足不违反其他约束。计算到 \(g_1\) 边界的距离:解 \((0+6\alpha) + (0+8\alpha) = 5\) 得 \(\alpha_1 = 5/14 \approx 0.357\)。
- 优先级队列:将 \(g_1\) 按 \(\alpha_1\) 加入队列,当前最小代价为 \(\alpha_1\)。
- 更新点:取步长 \(\alpha = \alpha_1\),新点 \(x^{(1)} = (0+6\cdot 0.357, 0+8\cdot 0.357) = (2.142, 2.856)\)。此时 \(g_1\) 被激活(\(x_1+x_2=5\))。
迭代2(在 \(x^{(1)} = (2.142, 2.856)\)):
- 梯度:\(\nabla f = (2(2.142-3), 2(2.856-4)) = (-1.716, -2.288)\)。
- 活跃约束集 \(A = \{g_1, g_2, g_3\}\),但 \(g_2, g_3\) 未激活(因 \(x_1, x_2 > 0\)),实际有效约束为 \(g_1\)。
- 投影方向:将负梯度 \((1.716, 2.288)\) 投影到 \(g_1\) 的切线空间(即满足 \(\nabla g_1 \cdot d = 0\),其中 \(\nabla g_1 = (1,1)\))。解得投影方向 \(d = (1.716, 2.288) - \frac{(1.716+2.288)}{2}(1,1) = (-0.286, 0.286)\)。
- 优先级检查:沿 \(d\) 移动时,\(g_2, g_3\) 可能被违反。计算到边界的步长:
- 到 \(g_2\)(\(x_1=0\)):\(\alpha_2 = 2.142 / 0.286 \approx 7.49\)(正数,安全)。
- 到 \(g_3\)(\(x_2=0\)):\(\alpha_3 = 2.856 / 0.286 \approx 9.99\)(安全)。
- 最优步长:沿 \(d\) 最小化 \(f\),解得 \(\alpha^* = 1\),新点 \(x^{(2)} = (2.142 -0.286, 2.856 +0.286) = (1.856, 3.142)\)。
- 更新队列:无新约束激活。
迭代3(在 \(x^{(2)} = (1.856, 3.142)\)):
- 梯度:\(\nabla f = (-2.288, -1.716)\),投影到 \(g_1\) 切线方向 \(d = (0.286, -0.286)\)。
- 移动后点 \(x^{(3)} = (2.142, 2.856)\)(与 \(x^{(1)}\) 对称)。此时梯度投影为零,满足一阶最优条件(KKT条件)。
-
结论
- 最优解 \(x^* = (2.142, 2.856)\)(或对称点),目标函数值 \(f^* \approx 2.143\)。
- Dijkstra风格通过优先级队列避免冗余计算,确保每次迭代优先处理关键约束,提升效率。