基于交替变量方向法(Alternating Variable Direction Method, AVDM)的约束非凸非二次优化问题
题目描述
我们考虑一个带约束的非线性规划问题,其中目标函数是非凸非二次的,并且包含多个决策变量。该问题具有多个非线性不等式约束和一个线性等式约束。具体问题形式如下:
最小化
\[f(x_1, x_2, x_3) = (x_1 - 2)^4 + (x_2 - 3)^2 + (x_3 - 1)^2 + 2 \sin(x_1 x_2) \]
满足约束:
\[g_1(x) = x_1^2 + x_2^2 - 4 \leq 0 \]
\[g_2(x) = -x_1 - x_2 + 1 \leq 0 \]
\[h(x) = x_1 + x_2 + x_3 - 5 = 0 \]
其中 \(x = (x_1, x_2, x_3) \in \mathbb{R}^3\),并且 \(f\) 是非凸函数(由于四次项和正弦项),约束 \(g_1\) 是非凸的二次约束(但约束区域是凸的,因为 \(g_1 \leq 0\) 定义了一个圆盘),\(g_2\) 是线性不等式,\(h\) 是线性等式。这是一个具有非凸目标和非凸约束的小规模问题,适合用交替变量方向法(AVDM)来求解。AVDM 通过每次只优化一个变量(或一个子集)来简化问题,特别适合处理多变量、非凸、有约束的优化问题。
解题过程循序渐进讲解
步骤 1:理解交替变量方向法(AVDM)的基本思想
交替变量方向法是一种迭代优化算法,适用于多变量优化问题。核心思想是:在每次迭代中,固定其他所有变量,只优化一个变量(或一个变量子集)。这样就将一个高维问题分解为一系列低维子问题。对于约束问题,每个子问题在考虑约束时只处理当前变量的约束部分。AVDM 尤其适用于变量可分或近似可分的问题,即使非凸,也能通过求解一系列简单子问题逐步逼近最优解。
在本题中,变量是 \(x_1, x_2, x_3\)。我们将依次固定其中两个变量,优化第三个变量。每次子优化是一个单变量约束优化问题。
步骤 2:初始化迭代点
选择初始可行点 \(x^{(0)}\)。我们需要满足所有约束。可以简单选取一个满足等式约束 \(h(x)=0\) 的点,并检查不等式约束。例如,取 \(x_1 = 1, x_2 = 2\),则由 \(h\) 得 \(x_3 = 5 - 1 - 2 = 2\)。检查约束:
- \(g_1(1,2) = 1^2 + 2^2 - 4 = 1 \leq 0\) 不满足(因为 1 > 0),所以不可行。
因此,我们调整:取 \(x_1 = 1, x_2 = 1\),则 \(x_3 = 5 - 1 - 1 = 3\)。
检查:\(g_1(1,1) = 1 + 1 - 4 = -2 \leq 0\) 满足;\(g_2(1,1) = -1 - 1 + 1 = -1 \leq 0\) 满足。
所以 \(x^{(0)} = (1, 1, 3)\) 是一个可行点。设迭代计数 \(k = 0\)。
步骤 3:定义子问题结构
在 AVDM 的一次迭代中,我们按顺序优化每个变量:
- 固定 \(x_2 = x_2^{(k)}\) 和 \(x_3 = x_3^{(k)}\),优化 \(x_1\)。
- 固定 \(x_1 = x_1^{(k+1)}\) 和 \(x_3 = x_3^{(k)}\),优化 \(x_2\)。
- 固定 \(x_1 = x_1^{(k+1)}\) 和 \(x_2 = x_2^{(k+1)}\),优化 \(x_3\)。
每个子问题是在约束下最小化关于单一变量的函数。因为约束涉及多个变量,当固定两个变量时,约束变为关于当前变量的简单约束(例如,\(g_1\) 变为关于 \(x_1\) 的二次不等式,但常数项包含固定变量)。
步骤 4:求解第一个子问题(优化 \(x_1\))
在第 \(k\) 次迭代,固定 \(x_2^{(k)} = 1\),\(x_3^{(k)} = 3\)。目标函数中只保留与 \(x_1\) 相关的项:
\[f_1(x_1) = (x_1 - 2)^4 + 2 \sin(x_1 \cdot 1) + \text{常数(与 $x_1$ 无关的项可忽略)} \]
但需要注意,由于等式约束 \(h\) 的存在,当我们改变 \(x_1\) 时,\(x_3\) 可能需要调整以保持等式成立?不,在 AVDM 中,我们通常一次只改变一个变量,而等式约束会涉及所有变量,所以我们需要在子问题中考虑等式约束对当前变量的影响。
实际上,等式约束 \(x_1 + x_2 + x_3 = 5\) 意味着当我们改变 \(x_1\) 时,如果我们希望保持等式成立,则 \(x_3 = 5 - x_1 - x_2\) 会随之变化。但这违反了“只优化一个变量”的设定。为了处理等式约束,常用方法是利用等式消去一个变量,或者将等式约束纳入每个子问题的约束中。这里我们采用后者:在优化 \(x_1\) 时,将 \(x_3\) 表达为 \(x_3 = 5 - x_1 - x_2\),这样 \(x_3\) 不再独立,子问题变为关于 \(x_1\) 的单变量问题,但 \(x_2\) 固定。
因此,在优化 \(x_1\) 时,代入 \(x_3 = 5 - x_1 - x_2\),其中 \(x_2 = x_2^{(k)}\)。然后目标函数变为:
\[\tilde{f}(x_1) = (x_1 - 2)^4 + (x_2 - 3)^2 + (5 - x_1 - x_2 - 1)^2 + 2 \sin(x_1 x_2) \]
化简常数项:\(5 - x_1 - x_2 - 1 = 4 - x_1 - x_2\),所以 \((4 - x_1 - x_2)^2 = (x_1 + x_2 - 4)^2\)。
代入 \(x_2 = 1\):
\[\tilde{f}(x_1) = (x_1 - 2)^4 + (1 - 3)^2 + (x_1 + 1 - 4)^2 + 2 \sin(x_1 \cdot 1) \]
\[= (x_1 - 2)^4 + 4 + (x_1 - 3)^2 + 2 \sin x_1 \]
忽略常数 4,最小化
\[\phi_1(x_1) = (x_1 - 2)^4 + (x_1 - 3)^2 + 2 \sin x_1 \]
约束需要考虑 \(g_1\) 和 \(g_2\)。
- \(g_1: x_1^2 + 1^2 - 4 \leq 0 \Rightarrow x_1^2 \leq 3 \Rightarrow -\sqrt{3} \leq x_1 \leq \sqrt{3} \approx [-1.732, 1.732]\)。
- \(g_2: -x_1 - 1 + 1 \leq 0 \Rightarrow -x_1 \leq 0 \Rightarrow x_1 \geq 0\)。
结合得 \(0 \leq x_1 \leq 1.732\)。
另外,代入 \(x_3 = 5 - x_1 - 1 = 4 - x_1\),没有对 \(x_1\) 的直接约束。
因此子问题是:在区间 \([0, 1.732]\) 上最小化 \(\phi_1(x_1) = (x_1 - 2)^4 + (x_1 - 3)^2 + 2 \sin x_1\)。这是一个单变量非凸函数,可用一维搜索(如黄金分割法或梯度法)求解。这里我们手动分析一下:
求导:
\[\phi_1'(x_1) = 4(x_1 - 2)^3 + 2(x_1 - 3) + 2 \cos x_1 \]
在区间内取几个点计算:
- \(x_1=0\): \(\phi_1'(0) = 4(-8) + 2(-3) + 2 \cos 0 = -32 -6 +2 = -36\),负,函数下降。
- \(x_1=1\): \(\phi_1'(1) = 4(-1)^3 + 2(-2) + 2 \cos 1 = -4 -4 + 2*0.5403 = -7.9194\),负。
- \(x_1=1.732\): \(\phi_1'(1.732) = 4( -0.268)^3 + 2(-1.268) + 2 \cos(1.732)\),\(\cos 1.732 \approx -0.16\),计算得 \(4*(-0.0192) -2.536 -0.32 = -0.0768 -2.856 = -2.9328\),仍为负。
导数在区间内始终为负,说明函数单调递减,最小值在右端点 \(x_1 = 1.732\) 处取得。
所以 \(x_1^{(k+1)} = 1.732\)(保留三位小数)。
此时更新 \(x_3 = 5 - 1.732 - 1 = 2.268\),但由于我们在优化 \(x_1\) 时已经隐含更新了 \(x_3\),所以实际上我们暂时不更新 \(x_3\),等优化 \(x_2\) 时再重新代入等式。在标准 AVDM 中,每次优化一个变量后,立即更新该变量,并利用等式约束重新计算被消去的变量(如果有)。这里我们采用更一致的做法:每次优化一个变量时,从等式解出该变量与固定变量的关系,从而将问题转化为无约束(或简单约束)的单变量优化。但这样在优化 \(x_2\) 时等式形式会变。为了避免混乱,我们采用另一种处理等式约束的常用方法:惩罚函数法或增广拉格朗日法,但那样会复杂化。由于本题是基础题,我们采用简化方式:在每个子问题中,将等式约束直接代入,消去 \(x_3\),这样变量只剩 \(x_1, x_2\),然后交替优化 \(x_1\) 和 \(x_2\)。因为 \(x_3 = 5 - x_1 - x_2\),所以优化 \(x_1\) 和 \(x_2\) 后,\(x_3\) 自动确定。
所以我们调整思路:用等式消去 \(x_3\),问题变为关于 \(x_1, x_2\) 的二维问题,约束为 \(g_1\) 和 \(g_2\)(注意 \(x_3\) 代入后可能影响约束?实际上 \(g_1\) 和 \(g_2\) 不涉及 \(x_3\),所以不变)。目标函数变为:
\[F(x_1, x_2) = (x_1 - 2)^4 + (x_2 - 3)^2 + (5 - x_1 - x_2 - 1)^2 + 2 \sin(x_1 x_2) \]
\[= (x_1 - 2)^4 + (x_2 - 3)^2 + (4 - x_1 - x_2)^2 + 2 \sin(x_1 x_2) \]
约束:
\[g_1: x_1^2 + x_2^2 - 4 \leq 0 \]
\[g_2: -x_1 - x_2 + 1 \leq 0 \]
没有等式约束了(已消去)。
现在 AVDM 在二维上交替优化 \(x_1\) 和 \(x_2\)。
步骤 5:重新从初始点开始用 AVDM 解二维问题
初始点 \(x_1^{(0)} = 1, x_2^{(0)} = 1\),满足约束(已验证)。
迭代 1:优化 \(x_1\),固定 \(x_2 = 1\)
目标关于 \(x_1\) 的部分:
\[F_1(x_1) = (x_1 - 2)^4 + (1 - 3)^2 + (4 - x_1 - 1)^2 + 2 \sin(x_1 \cdot 1) \]
\[= (x_1 - 2)^4 + 4 + (3 - x_1)^2 + 2 \sin x_1 \]
常数 4 可忽略。
约束:
- \(g_1: x_1^2 + 1 - 4 \leq 0 \Rightarrow x_1^2 \leq 3 \Rightarrow |x_1| \leq 1.732\)
- \(g_2: -x_1 - 1 + 1 \leq 0 \Rightarrow -x_1 \leq 0 \Rightarrow x_1 \geq 0\)
所以 \(x_1 \in [0, 1.732]\)。
最小化 \(\phi_1(x_1) = (x_1 - 2)^4 + (3 - x_1)^2 + 2 \sin x_1\)。
与之前相同,导数在区间内为负,最小值在右端点 \(x_1 = 1.732\)。
取 \(x_1^{(1)} = 1.732\)。
迭代 1:优化 \(x_2\),固定 \(x_1 = 1.732\)
目标关于 \(x_2\) 的部分:
\[F_2(x_2) = (1.732 - 2)^4 + (x_2 - 3)^2 + (4 - 1.732 - x_2)^2 + 2 \sin(1.732 \cdot x_2) \]
计算常数:\((1.732 - 2)^4 = (-0.268)^4 \approx 0.00516\),\((4 - 1.732) = 2.268\),所以
\[F_2(x_2) = 0.00516 + (x_2 - 3)^2 + (2.268 - x_2)^2 + 2 \sin(1.732 x_2) \]
约束:
- \(g_1: (1.732)^2 + x_2^2 - 4 \leq 0 \Rightarrow 3 + x_2^2 - 4 \leq 0 \Rightarrow x_2^2 \leq 1 \Rightarrow |x_2| \leq 1\)
- \(g_2: -1.732 - x_2 + 1 \leq 0 \Rightarrow -0.732 - x_2 \leq 0 \Rightarrow x_2 \geq -0.732\)
结合得 \(x_2 \in [-0.732, 1]\)(但注意初始域通常取交集,从 \(x_2^{(0)}=1\) 开始,我们在这个区间搜索)。
最小化 \(\phi_2(x_2) = (x_2 - 3)^2 + (2.268 - x_2)^2 + 2 \sin(1.732 x_2)\)(忽略常数)。
展开:\((x_2^2 - 6x_2 + 9) + (x_2^2 - 4.536 x_2 + 5.144) = 2x_2^2 - 10.536 x_2 + 14.144\)。
所以 \(\phi_2(x_2) = 2x_2^2 - 10.536 x_2 + 14.144 + 2 \sin(1.732 x_2)\)。
求导:
\[\phi_2'(x_2) = 4x_2 - 10.536 + 3.464 \cos(1.732 x_2) \]
在区间 \([-0.732, 1]\) 上,计算几个点:
- \(x_2 = -0.732\): \(\phi_2'(-0.732) = 4(-0.732) - 10.536 + 3.464 \cos(-1.268) \approx -2.928 -10.536 + 3.464*0.300 \approx -13.464 + 1.039 = -12.425\),负。
- \(x_2 = 0\): \(\phi_2'(0) = 0 - 10.536 + 3.464*1 = -7.072\),负。
- \(x_2 = 1\): \(\phi_2'(1) = 4 - 10.536 + 3.464 \cos(1.732) \approx -6.536 + 3.464*(-0.16) \approx -6.536 -0.554 = -7.09\),负。
导数在整个区间为负,函数递减,最小值在右端点 \(x_2 = 1\) 取得。
所以 \(x_2^{(1)} = 1\)(没有变化)。
因此第一次迭代后,点变为 \((1.732, 1)\),对应 \(x_3 = 5 - 1.732 - 1 = 2.268\)。
步骤 6:继续迭代直到收敛
第二次迭代:
- 优化 \(x_1\),固定 \(x_2=1\),约束区间 \(x_1 \in [0,1.732]\),与第一次迭代相同,结果仍为 \(x_1=1.732\)。
- 优化 \(x_2\),固定 \(x_1=1.732\),约束区间 \(x_2 \in [-0.732,1]\),导数仍为负,最小值在 \(x_2=1\)。
所以点不再变化,算法收敛到 \((1.732, 1, 2.268)\)。
步骤 7:检查收敛性和最优性
AVDM 收敛到一个稳定点,即在该点处,沿每个坐标方向都无法改进。但该点可能是局部最优,不一定全局最优。我们计算该点的约束满足情况:
- \(g_1: 1.732^2 + 1^2 - 4 = 3 + 1 - 4 = 0\),满足等式(紧约束)。
- \(g_2: -1.732 -1 +1 = -1.732 \leq 0\),满足。
- 等式 \(x_1+x_2+x_3=1.732+1+2.268=5\),满足。
目标函数值:
\[f = (1.732-2)^4 + (1-3)^2 + (2.268-1)^2 + 2 \sin(1.732*1) \approx 0.00516 + 4 + 1.607 + 2 \sin(1.732) \]
\(\sin(1.732) \approx 0.987\),所以 \(2 \sin(1.732) \approx 1.974\)。
总和 \(\approx 0.00516 + 4 + 1.607 + 1.974 = 7.586\)。
我们可以尝试附近点,例如 \(x_1=1.5, x_2=1.323\)(满足 \(g_1=0\)),则 \(x_3=5-2.823=2.177\),计算目标值可能略小,但本例中 AVDM 收敛到边界点。由于问题非凸,可能存在多个局部最优。AVDM 的结果是一个可行解,且满足一阶必要性条件(在子问题上)。
步骤 8:讨论 AVDM 的特点
- 优点:将复杂问题分解为简单子问题,易于实现。
- 缺点:收敛速度可能慢,且可能收敛到非驻点(由于约束边界导致的不可微)。
- 对于此问题,我们得到解 \((1.732, 1, 2.268)\),目标值约 7.586。
通过以上步骤,我们完成了用 AVDM 求解该约束非凸优化问题的过程。