非线性规划中的交替变量方向法(Alternating Variable Direction Method, AVDM)基础题
字数 5438 2025-12-10 22:18:13

非线性规划中的交替变量方向法(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)\))。该方法简单易实现,但可能收敛较慢,尤其当变量间耦合较强时。

非线性规划中的交替变量方向法(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) \))。该方法简单易实现,但可能收敛较慢,尤其当变量间耦合较强时。