HUST-SE最优化作业
本文最后更新于:2025年1月8日 下午
HUST-SE最优化作业
HUST-SE数学建模与最优化-最优化作业-选题F(外点法,内点法,乘子法求解约束最优化问题)
外点法
原理
外点法将约束优化问题转化为一系列的无约束优化问题,通过构造带有惩罚项的目标函数逐步逼近最优解。
- 目标函数构造: 对于目标函数 $f(x)$ 和约束条件 $g_i(x)≤0,h_j(x)=0$,构造惩罚函数:
$$
F(x,μ)= f(x) + \mu \left( \sum_{i=1}^{l} \max(0, g_i(x))^2 + \sum_{j=1}^{m} h_j(x)^2 \right)
$$
其中,$\mu>0$ 是惩罚因子。
- 惩罚项的作用:
- 当 $x$ 满足约束条件时,惩罚项为 0。
- 当 $x$ 不满足约束条件时,惩罚项随 $\mu$ 增大加剧目标函数的值,逼迫 $x$ 回到可行域。
- 迭代步骤:
- 初始化 $\mu$ 和 $x$。
- 求解无约束问题 $\min F(x, \mu)$。
- 若约束条件近似满足(误差 $\epsilon$ 内),停止迭代;否则增大 $\mu$,重复步骤 2。
优缺点:
- 优点:通用性强,可解决一般约束问题。
- 缺点:惩罚因子的增大可能导致数值不稳定,Hesse 矩阵病态。
算例描述
$$
min f(x) = \frac {x_1^2} 2 + \frac{x_2^2}6
$$
$$
s.t. x_1+x_2−1=0
$$
解答
1 |
|
求解得到
1 |
|
内点法
原理
内点法从可行域的内部出发,通过构造障碍函数(Barrier Function)避免迭代点越出可行域。
目标函数构造: 对于目标函数 $f(x)$ 和约束$g_i(x) \leq 0$,构造障碍函数:
$$
B(x, r) = f(x) - r \sum_{i=1}^{l} \ln(-g_i(x))
$$
其中,$r > 0$ 为障碍因子。障碍项的作用:
- 当 $x$ 接近约束边界 $g_i(x) = 0$ 时,障碍项趋于无穷大,阻止迭代点越界。
- 当 $x$ 远离约束边界时,障碍项的影响较小。
迭代步骤:
- 初始化 $r$ 和 $x$。
- 求解无约束问题 $\min B(x, r)$。
- 若解的精度满足要求,停止迭代;否则减小 $r$,重复步骤 2。
优缺点:
- 优点:始终在可行域内迭代,适用于非线性不等式约束问题。
- 缺点:只适用于不等式约束,且初始点必须在可行域内。
算例描述
$$
min f(x) = {x_1} + {x_2}
$$
$$
s.t. x_1^2+x_2^2−4 \le 0
$$
解答
1 |
|
求解得到
1 |
|
乘子法
原理
乘子法结合拉格朗日乘子法和惩罚函数法的优点,通过引入拉格朗日乘子修正惩罚函数,避免惩罚因子过大导致的数值问题。
目标函数构造: 对于目标函数 $f(x)$ 和约束 $h_j(x) = 0$,构造增广拉格朗日函数:
$$
F(x, \lambda, \mu) = f(x) + \sum_{j=1}^{m} \lambda_j h_j(x) + \frac{\mu}{2} \sum_{j=1}^{m} h_j^2(x)
$$
其中,$\lambda$ 为拉格朗日乘子,$\mu > 0$ 为惩罚因子。思想:
- $\lambda$ 的更新调整约束的权重,逐步逼近精确的拉格朗日乘子。
- $\mu$ 保持适度即可,不必趋向无穷大。
迭代步骤:
- 初始化 $\lambda$、$\mu$ 和 $x$。
- 求解无约束问题 $\min F(x, \lambda, \mu)$。
- 更新拉格朗日乘子$\lambda_{k+1} = \lambda_k + \mu h(x_k)$。
- 若约束条件满足精度要求,停止迭代;否则重复步骤 2。
优缺点:
- 优点:避免了外点法中过大的惩罚因子带来的病态问题,数值稳定性好。
- 缺点:实现较为复杂,需联合优化目标变量和拉格朗日乘子。
算例描述
$$
min f(x) = \frac {x_1^2} 2 + \frac{x_2^2}6
$$
$$
s.t. x_1+x_2−1=0
$$
解答
1 |
|
求解得到
1 |
|
这里求解出来的结果与外点法求解出的结果误差很小。可以验证两种方法求解结果的正确性。
总结
在本次最优化作业中,我探讨了三种最优化方法:外点法、内点法和乘子法,并通过对特定算例的应用,深入理解了每种方法的原理和实现过程。
外点法通过引入惩罚项将约束问题转化为无约束问题,其通用性强,但需注意惩罚因子的选择以避免数值不稳定。内点法则通过障碍函数保持迭代点在可行域内,适用于不等式约束问题,但要求初始点必须在可行域内。乘子法结合了拉格朗日乘子法和惩罚函数法,通过引入拉格朗日乘子修正惩罚函数,提高了数值稳定性,但实现相对复杂。
通过编程求解,我得到了每种方法的最优解,验证了理论的正确性。这些方法各有优势和局限,选择时需根据具体问题的性质和要求来定。通过本次作业,我不仅掌握了最优化算法的理论知识,也提升了解决实际最优化问题的能力。