Линейное программирование с использованием решателя: как включить ограничение только тогда, когда переменная решения больше 0? - PullRequest
0 голосов
/ 22 января 2020

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

Как я могу смоделировать это ограничение с помощью решателя? Я не могу использовать функцию if, потому что это сделает ее нелинейной.

Но если я установлю минимальное ограничение для всех поставщиков, решатель не будет учитывать поставщиков, которые не должны отгружать какие-либо продукты из-за к высокой стоимости.

thx

1 Ответ

2 голосов
/ 22 января 2020

Переменная x, которая может принимать значения ноль или между L и U (т. Е. X ∈ 0 ∪ [L, U]), называется полунепрерывной переменной . Многие решатели MIP поддерживают этот тип переменных. Если нет, то полунепрерывное поведение можно смоделировать с помощью дополнительной двоичной переменной:

 L⋅δ ≤ x ≤ U⋅δ
 δ ∈ {0,1}  (i.e. δ is a binary variable)

Это может быть обработано любым решателем MIP. Возможно, вам придется разделить сэндвич-ограничение на два ограничения.

...