常见问题

哪里可以获取CVXPY的帮助?

您可以在StackOverflow上或在 CVXPY邮件列表 上发布有关如何使用CVXPY的问题。 如果您在CVXPY中发现错误或有功能请求,请在 CVXPY Github问题跟踪器 上创建一个问题。

哪里可以学习更多关于凸优化的知识?

Boyd和Vandenberghe的书 凸优化 可以免费在线阅读,并且对凸优化有深入的介绍。 要了解更多关于有纪律的凸规划的知识, 请访问 DCP教程网站

如何知道我在使用哪个版本的CVXPY?

要检查您安装的CVXPY的版本, 请在Python提示符中运行以下代码片段:

import cvxpy
print(cvxpy.__version__)

如果我遇到 “DCPError” 异常怎么办?

您在CVXPY中解决的问题必须遵循有纪律的凸规划(DCP)的规则。 DCP就像是优化问题的类型系统。 有关DCP的更多信息,请参见 DCP教程部分DCP教程网站

如何找到DCP错误?

您可以通过调用 object.is_dcp() 来测试问题、目标、约束或表达式是否符合DCP规则。 如果该函数返回 False, 则该对象存在DCP错误。

如果我遇到 “SolverError” 异常怎么办?

有时求解器会遇到数值问题并无法解决问题,此时CVXPY会引发 “SolverError”。 如果发生这种情况, 请尝试在问题上使用不同的求解器, 如 选择求解器 部分中所讨论的那样。 如果求解器CVXOPT失败,请尝试使用求解器选项 kktsolver=ROBUST_KKTSOLVER

CVXPY 支持哪些求解器?

请参阅 求解器选项 部分以了解 CVXPY 支持的求解器列表。 如果您想使用CVXPY不支持的求解器, 请在 CVXPY GitHub问题跟踪器 上提出功能请求。

CVXPY的求解器之间有什么区别?

这些求解器支持不同类别的问题,并且在速度、准确性以及开源与闭源之间的帕累托前沿上占据不同的位置。 有关更多详细信息,请参阅 “求解器选项” 部分。

如果我遇到“Exception: Cannot evaluate the truth value of a constraint”错误该怎么办?

这个错误通常意味着您正在链接多个约束(例如,在表达式中写``0 <= x <= 1``)或在CVXPY表达式上使用内置的Python max``和 ``min 函数。 CVXPY无法正确处理这些用例,因此会抛出一个(显然是晦涩的)异常。

我能在CVXPY对象上使用NumPy函数吗?

不行,只能在CVXPY对象上使用CVXPY函数。 如果在CVXPY对象上使用NumPy函数, 可能会出现令人困惑的失败情况。

我能在CVXPY中使用SciPy稀疏矩阵吗?

可以,它们完全支持。

如何将CVXPY矩阵表达式约束为半正定矩阵?

请参阅 半正定矩阵 部分。

如何创建具有特殊属性(例如布尔或对称变量)的变量?

请参阅 属性 部分。

如何创建具有多个特殊属性(例如布尔和对称)的变量?

首先创建具备各种需要属性的变量,然后通过添加等式约束将它们全部设置为相等。

如何创建多于2维的变量?

您必须使用dict模拟额外的维度, 如 这个Github问题 中所述。

我可以复制CVXPY表达式吗?

可以,CVXPY支持使用 copy 模块的 copydeepcopy 函数进行浅拷贝和深拷贝。一个(浅)拷贝指的是与原始对象具有相同的叶节点(变量、常量和参数)。非叶节点会被重新创建。约束条件保留其 .id 属性,因为它用于传播二次变量。

深拷贝创建一个独立的对象副本,同时保持表达式树中节点之间的关系。

为什么编译我的问题需要这么长时间?

通常情况下,如果您关心性能,请尽可能对CVXPY表达式进行向量化(例如,对于每一行A_i,写成A * x == b,而不是a_i * x == b_i)。请参考此 IPython笔记本 ,了解详细信息。

CVXPY是如何工作的?

CVXPY背后的基本概念在 这篇论文 中讨论。

如何引用CVXPY?

如果您在出版物中使用CVXPY,请引用该软件。可以使用以下BibTeX引用:

@article{cvxpy,
  author       = {Steven Diamond and Stephen Boyd},
  title        = {{CVXPY}: A {P}ython-Embedded Modeling Language for Convex Optimization},
  journal      = {Journal of Machine Learning Research},
  note         = {To appear},
  url          = {https://stanford.edu/~boyd/papers/pdf/cvxpy_paper.pdf},
  year         = {2016},
}