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

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

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

27
задан solvingPuzzles 29 May 2012 в 01:29
поделиться