当前位置: 首页 > 知识库问答 >
问题:

如何在cplex python中编写subtour约束

巫马玉堂
2023-03-14

我对PythonCPlex很陌生。我尝试对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中。添加约束(mdl.add(u[i]-u[j]n*(x[i,j])

TypeError:无法解压缩不可编辑的int对象

我真的很感谢你的帮助。谢谢

共有2个答案

戚阳文
2023-03-14

看看这里的Docplex示例:https://github.com/IBMDecisionOptimization/docplex-examples

郑松
2023-03-14

谢谢大家,问题是N是一维数组,但我用N中的I,j把它看成是二维的。我明白了。顺便问一下,您知道学习CPLEX Python的好资源吗?我是新手,不知道从哪里开始。谢谢

 类似资料:
  • 问题内容: 我喜欢使用指令制作自定义组件。我检查了很多教程,它使我感到困惑,任何人都可以解释指令的工作原理。我计划制造的组件是 呼喊列表的模板将像这样 问题答案: 这是您的指令,带有一些内联注释: 和模板文件: 现在,您可以在代码中使用它,如下所示: 控制器: 视图: 希望这可以帮助!

  • 问题内容: 如何在Doctrine 2.0中编写此SQL查询(并获取结果)? 问题答案: 好吧,我发现也许是最好的解决方案: 然后是两个类( NotificationGroup 和 NotificationEvent ),它们扩展了 Notification :

  • 问题内容: 假设我有一个文件。我怎么写“你好” TAB“ alex”? 问题答案: 这是代码: 字符串的内部是水平制表符的转义序列。

  • 了解如何在“代码”视图中工作并充分利用 Dreamweaver 的编码功能。 可通过多种方式在 Dreamweaver 中处理代码。 您可以使用“新建文档”对话框打开新的代码文件,然后开始键入您的代码。在 Dreamweaver 中创建新的代码文件 键入时,会显示代码提示以帮助您选择代码和避免打字错误。如果需要,可使用 Dreamweaver 的有用的快捷文档获取 CSS 的相关帮助。 还可以使用

  • 问题内容: 我正在尝试从logstash开始,并且我的应用程序具有以下类型的日志。这里的5表示接下来将有5行是针对不同相关事物收集的统计信息。 这些基本上是应用程序统计信息,每行指示大约一个资源。 有没有一种方法可以使用logstash正确解析它,以便可以将其用于elasticsearch? 编辑 : 这是我正在使用的配置,第一组统计信息已正确解析,但在该管道阻塞之后。请注意有150个此类日志,但

  • 问题内容: 我想在Swift中编写一个方法。在这里,我在Objective-C中初始化一个类: 如何在Swift中编写此方法? 问题答案: 我想这可能是您上课的良好基础 我想避免将键复制粘贴到项目中,因此我将可能的键放入这样的示例中: 并且您可以像这样改进您的方法,并且将来您可以避免代码中任何可能的键错误: 注意:那只是如何做的一个原始想法,根本不需要使用便捷的初始化程序,但是对于我对您的最终课程