Задача целочисленного программирования

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

Пример 1. Фирма выпускает два набора удобрений для газонов: обычный и улучшенный. В обычный набор входят 3 фунта азотных, 4 фунта фосфорных и один фунт калийных удобрений, а в улучшенный — 2 фунта азотных, 6 фунтов фосфорных и 2 фунта калийных удобрений. Известно, что для некоторого газона требуется, по меньшей мере, 10 фунтов азотных, 20 фунтов фосфорных и 7 фунтов калийных удобрений. Обычный набор стоит 3 долл., а улучшенный — 4 долл. Сколько и каких наборов удобрений надо купить, чтобы обеспечить эффективное питание почвы и минимизировать стоимость?

Решение. Пусть х — количество обычных наборов удобрений, у — количество улучшенных наборов удобрений. L(x, у) = 3х + 4у →min при ограничениях:

Задача целочисленного программирования - student2.ru

Воспользуемся возможностями Excel и введем уравнения для ограничений и ЦФ с помощью мастера функций. Здесь выберем из категории Математические функцию СУММПРОИЗВ.

Примечание. Функция СУММПРОИЗВ(массив1; массив2; массив3; …) – перемножает соответствующие элементы заданных массивов и возвращает сумму произведений.

Массив1; массив2; массив3;…- это от 2 до 30 массивов, чьи компоненты нужно перемножить, а затем сложить. Аргументы, которые являются массивами, должны иметь одинаковые размерности. Если это не так, то функция СУММПРОИЗВ возвращает значение ошибки #ЗНАЧ!. СУММПРОИЗВ трактует нечисловые элементы массивов как нулевые.

Используя обозначения соответствующих ячеек формулу для расчета ограничений можно записать как сумму произведений каждой из ячеек, отведенных для значений коэффициентов (B3, В4), на соответствующую ячейку, отведенную для переменных задачи (F3, F4) и вычесть, то есть Задача целочисленного программирования - student2.ru . То есть чтобы задать эту формулу необходимо в ячейку В7 ввести следующее выражение и нажать клавишу «Enter»=СУММПРОИЗВ( В3:В4, $F$3:$F$4) – В5. Она скопирована в C7:Е7(в ячейке Е7 она скорректирована, убрано вычитаемое Е5). Выделим ячейку с целевой функцией и вызовем «Сервис/ Поиск решения». В диалоговом окне укажем: «Установить целевую ячейку:» $Е$7, «минимальное значение», «изменяя ячейки» $F$3:$F$4, «ограничения» $B$7:$D$7>=0. В окне «Параметры» установим флажок «Линейная модель» и «Неотрицательные значения». Запустим выполнение. Поиск решения вернет результат: х= 1.5,у = 2.15. Целевая функция равна 15.5. Но наборы удобрений нельзя покупать частями! Нужно наложить еще одно ограничение: х, у — целые числа. Вновь вызываем Решатель, нажимаем кнопку «Добавить» и в диалоговом окне «Добавление ограничения» указываем, что $F$3:$F$4 — целые (в том же выпадающем списке, откуда ранее мы выбирали символ для ограничения). Нажимаем «ОК». Запустим выполнение. На этот раз получим значение целевой функции 17 (естественно, оно ухудшилось), а количество наборов стало таким: х = 3, у = 2.

Задача целочисленного программирования - student2.ru

Пример 2.В контейнер упакованы комплектующие изделия трех типов. Стоимость и вес одного изделия составляют 400 руб. и 12 кг для первого типа, 500 руб. и 16 кг для второго типа, 600 руб. и 15 кг для третьего типа. Общий вес комплектующих равен 326 кг. Определить максимальную и минимальную возможную суммарную стоимость находящихся в контейнере комплектующих изделий.

Решение. x, y, z –количество комплектующих 1-го, 2-го и 3-го типа.

L(x, у, z) = 400х + 500у+600z →min(max)

Ограничения Задача целочисленного программирования - student2.ru . Целевая функция равна 12600 руб. и 10500 руб.

К задачам целочисленного программирования относят также задачи, где некоторые переменные могут принимать всего два значения: 0 и 1. Такие переменные называют булевыми, двоичными, бинарными.

