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

В настоящее время я изучаю операционные исследования. Мне потребовалось сформулировать модель как модель 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 - Ti будет отрицательным. bi = Ti - xi будет положительным. Я не могу придумать, как преобразовать «если отрицательное, то значение изменится на 0».

Можно ли сформулировать цель с помощью функции ниже?

 y = ( ai * C1i*yi + bi * C2i*(1-yi))

если Ti - xi >= 0 (Начать до лучшего времени для задания i), то yi = 1 В противном случае yi =0.

Но как я могу сформулировать приведенное выше «если-то-утверждение» в модели LP?

Благодарность!


person Kam Ng    schedule 21.02.2016    source источник


Ответы (1)


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

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

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

person Erwin Kalvelagen    schedule 21.02.2016