cvxpy - 如何检查cvxpy的solve()是否成功?
问题描述
这是我第一次尝试使用 cvxpy。我有两个非常简单的约束:
x = cp.Variable((5, 5))
constrains = [cp.sum(x) == 1.0, 0 <= x]
该解决方案大部分时间都有效,同时满足了这两个约束。但有时解决方案只满足第一个约束并吐出负值。我想知道是否有办法让求解器指示它是否成功。
解决方案
这种信息总是由求解器填充的一些状态信息的一部分。在 cvxpy 的情况下,这里记录了这一点:
所以像:
problem.solve()
if problem.status == 'optimal':
...
else:
...
是通常的路线。
评论:
求解器决定这一点,可行性和最优性决定通常取决于公差(浮点数学!)。
此外,cvxpy 中的大多数求解器都是类似内点的求解器(有些甚至是基于一阶的求解器),它们会慢慢收敛到一些任意准确的近似解,这样:
- 您的单纯形约束 (
sum(x) == 1
) 可能会被一些小的 epsilon 关闭(与 1.0 相比)1e-12
- 一些非负变量可能会被一些小的 epsilon 为负,例如
1e-12
这是完全正常的(对于这些类型的求解器;使用类似单纯形的求解器或基于单纯形的交叉后选择时情况有所不同)。用户需要小心,他选择的方法通常取决于他的用例。例如剪裁后x = np.clip(x.value, 0.0, np.inf)
、四舍五入等。
推荐阅读
- ruby - 如何重试ruby中发生错误的特定语句
- vue.js - 如何为 Vue.js uiv 库的 Tab 组件设置类?
- linux-kernel - 我们可以使用 U-Boot 启动 Linux for x86-64 系统吗?
- graph-databases - Tinkerpop 查询语言上的字符串函数
- google-cloud-platform - 如何从谷歌数据工作室的第一页登陆到下一页
- node.js - 使用 nodejs 进行 Web Sockets 通信,用于 Web 应用程序和充电设备之间的连接
- asp.net - Asp.Net Mvc 捆绑脚本挂在 IIS 上的 RequestAcquireState
- android - 除了我自己的应用程序之外的所有应用程序的 TrafficStats 报告 -1?
- ios - 在 iOS 移动应用中,在 textfield 上输入非常慢,大约需要 10-12 秒才能输入一个字母
- angular - 带有 Visual Studio 2013 的 Angular 2