name: 凸优化 description: “优化中凸优化的问题解决策略” allowed-tools: [Bash, Read]
凸优化
何时使用
在优化中处理凸优化问题时使用此技能。
决策树
-
验证凸性
- 目标函数: Hessian矩阵半正定?
- 约束集: 凸集的交集?
z3_solve.py prove "hessian_psd"
-
问题分类
类型 求解器 线性规划 scipy.optimize.linprog二次规划 scipy.optimize.minimize(method='SLSQP')一般凸优化 内点法 半定规划 CVXPY with SDP solver -
标准形式
- 最小化 f(x) 约束于 g_i(x) <= 0, h_j(x) = 0
- 通过取负将最大化转换为最小化
- 通过取负将 >= 转换为 <=
-
KKT条件(必要且充分)
- 平稳性: grad L = 0
- 原始可行性: g_i(x) <= 0, h_j(x) = 0
- 对偶可行性: lambda_i >= 0
- 互补松弛性: lambda_i * g_i(x) = 0
z3_solve.py prove "kkt_conditions"
-
求解和验证
scipy.optimize.minimize(f, x0, constraints=cons)- 检查约束满足
- 验证解是全局最小值(凸性保证此点)
工具命令
Scipy_线性规划
uv run python -c "from scipy.optimize import linprog; res = linprog([-1, -2], A_ub=[[1, 1], [2, 1]], b_ub=[4, 5]); print('Optimal:', -res.fun, 'at x=', res.x)"
Scipy_最小化
uv run python -c "from scipy.optimize import minimize; res = minimize(lambda x: (x[0]-1)**2 + (x[1]-2)**2, [0, 0]); print('Minimum at', res.x)"
Z3_KKT
uv run python -m runtime.harness scripts/z3_solve.py prove "kkt_conditions"
关键技术
来自索引教材:
- [Additional Exercises for Convex Optimization (with] 最后,有许多方法比这更好,通常以此为起点,然后‘抛光’结果。其中一些已被证明能提供相当可靠、即使不大的改进。您不需要实现任何这些方法。
- [Additional Exercises for Convex Optimization (with] K { X = x Ax yi } 其中 e 是 p 维单位向量。这是一个多面体,因此是凸集。Rm 具有形式 − 残差 Aˆx − 描述一种使用凸优化近似求解此问题的启发式方法。
- [Additional Exercises for Convex Optimization (with] 然后我们选取一个小正数 ,和一个向量 c cT x 最小化 约束于 fi(x) 0, hi(x) = 0, f0(x) ≤ p + 。在这些实验中有不同的策略选择 c。最简单是随机选择 c;另一种方法是选择 c 具有形式 ei,对于 i = 1, 。
- [Additional Exercises for Convex Optimization (with] 我们将解表述为以下双准则优化问题: (J ch, T ther) cmax, cmin, 0, 最小化 约束于 c(t) c(t) a(k) ≤ ≥ t = 1, . T 此问题的关键是认识到目标 T ther 是拟凸的。如所述问题,对于固定值 T ther 是凸的。
- [nonlinear programming_tif] 凸集上的优化 - 专注于凸集内的优化问题。最优性条件: 类似于无约束优化,但在凸集上下文中。可行方向和条件梯度 - 探索在约束内确保可行性的方法。
认知工具参考
参见 .claude/skills/math-mode/SKILL.md 获取完整工具文档。