CPLEX - получение минимума набора переменных по условию

Мне нужно решить следующую проблему с помощью CPLEX Java API:

Мне нужно написать условие, которое вернет минимум набора целочисленных переменных (скажем, x[i], i=1,2,...,n), но с учетом только положительных.

Другими словами:

мин {х [я] | х[я]>0}

Я знаю, что CPLEX имеет минимальную функцию, но проблема в том, как передать ему упомянутое условие.


person Michał Urbaniak    schedule 18.06.2013    source источник
comment
Что вы имеете в виду под возвратом? Что вы пытаетесь сделать с этим? Используйте значение min{x[i] | x[i]›0} в ограничении или цели?   -  person user327301    schedule 19.06.2013
comment
На самом деле под возвратом я подразумеваю присвоение результата вспомогательной переменной, которая появляется в других ограничениях. Допустим, есть условие y = min{x[i] | x[i]›0} и еще один: y+1 ‹ z.   -  person user2953896    schedule 05.11.2013


Ответы (2)


Создайте одну непрерывную переменную. Добавьте ограничения, согласно которым эта новая переменная должна быть ‹= всеми целочисленными переменными. Затем просто максимизируйте непрерывную переменную.

person TimChippingtonDerrick    schedule 18.06.2013

В ответе ТимЧиппингтона Деррика отсутствует ограничение неотрицательности для непрерывной переменной. Более того, этот метод не соответствует исходной целевой функции ОП.

(Дорогой) способ сделать это состоит в том, чтобы ввести дополнительные двоичные переменные, по одной для каждой целочисленной переменной, и написать большие ограничения M:

x[i] >= y >= x[i] - M(1-z[i])

SUM(i,z[i]) = 1
person OtherwiseWorth    schedule 13.07.2014
comment
Не могли бы вы немного объяснить свой подход? - person Michał Urbaniak; 14.07.2014