Задачи линейного программирования (ЗЛП)

advertisement
Информатика. Домашнее задание №3. Задачи линейного программирования
Задачи линейного программирования (оптимизация)
Задачей линейного программирования (ЗЛП) называется задача отыскания
экстремума (максимума или минимума) линейной функции от нескольких переменных
при линейных ограничениях на эти переменные.
Пример
Найти максимальное значение функции
f  x1; x2   2 x1  5x2  max
при следующих ограничениях на переменные x1 и x 2
 x1  x2  127,

7 x1  x 2  83,
 x  0, x  0.
2
 1
Линейная функция f называется функцией цели или целевой функцией.
Ограничения могут быть как не жесткие, т.е. в виде строгих или нестрогих
неравенств, а могут быть жесткими – в виде равенств.
ЗЛП являются прекрасными математическими моделями для большого числа
экономических (и не только) задач, например: планирование производства, расход
ресурсов, транспортные перевозки и др.
Рассмотрим процесс построения математической модели ЗЛП на примерах
некоторых экономических задач.
Построение математических моделей для экономических задач
Основа построения математических моделей в ЗЛП – это, прежде всего,
правильный выбор параметров экономической задачи (или какого-либо другого процесса),
через которые требуемая цель выражалась бы в виде линейной целевой функции, а
ограничения на процесс записывались бы в виде системы линейных уравнений или
неравенств.
Задача планирования производства продукции (на максимизацию)
Рассмотрим следующую задачу.
Фирма изготовляет два вида красок для наружных  A и внутренних B работ.
Для их производства используют исходные продукты: пигмент и олифу. Расходы
исходных продуктов и максимальные суточные запасы указаны в следующей таблице.
Исходный продукт
Пигмент
Олифа
Прибыль, ден.ед., ci
Затраты ресурса на ед. Товара, P
Краска А
Краска В
2
1
3
2
2
3
Суточный
запас, т
6
12
Изучение рынка сбыта показало, что спрос на краску для внутренних B работ
никогда не превышает 4т. в сутки. Цена продажи 1т. краски для наружных A работ –
2 ден.ед., для внутренних B работ – 3 ден.ед. Определить какое количество краски
каждого вида должна производить фирма, чтобы доход от реализации продукции был
максимальным.
Итак, цель задачи – получение максимальной прибыли.
В качестве параметров, характеризующих процесс планирования производства
выберем x1 – количество краски A и x 2 – количество краски B (тон).
Выразим через выбранные неизвестные суммарную прибыль фирмы от продажи
краски:
1
Информатика. Домашнее задание №3. Задачи линейного программирования
F  X   2 x1  3x 2  max .
Перейдем к формулировке ограничений. Ограничения будут двух сортов. Первый –
это не превышение расхода исходных продуктов для изготовления краски их суточных
запасов. Второй – это не превышение продажи краски для внутренних B работ ее
суточного спроса.
Получаем следующую систему ограничений:
2 x1  x2  6,

3x1  2 x2  12,
 x  4.
 2
Кроме указанных ограничений должно в обязательном порядке (и это определяется
постановкой
самой
экономической
задачи)
должно
выполняться
условие
неотрицательности производства краски. Итак, получаем полную систему ограничений
для нашей задачи:
2 x1  x2  6,
3x  2 x  12,
 1
2

 x2  4,
 x1 , x2  0.
