Ошибка ограничения с оператором больше чем - PullRequest
0 голосов
/ 01 мая 2019

У меня когда-либо были проблемы с Cplex, я не знаю почему.Поэтому я прилагаю фрагмент кода:

 dvar int+ soglia[pazienti][giorni][slot];
 dvar int+ sogliar[pazienti][giorni][slot];
 dvar int+ soglial[pazienti][giorni][slot];

 forall(k in giornidue, w in slot)  sum(j in pazienti)(soglia[j,k,w]+sogliar[j,k,w]+soglial[j,k,w]) > sum(j in pazienti)(soglia[j,k-1,w]+sogliar[j,k-1,w]+soglial[j,k-1,w]);

И получаю эту ошибку:

Function operator >(dexpr int, dexpr int) not available in CPLEX context

Я не понимаю, почему я не могу использовать> между int.

Ответы [ 3 ]

2 голосов
/ 02 мая 2019

Как упоминалось в одном из комментариев к вашему ответу, строгое неравенство не поддерживается в теории линейного программирования.Однако, поскольку вы знаете, что обе стороны вашего выражения являются целыми числами,

a > b

эквивалентно

a >= b + 1

, где последнее не требует строгого неравенства.Переписав ограничение, как это должно работать.

0 голосов
/ 02 мая 2019

При любом API моделирования CPLEX вы не сможете выполнять строгие неравенства между переменными.

Вам следует использовать ˋ <= ˋ </p>

следующее устранит эту ошибку

 range pazienti = 1..10;
 range giorni = 1..10;
 range giornidue = 2..10;
 range slot = 1..10;

 dvar int+ soglia[pazienti][giorni][slot];
 dvar int+ sogliar[pazienti][giorni][slot];
 dvar int+ soglial[pazienti][giorni][slot];

 subject to {
   forall (k in giornidue, w in slot)  
      sum(j in pazienti)(soglia[j,k,w]+sogliar[j,k,w]+soglial[j,k,w]) >=
     sum(j in pazienti)(soglia[j,k-1,w]+sogliar[j,k-1,w]+soglial[j,k-1,w]);
 } 
0 голосов
/ 02 мая 2019

Комментарий Тима на самом деле является совершенно верным ответом: «Вы не можете использовать строгие неравенства в линейном программировании и связанных с ним вариантах, таких как MILP. Это потому, что ограничения определяют пространство возможных решений и должны включать точки на его граничных ребрах иповерхностей в наборе возможных решений. Проверьте практически любой основной текст на LP и MILP. "

...