Условия CPLEX на множествах многомерной переменной - PullRequest
0 голосов
/ 14 января 2020

Я пробовал эту проблему в течение нескольких недель, но все еще не мог сделать это. Пожалуйста, дайте мне несколько советов, спасибо заранее!

Например, я знаю, как добавить условие для каждого индекса в «forall», но как добавить условие для комбинации индекса в «forall», для Например, (I, j)! = (r, s), например (2, 3)! = (2, 4).

range i = 0..5; 
range j = 0..3;
range r = 0..5;
range s = 0..3;

forall(ci in i, cr in r, cj in j:cj!=0 && cj!=ci, cs in s:cs!=0, ck in k)
EliminateSubtour2:
W[cj][cs][ck] >= W[ci][cr][ck] + 1 - (N*H*(1 - X[ci][cr][cj][cs][ck]));

The final goal is to add this constraint, 
W[cj][cs][ck] >= W[ci][cr][ck] + 1 - (N*H*(1 - X[ci][cr][cj][cs][ck])); when (I,r) != (j,s)

Я пытался использовать кортеж, но система говорит, что кортеж не может использоваться для индексации. Заранее спасибо!

1 Ответ

0 голосов
/ 14 января 2020

вы можете использовать оператор или ||

range i = 0..5; 
range j = 0..3;
range r = 0..5;
range s = 0..3;

dvar boolean X[i][j][r][s];

maximize sum(I in i,J in j,R in r,S in s) X[I,J,R,S];
subject to
{
  forall(I in i,J in j,R in r,S in s:(I!=J) || (R!=S)) X[I,J,R,S]==0;
}

плюс в CPLEX_Studio1210 \ opl \ examples \ opl \ models \ TravelingSalesmanProblem есть пример исключения подпочвы

...