Полученная модель может изменяться в зависимости от внешних экономических
факторов. Например, могут добавляться или убираться некоторые ограничения или
стоимости продукции, или суточные запасы ингредиентов.
После решения поставленной задачи, полученные переменные x1 и x 2 будут
говорить о том, сколько тон краски каждого вида необходимо изготавливать и продавать,
чтобы получить наибольшую прибыль. Из системы ограничений можно будет определить
какой ресурс использован полностью, а какой только частично (разница между правой и
левой частями ограничений).
В задачах подобного вида решение x1 и x 2 может получиться в нецелом виде.
Однако, если по смыслу задачи фирма будет производить не краску в тоннах, а, скажем,
детали в штуках, то решение должно быть в обязательном порядке целым. Задач, у
которых на решение накладывается условие получения в целом виде, называются
целочисленными ЗЛП.
Задача о составлении оптимального рациона (на минимизацию)
Предположим, что нам необходимо составить оптимальный суточный рацион
кормления на стойловый период для дойных коров. На 1 голову скота в сутки требуется
не менее 16,1кг кормовых единиц и 1819г перевариваемого протеина. Рацион составляется
из трёх видов кормов: комбикорма, сена, силоса. Содержание питательных веществ в
единице каждого вида корма и себестоимость кормов приведены в таблице ниже.
Таблица 1. Содержание питательных веществ в 1 кг корма и себестоимость кормов
Показатель
Комбикорм
Сено
Силос
Кормовые единицы, кг
1
0,5
0,2
Переваримый протеин, г
160
60
30
Себестоимость 1 кг корма, руб.
4,2
0,9
0,6
Согласно физиологическим особенностям животных в рационе должно
содержаться не менее 31% концентрированных (комбикорм) и не более 26% грубых (сено)
кормов от общей потребности в кормовых единицах.
Критерий оптимальности – минимум себестоимости рациона при выполнении
условий по необходимому содержанию питательных веществ в рационе.
2
Информатика. Домашнее задание №3. Задачи линейного программирования
Для записи математической модели выразим все условия задачи в виде системы
ограничений и запишем целевую функцию. Для этого обозначим через x1 – искомое
содержание комбикорма в рационе (кг), через x 2 – сена (кг) и через x3 – силоса (кг).
Целевая функция – общая стоимость суточного рациона кормления:
F  X   4, 2 x1  0,9 x 2  0, 6 x3  min .
Составим систему ограничений:
1) условие по содержанию кормовых единиц в рационе:
x1  0,5x2  0, 2 x3  16,1 ;
2) условие по содержанию переваримого протеина в рационе:
160 x1  60 x2  30 x3  1819 ;
3) условие по содержанию концентрированных кормовых единиц в рационе (не
менее 16,1 0,31  4,991 кг корм. ед.):
x1  4,991 ;
4) условие по содержанию грубых кормов (не более 16,1 0, 26  4,186 кг корм. ед.)
0,5 x2  4,186 .
5) условие неотрицательности количества корма каждого вида:
x1  0, x2  0, x3  0 .
Итак, общая система ограничений будет иметь вид:
 x1  0,5 x2  0, 2 x3  16,1,
16 x  6 x  3x  181,9,
2
3
 1

x

4,991,
 1
 x  8,372,
 2
 x1  0, x2  0, x3  0.
Транспортная задача
Пусть имеется несколько поставщиков однородной продукции с некоторым
запасом этой продукции и несколько потребителей этой продукции с известными
потребностями. Задана сеть коммуникаций, связывающая каждого поставщика с каждым
потребителем. Для каждой коммуникации известны затраты перевоза единицы
продукции, т.е. известно какова цена перевоза единицы продукции от любого поставщика
к любому потребителю.
Рис. 1
Если какой-либо коммуникации нет, то считаем, что она есть, но стоимость ее
использования устанавливаем равной  . Это автоматически сделает абсолютно
3
Информатика. Домашнее задание №3. Задачи линейного программирования
невыгодным использование этой коммуникации и она будет исключена из плана
перевозок.
Экономическая постановка транспортной задачи звучит следующим образом:
требуется составить план перевозок продукции от поставщиков к потребителям
так, чтобы потребности потребителей были удовлетворены за счет вывоза запасов
продукции со складов поставщиков. Цель – минимизация суммарных расходов на все
перевозки.
Отметим один существенный момент. Если суммарный запас продукции,
имеющийся у поставщиков, полностью совпадает с суммарной потребностью в продукции
у потребителей, тогда транспортная задача считается закрытой (имеет место баланс
запасов и потребностей). Если же баланс нарушается (запасов не хватает или излишки), то
задача называется открытой. Существующие метод решения подобных задач работают с
задачами закрытого типа, следовательно, необходимо рассмотреть способ перехода от
задачи открытого типа к задаче закрытого типа.
Суть сведения открытой транспортной задачи к закрытой заключается в введении в
рассмотрение фиктивных потребителей или поставщиков. Например, при нехватке
запасов вводят фиктивного поставщика, с запасом равным этой нехватке и устанавливают
стоимость коммуникаций (фиктивных) этого поставщика ко всем потребителям равной
нулю (т.е. делают его самым выгодным поставщиком).
Для примера, приведенного на рис. 1 суммарный запас составляет 190 ед., а
потребность – 240 ед. Имеет место нехватка 50 ед. продукции на складах поставщика.
Вводим фиктивного поставщика с запасом в 50 ед. Проводим от него фиктивные
коммуникации с нулевыми стоимостями ко всем потребителям. Наша открытая
транспортная задача в результате стала закрытой.
70
Рис. 2.
Аналогично, при излишке запасов вводят фиктивного потребителя, имеющего
потребность, равную излишкам запасов. Цены фиктивных коммуникаций так же нулевые.
Дадим толкование результата решения открытой транспортной задачи. Пусть в
оптимальном плане перевозок потребитель получает часть продукции от «настоящих»
поставщиков, а часть от фиктивного. Тогда последняя представляет собой ту часть его
потребностей, которая не удовлетворяется (недопоставка продукции). В задаче же с
излишком запасов, та часть продукции, которая вывозится к фиктивному потребителю,
есть ни что иное, как продукция, остающаяся на складах поставщика не вывезенной.
Далее будут рассмотрены только закрытые транспортные задачи.
Построим математическую модель транспортной задачи, как ЗЛП. Исходя из того,
что план перевозок определяется указанием количества перевозимого груза по каждой
коммуникации, обозначим через неизвестные xij – количество перевозимой продукции от
поставщика номе i к потребителю номер j . Здесь параметр i  1, m , где m – число
4
Информатика. Домашнее задание №3. Задачи линейного программирования
поставщиков и j  1, n , где n – число потребителей. Для примера на рис. 2 характерно
m  3 и n  3 . Тогда неизвестных будет девять: X   x11, x12 , x13 , x21, x22 , x23 , x31, x32 , x33  . В
общем случае число неизвестных составляет m n .
Выразим через введенные неизвестные суммарную стоимость перевозок в виде
линейной функции. Для этого необходимо объем перевозки на каждой коммуникации
умножить на цену перевозки по этой коммуникации и просуммировать полученные
значения по числу всех коммуникаций. Для нашего примера имеем
F  X   5 x11  10 x12  12 x13  8 x 21  6 x 22  4 x 23  0 x31  0 x32  0 x33  min .
Значение затрат на перевозки должно быть минимальным!
В общем виде можно записать целевую функцию в виде
m
n
F  X    cij xij  min .
i 1 j 1
Здесь c ij – элементы матрица стоимостей перевозок. Для примера эта матрица
имеет вид:
5 10 12


