在 CVXPY 问题求解器中收到 "None" 作为结果
receiving "None" as result in CVXPY problem solver
尝试使用 cvxpy 将 TSP 解决为线性规划任务,但遇到了问题。这是我的第一次经历,所以感谢您的帮助。因此,我想要一个包含 0 和 1 的矩阵来显示每个下一个城市的推销员。
需要完全使用cvxpy
感谢帮助
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)
收到"None"
感觉成本定义有问题,但不知道如何改正
也许我应该使用 cvxpy.multiply 或 cvxpy.sum?
cvxpy 附带的默认 MIP 求解器只是一个概念证明,在非微型实例中非常不稳定。那样的事情发生了,你无能为力。
就像 Erwin 在上面的评论中要求的那样:激活 verbose=True
,您可能会认出正在使用的求解器。我猜:ECOS_BB
。它是默认安装中唯一可用的。
关于部署 MIP 求解器的情况:
- 很容易安装在 windows
- 质量上乘
- 是开源的
不太好。
在 windows 上获得可用的最简单方法是通过 cvxopt 使用预先构建的 glpk。
不知道是什么问题。也许与 Jupyter 不谋而合。刷新后一切正常
感谢大家的帮助!
虽然这不是这里的问题,但一定要调用prob.solve()
。否则,prob.value 是 None
尝试使用 cvxpy 将 TSP 解决为线性规划任务,但遇到了问题。这是我的第一次经历,所以感谢您的帮助。因此,我想要一个包含 0 和 1 的矩阵来显示每个下一个城市的推销员。
需要完全使用cvxpy
感谢帮助
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)
收到"None"
感觉成本定义有问题,但不知道如何改正 也许我应该使用 cvxpy.multiply 或 cvxpy.sum?
cvxpy 附带的默认 MIP 求解器只是一个概念证明,在非微型实例中非常不稳定。那样的事情发生了,你无能为力。
就像 Erwin 在上面的评论中要求的那样:激活 verbose=True
,您可能会认出正在使用的求解器。我猜:ECOS_BB
。它是默认安装中唯一可用的。
关于部署 MIP 求解器的情况:
- 很容易安装在 windows
- 质量上乘
- 是开源的
不太好。
在 windows 上获得可用的最简单方法是通过 cvxopt 使用预先构建的 glpk。
不知道是什么问题。也许与 Jupyter 不谋而合。刷新后一切正常 感谢大家的帮助!
虽然这不是这里的问题,但一定要调用prob.solve()
。否则,prob.value 是 None