2013-03-09 4 views
0

У меня есть несколько ограничений вида размеров [i1] + размеры [i2] + Размеры [i3] < = 1, которые я добавляю поКак проверить, существует ли ограничение в CPLEX C++?

model.add(Sizes[i1] + Sizes[i2] + Sizes[i3]<=1) 

для некоторых конкретных индексов i1, i2, i3. Позже я хочу добавить для всех других индексных комбинаций ограничения

model.add(Sizes[k1] + Sizes[k2] + Sizes[k3]>1) 

Есть ли хороший способ сделать это, например. проверить, существует ли ограничение в модели?

Может быть, я могу хранить дескриптор, который возвращается функцией IloModel :: add (например, как ILOExtracableArray или даже IloConstraintArray?), Но даже тогда я не знаю, как проверить, существует ли противопоказание. Спасибо

ответ

1

Я не думаю, что есть действительно простой способ вернуть это из модели cplex. Ранее мне приходилось делать что-то подобное в нескольких проектах, поэтому я даю два моих предложения ниже.

(1) Если вы знаете, всегда есть такое же количество вещей в каждом ограничении, то вы можете создать структуру, чтобы держать эту информацию, как:

class tuple{ 
     public int index1; 
     public int index2; 
     public int index3; 
    } 

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

(2) Если вы знаете о возможных значениях индексов, то, возможно, вы можете создать хэш-код или аналогичный из индексов. Если это сделано правильно, это также может решить проблему симметрии из-за перестановки индексов - (Размеры [a] + Размеры [b] + Размеры [c]) совпадают с (Размеры [b] + Размеры [a] + Размеры [с]).

Затем, как и выше, вы можете сохранить хэш-коды в списке или массиве для добавленных ограничений.

 Смежные вопросы

  • Нет связанных вопросов^_^