Как мне сформулировать эти ограничения ConVRP в CPLEX? - PullRequest
0 голосов
/ 02 апреля 2020

Я пытаюсь построить модель conVRP с жесткими временными ограничениями. Однако я застрял с ограничениями притока и оттока.

У меня есть четыре набора:

range N = 1..20 // set of Nodes

range P = 1..19 // set of customers

range D = 1..5 // set of Days

range K = 1..2 // set of Vehicles

Затем у меня есть некоторые другие входные параметры

int q[D][N] = ...; //demand matrix of 5*20

int cap = ...; // capacity of a truck

Три решения переменные:

dvar boolean x[N][N][D][K]; //= one if node i visits node j on day d with vehicle k

dvar float+ y[N][D][K]; // arrival time 

dvar boolean z[N][K]; // = one if node n is visisted by vehicle k

// цель

minimize sum(i,j in N, d in D, k in K) x[i][j][d][k] * c[i][j]; 

У меня возникли следующие проблемы:

forall(d in D, i in N: q[i][d]>=1)
   sum (j in N, k in K) x[i][j][k][d] == 1; //outflow 

forall(d in D, j in N : q[j][d]>=1)
  sum(i in N, k in K) x[j][i][k][d] == 1; //inflow

Я получаю следующие сообщения об ошибках:

Изображение

Мне бы очень хотелось узнать, как решить эту проблему. Буду признателен за вашу помощь!

1 Ответ

2 голосов
/ 02 апреля 2020

Вы получаете индекс из связанной ошибки. Это потому, что у вас есть это определение

int q[D][N] = ...; //demand matrix of 5*20

, но затем выполните

forall(d in D, i in N: q[i][d]>=1)

Похоже, вы поменялись здесь индексами для q. Согласно вашему определению, d должно быть первым, а i должно быть вторым индексом. Обратите внимание, что та же самая проблема, кажется, существует для последних двух индексов для x.

...