- 科学计算
【免费下载链接】cvxpy
A Python-embedded modeling language for convex optimization problems.
CVXPY 并不是孤立存在的——它处于一个庞大的凸优化软件生态的中心位置。本文基于仓库文档 doc/source/resources/related_projects/index.rst 的核心内容,系统梳理与 CVXPY 直接相关的建模框架与求解器两大生态家族,并结合本仓库的求解器注册表、安装文档与 CI 脚本,说明这些生态成员在 CVXPY 内部是如何被接入、识别与调用的。读完本文,你将掌握 CVXPY 生态的全貌,并能据此为具体问题选择合适的建模扩展与底层求解器。
一、生态定位:CVXPY 在优化软件中的位置
正如关联文档开篇所述:"CVXPY is part of a larger ecosystem of optimization software." CVXPY 定位为 Python 内嵌的凸优化建模语言(modeling language),它本身不解决"算法"问题,而是负责将人类可读的优化模型转换为底层求解器(solver)可识别的标准形式。围绕这一核心,生态分为两个层次:
- 建模框架层:以 CVXPY 为基础或参照,提供不同建模范式(可微优化、非凸扩展、图结构问题、几何规划等)的库;
- 求解器层:真正执行数值求解的引擎,覆盖从线性规划(LP)到半定规划(SDP)、从混合整数(MIP)到非线性规划(NLP)的问题类型。
在仓库内部,这一"建模语言 + 求解器"的分层结构可以在 cvxpy/reductions/solvers/defines.py 中直观看到:文件将全部求解器接口按三类注册表组织——SOLVER_MAP_CONIC(锥规划接口,含 MOSEK、CLARABEL、SCS、ECOS 等 27 个)、SOLVER_MAP_QP(二次规划接口,含 OSQP、PROXQP、PIQP 等 12 个)与SOLVER_MAP_NLP(非线性规划接口,含 IPOPT、KNITRO 等),并通过installed_solvers()函数(defines.py)动态探测当前环境实际可用的求解器列表。
二、建模框架家族:以 CVXPY 为中心的扩展与衍生
关联文档将建模框架分为三类:CVXPY 的功能扩展、受 CVX/CVXPY 启发的其他语言建模工具,以及同域互补工具。
2.1 CVXPY 原生扩展:向"可微"与"非凸"方向延伸
以下库直接以 CVXPY 模型为输入,或直接复用其语法与编译管线:
- CVXPYgen:将一个用 CVXPY 建模的"问题族"(problem family)编译为定制化的 C 语言求解器实现,适用于嵌入式与高性能部署场景;
- cvxpylayers:把 CVXPY 问题转换为可微的 PyTorch 与 TensorFlow 2.0 层,使优化问题可以作为深度学习网络的前向模块参与反向传播;
- DCCP:CVXPY 扩展,用于建模与求解"凸差问题"(difference of convex problems),在 DCP 语法框架内支持更广的一类非凸目标;
- DMCP:CVXPY 扩展,面向多凸问题(multi-convex problems),即目标与约束在变量分组下分别凸、但整体非凸的模型;
- NCVX:CVXPY 扩展,处理"凸目标 + 非凸可行集"的问题,通过将非凸集合的投影算子融入求解流程;
- osmm:基于 PyTorch 与 CVXPY 构建的 Python 包,面向随机优化中出现的优化问题。
这些扩展与 CVXPY 的关系在仓库中亦有旁证:CVXPY 自身的求解器注册表预留了扩展挂载点,例如 defines.py 中的NLP_SOLVER_VARIANTS允许以"变体"方式注册同一求解器的不同算法配置,这种可扩展设计正是 DCCP、DMCP、NCVX 等扩展项目得以嵌入的基础。
2.2 跨语言家族:CVX、Convex.jl 与 CVXR
关联文档明确指出 CVXPY 的直接思想源头与衍生谱系:
- CVX:MATLAB 内嵌的凸优化建模语言,CVXPY 基于 CVX 设计;
- Convex.jl:Julia 内嵌的凸优化建模语言,基于 CVXPY 与 CVX 设计;
- CVXR:R 语言内嵌的凸优化建模语言,同样基于 CVXPY 与 CVX 设计。
这一"同一建模理念、多语言实现"的谱系在仓库中有具体印证:例如 cvxpy/atoms/affine/partial_trace.py 的文件头注明其代码"adapted from Convex.jl";而 cvxpy/cvxcore/README.md 则明确提到 CVXPY 的底层规范化内核(cvxcore)与 CVX、Convex.jl 共享同一套"问题重写"思想。
2.3 同域互补工具:GPkit、PICOS 与 SnapVX
- GPkit:Python 包,用于定义与操作几何规划(GP)模型。注意,CVXPY 自 1.1 起原生支持 DGP(disciplined geometric programming),GP 问题可直接用 CVXPY 建模(调用
prob.solve(gp=True),详见 doc/source/tutorial/solvers/index.rst),GPkit 则面向独立的 GP 建模工作流; - PICOS:面向用户的 Python 接口,为众多线性与锥优化求解器提供统一访问层,与 CVXPY 在"多求解器统一建模"定位上互补;
- SnapVX:基于 Python 的凸优化求解器,专门处理定义在图结构上的优化问题。
三、求解器家族:从开源到商业、从 CPU 到 GPU
关联文档列出的 12 个求解器按发行方式与适用问题类型可划分为四组。所有求解器的能力矩阵(支持 LP/QP/SOCP/SDP/EXP/POW/MIP 的具体情况)见仓库文档 doc/source/tutorial/solvers/index.rst。
3.1 开源锥与二次规划求解器(CVXPY 默认携带)
- OSQP:开源 C 库,求解凸二次规划(QP),默认 ADMM 算法,是 CVXPY 处理 QP 问题的默认选择;
- SCS:开源 C 库,面向大规模凸锥问题,可处理 LP、SOCP、SDP、指数锥与幂锥,是 CVXPY 的"全能后备"(除 MIP 外所有问题类型均可求解);
- ECOS:开源 C 库,求解凸二阶锥与指数锥规划;
- CLARABEL:开源 Rust 库,求解凸锥规划,是 CVXPY 处理 SOCP 的默认求解器;
- PROXQP:开源 C++ 库,求解凸二次规划,默认使用稠密矩阵表示,可在
problem.solve中通过backend='sparse'切换以获得更好性能(见 doc/source/install/index.rst); - CVXOPT:开源 Python 凸优化包,同时支持 LP/QP/SOCP/SDP,且常随包自带 GLPK 绑定。
上述求解器与仓库的对应关系非常直接:在 cvxpy/reductions/solvers/defines.py 中,它们分别对应scs_conif、ecos_conif、clarabel_conif、osqp_qpif、proxqp_qpif、cvxopt_conif等接口类。同时,doc/source/install/index.rst 表明 OSQP、CLARABEL、SCS 是 CVXPY 的强制依赖求解器,随pip install cvxpy自动安装。
3.2 开源 LP 与 MIP 求解器
- GLPK:开源 C 库,求解线性规划与混合整数线性规划(MILP),CVXPY 中通过 CVXOPT 绑定接入;
- HiGHS:开源 C++ 库,覆盖线性、混合整数与二次优化,Python 接口为
highspy,其 LP/MIP 内核也内置在 SciPy 中(SciPy ≥ 1.6.1 附带 HiGHS LP、≥ 1.9.0 附带 MIP,见 doc/source/install/index.rst)。
在注册表中,GLPK 以GLPK_con与GLPK_MI_con两个条目出现(defines.py),GLPK_MI是带混合整数能力的变体;HiGHS 则同时注册了锥接口与 QP 接口(highs_conif、highs_qpif)。
3.3 商业求解器
- GUROBI:商业求解器,覆盖混合整数二阶锥规划;
- MOSEK:商业求解器,覆盖混合整数二阶锥规划与半定规划(SDP),支持指数锥与幂锥;
- XPRESS:商业求解器,覆盖混合整数线性、二次与二阶锥优化问题。
这三者在 defines.py 中被明确列入COMMERCIAL_SOLVERS列表(连同 COPT、NAG、KNITRO),并在求解器偏好顺序中排在开源求解器之后。安装方式上,GUROBI 需要版本 ≥ 9.5 并保证import gurobipy可用,MOSEK 与 XPRESS 同样以 Python 包形式接入(doc/source/install/index.rst)。
3.4 GPU 原生与可微求解器
- Moreau:商业 GPU 原生、可微的凸优化求解器,内置 PyTorch 与 JAX 集成,支持 CPU/GPU 设备选择(
device参数可取"cpu"、"cuda"或"auto",默认"auto",见 doc/source/tutorial/solvers/index.rst)。
Moreau 是关联文档中最新加入的求解器之一,仓库中对应接口为 cvxpy/reductions/solvers/conic_solvers/moreau_conif.py,并出现在 CI 安装脚本 continuous_integration/install_optional_solvers.sh 所安装的求解器之列。
四、在仓库中验证生态成员的接入方式
关联文档是一份"生态地图",而本仓库提供了验证这张地图的"接线图":
- 求解器注册表:cvxpy/reductions/solvers/defines.py 中
SOLVER_MAP_CONIC、SOLVER_MAP_QP、SOLVER_MAP_NLP三张字典按偏好顺序登记了全部求解器接口类,CONIC_SOLVERS、QP_SOLVERS、NLP_SOLVERS三个列表由字典推导而来; - 动态探测:
installed_solvers()(defines.py)遍历全部注册表并调用各接口的is_installed(),返回当前环境可用求解器名列表;用户也可在 Python 中直接调用installed_solvers()查看(示例见 doc/source/tutorial/solvers/index.rst); - 一键安装:
pip install "cvxpy[CBC,CVXOPT,GLOP,GLPK,GUROBI,MOREAU,MOSEK,PDLP,SCIP,XPRESS,KNITRO]"会以 extras 方式安装对应求解器的 Python 包(doc/source/install/index.rst); - CI 实证:仓库的 continuous_integration/install_optional_solvers.sh 脚本展示了各求解器的真实安装命令与平台限制,例如:
ecos scs proxsuite daqp gurobipy piqp clarabel osqp highspy qoco qpalm一批安装;CVXOPT 与 cylp 无 Windows wheel;SDPA 在 Ubuntu 上未通过 LP5 测试故被排除;MOSEK 与 KNITRO 仅在具备许可证密钥(MOSEK_CI_BASE64、KNITRO_LICENSE)时才安装。这些细节直接印证了关联文档中"求解器需单独安装且存在平台/许可证差异"的隐含前提。
五、如何选择:建模框架与求解器的搭配建议
综合关联文档与仓库资料,给出如下选择路径:
- 标准凸优化(LP/QP/SOCP/SDP/指数锥/幂锥):直接用 CVXPY 建模,默认求解器自动匹配问题类型——QP 走 OSQP,SOCP 走 CLARABEL,其余交给 SCS;需要更严苛精度或大规模场景时,显式指定
prob.solve(solver=cp.MOSEK)等; - 需要梯度/反向传播:优先考虑 cvxpylayers(PyTorch/TensorFlow 可微层)或 Moreau(GPU 原生可微);
- 问题含非凸成分但结构规整:按问题结构在 DCCP(凸差)、DMCP(多凸)、NCVX(非凸可行集)中选取;
- 需要把模型固化为嵌入式 C 代码:选用 CVXPYgen;
- 跨语言协作:了解 CVX(MATLAB)、Convex.jl(Julia)、CVXR(R)与 CVXPY 共享同一建模理念,便于团队在多语言栈之间迁移模型;
- 混合整数问题:可选用 GLPK_MI、CBC、GUROBI、MOSEK、XPRESS 等(具体 MIP 能力见 doc/source/tutorial/solvers/index.rst 能力矩阵)。
小结
CVXPY 的生态价值在于"一个建模语言、多个求解后端、多个扩展方向"。关联文档 doc/source/resources/related_projects/index.rst 是这张生态地图的权威索引;而 cvxpy/reductions/solvers/defines.py、doc/source/install/index.rst 与 continuous_integration/install_optional_solvers.sh 则分别从注册、安装与验证三个角度,让你在代码层面确认每个生态成员的真实接入方式。无论是扩展建模能力还是替换求解后端,这张生态全景图都能帮你快速定位正确的工具。
- 科学计算
【免费下载链接】cvxpy
A Python-embedded modeling language for convex optimization problems.
相关推荐
CVXPY 安装完全指南:pip、conda、源码编译与求解器生态配置
CVXPY 安装完全指南:pip、conda、源码编译与求解器生态配置 CVXPY 是一个内嵌于 Python 的凸优化建模语言,支持在 Linux、macOS
科学计算Pyomo:Python生态系统中的专业优化建模框架
Pyomo:Python生态系统中的专业优化建模框架 Pyomo是一个功能强大的开源优化建模工具,专门为在Python环境中解决复杂优化问题而设计。这个框架采用
科学计算科研CVXPY Workshop 2026 参会指南:演讲日程、黑客松十大主题与凸优化生态全景
CVXPY Workshop 2026 参会指南:演讲日程、黑客松十大主题与凸优化生态全景 CVXPY Workshop 是 CVXPY 用户与开发者一年一度的
科学计算
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考