我正在根据教程解决VRP优化问题。 当我添加subtours约束时,出现错误。 我正在按照本教程进行操作: https://www.youtube.com/watch?v= eMsqsmftWOQ&t = 2398s
docplex.mp.model导入模型中的
mdl =模型('CVRP')
x = mdl.binary_var_dict(arcos,名称='x')
u = mdl.continuous_var_dict(nodos,ub = Q,name ='u')
mdl.minimize(mdl.sum(arcos中i,j的distancia [i,j] * x [i,j]))
mdl.add_constraints(mdl.sum(如果i!= j,则为nodos中的j的x [i,j] == 1)
mdl.add_constraints(mdl.sum(如果i!= j,则i在nodo中为x [i,j]对于客户端中的j为= 1)
如果i!= 0和j!= 0,则在arcos中为i,j的mdl.add_indicator_constraints(mdl.indicator_constraint(x [i,j],u [i] + q [j] == u [j]))是线
上下文:
clientes = [x表示范围(1,n + 1)中的x]
nodos = [0] +个客户
arcos = {(i,j)对于i在nodo中对于j在nodo中,如果i!= j}
Q = 15
错误列表为:
C:\ Users \ Jose Godoy \ PycharmProjects \ Huevos hermanos \ venv \ lib \ site-packages \ docplex \ mp \ __ init__.py:35:RuntimeWarning:正式不支持docplex的32位。需要您自担风险使用它。
warnings.warn(“ docplex在32位上不受官方支持。使用它需要您自担风险。”,RuntimeWarning)
追溯(最近一次通话):
中的文件“ C:/ Users / Jose Godoy / PycharmProjects / Huevos hermanos / VRP.py”,第41行
mdl.add_indicator_constraints(mdl.indicator_constraint(x [i,j],u [i] + q [j] == u [j])如果i!= 0且j!= 0,则为arcos中的i,j
文件“ C:\ Users \ Jose Godoy \ PycharmProjects \ Huevos hermanos \ venv \ lib \ site-packages \ docplex \ mp \ model.py”,行3014,位于add_indicator_constraints中
ind_indices = self .__ engine.create_batch_indicator_constraints(indcts)
在create_batch_indicator_constraints中的第465行,文件“ C:\ Users \ Jose Godoy \ PycharmProjects \ Huevos hermanos \ venv \ lib \ site-packages \ docplex \ mp \ engine.py”
返回self.create_batch_cts(指标)
在create_batch_cts中,行449中的文件“ C:\ Users \ Jose Godoy \ PycharmProjects \ Huevos hermanos \ venv \ lib \ site-packages \ docplex \ mp \ engine.py”
self._increment_cts(len(ct_seq))
TypeError:类型为“ generator”的对象没有len()
我认为公式的语法没问题,与教程相同,所以我认为这是一个问题,因为我收到警告消息
RuntimeWarning:正式不支持docplex的32位。需要您自担风险使用它。
warnings.warn(“ docplex在32位上不受官方支持。使用它需要您自担风险。”,RuntimeWarning)
你知道我该怎么解决吗?
答案 0 :(得分:0)
我解决了这个问题。 我添加了
[]
所以这对我有用:
mdl.add_indicator_constraints(mdl.indicator_constraint([x[i,j],u[i]+q[j]==u[j]) for i,j in arcos if i!=0 and j!= 0]) #This is the line