非线性规划中的广义简约梯度法(GRG)基础题
题目描述:
考虑一个带有非线性等式约束的非线性规划问题:
最小化目标函数 \(f(x)1, x_2) = (x_1 - 2)^2 + (x_2 - 1)^2\)
满足约束条件:\(h(x_1, x_2) = x_1^2 - x_2 = 0\)
且满足边界约束:\(x_1 \geq 0, x_2 \geq 0\)
初始点取为可行点 \(x^{(0)} = (1, 1)\)。
请使用广义简约梯度法(GRG)进行一次完整的迭代计算,求出下一个迭代点 \(x^{(1)}\)。
解题过程:
广义简约梯度法是处理非线性等式约束和边界约束的有效算法。其核心思想是将变量分为基本变量和非基本变量,在约束曲面上寻找使目标函数下降的方向。
第一步:变量划分与初始化
-
在初始点 \(x^{(0)} = (1, 1)\),验证可行性:
- 等式约束:\(h(1,1) = 1^2 - 1 = 0\),满足。
- 边界约束:\(x_1 = 1 \geq 0, x_2 = 1 \geq 0\),满足。
-
变量划分:
- 我们需要将变量划分为基本变量 \(x_B\) 和非基本变量 \(x_N\)。
- 选择原则:使得约束雅可比矩阵 \(\nabla h(x)^T\) 中对应于 \(x_B\) 的部分非奇异。
- 计算约束梯度:\(\nabla h(x) = [2x_1, -1]^T\)。
- 在点 (1,1):\(\nabla h(1,1) = [2, -1]^T\)。
- 两个分量均不为零,均可选为基本变量。我们选择 \(x_2\) 为基本变量 \(x_B\),\(x_1\) 为非基本变量 \(x_N\)。因为 \(\partial h / \partial x_2 = -1 \neq 0\),确保子矩阵非奇异。
第二步:计算简约梯度
-
计算目标函数的梯度:
\(\nabla f(x) = [2(x_1 - 2), 2(x_2 - 1)]^T\)。
在点 (1,1):\(\nabla f(1,1) = [2(1-2), 2(1-1)]^T = [-2, 0]^T\)。
因此,\(\nabla_N f = -2\)(对应于 \(x_1\)),\(\nabla_B f = 0\)(对应于 \(x_2\))。 -
计算约束雅可比矩阵的分块:
\(A_N = \partial h / \partial x_N = \partial h / \partial x_1 = 2x_1\)。在点 (1,1):\(A_N = 2\)。
\(A_B = \partial h / \partial x_B = \partial h / \partial x_2 = -1\)。在点 (1,1):\(A_B = -1\)。 -
计算简约梯度 \(r\):
公式:\(r = \nabla_N f - (A_N A_B^{-1})^T \nabla_B f\)。- 首先计算 \(A_B^{-1} = -1\)。
- 然后计算 \(A_N A_B^{-1} = 2 \times (-1) = -2\)。
- 最后,\(r = (-2) - (-2) \times 0 = -2\)。
第三步:确定搜索方向
-
非基本变量的搜索方向 \(d_N\):
- 对于非基本变量,其搜索方向通常取为负的简约梯度,即 \(d_N = -r\)。
- 但是,必须考虑边界约束。当前 \(x_1 = 1 > 0\),不在边界上。
- 因此,\(d_N = -(-2) = 2\)。
-
基本变量的搜索方向 \(d_B\):
- 为了保持在由约束 \(h(x)=0\) 定义的可行域上移动,需要计算 \(d_B\)。
- 公式:\(d_B = -A_B^{-1} A_N d_N\)。
- 代入数值:\(d_B = -(-1)^{-1} \times 2 \times 2 = -( -1 ) \times 4 = 4\)。
- (注意:\(A_B^{-1} = -1\),所以 \(-A_B^{-1} = -(-1) = 1\))
-
完整搜索方向:
\(d = (d_N, d_B) = (2, 4)\)。
第四步:进行一维线搜索
-
新的点可表示为:\(x(\alpha) = x^{(0)} + \alpha d = (1 + 2\alpha, 1 + 4\alpha)\),其中 \(\alpha > 0\) 是步长。
-
将 \(x(\alpha)\) 代入约束方程,求解 \(\alpha\) 以重新满足可行性(对于非线性约束,通常需要进行校正):
- 约束为 \(h(x(\alpha)) = (1+2\alpha)^2 - (1+4\alpha) = 0\)。
- 展开:\(1 + 4\alpha + 4\alpha^2 - 1 - 4\alpha = 4\alpha^2 = 0\)。
- 解得 \(\alpha = 0\)。这表明沿该方向一步后,约束不再满足,因为约束是非线性的。搜索方向 \(d\) 是约束在初始点处的切平面方向,但沿直线移动会离开非线性约束曲面。
-
广义简约梯度法的标准步骤:
a) 先沿搜索方向 \(d\) 进行试探步(预测步),取一个步长 \(\alpha_k\)(例如 \(\alpha_k = 1\))。- 令 \(\alpha = 1\),预测点 \(\tilde{x} = (1+2*1, 1+4*1) = (3, 5)\)。
- 检查约束:\(h(3,5) = 9 - 5 = 4 \neq 0\)。不可行。
b) 进行校正步(校正步):从预测点 \(\tilde{x}\) 出发,固定非基本变量 \(x_1 = 3\),通过求解非线性方程 \(h(3, x_2) = 0\) 来修正基本变量 \(x_2\),使其重新满足约束。
- 方程:\(3^2 - x_2 = 0\) -> \(9 - x_2 = 0\) -> \(x_2 = 9\)。
- 得到校正后的点 \(x_c = (3, 9)\)。此点满足等式约束。
-
计算校正后点的函数值:\(f(x_c) = (3-2)^2 + (9-1)^2 = 1 + 64 = 65\)。
- 初始点函数值:\(f(x^{(0)}) = (1-2)^2 + (1-1)^2 = 1 + 0 = 1\)。
- 函数值增大,说明步长 \(\alpha=1\) 可能太大。
-
通常需要一维线搜索来确定最优步长 \(\alpha\),使得在经校正步回到可行域后,目标函数 \(f(x(\alpha))\) 尽可能小。这是一个复杂的过程,因为 \(x(\alpha)\) 是隐式定义的。在实际算法中,可能会使用一种非精确搜索。
第五步:迭代结果
为了完成一次迭代的演示,我们通常不会直接取 \(\alpha=1\)。一个更合理的方法是尝试一个较小的步长。
-
尝试步长 \(\alpha = 0.5\):
- 预测点:\(\tilde{x} = (1+2*0.5, 1+4*0.5) = (2, 3)\)。
- 校正步:固定 \(x_1=2\),解方程 \(2^2 - x_2 = 0\) -> \(4 - x_2 = 0\) -> \(x_2 = 4\)。
- 校正点 \(x_c = (2, 4)\)。
- 函数值:\(f(2,4) = (2-2)^2 + (4-1)^2 = 0 + 9 = 9\)。
- 相比初始值1,仍然增大。
-
尝试步长 \(\alpha = 0.1\):
- 预测点:\(\tilde{x} = (1+2*0.1, 1+4*0.1) = (1.2, 1.4)\)。
- 校正步:固定 \(x_1=1.2\),解方程 \((1.2)^2 - x_2 = 0\) -> \(1.44 - x_2 = 0\) -> \(x_2 = 1.44\)。
- 校正点 \(x_c = (1.2, 1.44)\)。
- 函数值:\(f(1.2, 1.44) = (1.2-2)^2 + (1.44-1)^2 = (-0.8)^2 + (0.44)^2 = 0.64 + 0.1936 = 0.8336\)。
- 相比初始值1,函数值下降。
因此,经过一次广义简约梯度法迭代(包含预测步和校正步),若选择步长 \(\alpha = 0.1\),我们得到下一个迭代点 \(x^{(1)} = (1.2, 1.44)\)。在实际算法中,步长 \(\alpha\) 会通过更系统的线搜索确定。