2017-01-29 7 views
2

Я пытаюсь использовать решатель в Excel для создания линейной программы для минимизации затрат на взаимные фонды. Мои переменные решения - это суммы, вложенные в каждый фонд. Если что-то инвестировано, оно должно соответствовать минимуму фонда. Как я могу запрограммировать это?Если переменная линейного программирования> 0, то> = 3000

сумма инвестиций в фонд 1> =, если сумма инвестиций в фонд 1> 0, то сумма, вложенная в фонд 1> = 3000 еще вложенная сумма = 0

Любая помощь очень ценится. Благодарю.

ответ

3

Эти типы ограничений исполняются путем изменения Big M Method

Пусть x переменная решения, соответствующая сумме инвестировать в Фонд 1. Выберите верхнюю оценку M о возможных значениях x. Например, если у вас есть только 1 000 000 долларов для инвестиций, дайте M = 1,000,000. Вам не нужно иметь наименьшую верхнюю границу на x. M = 2,000,000 будет работать (хотя вы, как правило, получите более быструю конвергенцию и меньше ошибки округления, если M не является неоправданно большим).

Ввести новую переменную y, которая ограничена 0 или 1 (то есть бинарной переменной принятия решения). Добавьте следующие два ограничения на модели:

x >= 3000*y 
x <= M*y 

Если x>0 то второе ограничение добавляется заставляет y от 0, следовательно, она заставляет y = 1 так y является двоичным. Но если y = 1, это второе ограничение сводится к x <= M, что автоматически истинно по выбору M, поэтому оно не добавляет никаких реальных ограничений на x. Но - с y = 1 в этом случае первое ограничение становится x >= 3000. Таким образом, два ограничения объединяют x >= 3000, как только x > 0. Важно - это делается без использования нелинейной функции if. Это делает его задачей MILP (смешанное целочисленное линейное программирование), но решатель Excel может справиться с теми, у кого нет проблем (до тех пор, пока количество двоичных переменных не станет слишком большим).