C  8
6
4.


0
0
0 
Перейдем к формулировке ограничений. Как видно из экономической постановки,
ограничения делятся на две группы:
1) условия полного вывоза продукции от каждого поставщика (таких условий
будет столько, сколько имеется поставщиков m );
2) условия полного удовлетворения потребностей каждого потребителя (число
условий равно числу потребителей n ).
Т.о. в ТЗ будет всего  m  n  ограничений. Запишем ограничения первой группы.
Они будут иметь структуру:
ВЫВОЗ ПРОДУКЦИИ ОТ ПОСТАВЩИКА = ЗАПАСУ
Для нашего примера будет характерно
Рис.3.
x11  x12  x13 – вывоз продукции по всем поставщикам. Запас его равен 120 ед.
Условие полного вывоза будет иметь вид: x11  x12  x13  120 .
Аналогично выглядят ограничения по вывозу продукции для второго и третьего
поставщиков:
5
Информатика. Домашнее задание №3. Задачи линейного программирования
x21  x22  x23  70 ,
x31  x32  x33  50 .
Ограничения второй группы можно сформулировать в виде:
ПРИВОЗ ПРОДУКЦИИ К ПОТРЕБИТЕЛЮ = ПОТРЕБНОСТИ
Рис. 4.
Привоз продукции к первому потребителю составит: x11  x21  x31 и этот привоз
должен быть равен потребности, т.е. x11  x21  x31  60 .
Аналогично для других потребителей:
x12  x22  x32  100 ,
x13  x23  x33  80 .
Окончательно, учитывая ограничения неотрицательности перевозимых объемов
продукции xij  0 , при i  1, m и j  1, n (для примера n  m  3 ), получаем
математическую постановку ТЗ в виде ЗЛП:
F  X   5 x11  10 x12  12 x13  8 x 21  6 x 22  4 x 23  0 x31  0 x32  0 x33  min ,
 x11  x12  x13  120,
 x 21  x 22  x 23  70,
 x31  x32  x33  50,

 x11  x 21  x31  60,
 x12  x 22  x32  100,
 x13  x 23  x33  80,
 x11 , x12 , x13 , x 21 , x 22 , x 23 , x31 , x32 , x33  0.
В общем виде математическую постановку ТЗ можно записать так
m
n
F  X    cij xij  min ,
i 1 j 1

i  1, m,
 xij  ai ,
j

1

 m
j  1, n,
 xij  b j ,
 i 1
 x  0,
i  1, m, j  1, n.
 ij

