
Транспортная задача лп
Существуют частные типы задач ЛП, которые
в силу особой своей структуры, допускают
решение более простыми методами. Одна
из них - так называемая транспортная
задача (ТЗ). Она ставится следующим
образом: имеются mпунктов отправления (ПО),
в которых сосредоточены запасы каких-то
однородных грузов в количестве
соответственно
единиц. Имеетсяnпунктов
назначения (ПН)
,
подавших заявки соответственно на
единиц груза. Сумма всех заявок равна
сумме всех запасов:
(2.20)
Известны стоимости
перевозки единицы груза от каждого
пункта отправленияA
до каждого
Все
числа
,
образующие прямоугольную матрицу заданы
(
):
(2.21)
Считается, что стоимость перевозки нескольких единиц груза пропорциональна их числу.
Требуется составить такой план перевозок (откуда, куда и сколько единиц везти), чтобы все заявки были выполнены, а общая стоимость всех перевозок была минимальна.
Поставим эту задачу как задачу ЛП.
Обозначим
-
количество единиц груза, отправляемого
изi-го ПОA
,
вj-й ПНB
.
Неотрицательные переменные
тоже можно записать в виде матрицы (
):
(2.22)
Совокупность чисел ()
(2.22) будем называть “планом перевозок”,
а сами величины
-
«перевозками”. Эти неотрицательные
переменные должны удовлетворять
следующим условиям:
Суммарное количество груза, направляемое из каждого ПО во все ПН, должно быть равно запасу груза в данном пункте. Это даёт нам mусловий-равенств:
(2.23)
Суммарное количество груза, доставляемое в каждый ПН из всех ПО, должно быть равно
заявке, поданной данным пунктом. Это даст нам n-условий равенств:
(2.24)
Суммарная стоимость всех перевозок, т.е. сумма величин
, умноженных на
соответствующие стоимости
должна быть минимальной:
(2.25)
где знак двойной суммы означает, что суммирование производится по всем комбинациям индексов iиj, т.е. по всем парам ПО-ПН.
Особенностью ТЗ является то, что все коэффициенты в условиях (2.23), (2.24) равны единице – это позволяет решать задачу простыми способами, которые подробно рассмотрены в литературе.
Задачи целочисленного программирования
На практике часто встречаются задачи, совпадающие по постановке с задачами ЛП, но отличающиеся тем, что искомые значения переменных обязательно должны быть целыми. Такие задачи называются задачамицелочисленного программирования; дополнительное условие целочисленности переменных существенно затрудняет их решение.
Рассмотрим пример такой задачи. Пусть
имеется ряд предметов (ценностей)
П,П
,…,П
,
которые желательно увезти из угрожаемого
района. Известны стоимости этих предметов:
и их веса
.
Количество и вид предметов, которые мы
можем увезти, лимитирован грузоподъемностьюQмашины. Требуется из
всего набора предметов выбрать наиболее
ценный набор (с максимальной суммарной
стоимостью предметов), вес которого
укладывается вQ.
Введём в рассмотрение переменные
,
определяемые условием:
,
если мы берём предмет П
,
и
,
если не берём.
При заданных значениях
суммарный вес предметов, которые мы
берём, равен
.
Условие ограниченной грузоподъёмности
запишется в виде неравенства:
(2.26)
Теперь запишем общую стоимость предметов, которую мы хотим максимизировать:
(2.27)
Т.о. задача на вид почти не отличается
от обычной задачи ЛП: найти неотрицательные
значения
,
которые удовлетворяют (2.26) и обращают
в максимум линейную функцию этих
переменных (2.27). Может показаться, что
решать эту задачу надо как задачу ЛП,
введя дополнительные условия:
Но найденное таким образом решение
может оказаться дробным, а значит
неосуществимым (нельзя делить предмет).
А нельзя ли округлить полученные значения
до ближайшего целого (0 или 1). Полученное
таким образом решение может или не
удовлетворять (2.26), или может быть совсем
не оптимальным; хотя иногда такое
округление допустимо в некоторых
задачах.
Вообще задачи целочисленного программирования гораздо труднее обычных задач ЛП, они очень сложны и трудоёмки. Имеется ряд методов решения подобных задач, которых мы касаться не будем.