Пример 3.Имеются 6 предметов, каждый из которых характеризуется весом и ценой (см. рис.). Нужно выбрать из них такие предметы, чтобы их общий вес не превышал 12, а суммарная цена была максимальной (так называемая "задача о рюкзаке").

Решение. В блоке А20:А25 размещены условные названия предметов, а в соседних столбцах — их вес и цена. В блоке D20:D25 фиксируется наличие (1) или отсутствие (0) предмета в наборе. Блокам даны имена в соответствии с их заголовками. В Решателе задаем: максимизировать $А$27 по переменным "наличие" при ограничениях $А$26<=0 и наличие=двоичное. Последнее ограничение задается так. В диалоговом окне "Добавление ограничения" сначала нажимаем F3 и вставляем имя "наличие", в выпадающем списке выбираем "двоич". После запуска Решателя он выдает сообщение – значение целевой ячейки равно 23, а двоичные значения: 0, 1,0, 0, 1, 0, т.е. нужно выбрать второй и пятый предметы.

Задача целочисленного программирования - student2.ru

Двухиндексные задачи ЛП

Выполнить заказ по производству 32 изделий Задача целочисленного программирования - student2.ru и 4 изделий Задача целочисленного программирования - student2.ru взялись бригады Задача целочисленного программирования - student2.ru и Задача целочисленного программирования - student2.ru . Производительность бригады Задача целочисленного программирования - student2.ru по производству изделий Задача целочисленного программирования - student2.ru и Задача целочисленного программирования - student2.ru составляет соответственно 4 и 2 изделия в час, фонд рабочего времени этой бригады 9,5 ч. Производительность бригады Задача целочисленного программирования - student2.ru – соответственно 1 и 3 изделия в час, а ее фонд рабочего времени – 4 ч. Затраты, связанные с производством единицы изделия, для бригады Задача целочисленного программирования - student2.ru равны соответственно 9 и 20 руб., для бригады Задача целочисленного программирования - student2.ru – 15 и 30 руб.

Составьте математическую модель задачи, позволяющую найти оптимальный объем выпуска изделий, обеспечивающий минимальные затраты на выполнение заказа.

Решение. Искомыми величинами в задаче являются объемы выпуска изделий. Изделия Задача целочисленного программирования - student2.ru будут выпускаться двумя бригадами Задача целочисленного программирования - student2.ru и Задача целочисленного программирования - student2.ru . Поэтому необходимо различать количество изделий Задача целочисленного программирования - student2.ru , произведенных бригадой Задача целочисленного программирования - student2.ru , и количество изделий И1, произведенных бригадой Задача целочисленного программирования - student2.ru . Аналогично, объемы выпуска изделий Задача целочисленного программирования - student2.ru бригадой Задача целочисленного программирования - student2.ru и бригадой Задача целочисленного программирования - student2.ru также являются различными величинами. Вследствие этого в данной задаче 4 переменные. Для удобства восприятия будем использовать двухиндексную форму записи Задача целочисленного программирования - student2.ru – количество изделий Задача целочисленного программирования - student2.ru (j=1,2), изготавливаемых бригадой Задача целочисленного программирования - student2.ru (i=1,2), а именно,

Задача целочисленного программирования - student2.ru – количество изделий Задача целочисленного программирования - student2.ru , изготавливаемых бригадой Задача целочисленного программирования - student2.ru , [шт.]; Задача целочисленного программирования - student2.ru – количество изделий Задача целочисленного программирования - student2.ru , изготавливаемых бригадой Задача целочисленного программирования - student2.ru , [шт.]; Задача целочисленного программирования - student2.ru – количество изделий Задача целочисленного программирования - student2.ru , изготавливаемых бригадой Задача целочисленного программирования - student2.ru , [шт.]; Задача целочисленного программирования - student2.ru – количество изделий Задача целочисленного программирования - student2.ru , изготавливаемых бригадой Задача целочисленного программирования - student2.ru , шт.].

Целевая функция

Целью решения задачи является выполнение плана с минимальными затратами, т.е. критерием эффективности решения служит показатель затрат на выполнение всего заказа. Поэтому ЦФ должна быть представлена формулой расчета этих затрат. Затраты каждой бригады на производство одного изделия Задача целочисленного программирования - student2.ru и Задача целочисленного программирования - student2.ru известны из условия.