Здесь m, n – число поставщиков и потребителей; c ij – стоимости перевозки
n
единицы продукции от i -го поставщика к j -у потребителю; ai – запасы поставщиков; b j
– потребности потребителей.
6
Информатика. Домашнее задание №3. Задачи линейного программирования
Задачи линейного программирования с логическими
переменными
Основные сведения
К задачам с логическими переменными относятся задачи, переменные в которых
могут принимать только два значения: 0 или 1. К таким задачам относятся задачи
о назначениях, задача коммивояжера и задача о доставке. Все они относятся к классу
транспортных задач и являются целочисленными. Рассмотрим постановку этих задач.
Задача о назначениях
Задача о назначениях – это так называемая распределительная задача, в которой на
выполнение каждой работы требуется только один ресурс и каждый ресурс может быть
использован только на одной работе. То есть ресурсы неделимы между работами, а
работы неделимы между ресурсами. К задачам о назначениях относятся задачи
распределения людей на должности или работы, автомашин на маршруты, групп по
аудиториям, тематики работ по лабораториям и т.д.
Пример
Для выполнения n работ могут быть использованы n работников. Эффективность
i -го работника i  1, n при выполнении им j -ой работы j  1, n равна c ij . Предполагается,
что каждый работник может быть использован только на одной работе, а каждая работа
может выполняться только одним работником. Определить, какую работу необходимо
поручить каждому работнику, чтобы достичь максимальной эффективности по
выполнению всех работ.
Математическая модель
Введем матрицу логических переменных xij значение которых равно 1, если
выполнение j -ой работы поручено i -му работнику, и равно 0, в противном случае. Тогда,
поскольку на работе j может быть задействован только один работник, то справедливо
равенство:
n
 xij  1 ,
j  1, n .
i 1
Так как один работник может выполнять только одну работу, то справедливо
следующее равенство:
n
 xij  1 , i  1, n .
j 1
Целевая функция определяет эффективность всех работников при выполнении всех
работ, которая должна быть максимальной
n
n
F   cij xij  max .
i 1 j 1
По своей постановке эта задача относится к целочисленной транспортной задаче
закрытого типа (суммарная мощность поставщиков равна суммарной мощности
потребителей).
Задача коммивояжера
Имеется n городов. Расстояния между любой парой городов i  1, n и j  1, n
известны и составляют c ij . Коммивояжер выезжает из какого-либо города и должен
посетить все города, побывав в каждом только один раз и вернуться в исходный город.
Ставится задача определить такую последовательность объезда городов, или маршрут,
при которой суммарная длина маршрута была бы минимальной.
7
Информатика. Домашнее задание №3. Задачи линейного программирования
Нужно учитывать, что из i города нельзя переехать снова в i город, следовательно,
cij   при i  j . С другой стороны это можно учесть в матрице логических переменных
xij , для которой нужно поставить условие xij  0 при i  j .
Математическая модель
Определим логические переменные задачи: xij  1 , если коммивояжер переезжает
из города i в город j , и xij  0 , если коммивояжер не переезжает из города i в город j .
Тогда задача заключается в определении минимума целевой функции
n
n
F   cij xij  min .
i 1 j 1
при ограничениях
n
 xij  1 ,
j  1, n – только один въезд в город j ,
i 1
n
 xij  1 , i  1, n – только один выезд из города i .
j 1
В задаче коммивояжера необходимо еще одно условие, а именно:
ui  u j   n 1 xij  n  2 , i  j , i, j  2, n .
Это специальное условие обеспечивает устранение нескольких несвязанных между
собой маршрутов и циклов, попросту означающих перемещение коммивояжера по
замкнутому частичному маршруту. Переменные u i , i  2, n – вспомогательные
переменны, которые изначально можно считать нулевыми.
Задача о доставке
Фирма обслуживает m клиентов. Каждый день фирма поставляет своим клиентам
товары на автомобилях (или на любом транспортном средстве). Существует n маршрутов
доставки, каждый из которых позволяет обслужить определенное количество клиентов
с использованием только одного транспортного средства. Каждый маршрут
характеризуется определенными параметрами, которыми могут быть длина маршрута,
стоимость расходуемого топлива на маршруте и т.д. Необходимо выбрать такое
множество маршрутов, которое обеспечивало бы обслуживание каждого клиента и только
один раз в день, при минимальных суммарных расходах.
Математическая модель
Введем логические переменные x j с условиями: x j  1 , если выбран j -ый
маршрут, и x j  0 в противном случае, j  1, n . Введем еще логические величины a ij так,
что a ij  1 , если i -ый клиент обслуживается по маршруту j , и aij  0 в противном случае
i  1, m , j  1, n . Стоимость доставки по маршруту j обозначим как c j .
Целевая функция, выражает суммарные расходы доставки по всем выбранным
маршрутам
n
 c j x j  min ,
j 1
и должна быть минимальной.
Ограничения
n
 aij x j  1 , i  1, m .
j 1
выражают условия, согласно которому клиент обслуживается только один раз.
8
Download