Подтвердить что ты не робот

Использование 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 являются целыми числами в этом конкретном примере.

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

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

4b9b3361

Ответ 1

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

x4 >= c1*x1
x4 >= c2*x2
x4 >= c3*x3  
Objective += c4*x4