Таким образом, ЦФ имеет вид

Задача целочисленного программирования - student2.ru , Задача целочисленного программирования - student2.ru

Ограничения

Возможные объемы производства изделий бригадами ограничиваются следующими условиями:

· общее количество изделий Задача целочисленного программирования - student2.ru , выпущенное обеими бригадами, должно равняться 32 шт., а общее количество изделий Задача целочисленного программирования - student2.ru – 4 шт.;

· время, отпущенное на работу над данным заказом, составляет для бригады Задача целочисленного программирования - student2.ru – 9,5 ч, а для бригады Задача целочисленного программирования - student2.ru – 4 ч;

· объемы производства изделий не могут быть отрицательными величинами.

Таким образом, все ограничения задачи делятся на 3 группы, обусловленные:

1) величиной заказа на производство изделий;

2) фондами времени, выделенными бригадам;

3) неотрицательностью объемов производства.

Для удобства составления ограничений запишем исходные данные в виде таблицы 1.

Таблица 1

Бригада Производительность бригад, шт/ч Фонд рабочего времени, ч
Задача целочисленного программирования - student2.ru Задача целочисленного программирования - student2.ru
Задача целочисленного программирования - student2.ru 9,5
Задача целочисленного программирования - student2.ru
Заказ, шт  

Ограничения по заказу изделий имеют следующий вид

Задача целочисленного программирования - student2.ru и

Задача целочисленного программирования - student2.ru .

Ограничение по фондам времени содержательную форму

Задача целочисленного программирования - student2.ru

и

Задача целочисленного программирования - student2.ru .

Проблема заключается в том, что в условии задачи прямо не задано время, которое тратят бригады на выпуск одного изделия Задача целочисленного программирования - student2.ru или Задача целочисленного программирования - student2.ru , т.е. не задана трудоемкость производства. Но имеется информация о производительности каждой бригады, т.е. о количестве производимых изделий в 1 ч. Трудоемкость Тр и производительность Пр являются обратными величинами, т.е.

Задача целочисленного программирования - student2.ru .

Поэтому используя таблицу 1, получаем следующую информацию:

® Задача целочисленного программирования - student2.ru ч тратит бригада Задача целочисленного программирования - student2.ru на производство одного изделия Задача целочисленного программирования - student2.ru ;

® Задача целочисленного программирования - student2.ru ч тратит бригада Задача целочисленного программирования - student2.ru на производство одного изделия Задача целочисленного программирования - student2.ru ;

® Задача целочисленного программирования - student2.ru ч тратит бригада Задача целочисленного программирования - student2.ru на производство одного изделия Задача целочисленного программирования - student2.ru ;

® Задача целочисленного программирования - student2.ru ч тратит бригада Задача целочисленного программирования - student2.ru на производство одного изделия Задача целочисленного программирования - student2.ru .

Запишем ограничения по фондам времени в математическом виде

Задача целочисленного программирования - student2.ru

и

Задача целочисленного программирования - student2.ru .

Задачи для самостоятельного решения

ЗАДАЧА 1. Авиакомпания МОГОЛ по заказу армии должна перевезти на некотором участке 700 человек. В распоряжении компании имеется два типа самолетов, которые можно использовать для перевозки. Самолет первого типа перевозит 30 пассажиров и имеет экипаж 3 человека, второго типа – 65 и 5 соответственно.

Эксплуатация 1 самолета первого типа обойдется 5000$, а второго 9000$. Сколько надо использовать самолетов каждого типа c минимальной стоимостью эксплуатации, если для формирования экипажей имеется не более 60 человек.

Ответ: 6 самолетов I-го типа и 8 самолетов II-го. Мин. стоимость эксплуатации 10200$.

ЗАДАЧА 2. С Курского вокзала города Москвы ежедневно отправляются скорые и пассажирские поезда. Пассажировместимость и количество вагонов железнодорожного депо станции отправления известны. Определите оптимальное количество пассажирских и скорых поездов, обеспечивающих максимальное количество ежедневно отправляемых пассажиров с вокзала.

