Как проверить, существует ли ограничение в CPLEX C ++?

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

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?), Но даже тогда я не знаю, как проверить, существует ли нарушение.
Спасибо

0

Решение

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

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

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

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

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

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

1

Другие решения

Других решений пока нет …