# 凸优化工具箱
使用 DCP 规则建立凸优化问题,并通过锥优化求解器求解 LP、SOCP、SDP、指数锥和 LMI 问题
凸优化工具箱提供面向建模的凸优化接口。用户可以像编写数学模型一样声明变量、组合凸表达式、写出等式或不等式约束,然后调用 cvxsolve! 选择后端求解器完成求解。它适合用于信号处理、通信波束赋形、鲁棒控制、半正定松弛、资源分配、稀疏建模和矩阵不等式设计等需要可靠凸优化建模的任务。
工具箱采用纪律凸规划(Disciplined Convex Programming,DCP)规则检查模型。DCP 规则要求最小化目标为凸函数、最大化目标为凹函数,等式约束两端为仿射表达式,并要求不等式方向与表达式曲率匹配。这样的建模方式与 CVX 的思想一致:用户描述凸优化模型,系统完成规范化和求解器调用。
函数库:TyConvex
提示
使用本函数库之前,需要通过 import TyConvex 或 using TyConvex 来实现加载。
关于 import 和 using 的详细用法,请参见模块的命名空间管理。
# 内容概览
凸优化快速入门
从最小线性规划和带界最小二乘开始,学习变量、目标、约束、求解和结果读取。
DCP 建模基础
说明变量、表达式、目标函数、约束、半正定矩阵、集合约束和常用凸函数的建模方式。
求解接口
提供公开求解入口 cvxsolve!,用于求解由 TyConvex 建立的凸优化问题。
建模接口
TyConvex 重导出 Convex 建模接口。接口可在 TyConvex 中直接使用,用于完成变量创建、问题创建、约束构造和结果读取。
求解器与 cvxsolve!
说明 cvxsolve! 的求解器选择、容差、迭代次数、显示输出、热启动和原生求解器参数传递。
可求解的问题类型
按 LP、SOCP、SDP、指数锥、LMI 和组合优化松弛分类说明建模能力和适用场景。
工程案例
从工程验证模型中提炼 SDP/LMI 案例,展示鲁棒波束赋形、状态反馈、Schur 补和 Max-Cut 松弛等建模方式。
# 典型工作流
- 使用 Variable、Semidefinite、ComplexVariable 等接口声明决策变量。
- 使用 minimize、maximize 或 satisfy 创建优化问题。
- 用 ==、<=、>=、isposdef 和凸函数组合约束。
- 调用 cvxsolve!(problem; algs = "clarabel") 求解问题。
- 使用 problem.status、problem.optval 和 evaluate(variable) 读取状态、最优值和变量解。
# 函数
求解接口
| 函数名 | 简介 |
|---|---|
| cvxsolve! | 求解由 TyConvex/Convex 建立的凸优化问题,并选择代码中可识别的锥优化后端 |
建模接口
TyConvex 重导出 Convex 建模接口。常用建模接口如下:
| 函数名 | 简介 |
|---|---|
| Variable | 创建实数标量、向量或矩阵优化变量 |
| Semidefinite | 创建实对称半正定矩阵变量 |
| ComplexVariable | 创建复数优化变量 |
| minimize | 创建最小化凸优化问题 |
| maximize | 创建最大化凸优化问题 |
| satisfy | 创建无目标函数的可行性问题 |
| evaluate | 读取变量或表达式在求解结果处的数值 |
| isposdef | 创建矩阵半正定约束 |
norm、sum、tr、diag、entropy、logsumexp 和 sumsquares 等常用表达式接口用于构造目标和约束,请参见 DCP 建模基础。实际求解入口为 cvxsolve!。