- •2.6. Линейное программирование
- •Построить самостоятельно
- •1) Построить область планов задачи лп;
- •3) Передвигать параллельно эту прямую до тех пор, пока она не будет пересекать область допустимых планов задачи лп.
- •2.7. Задача об оптимальном плане выпуска стульев
- •2.7.1. Постановка транспортной задачи
- •Найти такие неотрицательные значения переменных хij , которые минимизировали бы функцию (2.48) и удовлетворяли бы ограничениям (2.49) и (2.50).
Найти такие неотрицательные значения переменных хij , которые минимизировали бы функцию (2.48) и удовлетворяли бы ограничениям (2.49) и (2.50).
Данная задача носит название транспортной задачи. В общем виде транспортную задачу можно сформулировать в следующем виде:
Имеется m поставщиков и n потребителей. Каждый поставщик содержит товар в количестве ai (i=1, 2, . . . , m). Каждому потребителю необходимо bj (j=1, 2, . . . , n) товара. Известна стоимость Сij перевозки единицы товара от i-го поставщика к j-ому потребителю. Необходимо составить такой план перевозок, при котором суммарная стоимость была бы наименьшей.
Если хij — количество товара, перевезенного от i-гo поставщика к j-ому потребителю, то математическая формулировка выглядит так:
(2.60)
(i=1,2,…,m), (2.61)
(j=1,2,…,n), (2.62)
(i=1,2,…,m; j=1,2,…,n). (2.63)
Задача (2.60) — (2.63) является задачей ЛП, в которой m*n переменных и m + n ограничений, записанных в виде равенств.
Если общее количество товара у всех поставщиков равно общему количеству товара, требуемого потребителями, т. е.
(2.64)
то такая модель транспортной задачи называется закрытой. В противном случае, модель называется открытой. Если модель является открытой, то соответствующие ограничения принимают форму неравенств. Отметим, что задача (2 61) — (2 63), относится к закрытой модели.
Транспортную задачу обычно представляют в виде таблицы.
Таблица 2.7.1
Потребители
|
1 |
2 |
… |
j |
… |
n |
запас |
1 |
С11
|
С12
|
. |
С1j
|
. |
С1n
|
a1 |
2 |
С21 |
С22
|
. |
С2j |
. |
С2n
|
a2
|
|
: |
. |
. |
|
. |
. |
. |
i |
Сi1
|
Сi2
|
. |
Сij
|
. |
Сin
|
ai
|
|
: |
. |
. |
. |
. |
. |
. |
m |
Сm1
|
Сm2
|
. |
Сmj
|
…. |
Сmn
|
am
|
потребность |
b1
|
b2
|
… |
bj
|
|
bn
|
|
П
о
с
т
а
в
щ
и
к
и
В каждую клетку в верхний левый угол записывают соответствующее значение Сij.
Сделаем одно замечание. Мы видели, что число уравнений, составляющих ограничения транспортной задачи, равно m+n. Однако, на самом деле одно из уравнений этой системы (причем любое) является линейной комбинацией остальных уравнений, что можно проверить непосредственно.
Тот факт, что в транспортной задаче одно из уравнений является лишним, следует из равенства запасов и потребностей. Таким образом, число линейно-независимых уравнений, составляющих ограничения в транспортной задаче, равно m + n — 1. Этим важным фактом воспользуемся в дальнейшем. В соответствии с теоремойII. 1 это означает, что в оптимальном плане не может быть больше, чемm+n— 1 ненулевых перевозок.
Конечно, можно найти решение транспортной задачи с помощью известных методов решения задач ЛП (например, симплекс-метода). Но при этом нужно учитывать то, что в транспортных задачах число переменных достаточно велико. Поэтому в дальнейшем мы рассмотрим специфичные способы решения.
Построение первоначального опорного плана транспортной задачи
Идейно методы решения транспортных задач это те же алгоритмы симплекс-метода, представленные для транспортной задачи в удобной форме. Сначала находится первоначальный опорный план, затем осуществляется процесс улучшения решения до тех пор, пока найденный опорный план не станет оптимальным. Рассмотрим два способа получения первоначального опорного плана.
Метод северо-западного угла
Будем рассматривать задачу ( ) — ( ). Представим ее в виде таблицы:
Таблица 2.7.2
|
A |
B |
C |
D |
Запас |
1 |
12 400 |
13 100 |
4 |
6 |
500 |
2 |
6 |
4 700 |
10 |
11 |
700 |
3 |
10 |
9 100 |
12 200 |
4 500 |
800 |
Потребность |
400 |
900 |
200 |
500 |
|
Название данного метода свидетельствует о том, что мы стартуем с клетки, расположенной в верхнем левом углу и движемся по направлению "юго-восток". В клетки вносится количество перевозимого груза. При этом клетки, в которых имеется ненулевое количество груза, называются занятыми, а остальные — свободными. Вы, наверное, уже догадались, что количество, записанное в занятую клетку, есть не что иное, как значение соответствующего хij.
Рассмотрим клетку 1А и занесем туда максимально возможное количество груза. Это количество определяется величинами запаса на складе 1 и потребностями завода А. Очевидно, что это количество определяется наименьшим числом. Это количество будет равно 400. Тогда все потребности завода А удовлетворены, но на складе 1 осталось 500 — 400 = 100 т. Переходим к ближайшей незанятой клетке. Это не может быть клетка 2А, т. к. потребности потребителя А уже удовлетворены, в то время, как на складе 1 запасы еще есть. Т. е. мы попадаем в клетку 1В и загружаем ее опять максимально возможным количеством. Оно равно 100 (такой запас остался на складе 1). Таким образом, запасы на складе 1 исчерпаны, но заводу В еще необходимо 900 — 100 = 800 т. Снова от клетки 1В переходим к ближайшей клетке 2 В. Максимально возможно ее загрузить количеством 700, т. к это запас со склада2. Потребности завода В опять не удовлетворены, т. к. 800 — 700 = 100. Снова переходим к следующей клетке ЗВ. Туда заносится величина 100 для того, чтобы удовлетворить потребности завода В. На складе З осталось еще 800 — 100 = 700. Снова переходим на соседнюю клетку (ЗС) и заносим туда 200 (потребности завода С). Наконец, в клетку 3D заносим 500. В результате все потребности удовлетворены, а запасы исчерпаны.
Подсчитаем количество занятых клеток. Их шесть. Число линейно-независимых уравнений системы тоже шесть. Согласно нашей терминологии получается первоначальный опорный план, в котором шесть переменных являются базисными, остальные шесть равных нулю — небазисные. Согласно этому решению:
.
Остальные x = 0. Можно подсчитать общую стоимость перевозок при данном плане:
Конечно, очень проблематично считать, что найденный план является оптимальным. Достоинством метода северо-западного угла, (пожалуй, единственным) является его простота.
Метод Фогеля
Метод, предложенный американским ученым У. Фогелем, является более сложным, но, в то же время, первоначальный опорный план этого метода наиболее близок к оптимальному. Идея метода основана на так называемом понятии штрафных затрат. Давайте выясним, что это такое. Обратим опять свое внимание к задаче ( ) — ( ), которую представим в виде таблицы:
Таблица 2.7.3
-
А
В
С
D
Запас
Штраф
1
12
13
4
6
500
2 = 6 – 4
2
6
4
10
11
700
2 = 6 – 4
3
10
9
12
4
800
5 = 9 – 4
Спрос
400
900
200
500
Штраф
4 = 10 – 6
5=9-4
6 = 10 – 4
2 = 6 – 4
Рассмотрим ряд 1. Наименьшая цена доставки со склада 1 — это до завода С, и цена равна 4. Следующая наименьшая цена — до завода D. Она равна 6. Поэтому, если мы не будем посылать со склада 1 товар заводу С, то мы дополнительно понесем издержки, которые будут никак не меньше, чем 6 — 4 = 2. Это и будут штрафные затраты, которые записываются в дополнительный столбец таблицы 2.7.3 Аналогично определяются величины штрафных затрат всех остальных рядов, а также для всех колонок. Как видно из таблицы 2.7.3 наибольшая величина штрафа соответствует колонке С. Уделим этой колонке больше внимания, т. к. именно в этом случае понесутся наибольшие потери, если не будет использоваться клетка с наименьшей стоимостью. В этой колонке выбирается клетка с наименьшей ценой — клетка 1С и заполняется максимально возможным грузом. Возможно поместить только 200 т груза, в результате потребности завода С будут удовлетворены, но на складе 1 останется 500 — 200 = 300 т груза. В дальнейшем колонка С не рассматривается. Построим следующую таблицу:
Таблица 2.7.4
|
А |
В |
С |
D |
Запас |
Штраф |
1 |
12 |
13 |
4 200 |
6
|
500-200 =300 |
6 |
2 |
6 |
4
|
10 |
11 |
700 |
2 |
3 |
10 |
9 |
12 |
4 |
800 |
5 |
Спрос |
400 |
900 |
0 |
500 |
|
|
Штраф |
4 |
5 |
0 |
2 |
|
|
Опять ищется ряд или колонка (без С), где штраф наибольший. Это 1 ряд. В этом ряду находится клетка с наименьшей ценой — клетка 1D и заполняется максимально возможным количеством товара. Из таблицы ясно, что в клетку помещается 300 т, т. к. такое количество товара осталось на складе 1. В результате запас склада 1 будет исчерпан, но заводу D необходимо еще 500 — 300 = 200 т. На следующих этапах ряд 1 и колонка С уже не будут учитываться. Следующая таблица будет иметь вид:
Таблица 2.7.5
|
А |
В |
С |
D |
Запас |
Штраф |
1 |
12 |
13 |
4 200 |
6 300 |
0 |
6 |
2 |
6 |
4
|
10 |
11 |
700 |
2 |
3 |
10 |
9 |
12 |
4 |
800 |
5 |
Спрос |
400 |
900 |
0 |
200 |
|
|
Штраф |
4 |
5 |
0 |
7 |
|
|
Вам уже ясно, что делать дальше? Да, мы опять находим наибольшее значение штрафа (колонка D); в клетку 3D заносим 200 (почему?) и в дальнейшем исключаем из рассмотрения колонку D, т. к. спрос завода D удовлетворен.
Продолжая этот процесс, окончательно получаем таблицу (проделайте самостоятельно):
Таблица 2.7.6
|
А |
В |
С |
D |
Запас |
1 |
12 |
13 |
4 200 |
6 300 |
0 |
2 |
6 |
4 700 |
10 |
11 |
0 |
3 |
10 400 |
9 200 |
12 |
4 200 |
0 |
Спрос |
0 |
0 |
0 |
0 |
|
В результате получился первоначальный опорный план данной задачи:
всеoстальные
Подсчитаем суммарные затраты:
Опять же нет уверенности в том, что найденный план оптимален, хотя он, безусловно, лучше плана, полученного методом северо-западного угла.
Прежде чем мы перейдем к ответу на вопрос: а как определить, является ли данный опорный план оптимальным? — мы еще раз сформулируем основные этапы обоих алгоритмов.
Метод северо-западного угла:
Начинаем с клетки, находящейся в верхнем левом углу. Наполняем эту клетку максимально возможным грузом. Это количество определяется величинами спроса и запаса ряда 1 и первой колонки. Помещаемое количество груза равно меньшему значению спроса или запаса.
В зависимости от того, что использовано полностью (спрос или запас), переходим к соседней клетке. Это будет клетка, находящаяся в первом ряду и во втором столбце (если удовлетворен спрос), или клетка второго ряда и первого столбца (если использован запас).
Так же, как и в пункте 1 максимально заполняем следующую клетку.
Делаем аналогичные операции, как и в пунктах 2 и 3. Процесс продолжим до тех пор, пока все потребности полностью не удовлетворены и не исчерпаны все запасы.
Метод Фогеля:
Для каждого ряда и каждого столбца находим штрафные затраты путем вычитания наименьшей цены из следующей наименьшей цены.
Определяем ряд или столбец, где штрафные затраты наибольшие.
В выбранном в пункте 2 ряду или столбце заполняем максимально клетку с наименьшей стоимостью.
Возвращаемся к пункту 1, при этом ряд или столбец, выбранный в пункте 2, не учитывается.
Процесс повторяется до тех пор, пока все потребности не будут удовлетворены и все запасы не будут использованы.
Методы улучшения решения транспортной задачи. Критерий оптимальности
Мы научились строить первоначальный опорный план транспортной задачи. Следующим этапом исследования будет рассмотрение возможностей улучшения первоначального решения. Естественно, что улучшить решение, т. е. уменьшить значение целевой функции, возможно только путем перераспределения груза из занятых клеток в какие-то незанятые. Возьмем первоначальное решение, полученное методом северо-западного угла.
Таблица 2.7.7
|
А |
В |
С |
D |
Запас |
1 |
12 400 |
13 100 — |
4
+ |
6 |
500 |
2 |
6 |
4
700 |
10 |
11 |
700 |
3 |
10 |
9 100 + |
12 200 —
|
4 500 |
800 |
Спрос |
400 |
900 |
200 |
500 |
|
Рассмотрим первый ряд. Видно, что клетка с наименьшей стоимостью в этом ряду 1С не занята. Естественно, возникает желание занять эту клетку. Поэтому мы:
Увеличим число единиц клетки 1С на 1. Пометим эту клетку значком "+", который поместим в нижний левый угол клетки.
Увеличение на 1 в клетке 1С необходимо компенсировать уменьшением в занятой клетке на 1 в первом ряду (или колонке С). Выберем клетку 1В. Пометим ее значком "—".
Нужно компенсировать уменьшение груза на 1 в клетке 1В. Это возможно сделать в клетках 2В или ЗВ. Предположим, выбирается клетка 2В. Но тогда в строке 2 станет больше количества груза, чем имеется в запасе в этой строке. Поэтому мы выбираем клетку ЗВ, т. е. в эту клетку добавляется единица груза и она помечается значком "+".
Чтобы не изменился баланс в третьем ряду (увеличили груз в клетке ЗВ), нужно уменьшить на 1 количество груза в оставшихся занятых клетках этого ряда. Выберем клетку ЗС и пометим "—". Понятно, что выбрать таким образом клетку 3D мы не можем, т.к. при этом у нас нарушился бы баланс в столбце D, а компенсировать его нечем.
Уменьшение на 1 в клетке ЗС компенсируется увеличением на 1 в клетке 1С (шаг 1). Таким образом, баланс сохраняется везде.
Заметим, что клетки, помеченные знаком "+" и знаком "—", образуют замкнутую цепь. Это важный момент, который всегда нужно иметь в виду. В дальнейшем такую замкнутую цепь (или цикл) будем обозначать координатами помеченных клеток. В нашем случае — это 1С-1В + ЗВ-ЗС.
Чего же мы добились таким перераспределением? Давайте проанализируем этапы нашей работы. Наглядно это можно представить в виде следующей схемы:
Действие Клетка Изменение целевой
функции
Увеличить на 1 1С +4
Уменьшить на 1 1В —13
Увеличить на 1 ЗВ +9
Уменьшить на 1 ЗС —12 Общее изменение —12
Вывод, к которому мы приходим: перераспределение на единицу груза, проведенное нами, приводит к уменьшению значения целевой функции на 12 единиц, т. е. улучшает ее значение. Становится ясным, что наше первоначальное решение не оптимально, раз оно может быть улучшено.
Вообще, цепи в транспортных задачах должны удовлетворять следующим особенностям:
Цепь является замкнутым многоугольником. Если бы она была незамкнутой, то мы не могли бы перераспределить потоки груза с сохранением баланса по строкам или столбцам.
Все линии цепи — прямые, принадлежащие одной строке (или столбцу) матрицы транспортной задачи.
В цепи четное число вершин.
Для каждой начальной клетки цепи можно построить только одну цепь.
Мы начали перераспределение с клетки 1С. А если мы начнем с какой-либо другой клетки? Что будет при этом? Возьмем, например, цепь 1D —1В + ЗВ — 4D. Подсчитаем, какое изменение целевой функции произойдет:
Значение уменьшится, но на меньшую величину, чем в первом случае.
Для примера еще рассмотрим какую-нибудь цепь: 2А — 2В + 1В — 1А.
В этом случае целевая функция изменится на:
т. е. увеличится. Аналогично можно сделать для любой незанятой клетки. Ясно, что перераспределения могут как увеличивать значение целевой функции (что нам не надо), так и уменьшать (к чему нужно стремиться). Но неужели мы должны рассматривать все цепи? А как легче определить возможность улучшения найденного решения? Иными словами, есть ли критерий оптимальности транспортной задачи? Ответ на этот вопрос дает следующая теорема:
Теорема III. 1.
Если план транспортной задачи является оптимальным, то ему соответствует система из т + п чисел
для (2.65)
для (2.66)
(i = 1,2,..., т;j =1,2,..., п).
Строгое доказательство теоремы можно найти в большинстве учебников по линейному программированию. Приведем лишь общие рассуждения.
Числа и. называются потенциалами строк и столбцов соответственно. Условия (2.65) есть не что иное, как система линейных уравнений для определения потенциалов, т. к. неравенства > 0 характерны только для занятых клеток. Условия (2.66) — условия оптимальности транспортной задачи. Согласно этим условиям величины =—()должны быть неотрицательными для незанятых клеток в случае оптимального плана. Вспомним, как мы определяли величину, на которую изменится значение целевой функции при построении цепи. Например, для клетки 1С это значение будет равно:
(2.67)
Покажем, что Е1С* = Е1С Действительно,
В силу (III 3.1)
Подставим последние равенства в (III 3.3)
Таким образом, если меньше алгебраической суммы потенциалов своих строки и столбца, то перераспределение поставок поцепи к этой клетке уменьшает значение целевой функции. Наоборот, если большето перераспределений к этой клетке увеличиваетцелевую функцию. Если= , то перераспределение к этой клетке не приведет к изменению целевой функции. Вам не напоминает это разности?
Теперь становятся ясными этапы алгоритма получения оптимального решения транспортной задачи.
этап. Находится первоначальный опорный план.
этап. Вычисляются потенциалы. Здесь надо иметь в виду, что
количество потенциалов т+п, а уравнений для их определения п+т-1 (число занятых клеток). Поэтому одному из потенциалов (любому) придают какое-либо значение, например, нулевое.
этап. Подсчитываются все для незанятыхклеток. Если все, то найденный опорный план оптимален, если есть,то строится цикл.
Пример решения транспортной задачи в Internet: Необходимо ежедневно с первого склада перевозить в два магазина 50 телевизоров , а со второго склада – 70. При этом первый магазин продает в день 40 телевизоров, а второй – 80 (50+70-40). В транспортной задаче неравенства в ограничениях заменены равенствами. Получается система линейных алгебраических уравнений с множеством решений, одно из которых оптимизирует целевую функцию. Известны затраты на перевозку одного телевизора со складов в магазины (четыре константы: 1200 у.е. при перевозке одного телевизора с первого склада в первый магазин, 1600 – с первого склада во второй магазин, 800 – со второго склада в первый магазин и 1000 – со второго склада во второй магазин).
Рис.2.24
Решите задачу о перевозке с 3 складов на 4 завода
1