常见问题
哪里可以获取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
模块的 copy
和 deepcopy
函数进行浅拷贝和深拷贝。一个(浅)拷贝指的是与原始对象具有相同的叶节点(变量、常量和参数)。非叶节点会被重新创建。约束条件保留其 .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},
}