0

以下是摘自https://medium.com/cmsa-algorithm-for-the-service-of-the-capacitated/using-cplex-and-python-for-finding-an-exact-solution-for- the-cvrp-ac789ee0d8c4,当然,在使用二维成本矩阵时可以正常工作:

#Intializing the set of arcs A.
A = [(i,j) for i in V for j in V if i!=j]
#Calculating the distance between each node.
c= {(i,j):np.hypot(loc_x[i]-loc_x[j],loc_y[i]-loc_y[j]) for i,j in A}
#Importing the docplex.mp.model from the CPLEX as Model
from docplex.mp.model import Model
mdl = Model('CVRP')
#Initializing our binary variable x_i,j
x=mdl.binary_var_dict (A,name='x')
#Initializing our cumulative demand u
u=mdl.continuous_var_dict (N,ub=Q ,name = 'u')
#Initializing the objectif function
mdl.minimize(mdl.sum(c[i,j]*x[i,j]for i,j in A))

但是,对于我的解决方案方法,我想使用 3d 成本矩阵,即每个元素由 c[i,j,k] 表示,并且我想最小化以下各项的总和:

c[i,j,k]*x[i,j]*x[j,k]

(长话短说。我从 j 到 k 的成本取决于车辆的来源(节点 i);但我仍然希望决策变量是 x_ij 而不是 x_ijk,因为我希望保持原样,即为 x_ij 定义的。)

我尝试了以下方法:

# objective function    
mdl.maximize(mdl.sum(c[i,j,k])*x[i,j]*x[j,k] for i,j in A for j,k in A if i!=j)

但我收到以下错误消息。

DOcplexException: cannot convert to expression: <generator object <genexpr> at 0x000001BE51777348>

有人可以帮我定义我的目标函数吗?任何帮助将不胜感激。谢谢!

4

1 回答 1

1

看来您在此语句中放错了括号:

mdl.maximize(mdl.sum(c[i,j,k])*x[i,j]*x[j,k] for i,j in A for j,k in A if i!=j)

第一个右括号不应紧随其后,c[i,j,k]而应位于行尾。我认为正确的说法是这样的:

mdl.maximize(mdl.sum(c[i,j,k]*x[i,j]*x[j,k] for i,j in A for j,k in A if i!=j))
于 2019-11-19T08:15:53.150 回答