Как вернуть двоичное значение, сравнивая две переменные?
В настоящее время я изучаю исследование операций. Я потребовал сформулировать модель как модель LP.
Целевая функция
y = ( ai * C1i + bi * C2i)
,where ai = max(0, xi - Ti) ; bi = max(0, Ti - xi)
Это проблема планирования. xi - переменные решения для запланированного времени для работы i, а Ti - лучшее время для работы i. Каждая единица времени ранее или поздно будет облагаться штрафом. C1i и C2i - стоимость штрафа за единицу.
если работа i начинается раньше, чем лучшее время Ti для работы i, стоимость штрафа будет
bi * C2i.
если работа i начинается после лучшего времени Ti для работы i, штраф будет
ai * C1i.
Во время моей формулировки я обнаружил, что трудно использовать функцию max(,) в Lingo или Cplex. На самом деле, в программе нет функции max(,). Если задание началось до Ti, ai = xi
- Ти будет отрицательным. bi = Ti - xi
будет позитивным. Я не могу думать о способе преобразования "если отрицательное, то значение меняется на 0".
Можно ли сформулировать цель с помощью функции ниже?
y = ( ai * C1i*yi + bi * C2i*(1-yi))
если Ti - xi >= 0
(Начните до лучшего времени для работы я), затем yi = 1
Иначе, yi =0
,
Но как я могу сформулировать приведенное выше утверждение if-then-Statement в модели LP?
Спасибо!
1 ответ
Вопрос немного сложен для разбора, но я думаю, что вы ищете что-то вроде:
На самом деле это было предложено в двойном вопросе здесь. (Извините: этот вопрос был удален).