Использование min / max * в * целочисленной линейной программе

Я пытаюсь создать линейную программу, в которой целевая функция добавляет дополнительный вес к max из переменных решения, умноженных на их соответствующие коэффициенты.

Имея это в виду, есть ли способ использовать операторы min или max в целевой функции линейной программы?

Пример:

Minimize
    (c1 * x1) + (c2 * x2) + (c3 * x3) + (c4 * max(c1*x1, c2*x2, c3*x3)) 
subject to
    #some arbitrary integer constraints:
    x1 >= ...
    x1 + 2*x2 <= ... 
    x3 >= ...
    x1 + x3 == ...

Обратите внимание, что (c4 * max(c1*x1, c2*x2, c3*x3)) - это термин "лишний вес", который меня беспокоит. Обозначим c4 коэффициент «лишнего веса». Также обратите внимание, что x1, x2 и x3 являются целыми числами в этом конкретном примере.

Я думаю, что вышесказанное может выходить за рамки того, что предлагает линейное программирование. Однако, возможно, есть способ взломать / переформатировать это в действительную линейную программу?

Если эта проблема полностью выходит за рамки линейного программирования, возможно, кто-нибудь может порекомендовать парадигму оптимизации, более подходящую для этого типа проблемы? (Было бы полезно все, что позволяет мне избежать ручного перечисления и проверки всех возможных решений.)


person solvingPuzzles    schedule 29.05.2012    source источник


Ответы (1)


Добавьте вспомогательную переменную, скажем x4, с ограничениями:

x4 >= c1*x1
x4 >= c2*x2
x4 >= c3*x3  
Objective += c4*x4
person fairidox    schedule 29.05.2012
comment
Очень хорошо сделано, @justaname. OP должен отметить, что новая переменная x4 не обязательно должна быть целым числом. - person Ram Narasimhan; 29.05.2012
comment
Этот метод работает только в том случае, если вы минимизируете функцию по максимуму или максимизируете ее по минимуму. Если вам нужно минимизировать функцию по минимуму или максимизировать функцию по максимуму, вам необходимо добавить дополнительные двоичные переменные и коэффициенты большого M. - person Greg Glockner; 30.05.2012
comment
@Greg Glockner Спасибо, что указали на это! Есть ли шанс, что вы могли бы привести пример того, как справиться с максимизацией функции max или минимизацией функции min? - person solvingPuzzles; 01.06.2012
comment
@solvingPuzzles Вам нужно использовать коэффициенты big-M. - person Greg Glockner; 23.08.2012
comment
@GregGlockner - Можете ли вы привести небольшой пример использования коэффициентов big-M для минимизации функции min? - person statBeginner; 14.01.2016
comment
Привет, @statBeginner, нашли ли вы решение проблемы минимума над минимальным / максимального над максимальным? Мне приходится переходить этот мост, я буду благодарен за любую информацию. - person daydayup; 15.07.2016
comment
@GregGlockner Привет, доктор Глокнер, не могли бы вы дать нам немного больше информации о том, как использовать big-M и добавлять новые двоичные переменные для решения задачи min over min / max over max? Спасибо большое за вашу помощь! Большое спасибо за ваши знания! - person daydayup; 15.07.2016
comment
Простой пример для min / min: если у вас есть: min z, где z = min (x1, x2, x3), напишите: min z, где z ›= x1-M b1, z› = x2-M b2, z › = x3-M b3, b1 + b2 + b3 = 2 и b1, b2, b3 в двоичном формате. - person Greg Glockner; 16.07.2016
comment
@GregGlockner. Спасибо, доктор Глокнер! Ты хозяин. - person daydayup; 17.07.2016