linear-programming - 为什么 cvxpy 在这里返回无界?
问题描述
我正在使用 cvxpy 0.4.9 和 Python 2.7.14,并unbounded
从下面的示例中获得了令人惊讶的状态。
细微的变化(例如,删除最后一个约束)正确报告infeasible
状态。
这在 Windows 和 Linux 环境中都会发生。为什么?
import cvxpy
import numpy
def main():
yld = numpy.array([[12.],[11.],[17.],[13.],[7.]])
wts = cvxpy.Variable(5)
obj = cvxpy.Maximize(yld.T * wts)
cons = []
cons.append(0.0 <= wts)
cons.append(numpy.ones(5).T * wts == 1.0)
cons.append(wts <= 2.5 * numpy.ones(5))
cons.append(wts <= 0.25)
cons.append(numpy.array([[0.],[0.],[1.],[1.],[1.]]).T * wts <= 0.0)
cons.append(numpy.array([[1.],[0.],[0.],[0.],[0.]]).T * wts <= 0.1 )
cons.append(numpy.array([[0.],[1.],[0.],[0.],[0.]]).T * wts <= 0.1 )
cons.append(numpy.array([[0.],[0.],[1.],[0.],[0.]]).T * wts <= 0.1 )
cons.append(numpy.array([[0.],[0.],[0.],[1.],[0.]]).T * wts <= 0.1 )
prob = cvxpy.Problem(obj, cons)
prob.solve()
print(prob.status)
解决方案
使用 cvxpy==1.0.10 我得到infeasible
.
可行集显然是空的。为什么?
numpy.array([[0.],[0.],[1.],[1.],[1.]]).T * wts <= 0.0
并0.0 <= wts
暗示wts[2] == wts[3] == wts[4] == 0
。numpy.array([[0.],[1.],[0.],[0.],[0.]]).T * wts <= 0.1
,[1.],[0.],[0.],[0.],[0.]]).T * wts <= 0.1
并0.0 <= wts
暗示0 <= wts[0] == 0.1
和0 <= wts[1] == 0.1
因此不可能满足numpy.ones(5).T * wts == 1.0
(的所有元素之和wts
为1)。
推荐阅读
- python - 使用 *.kv 文件每 5 秒调用一次 API
- javascript - 每个带有提要数组的 Javascript JSON
- javascript - Javascript-Firefox 中 ajax 请求 $.getJSON 中的 XML 语法错误
- html - 我无法将文本定位在边框内
- git - 去获取私人 gitlab 存储库
- excel - SSIS - “人A”的excel导入失败,但在服务器上由“人B”调用时工作
- css - 溢出:滚动在我的电子应用程序中不起作用
- oauth - Ubuntu base64 编码字符串以“o=”结尾,而不是明显正确的“==”
- firebase - 颤振命令栏卡在pubspec文件上如何删除它
- c# - 为什么有时我在 NServicebus 队列上的消息会获得无限的 DeliveryCount?