【问题标题】:receiving "None" as result in CVXPY problem solver在 CVXPY 问题解决程序中收到“无”
【发布时间】:2020-05-07 16:22:48
【问题描述】:

尝试使用 cvxpy 将 TSP 解决为线性规划任务,但遇到了问题。这是我的第一次体验,所以感谢您的帮助。因此,我希望有一个 0 和 1 的矩阵来显示每个下一个城市的推销员。

需要完全使用 cvxpy

here you can read theory

cvxpy website

感谢帮助

import cvxpy as cp
import numpy as np

np.random.seed(1)
N = 10
distances = np.random.rand(N, N)  

x = cp.Variable((N, N), boolean=True)
u = cp.Variable(N, integer=True)

constraints = []

for j in range(N):                                      
    indices = list(range(0, j)) + list(range(j + 1, N))
    constraints.append(cp.sum(x[indices, j]) == 1)
for i in range(N):
    indices = list(range(0, i)) + list(range(i + 1, N)) 
    constraints.append(cp.sum(x[i, indices]) == 1)
for i in range(1, N):                      
    for j in range(1, N):
        if i != j:
            constraints.append(u[i] - u[j] + N*x[i, j] <= N-1)

for i in range(N):
    for j in range(N):
        if i != j:
            сost += (x[i,j]*distances[i,j]) 

prob = cp.Problem(cp.Minimize(cost), constraints)
prob.solve()
print(prob.value)

收到“无”

感觉像是成本定义的问题,但不知道如何使其正确 也许我应该使用 cvxpy.multiply 或 cvxpy.sum?

【问题讨论】:

  • (1) 打印 prob.status (2) 将 verbose=True 添加到求解语句 (3) 确保问题中的代码是独立的,因此我们可以执行此代码。跨度>
  • 返回“infeasible_inaccurate”。不明白我做错了什么

标签: python optimization cvxpy


【解决方案1】:

cvxpy 附带的默认 MIP 求解器只是一个概念证明,在非小型实例中非常不稳定。那样的事情就会发生,你无能为力。

就像 Erwin 在上述评论中要求的那样:激活 verbose=True,您可能会认出正在使用的求解器。我猜:ECOS_BB。这是默认安装中唯一可用的。

关于部署 MIP 求解器的情况:

  • 很容易安装在windows上
  • 质量上乘
  • 是开源的

不是很好。

在 Windows 上获得可用的最简单的方法是通过 cvxopt 使用预先构建的glpk

【讨论】:

    【解决方案2】:

    不知道是什么问题。也许与Jupyter有关。刷新后一切都好起来了 谢谢大家的帮助!

    【讨论】:

      【解决方案3】:

      虽然这不是问题,但请务必致电prob.solve()。否则,prob.value 为 None

      【讨论】:

        猜你喜欢
        • 2020-09-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-03-21
        • 2014-03-19
        • 1970-01-01
        相关资源
        最近更新 更多