【问题标题】:How to code subtour constraint in cplex python如何在 cplex python 中编写 subtour 约束
【发布时间】:2021-10-14 04:08:36
【问题描述】:

我是 python cplex 的新手。我尝试对 VRP 进行建模,并且需要消除子路径以获得可行的解决方案,但我无法使用以下代码做到这一点:

from docplex.mp.model import Model
import numpy as np
n = 10
Q = 20
N = [i for i in range(1, n+1)]
V = [0] + N
rnd = np.random
rnd.seed(0)
q = {i: rnd.randint(1, 10) for i in N}
loc_x = rnd.rand(len(V))*200
loc_y = rnd.rand(len(V))*100
A = [(i, j) for i in V for j in V if i != j]
c = {(i, j): np.hypot(loc_x[i]-loc_x[j], loc_y[i]-loc_y[j]) for i, j in A}
mdl = Model('CVRP')
x = mdl.binary_var_dict(A, name='x')
u = mdl.continuous_var_dict(N, lb=0, name='u')
mdl.minimize(mdl.sum(c[i, j]*x[i, j] for i, j in A))
mdl.add_constraints(mdl.sum(x[i, j] for j in V if j != i) == 1 for i in N)
mdl.add_constraints(mdl.sum(x[i, j] for i in V if i != j) == 1 for j in N)
mdl.add_constraints(mdl.add(u[i] - u[j] + n*(x[i,j]) <=  n - 1  for i,j in N if i!=j))
mdl.parameters.timelimit = 15
solution = mdl.solve()
print(solution)

当我运行它时,我收到以下错误:

文件“C:\Users\user.spyder-py3\TSP\cplexExp.py”,第 25 行,在 mdl.add_constraints(mdl.add(u[i] - u[j] + n*(x[i,j])

TypeError: 无法解压不可迭代的 int 对象

非常感谢您的帮助。谢谢!!

【问题讨论】:

  • for i,j in N 看起来不对
  • 您已在列表A 中将弧存储为 (i,j) 2 元组,所以我想您应该将 A 迭代为 for i,j in A

标签: python linear-programming cplex docplex vehicle-routing


【解决方案1】:

谢谢大家,问题是 N 是一维数组,但我通过在 N 中使用 i,j 将其视为二维数组。我想通了。顺便问一下,你知道学习 CPLEX Python 的好资源吗?我是新手,不知道从哪里开始。谢谢!!

【讨论】:

    【解决方案2】:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-11-27
      • 1970-01-01
      • 2019-10-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-23
      相关资源
      最近更新 更多