Cplex индексация двар с дваром - PullRequest
0 голосов
/ 28 апреля 2019

У меня есть ограничение в OPL, в котором мне нужен двар, подобный индексу в другом двар, но CPLEX выдает мне ошибку. Я пытаюсь избежать этой ошибки, используя логическое ограничение, как описано в https://www.ibm.com/developerworks/community/forums/html/threadTopic?id=2be2ec22-db4b-4a2c-b164-615b9f735dc9&ps=25. Но теперь я получаю эту ошибку:

Error 5002: Q is not positive semi-definite

Это ограничение:

forall(j in pat,k in gior,w in slotp) 
   vinc4: (k==t[j])*y[j,k,w] == 
           sum(g in giorni)(r[j,g,w+1]) + 
               sum(g in giorni)(l[j,g,w-1]);

1 Ответ

0 голосов
/ 30 апреля 2019

Если t[j] является переменной, выражение k == t[j] не является константой, но является истинным значением ограничения. Это истинное значение эквивалентно переменной, которая равна 1, если ограничение истинно, и 0, если нет.

Кажется, вы умножаете эту переменную на другую, y[j,k,w]. Таким образом, вы получите квадратично-ограниченную модель: модель, в которой некоторые из ограничений содержат квадратичные термины. CPLEX может решить эти модели, только если они выпуклые, и, из-за ошибки, это не так.

...