想象一位家长面对“孩子必须晚上10点前写完作业”这条家规。第一种管教方式是靠吼——声音越大,孩子越害怕,最终坐到书桌前,但全家人神经紧绷,一点小事就炸。第二种方式是“定下惩罚+给予激励”——作业每完成一部分就奖励一朵小红花,孩子心里有本账,逐步养成习惯,最终同样守规矩,但家里氛围平和得多。 约束优化干的事和这位家长一模一样:在必须满足的规则(约束)下,找出让目标最好的方案(最小化目标函数)。惩罚法就是“靠吼”:把违反规则的代价加倍痛罚,惩罚力度(系数)越大,结果越接近规则,可数值计算会变得“神经衰弱”——这就是病态问题。增广拉格朗日则“边罚边奖”:让惩罚保持温和,用乘子(小红花)持续记录欠账并纠正方向,小力度也能高精度收敛。 这篇文章用同一个“家教”比喻,带你看懂两种方法的原理、病态从何而来、乘子如何化解,以及工程上到底怎么选。
你是做约束求解器、优化算法选型或工程优化的人——懂这两招的取舍,等于握住收敛速度与数值稳定性之间的方向盘,是 AI 系统落地时排查“算不动/算不准”问题的核心功力。
目录
可视化演示
展示Seq2seq编码-解码架构在多步预测中的工作机制:编码器将输入序列压缩为上下文向量,解码器逐步生成多步预测输出。
本节配有交互动效(进入视口后自动加载,约 3KB)。
编码阶段 编码器逐个处理输入序列,将信息压缩为上下文向量 h_t = f(x_t, h_{t-1}) 当前展示编码器如何将输入序列编码为固定长度的上下文表示
约束优化本质:先看清“规则”
晚上 10 点的家规、预算上限、安全边界——生活里处处是“必须满足的规则”。约束优化正是在这类规则下寻找最优解。AI 里的机器人要规划路线同时避开障碍,推荐系统要在预算内投放广告,本质上都是在“规则”这个笼子里跳舞。笼子外面再美好,越界一步就出局。
数学上,我们把所有选择记作变量 \(x\),想要最小化的代价记作目标函数 \(f(x)\),必须遵守的规则记作一组等式约束 \(c_i(x)=0\)。这些约束可能是物理定律(关节角度关系)、资源平衡(支出等于收入)或安全条件。它们合在一起,把整个空间切出一个允许活动的子集——这就是“可行域”。
可为什么不能直接解?因为可行域常常形状怪异——像让一个孩子在只有几间房、门还朝向各异的迷宫里找书包。边界不规则或约束耦合时,普通下降法一迈步就越界,所以科学家们想出了“把规则软化”的招。
- 最小化符号\(\min_{x}\) 表示在变量 \(x\) 的所有候选值里,挑出让 \(f(x)\) 最小的那个。好比家长在所有房间布局中,选出让孩子最快写完作业的方案。
- 目标函数\(f(x)\) 是我们要优化的核心指标,它只负责“好不好”。
- s.t. 受限于\(\text{s.t.}\) 是 subject to 的缩写,引出“规则清单”,提醒你接下来的条件一个都不能破。
- 等式约束\(c_i(x)=0\) 表示第 \(i\) 条规则,值必须刚好归零。每多一个 \(i\),就多一条必须同时满足的硬性要求。
惩罚法原理:吼叫式教育
“再不去写作业,今晚就别想看电视!”家长每喊一次,音量就提高一档。惩罚法就是这个思路:不直接处理约束,而是把“违反约束”变成目标函数里的一项“痛苦值”。你越违反规则,代价越高,优化器自然不敢越界。
做法非常直白:把每个约束 \(c_i(x)\) 平方后乘以一个很大的系数 \(\mu\)(惩罚系数),再加进目标函数。平方保证了违反无论正负都变成正代价,而且可导,方便梯度类方法求导。这样,原问题就变成一个无约束问题,直接用梯度下降法就能求解。这就是惩罚项的构造核心。
根据出发点不同,惩罚法还分两派:外点惩罚法允许优化过程先走出可行域,再从外面被“吼”回来;内点惩罚法则像在可行域边界修一堵“无形的墙”(障碍函数),从内部挡住越界。它们各有各的适用场景,但共享同一个脾气——都想靠加大音量来解决问题。
- 原目标不变\(f(x)\) 仍然是最想优化的核心指标,它始终在公式最前面。
- 惩罚力度\(\frac{\mu}{2}\) 中的 \(\mu>0\) 是惩罚系数,控制“吼叫音量”。系数前的 \(1/2\) 只是为了后续求导时抵消平方产生的 2,纯数学上的小甜头。
- 违规平方\(c_i(x)^2\) 是约束残差的平方,残差为 0 则无事发生,残差越大则惩罚越重。
- 求和叠加\(\sum_{i=1}^{m}\) 把所有约束的“痛苦值”加总,规则越多,总压力越大。
惩罚法的双刃剑:系数难调,病态潜伏
吼叫教育最大的问题是“剂量”:喊轻了孩子当耳旁风,喊重了全家鸡飞狗跳。惩罚法的 \(\mu\) 也一样。我们解出的惩罚法最优解 \(x_\mu^\) 和真实最优解 \(x^\) 之间的偏差,居然与 \(1/\mu\) 成正比——这意味着想让结果精确,惩罚系数必须趋于无穷大。
可数学上还存在另一笔账:当 \(\mu\) 变得很大,目标函数的海森矩阵(二阶导数矩阵)的特征值会拉开巨大差距,这种“数值上的身材失衡”让梯度下降变得像在深谷里蹒跚,一步大就撞壁,一步小就停滞。这就是病态(ill-conditioning)的由来。于是惩罚法陷入两难:系数太小解不准,系数太大值不稳。
所以惩罚法擅长“够用就好”的场景:约束简单、精度要求不高、需要快速实现时,它像一位嗓门大但直爽的家长,效率很高。可一旦你要高精度结果,它就原形毕露。
- 罚后最优解\(x_\mu^*\) 是固定惩罚系数为 \(\mu\) 时,惩罚问题的最优点;它不是真正的约束最优解,只是“迫于压力”靠近。
- 真实最优解\(x^*\) 是原问题理想要找的、严格满足约束的解,是家长心目中的“完美孩子”。
- 大 O 记号\(O(1/\mu)\) 表示两者偏差和 \(1/\mu\) 同数量级,\(\mu\) 越大偏差越小,但缩小速度缓慢。
- 反比直觉\(1/\mu\) 说明“音量”和“效果”只是线性反比——你付出十倍的吼叫,只能换来十倍的精确,而数值稳定性却可能恶化百倍。
增广拉格朗日:恩威并施
聪明的家长会换一种方式:约定“每写完一页作业,积一朵小红花”。小红花不是靠吼出来的压力,而是一笔不断累积的“账”。增广拉格朗日法正是这个思路——它保留温和的惩罚项(音量调小),再加入一个随迭代不断更新的乘子项(记账本),让乘子代替惩罚系数去承担“纠偏”责任。
增广拉格朗日函数长这样:前面还是原目标加二次惩罚项,但中间多出一串 \(\lambda_i c_i(x)\)。这里的 \(\lambda_i\) 就是拉格朗日乘子,它像一本账,记录“这个约束还欠多少纠偏力度”。每轮迭代时,账本会根据当前违规情况更新一次。正是这本账的引入,让惩罚系数不必再拉到无穷大。
求解时采用“双层迭代”:内层固定当前 \(\lambda\),用梯度下降解出这个增广问题的最小点;外层再用这个解更新 \(\lambda\)。内层负责“当下做好”,外层负责“修正方向”,像孩子每天完成作业(内层),家长每周总结小红花(外层),循序渐进。
- 原目标\(f(x)\) 依旧在最前面,优化的核心指标没有变。
- 温和惩罚项\(\frac{\mu}{2}\sum c_i^2\) 保留二次惩罚,但这里的 \(\mu\) 不需要取很大,通常保持固定的小值。
- 乘子项\(\sum \lambda_i c_i(x)\) 是新增的“账本”,\(\lambda_i\) 是拉格朗日乘子,记录第 \(i\) 个约束的累计欠账。
- 线性而非平方注意乘子项是残差的一次方,不是平方——它提供一个稳定的“定向拉力”,而平方项只提供“越界阻力”,两者合力,相辅相成。
病态问题剖析:噪音放大器
为什么大 \(\mu\) 会病态?想象一个孩子原本在小房间里安静写作业,家长在外面吼声震天,房间里任何轻微响动都被放大成噪音。数值计算中,海森矩阵(Hessian)的“特征值分布”就是房间的几何结构。惩罚项加入后,海森矩阵变成原目标与惩罚项的二阶导之和,而惩罚项贡献的特征值大约为 \(\mu\) 量级。
于是当 \(\mu\) 巨大时,矩阵特征值从“很小”到“很大”跨越多个数量级。我们用条件数来衡量这种失衡:它是最大特征值与最小特征值的比值。条件数越大,矩阵越“狭长”——沿某个方向梯度变化极快,沿另一个方向却几乎平坦。梯度下降法在这种地形里来回震荡,步长稍大就发散,稍小就走得比蜗牛还慢。
这就是“越吼越乱”的数学本质:你确实把孩子压向了书桌(约束满足),但整个求解系统被震得摇摇晃晃(数值不稳)。许多初学者误以为再加几个 9 就能解决问题,其实是在给火堆添柴。
- 海森矩阵\(H\) 是目标函数对所有变量求二阶偏导得到的矩阵,它刻画了地形在每个方向的弯曲程度。
- 最大特征值\(\lambda_{\max}(H)\) 对应弯曲最剧烈的方向,梯度变化快,步长被它限制。
- 最小特征值\(\lambda_{\min}(H)\) 对应几乎平坦的方向,推进缓慢。
- 比值即病态度\(\kappa(H)\) 越大,两个方向差距越悬殊,数值求解越困难。惩罚法里 \(\mu\) 每增大十倍,\(\kappa\) 大约也增大十倍。
乘子法如何化解危机:小惩罚+大账本
增广拉格朗日之所以能全身而退,靠的是把“纠偏任务”从惩罚系数转移到乘子上。乘子更新法则非常朴素:每一轮迭代后,把当前约束的“剩余违规量”乘上一个小 \(\mu\),加到旧乘子上。这相当于家长每周盘点:孩子这周还差多少没做到,就把差额记进下一周的“目标清单”。
神奇之处在于,只要乘子更新得当,哪怕 \(\mu\) 保持很小,解的精度也会逐步逼近真实最优——因为乘子项提供了“持续记忆”,不再依赖惩罚系数单方面施压。小 \(\mu\) 意味着海森矩阵的特征值差距不大,条件数维持在温和区间,数值计算稳稳当当。这就是乘子法缓解病态的核心理由。
这套机制让收敛性有了保障:小惩罚保证矩阵健康,乘子累积保证约束最终被满足。好比孩子每天在温和的提醒下完成一点点作业,小红花每周累积,最终不仅按时完成,而且家庭关系没有崩坏。增广拉格朗日把“精度压力”从惩罚系数手里接管过来,交给了智慧的账本。
- 当前账本\(\lambda_i^{(k)}\) 是第 \(k\) 轮迭代时第 \(i\) 条约束的乘子,是历史纠偏力的累计。
- 当前违规量\(c_i(x^{(k)})\) 是第 \(k\) 轮解出的点违反第 \(i\) 条约束的残差,负号代表欠得更多,正号代表补过了头。
- 比例调节\(\mu\, c_i(x^{(k)})\) 表示本轮的补偿额。注意这里 \(\mu\) 保持较小,因为它只决定“记账速度”,不承担最终精度。
- 累加更新\(\lambda_i^{(k+1)}=\lambda_i^{(k)}+\cdots\) 让纠偏记忆持续累积,这正是“账本”的核心。
场景选择指南:怎么选
现实中不存在放之四海皆准的优化方法。如果你的约束很简单、对精度要求不高,惩罚法绝对够用——它实现快、无需额外维护乘子,像请个嗓门大的邻居帮忙喊两句,成本极低。可如果你的求解器需要高精度、约束数量多、迭代中已经观察到剧烈振荡或收敛停滞,那就该切换到增广拉格朗日。
工程上的切换策略也不复杂:先用一个小惩罚系数跑起来,监控约束残差和迭代步长的变化;一旦发现残差下降缓慢或解在目标附近震荡,立刻为每个约束引入乘子,保持 \(\mu\) 不变继续外层迭代。增广拉格朗日本质上就是一个“惩罚法的内层循环 + 乘子更新的外层循环”组合,实现成本可控,收益却立竿见影。
教育孩子没有万能药,工程优化也一样:惩罚法是快刀,增广法是慢工出细活。理解了二者的权衡,你在构建自己的约束求解器时,就能像经验丰富的家长一样——该吼时吼两句,该记账时记一笔,收放自如。
- 内层子问题\(\arg\min_x\) 表示在当前 \(\mu_k\) 和 \(\lambda^{(k)}\) 固定的情况下,解出使括号内最小的点。
- 三件套结构中括号里依次是原目标、温和惩罚项、乘子账本,缺一不可。
- 每轮更新\(\mu_k\) 可以保持恒定甚至逐步减小,\(\lambda_i^{(k)}\) 每轮按上次的更新公式刷新。
- 收敛停止准则当 \(c_i(x^{(k)})\) 足够小(约束被满足),乘子更新几乎不再变化,算法自然收敛。
AI 应用场景
场景一:机器人逆运动学与关节约束求解
阶段:决策与控制(机器人关节角度求解)
解决的问题:机械臂要抓取目标点,同时每个关节必须严格遵守角度范围等式约束。传统做法用惩罚法强压约束,惩罚系数调大后机械臂末端在目标点附近高频抖动(病态),影响抓取稳定性。增广拉格朗日保持小惩罚系数,用乘子累计每根关节的“偏差账”,让末端平滑收敛到目标,抖动显著降低。
具体案例:一个六轴机械臂仓库分拣场景中,优化器每 10 毫秒必须算出一组满足所有关节约束的角度。之前惩罚法的解偶尔让机械臂撞到货架,切换增广拉格朗日后,约束残差稳定在毫米级,碰撞率下降 90%。
场景二:带安全约束的强化学习策略优化
阶段:模型训训练(约束策略优化)
解决的问题:自动驾驶强化学习在探索时可能撞到障碍或越出车道,需要在策略损失函数中加入安全约束(如碰撞概率必须为零)。惩罚法需要把惩罚系数调到极大才能勉强压住风险,导致策略收敛极慢且动作剧烈。增广拉格朗日把“安全乘子”引入损失函数,每轮评估违反程度并更新乘子,让策略在安全的“可行域”内稳健学习。
具体案例:仿真园区中训练自动驾驶小车,约束是“与前车距离不小于 2 米”。使用增广拉格朗日-Lagrangian 策略优化后,训练前 10 万步的违规次数从惩罚法的 430 次降到 15 次,最终任务成功率提升 22%。
Python 演示
def make_penalty(f, df, c, dc, mu): """构造惩罚法目标: min f(x) + mu/2 * c(x)^2""" def obj(x): return f(x) + 0.5 * mu * c(x) ** 2 def dobj(x): return df(x) + mu * c(x) * dc(x) return obj, dobj def make_augmented(f, df, c, dc, mu, lam): """构造增广拉格朗日目标: min f(x) + mu/2*c(x)^2 + lam*c(x)""" def obj(x): return f(x) + 0.5 * mu * c(x) ** 2 + lam * c(x) def dobj(x): return df(x) + mu * c(x) * dc(x) + lam * dc(x) return obj, dobj def solve_first_order(dobj, x0=0.0, lr=0.1, tol=1e-9, max_iter=2000): """用一阶梯度下降解无约束子问题""" x = x0 for _ in range(max_iter): g = dobj(x) x -= lr * g if abs(g) < tol: break return x if __name__ == "__main__": f = lambda x: (x - 0.5) ** 2 df = lambda x: 2.0 * (x - 0.5) c = lambda x: x - 1.0 dc = lambda x: 1.0 print("== 惩罚法: 增大 mu 逼近约束 ==") for mu in [1, 10, 100, 1000, 10000]: _, dobj = make_penalty(f, df, c, dc, mu) x = solve_first_order(dobj) print("mu=%6.0f x=%.6f 约束残差=%.3e" % (mu, x, abs(c(x)))) print("\n== 增广拉格朗日: mu 固定为 1, 靠乘子迭代 ==") mu, lam = 1.0, 0.0 for k in range(8): _, dobj = make_augmented(f, df, c, dc, mu, lam) x = solve_first_order(dobj) lam += mu * c(x) print("k=%d x=%.6f lam=%.6f 约束残差=%.3e" % (k + 1, x, lam, abs(c(x))))
def make_penalty(f, df, c, dc, mu):惩罚法工厂函数,输入目标、约束及其导数,输出惩罚目标。return f(x) + 0.5 * mu * c(x) ** 2惩罚目标核心:原目标加“吼声”二次惩罚项。def make_augmented(f, df, c, dc, mu, lam):增广拉格朗日工厂函数,多接收一个乘子参数。return f(x) + 0.5 * mu * c(x) ** 2 + lam * c(x)在惩罚基础上加上“乘子账本”线性项。x -= lr * g梯度下降核心更新,步长由学习率lr控制。for mu in [1, 10, 100, 1000, 10000]:惩罚法实验循环,逼着 \(\mu\) 从 1 爬到一万。lam += mu * c(x)乘子更新公式的代码形态:旧账加新增欠账。
常见误区
误区反正惩罚法的目的就是让约束满足,那把 \(\mu\) 设成 \(10^9\) 不就直接搞定了吗?越大越准。
正解\(\mu\) 太大时,海森矩阵条件数急剧增大,梯度下降每一步都被迫取极小步长,收敛慢如蜗牛,且舍入误差被放大,解反而在目标附近震荡。这就是病态问题。好比家长把音量调到 100 分贝,孩子确实坐在书桌前,但吓得发抖,一个字都写不好。
为何常见:因为看到“偏差 \(\propto 1/\mu\)”的公式,直觉上认为 \(\mu\) 越大越接近真实解,却忽略了数值稳定性这个隐性杀手。
误区既然乘子那么厉害,直接把惩罚项去掉,只用 \(\lambda c(x)\) 不就行了?
正解不行。没有二次惩罚项的“稳场作用”,子问题可能无界或振荡;惩罚项保证了子问题的强凸性和解的存在性,乘子项则负责提升精度。两者缺一不可,就像家长既要引导(小红花)也要有底线(罚则),单靠激励管不住调皮的孩子。
为何常见:因为学习时只记住了“乘子替代大 \(\mu\)”这个结论,误以为替代就意味着完全删除。
误区反正惩罚法代码就几行,直接把所有约束优化都写成惩罚法,跑不动就加 \(\mu\)。
正解在小规模、低精度场景下惩罚法确实够用,但在大规模约束问题中,病态会让求解器要么反复迭代不收敛,要么返回一个看似满足约束实则偏差巨大的解。工程实践中,遇到残差下降缓慢或震荡时,应当及时切换到增广拉格朗日——它只是多维护一组乘子变量,代码量增加有限,但稳定性收益巨大。
为何常见:未真正遇到病态问题的人,很难体会到“加 \(\mu\) 加到绝望”的感觉,等遇到时已经浪费了大量调参时间。
误区\(\lambda\) 每轮就加上 \(\mu c(x)\) 那么一点,看起来像小修小补,核心还是靠惩罚项。
正解恰恰相反,乘子的持续累积是增广拉格朗日收敛的关键。它相当于“长期记忆”,让纠偏力度不断叠加,最终在 \(\mu\) 很小的情况下也能让约束残差趋于零。没有乘子更新,它就退化回普通惩罚法;有了它,小惩罚也能获得高精度。
为何常见:初看更新公式觉得只是一个简单的加法,低估了“迭代累积”这一机制在数值优化中的决定性作用。
面试题
Q1. 惩罚法把约束放进目标函数的核心做法是?
- A.用乘子完全抵消约束
- B.把约束残差的平方乘以惩罚系数加入目标← 正确答案
- C.直接删除约束再求解
- D.把目标函数变成约束
答案:B。惩罚法的精髓是给违反约束加上“痛苦值”:\(\frac{\mu}{2}c(x)^2\)。就像家长用吼声给不写作业的孩子施加压力。B 正是“惩罚项”的标准形式。A 是增广拉格朗日的部分思路,C、D 都丢弃了约束,明显错误。
Q2. 惩罚法中,为什么惩罚系数 \(\mu\) 通常需要取得很大?
- A.为了让目标函数更平滑
- B.为了减少迭代次数
- C.让解和真实最优解的偏差 \(O(1/\mu)\) 足够小← 正确答案
- D.为了避免海森矩阵病态
答案:C。偏差与 \(\mu\) 成反比,要偏差小就得 \(\mu\) 大。C 描述了这一正比关系。A、D 正好说反了,\(\mu\) 大会让条件数恶化而非平滑或好转。
Q3. 惩罚系数过大导致数值病态的根本原因是?
- A.目标函数变成非线性
- B.海森矩阵的条件数随 \(\mu\) 急剧增大← 正确答案
- C.约束数量变多
- D.梯度完全消失
答案:B。惩罚项对海森矩阵贡献约 \(\mu\) 量级的特征值,使最大与最小特征值之比(条件数)急剧膨胀,梯度下降在“狭长峡谷”里举步维艰。B 准确描述了这条因果链。C 与系数无关,D 不是病态的主要表现。
Q4. 与惩罚法相比,增广拉格朗日法的优势包括?
- A.完全不需要惩罚项
- B.\(\mu\) 保持较小也能高精度收敛← 正确答案
- C.乘子累积提供稳定纠偏,数值更稳健← 正确答案
- D.不需要迭代,一次求解直接得到答案
答案:BC。增广法保留温和惩罚项同时引入乘子账本,B、C 正是其两大优势。A 错误,惩罚项仍需保留以确保子问题良性;D 错误,它同样是迭代方法,只是把压力从 \(\mu\) 转移到 \(\lambda\)。
Q5. 拉格朗日乘子 \(\lambda\) 在增广拉格朗日法中的角色是?
- A.控制梯度下降的学习率
- B.记录约束残差并持续纠正解的方向← 正确答案
- C.放大噪音信号
- D.替换掉原目标函数
答案:B。\(\lambda\) 每轮按 \(\lambda\leftarrow\lambda+\mu c(x)\) 更新,把历史违规量记入“账本”,不断修正当前解,B 准确。A 与学习率无关,C 是病态的后果,D 显然错误。
Q6. 下列哪些属于惩罚法在 \(\mu\) 很大时暴露的缺点?
- A.海森矩阵条件数恶化← 正确答案
- B.梯度下降收敛速度显著变慢← 正确答案
- C.实现复杂度急剧上升
- D.浮点舍入误差被放大← 正确答案
答案:ABD。大 \(\mu\) 让条件数暴涨、步长被压制、舍入误差放大,A、B、D 均成立。C 错误——惩罚法实现复杂度始终不高,这正是它的优点,问题出在数值稳定性而非代码量。
Q7. 增广拉格朗日乘子更新的标准方向是?
- A.\(\lambda^{(k+1)}=\lambda^{(k)}+\mu\,c(x^{(k)})\)← 正确答案
- B.\(\lambda^{(k+1)}=\lambda^{(k)}-\mu\,c(x^{(k)})\)
- C.每轮直接把 \(\lambda\) 重置为 \(c(x^{(k)})\)
- D.\(\lambda\) 只在最后一步更新一次
答案:A。标准公式是“旧账 + 比例×残差”,方向为加号。因为欠账要累积而非冲销,减号会抵消纠偏效果,C 会丢失历史信息,D 则不是迭代式更新。
Q8. 设 \(f(x)=\frac{1}{2}x^2\),约束 \(c(x)=x-1=0\),采用惩罚法且 \(\mu=1\),惩罚问题的最优解 \(x_\mu\) 是?
- A.0.25
- B.0.5← 正确答案
- C.0.67
- D.1.0
答案:B。惩罚式变为 \(\min\ \frac{1}{2}x^2+\frac{1}{2}(x-1)^2\),求导得 \(2x-1=0\),故 \(x=0.5\)。它离真实解 1 有 0.5 的偏差,正是 \(O(1/\mu)\) 的表现。若 \(\mu\rightarrow\infty\),解才趋近 1。
Q9. 病态问题中,条件数 \(\kappa(H)\) 很大带来的直接影响是?
- A.目标函数不可导
- B.梯度下降必须用很小的步长,收敛极慢← 正确答案
- C.约束自动被满足
- D.不需要再迭代
答案:B。条件数大意味着地形极度“狭长”,步长受限于最陡方向,迭代像在峡谷中挪动,收敛极慢且对步长极度敏感。B 正确。A、C、D 都不是条件数大的直接结果。
Q10. 工程中从惩罚法切换到增广拉格朗日时,正确的操作是?
- A.保持 \(\mu\) 为较小值,引入乘子迭代← 正确答案
- B.完全删除惩罚项,只留乘子
- C.内层解子问题、外层更新乘子,两层联动← 正确答案
- D.将 \(\mu\) 继续线性增大以保证收敛
答案:AC。切换要点是“小惩罚+乘子记账”:\(\mu\) 保持小值避免病态,用乘子更新承担精度。内层求子问题、外层刷新 \(\lambda\) 正是增广法的标准结构,A、C 正确。B 删惩罚项会导致子问题失稳,D 违背了小惩罚的设计初衷。