#excel #linear-programming #solver
#excel #линейное программирование #решатель
Вопрос:
Итак, для задания я должен найти расписание, которое минимизирует сумму абсолютных различий между требуемым и запланированным количеством работников за интервал времени путем решения модели целочисленной линейной оптимизации.
Поэтому я смоделировал свое расписание как задачу с заданным покрытием и создал строку с требуемым количеством рабочих и строку с фактическим количеством рабочих.
Я беру суммирование абсолютных различий между строками как объект и пытаюсь свести это к минимуму.
=SUM(ABS(C39:Z39-C33:Z33))
Однако я получаю сообщение об ошибке «Условия линейности, требуемые LP-решателем, не выполнены«, и я не понимаю, почему, поскольку в отчете о линейности указано «да» для всего.
* X_i — количество раз, когда выбирается сдвиг.
Ответ №1:
ABS() не является линейной функцией. Кто знает, почему excel не вызывает это … у внутреннего решателя нет отличной репутации.
Вы можете попытаться просто изменить свою OBJ-функцию на некоторые задания со штрафом * uncovered и посмотреть, сможете ли вы запустить и запустить свой режим. Тогда, возможно, вычтите использованных рабочих из доступных, суммируйте это и добавьте штраф за неиспользуемые рабочие….
Ответ №2:
Как уже указывал @AirSquid, абсолютное значение не является линейной функцией. Однако в вашем контексте его можно линеаризовать. Вы можете нам это
минимизация abs(sum x_i)
эквивалентно
минимизация sum a_i
, где a_i
находятся новые переменные с ограничениями a_i>=x_i, a_i>=-x_i
.