Применение двоичных переменных

Среди задач целочисленного линейного программирования целесообразно выделить специальный класс задач, в которых переменные могут принимать только два значения 0 или 1. Особенности (и дополнительные возможности) применения двоичных переменных рассмотрим на примере.

Пример 2. Распределение ограниченных средств между проектами компании. Крупный холдинг имеет пять производственных комплексов (ПК), расположенных в разных регионах. Менеджмент каждого из ПК подготовил проекты расширения производственных мощностей с указанием необходимых затрат по годам на период в пять лет. Для каждого проекта также проведена оценка ожидаемой прибыли. Руководство холдинга не имеет средств, необходимых для финансирования всех проектов, и намерено выбрать для реализации проекты, которые обеспечат получение максимальной суммарной прибыли с учетом имеющихся в разные годы общих возможностей холдинга по финансированию всех проектов. Данные о затратах, ожидаемой прибыли и финансовых ресурсах представлены в Таблице

Таблица

Проекты расширения производственных мощностей. (Все суммы в тыс. долл.).

 

 

Проекты производственных комплексов

Необходимые объемы финансирования

(по годам)

 

Ожидаемая прибыль

1 2 3 4 5
ПК1 100 50 100 100 0 4000
ПК2 300 200 100 100 100 7000
ПК3 100 200 250 200 100 8000
ПК4 150 60 250 100 100 6000
ПК5 50 40 150 100 100 4000
Общий объем средств холдинга на финансирование проектов по расширению мощностей 650 550 700 500 300  

Для построения формальной модели введем следующие двоичные переменные: Хi =1, если проект i-го ПК включается в общий план расширения производственных мощностей холдинга, Хi =0 в противном случае. С помощью введенных переменных мы можем записать ограничения по объему средств, доступных для проектов расширения производственных мощностей по годам:

100Х1  + 300Х2  +100 Х3  + 150Х4  +50Х5  £ 650

50Х1  +200Х2  +200 Х3  + 60Х4  +40Х5  £ 550

100Х1  + 100Х2  +250 Х3  + 250Х4  +150Х5  £ 700

100Х1  + 100Х2  +200 Х3  + 100Х4  +100Х5  £ 500

  100Х2  +100 Х3  + 100Х4  +100Х5  £ 300

Целевая функция (общая прибыль по всем проектам, выбранным для реализации) может быть представлена с помощью введенных переменных следующим образом:

Z = 4 000Х1  + 7000Х2  +8000 Х3  + 6000Х4  +4000Х5

Необходимо найти значения переменных X1,….X5, при которых выполнены все ограничения и целевая функция принимает максимальное значение.

Оптимальное решение данной задачи найдем с помощью средств Поиск решения MS Excel. При введении ограничений необходимо указать, что все переменные X1,….X5  являются двоичными, т.е. могут принимать только значения 0 или 1 (см. Рисунок 2.9). В оптимальном решении данной задачи будут получены следующие значения переменных и целевой функции

Х1  =1, Х2=1, Х3  =1, Х4 =1, Х5  =0, Zmax = 2500

Введение дополнительных условий.

Предположим, что руководство холдинга считает целесообразным ограничить число одновременно реализуемых проектов. Например, одновременно может быть начата реализация не более трех проектов. Для того, чтобы учесть это требование достаточно в модель ввести одно дополнительное ограничение:

Х1  + Х2  +Х3  + Х4  +Х5  £ 3

В оптимальном решении задачи с введенным дополнительным условием будут получены следующие значения переменных и целевой функции Х1  =0, Х2=1, Х3  =1, Х4 =1, Х5  =0, Zmax = 2100

Предположим также, что руководство холдинга считает целесообразным начинать реализацию проекта расширения производственных мощностей для ПК3 только в том случае, если одновременно будет осуществляться проект расширения производственных мощностей для ПК1. Для того чтобы учесть это требование достаточно в модель ввести еще одно дополнительное ограничение:

Х3   £ Х1

В оптимальном решении задачи с введенными дополнительными условиями будут получены следующие значения переменных и целевой функции Х1  =1, Х2=1, Х3  =1, Х4 =0, Х5  =0, Zmax = 1900.

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

 


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: