Ниже приводится выдержка из https://medium.com/cmsa-algorithm-for-the-service-of-the-capacitated/using-cplex-and-python-for-finding-an-exact.-solution-for-the-cvrp-ac789ee0d8c4, что, конечно же, отлично работает при использовании 2-мерной матрицы стоимости:
#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))
Однако для моего подхода к решению я хочу использовать трехмерную матрицу стоимости, т.е. каждый элемент обозначается c [i, j, k], и я хочу минимизировать сумму:
c[i,j,k]*x[i,j]*x[j,k]
(Долгая история. Мои затраты на то, чтобы добраться до k из j, зависят от того, откуда прибыло транспортное средство (узел 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>
Может ли кто-нибудь помочь мне определить мою целевую функцию? Любая помощь будет оценена по достоинству. Спасибо!