非线性规划中的交替变量方向法(Alternating Variable Direction Method, AVDM)基础题
题目描述
考虑非线性规划问题:
\[\min f(x) = (x_1 - 2)^4 + (x_1 - 2x_2)^2 \]
其中 \(x = (x_1, x_2) \in \mathbb{R}^2\),无约束。
使用交替变量方向法(AVDM)求解,从初始点 \(x^{(0)} = (0, 3)\) 开始,进行两次完整迭代(即更新 \(x_1\) 和 \(x_2\) 各两次),并详细展示每一步的更新过程。
解题过程
1. 方法简介
交替变量方向法(AVDM)是一种简单的直接搜索方法,适用于无约束优化。它在每次迭代中依次沿每个坐标方向进行一维搜索(例如精确线搜索或简单固定规则更新),逐个优化每个变量,而固定其他变量不变。对于二维问题,每次完整迭代包括:
- 第一步:固定 \(x_2\),更新 \(x_1\) 以最小化目标函数。
- 第二步:固定新的 \(x_1\),更新 \(x_2\) 以最小化目标函数。
本题采用精确线搜索(即沿当前方向求解一维最小化问题),通过解析求导实现。
2. 初始设置
初始点:
\[x^{(0)} = (0, 3) \]
目标函数:
\[f(x_1, x_2) = (x_1 - 2)^4 + (x_1 - 2x_2)^2 \]
3. 第一次迭代
步骤3.1:固定 \(x_2 = 3\),更新 \(x_1\)
将 \(x_2 = 3\) 代入目标函数,得到关于 \(x_1\) 的一元函数:
\[g(x_1) = (x_1 - 2)^4 + (x_1 - 6)^2 \]
对 \(g(x_1)\) 求导并令其为零,寻找极小点:
\[g'(x_1) = 4(x_1 - 2)^3 + 2(x_1 - 6) = 0 \]
展开:
\[4(x_1^3 - 6x_1^2 + 12x_1 - 8) + 2x_1 - 12 = 0 \]
\[ 4x_1^3 - 24x_1^2 + 48x_1 - 32 + 2x_1 - 12 = 0 \]
\[ 4x_1^3 - 24x_1^2 + 50x_1 - 44 = 0 \]
解此三次方程。观察发现 \(x_1 = 2\) 是一个解(验证:\(4 \cdot 8 - 24 \cdot 4 + 50 \cdot 2 - 44 = 32 - 96 + 100 - 44 = -8 \neq 0\) 不对,重新验证):
代入 \(x_1 = 2\):\(4(0) + 2(2-6) = 0 - 8 = -8 \neq 0\),不是解。尝试 \(x_1 = 1.5\) 近似求解,但为简化演示,我们采用数值试探法。注意到 \(g'(x_1)\) 连续,且:
- \(g'(1) = 4(-1)^3 + 2(1-6) = -4 - 10 = -14 < 0\)
- \(g'(2) = 4(0) + 2(2-6) = 0 - 8 = -8 < 0\)
- \(g'(3) = 4(1)^3 + 2(3-6) = 4 - 6 = -2 < 0\)
- \(g'(4) = 4(8) + 2(4-6) = 32 - 4 = 28 > 0\)
由于 \(g'(3) < 0\),\(g'(4) > 0\),极小点在 \(x_1 \in (3, 4)\) 之间。为精确求解,设 \(h(x_1) = 4(x_1 - 2)^3 + 2(x_1 - 6) = 0\),整理:
\[4(x_1 - 2)^3 = -2(x_1 - 6) \]
\[ 2(x_1 - 2)^3 = -(x_1 - 6) \]
观察易得 \(x_1 = 2\) 不满足。尝试 \(x_1 = 3.5\):
左边 \(2(1.5)^3 = 2 \times 3.375 = 6.75\),右边 \(-(3.5 - 6) = 2.5\),不相等。
尝试 \(x_1 = 3.2\):
左边 \(2(1.2)^3 = 2 \times 1.728 = 3.456\),右边 \(-(3.2 - 6) = 2.8\),不相等。
尝试 \(x_1 = 3.4\):
左边 \(2(1.4)^3 = 2 \times 2.744 = 5.488\),右边 \(-(3.4 - 6) = 2.6\),不相等。
可见方程无简单解析解,但题目要求“细致展示”,我们可采用牛顿法快速近似,但为保持基础性,这里直接给出数值解:通过计算工具(如简单牛顿迭代几步)得近似解 \(x_1^* \approx 3.069\)。
我们采用更精确的牛顿法手动演示几步:
牛顿迭代公式:\(x_1^{(k+1)} = x_1^{(k)} - \frac{g'(x_1^{(k)})}{g''(x_1^{(k)})}\),其中
\(g''(x_1) = 12(x_1 - 2)^2 + 2\)。
从 \(x_1^{(0)} = 3\) 开始:
- \(g'(3) = 4(1)^3 + 2(3-6) = 4 - 6 = -2\)
- \(g''(3) = 12(1)^2 + 2 = 14\)
- \(x_1^{(1)} = 3 - (-2)/14 = 3 + 0.142857 = 3.142857\)
再从 \(x_1^{(1)} = 3.142857\): - \(g'(3.142857) = 4(1.142857)^3 + 2(3.142857-6) = 4 \times 1.492711 + 2 \times (-2.857143) \approx 5.970844 - 5.714286 = 0.256558\)
- \(g''(3.142857) = 12(1.142857)^2 + 2 = 12 \times 1.306122 + 2 = 15.673464 + 2 = 17.673464\)
- \(x_1^{(2)} = 3.142857 - 0.256558/17.673464 \approx 3.142857 - 0.014514 = 3.128343\)
继续一次: - \(g'(3.128343) = 4(1.128343)^3 + 2(3.128343-6) = 4 \times 1.436 \text{(近似)} + 2 \times (-2.871657) \approx 5.744 - 5.743314 = 0.000686\)(接近零)
因此取 \(x_1^* \approx 3.1283\)。
为简化后续计算,我们取 \(x_1^* \approx 3.13\)(保留两位小数,便于手工计算)。
所以第一次更新后:
\[x_1^{(1)} = 3.13, \quad x_2^{(0)} = 3 \]
步骤3.2:固定 \(x_1 = 3.13\),更新 \(x_2\)
目标函数变为关于 \(x_2\) 的一元函数:
\[h(x_2) = (3.13 - 2)^4 + (3.13 - 2x_2)^2 = (1.13)^4 + (3.13 - 2x_2)^2 \]
其中 \((1.13)^4 = (1.13^2)^2 = (1.2769)^2 \approx 1.630\)。
对 \(h(x_2)\) 求导:
\[h'(x_2) = 0 + 2(3.13 - 2x_2)(-2) = -4(3.13 - 2x_2) \]
令 \(h'(x_2) = 0\) 得:
\[-4(3.13 - 2x_2) = 0 \quad \Rightarrow \quad 3.13 - 2x_2 = 0 \quad \Rightarrow \quad x_2 = 3.13/2 = 1.565 \]
因此更新:
\[x_2^{(1)} = 1.565 \]
第一次迭代完成,得到:
\[x^{(1)} = (3.13, 1.565) \]
4. 第二次迭代
步骤4.1:固定 \(x_2 = 1.565\),更新 \(x_1\)
代入目标函数:
\[g(x_1) = (x_1 - 2)^4 + (x_1 - 2 \times 1.565)^2 = (x_1 - 2)^4 + (x_1 - 3.13)^2 \]
求导:
\[g'(x_1) = 4(x_1 - 2)^3 + 2(x_1 - 3.13) \]
令 \(g'(x_1) = 0\):
\[4(x_1 - 2)^3 + 2(x_1 - 3.13) = 0 \]
观察:若 \(x_1\) 接近 2,则 \((x_1 - 2)^3\) 很小,第二项 \(2(x_1 - 3.13)\) 为负,可能使导数为负。尝试 \(x_1 = 2.5\):
- \(g'(2.5) = 4(0.5)^3 + 2(2.5 - 3.13) = 4 \times 0.125 + 2 \times (-0.63) = 0.5 - 1.26 = -0.76 < 0\)
尝试 \(x_1 = 2.8\): - \(g'(2.8) = 4(0.8)^3 + 2(2.8 - 3.13) = 4 \times 0.512 + 2 \times (-0.33) = 2.048 - 0.66 = 1.388 > 0\)
因此极小点在 \(x_1 \in (2.5, 2.8)\)。用牛顿法快速近似,从 \(x_1 = 2.5\) 开始:
\[g''(x_1) = 12(x_1 - 2)^2 + 2 \]
- \(g'(2.5) = -0.76\)
- \(g''(2.5) = 12(0.5)^2 + 2 = 12 \times 0.25 + 2 = 3 + 2 = 5\)
- \(x_1^{(1)} = 2.5 - (-0.76)/5 = 2.5 + 0.152 = 2.652\)
再迭代一次: - \(g'(2.652) = 4(0.652)^3 + 2(2.652 - 3.13) = 4 \times 0.277 + 2 \times (-0.478) = 1.108 - 0.956 = 0.152\)
- \(g''(2.652) = 12(0.652)^2 + 2 = 12 \times 0.425 + 2 = 5.1 + 2 = 7.1\)
- \(x_1^{(2)} = 2.652 - 0.152/7.1 \approx 2.652 - 0.0214 = 2.6306\)
近似取 \(x_1^* \approx 2.63\)。
因此更新:
\[x_1^{(2)} = 2.63 \]
步骤4.2:固定 \(x_1 = 2.63\),更新 \(x_2\)
目标函数关于 \(x_2\):
\[h(x_2) = (2.63 - 2)^4 + (2.63 - 2x_2)^2 = (0.63)^4 + (2.63 - 2x_2)^2 \]
\((0.63)^4 = (0.3969)^2 \approx 0.1575\)(常数,不影响极小点位置)。
求导:
\[h'(x_2) = -4(2.63 - 2x_2) \]
令 \(h'(x_2) = 0\) 得:
\[2.63 - 2x_2 = 0 \quad \Rightarrow \quad x_2 = 2.63/2 = 1.315 \]
更新:
\[x_2^{(2)} = 1.315 \]
第二次迭代完成,得到:
\[x^{(2)} = (2.63, 1.315) \]
5. 结果与小结
经过两次完整迭代,点列更新如下:
- 初始点:\((0, 3)\)
- 第一次迭代后:\((3.13, 1.565)\)
- 第二次迭代后:\((2.63, 1.315)\)
目标函数值变化:
- \(f(0, 3) = (0-2)^4 + (0-6)^2 = 16 + 36 = 52\)
- \(f(3.13, 1.565) = (1.13)^4 + (3.13 - 3.13)^2 = 1.630 + 0 = 1.630\)
- \(f(2.63, 1.315) = (0.63)^4 + (2.63 - 2.63)^2 = 0.1575 + 0 = 0.1575\)
可见函数值显著下降。
交替变量方向法通过轮流优化每个变量,逐步逼近局部最优解(本题理论最优解为 \((2, 1)\))。该方法简单易实现,但可能收敛较慢,尤其当变量间耦合较强时。