Рекомендация. x – кол-во скорых поездов, y – кол-во пассажирских. Для того, чтобы узнать количество пассажиров отправляемых ежедневно, необходимо вычислить количество используемых вагонов.

ЗАДАЧА 3. Фирма производит два безалкогольных широко популярных напитка «Колокольчик» и «Буратино». Для производства 1л «Колокольчика» требуется 0,02 ч работы оборудования, а для «Буратино» - 0,04ч, а расход специального ингредиента на них составляет 0,01кг и 0,04кг на 1л соответственно. Ежедневно в распоряжении фирмы 16 кг специального ингредиента и 24ч работы оборудования. Доход от продажи 1л «Колокольчика» составляет 0,25 руб., а «Буратино» - 0,35 руб.

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

Ответ: Макс. доход 270 руб.

ЗАДАЧА 4. Малое предприятие арендовало минипекарню для производства чебуреков и беляшей. Мощность пекарни позволяет выпускать в день не более 50 кг продукции. Ежедневный спрос на чебуреки не превышает 260 штук, а на беляши – 240 штук. Суточные запасы теста и мяса и расходы на производство каждой единицы продукции приведены в таблице. Определить оптимальный план ежедневного производства чебуреков и беляшей, обеспечивающих максимальную выручку от продажи.

Ответ: Цел. функция =2880 кг.

Сырье Расход на производство, кг/шт. Суточные запасы сырья, кг
чебурека беляша
Мясо 0,035 0,06
Тесто 0,065 0,03
Цена, руб./шт  

ЗАДАЧА 5. Коммерческие расчеты, проведенные студентами в деревне, привели к более выгодному использованию плодов яблок и груш путем их засушки и последующей продажи зимой в виде смеси сухофруктов, варианты которых представлены в таблице. Изучение спроса в магазине «Вишенка» показало, что в день продавалось 18 упаковок смеси 1 и 54 упаковки смеси 2. Из 1кг свежих яблок получается 200г сушеных, из 1кг свежих груш – 250г сушеных. Определить оптимальное количество упаковок сухофруктов по 1кг смесей первого и второго вида, обеспечивающее максимальный ежедневный доход от продажи.

Плоды Вес в 1кг в составе сухофруктов Количество плодов, кг
Смесь 1 Смесь 2
Анис (яблоки) 0,25 0,25
Штрейфлинг (яблоки) 0,75 0,25
Груши 0,5 12,5
Цена, руб.  

Ответ: Доход=380 руб.

ЗАДАЧА 6. Имеются четыре вида работ и четверо рабочих. Затраты каждого рабочего на каждую работу в условных единицах приведены в таблице. Каждый рабочий может выполнять только одну работу и каждая работа выполняется только один раз. Требуется минимизировать общие затраты.

Таблица 1. Затраты на работы

  Работа Р1 Работа Р2 Работа Р3 Работа Р4
Рабочий 1
Рабочий 2
Рабочий 3
Рабочий 4

Для успешного решения задачи создадим вспомогательную таблицу загрузки рабочих (см. рис.), в которой с помощью 0 и 1 фиксируются выполняемые каждым рабочим работы. Если данная работа выполняется рабочим, то в соответствующей ячейке - 1, иначе - 0. Эта таблица должна обладать свойствами:

1) Значения в ячейках должны принимать только два целочисленных зна­чения 0 или 1,

2) Суммы строк и столбцов должны принимать значение равное 1.

Таблица 2. Загрузка рабочих

  Работа Р1 Работа Р2 Работа Р3 Работа Р4
Рабочий 1
Рабочий 2
Рабочий 3
Рабочий 4

В качестве целевой функции для перемножения и суммирования элементов массивов удобно использовать функцию суммы произведений, в качестве аргументов которой использовать два диапазона: таблицу затрат и таблицу загрузки. Например, СУММПРОИЗВ(В2:Е5;А8:D11).

Для ограничений на 0 и 1 вячейках таблицы загрузки удобно использовать двоичные значения.

В результате решения получим ответ на то, какой рабочий какую работу выполняет и минимальные суммарные затраты равные 18 условным единицам – (проверить).

Лабораторная работа №6

Наши рекомендации