Как вернуть двоичное значение, сравнивая две переменные?

В настоящее время я изучаю исследование операций. Я потребовал сформулировать модель как модель 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 ответ

Вопрос немного сложен для разбора, но я думаю, что вы ищете что-то вроде:

введите описание изображения здесь

На самом деле это было предложено в двойном вопросе здесь. (Извините: этот вопрос был удален).

Другие вопросы по тегам