name: 约束优化 description: “优化中约束优化的问题解决策略” allowed-tools: [Bash, Read]
约束优化
何时使用
在处理优化中的约束优化问题时使用此技能。
决策树
-
约束分类
- 等式约束: h(x) = 0
- 不等式约束: g(x) <= 0
- 边界约束: l <= x <= u
-
拉格朗日方法(等式约束)
- L(x, lambda) = f(x) + sum lambda_j * h_j(x)
- 求解: grad_x L = 0 和 h(x) = 0
sympy_compute.py solve "grad_L_system"
-
KKT条件(不等式约束)
- 使用 mu_i 扩展拉格朗日函数 for g_i(x) <= 0
- 互补松弛性: mu_i * g_i(x) = 0
z3_solve.py prove "kkt_satisfied"
-
惩罚和障碍方法
- 惩罚: 添加 P(x) = rho * sum max(0, g_i(x))^2
- 障碍: 添加 B(x) = -sum log(-g_i(x)) 用于内点法
- 迭代增加惩罚/减少障碍参数
-
SciPy 约束优化
scipy.optimize.minimize(f, x0, method='SLSQP', constraints=cons)- constraints = [{‘type’: ‘eq’, ‘fun’: h}, {‘type’: ‘ineq’, ‘fun’: lambda x: -g(x)}]
- bounds = [(l1, u1), (l2, u2), …]
工具命令
Scipy_Slsqp
uv run python -c "from scipy.optimize import minimize; cons = dict(type='eq', fun=lambda x: x[0] + x[1] - 1); res = minimize(lambda x: x[0]**2 + x[1]**2, [1, 1], method='SLSQP', constraints=cons); print('Min at', res.x)"
Sympy_Lagrangian
uv run python -m runtime.harness scripts/sympy_compute.py solve "[2*x - lam, 2*y - lam, x + y - 1]" --vars "[x, y, lam]"
Z3_Kkt_Satisfied
uv run python -m runtime.harness scripts/z3_solve.py prove "complementary_slackness"
关键技术
来自索引教科书:
- [非线性编程_tif] 共轭方向方法** - 涉及相对于某个二次形式彼此共轭的方向的方法,提高寻找最小值的效率。拟牛顿方法** - 牛顿方法的变体,近似Hessian矩阵。无导数方法** - 处理不需要导数信息的优化方法。
- [非线性编程_tif] 凸集上的优化** - 专注于凸集内的约束优化问题。最优性条件:** 类似于无约束优化,但在凸集背景下。可行方向和条件梯度** - 探索确保约束内可行性的方法。
- [非线性编程_tif] 在本章中,我们考虑约束优化问题 minimize f(z) subject to z € X,其中我们假设:(a) X 是 2 的非空凸子集。在处理算法时,我们进一步假设 X 是闭的。函数 f: %™ — R 在 X 上连续可微。
- [非线性编程_tif] 获取下界的方法在第 5 节中详细阐述。拉格朗日松弛方法详细讨论。此方法需要优化不可微函数,一些主要相关算法,如次梯度和切割平面方法,将在第 6 章讨论。
- [非线性编程_tif] 图像描绘了一个三维图形表示,可能与线性代数或优化相关。关键元素包括: - 轴: 显示三个相交轴,表示三维坐标系。方程和约束**: 注意到线性方程
{x | Ax = b, x ≥ 0},表示系统或约束集。
认知工具参考
完整工具文档请参见 .claude/skills/math-mode/SKILL.md。