У меня есть некоторые ограничения вида Размеры [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?), Но даже тогда я не знаю, как проверить, существует ли нарушение.
Спасибо
Я не думаю, что есть действительно простой способ получить это от модели cplex. Раньше мне приходилось делать что-то похожее в нескольких проектах, поэтому я предлагаю свои два предложения ниже.
(1) Если вы знаете, что у вас всегда одинаковое количество вещей в каждом ограничении, вы можете создать структуру для хранения этой информации, например:
class tuple{
public int index1;
public int index2;
public int index3;
}
а затем вы можете просто создать один для каждого добавляемого ограничения и сохранить их в списке, массиве или аналогичных.
(2) Если вы знаете о возможных значениях индексов, то, возможно, вы можете создать хеш-код или аналогичный из индексов. Если все сделано правильно, это также может решить проблему симметрии из-за перестановки индексов — (Размеры [a] + Размеры [b] + Размеры [c]) такие же, как (Размеры [b] + Размеры [a] + Размеры [с]).
Затем, как и выше, вы можете сохранить хеш-коды в списке или массиве для ограничений, которые вы добавили.
Других решений пока нет …