Алгоритм метода потенциалов
Числа ui (i=1, 2, …, m) и vj (j=1, 2, …, n) из Теоремы 8.2.5 называются потенциалами задачи. Метод потенциалов основан на использовании этих чисел.
8.3.1. Основные пункты алгоритма:
1) Построить первоначальный опорный план.
2) Проверить план на оптимальность. Если критерий оптимальности не выполнен, то перейти к пункту 3). В противном случае задача решена. Перейти к пункту 5).
3) Перейти к очередному опорному плану.
4) Перейти к пункту 2).
5) Вычислить стоимость перевозок.
Распишем подробно основные пункты алгоритма.
8.3.2. Построение первоначального опорного плана.
Мы познакомимся с двумя методами построения первоначального опорного плана.Мы здесь рассмотрим метод северо-западного угла (ниже, в пункте 8.3.5 познакомимся с так называемым методом наименьшей стоимости). Суть метода (северо-западного угла) поясним на задаче с Таблицей 8.1. Начинаем заполнять таблицу планом с «северо-западного угла».
Пример 4. У первого поставщика имеется 90 единиц груза, а первому потребителю нужно 70 единиц. Поэтому можем спланировать перевозку 70 единиц груза от первого поставщика к первому потребителю: вписываем в клетку (1, 1) 70 и как бы вычёркиваем первого потребителя - он «получил своё» и в дальнейшем распределении груза не участвует: ставим знак «-» над первым столбцом:
bj ai | - | |||
У первого поставщика осталось 20 единиц груза, а второму потребителю всего нужно 30. Поэтому вписываем эти 20 единиц в клетку (1, 2), вычеркнув первую строку (у первого поставщика все 90 единиц груза использованы, и он выбывает из дальнейшего распределения поставок):
bj ai | - | |||
- | ||||
Второму потребителю требуется ещё 10 единиц, которые мы «заберём» у второго поставщика (у него их имеется 30 единиц): вписываем 10 в клетку (2, 2) и вычеркнем второй столбец:
bj ai | - | - | ||
- | ||||
У второго поставщика осталось ещё 20 единиц груза, и третьему потребителю требуется как раз 20 единиц. Вписав эти 20 единиц в клетку (2, 3) вычёркиваем только одного участника, скажем, второго поставщика, хотя фактически из распределения груза выбывают одновременно второй поставщик и третий потребитель. Вычёркивание на одном шаге только одного участника обеспечивает участие второго в следующем шаге заполнения таблицы, и в результате будет заполнено в точности m+n-1 клеток:
bj ai | - | - | ||
- | ||||
- | ||||
Так как третий потребитель ещё не вычеркнут, то вписываем 0 в клетку (3, 3) и вычёркиваем третьего потребителя:
bj ai | - | - | - | |
- | ||||
- | ||||
Наконец, на последнем, 3+4-1=6-м шаге, вписываем 40 в клетку (3, 4) и вычёркиваем обоих участников - третьего поставщика и четвёртого потребителя:
bj ai | - | - | - | - |
- | ||||
- | ||||
- |
Получили первоначальный опорный план (Таблица 8.2).
8.3.3. Проверка плана на оптимальность производится по следующей схеме:
1) Вычислить потенциалы ui (i=1, 2, …, m) и vj (j=1, 2, …, n).
2) Проверить условие оптимальности (8.3).
Более подробно:
1) Потенциалы вычисляются решением системы (8.2), где cij - стоимости перевозок для заполненных клеток. Эта система состоит из m+n уравнений с m+n неизвестными. Ранг системы равен m+n-1, так как матрица этой системы транспонирована по отношению к матрице ограничений транспортной задачи (8.1), ранг которой равен m+n-1 (Теорема 8.2.2). Поэтому эта система имеет одну свободную неизвестную, и, вообще говоря, имеет бесконечное множество решений. Присвоив какой-то неизвестной, скажем, неизвестной u1, какое-то значение, например, 0 (u1=0), мы найдём однозначно определённые значения остальных ui и vj. При этом удобно решать систему не традиционным способом (например, методом исключения Гаусса), а, так сказать, «не отходя от таблицы»: справа от таблицы на уровне соответствующей строки последовательно выписываем очередное найденное значение ui, а под соответствующим столбцом - очередное найденное значение vj. Продемонстрируем это на нашем примере (Таблица 8.1). А именно,
Пример 5. Найдём потенциалы ui и vj для первоначального опорного плана (Таблица 8.2).
Справа от таблицы на уровне первой строки записываем 0:
bj ai | |||||
В первой строке заполнены клетки (1, 1) и (1, 2). Стоимости в этих клетках равны соответственно c11=1 и c12=3. Поэтому v1=c11-u1=1-0=1 и v2=c12-u1=3-0=3. Значения v1=1 и v2=3 записываем под первым и вторым столбцами соответственно:
bj ai | |||||
Во втором столбце кроме клетки (1, 2) заполнена клетка (2, 2). По ней определяем u2=c22-v2=3-3=0. Записываем u2=0 справа от таблицы на уровне второй строки:
bj ai | |||||
Во второй строке кроме клетки (2, 2) заполнена клетка (2, 3). По ней определяем v3=c23-u2=1-0=1. Записываем значение v3=1 под третьим столбцом:
bj ai | |||||
В третьем столбце кроме клетки (2, 3) заполнена клетка (3, 3). По ней определяем u3=c33-v3=4-1=3, и записываем u3=3 справа от таблицы на уровне третьей строки:
bj ai | |||||
Наконец, по клетке (3, 4) определяем v4=c34-u3=2-3=-1, и записываем его под четвёртым столбцом:
bj ai | |||||
-1 |
Таким образом, u1=0, u2=0, u3=3, v1=1, v2=3, v3=1, v4=-1.
2) После нахождения потенциалов ui (i=1, 2, …, m) и vj (j=1, 2, …, n) необходимо проверить выполнение условия (8.3) для всех пустых клеток (для заполненных клеток потенциалы найдены из условия ui+vj=cij; поэтому для заполненных клеток проверка условия (8.3) нужна разве что только для проверки правильности найденных потенциалов. Имеем
u1+v3=0+1=1<4=c13, u1+v4=0-1=-1<5=c14, u2+v1=0+1=1<5=c21,
u2+v4=0-1=-1<2=c24, u3+v1=3+1=4>2=c31, u3+v2=3+3=6>1=c32,
Таким образом, u1+v3<c13, u1+v4<c14, u2+v1<c21, u2+v4<c24, но u3+v1>c31 и u3+v2>c32, то есть условие (8.3) выполнено не для всех клеток, и нельзя утверждать, что данный опорный план оптимален.
8.3.4. Переход к новому опорному плану (построение очередного опорного плана).
Для перехода к другому опорному плану (построения очередного опорного плана) поступают следующим образом:
1) Находят оценки Dij=ui+vj-cij для клеток (i, j), в которых условие (8.3) нарушается.
2) Выбирают клетку с максимальным из них (по Теореме 8.2.6 это обеспечивает максимальное уменьшение значения целевой функции).
3) Строят помеченный цикл из выбранной (пустой) клетки. Если клеток с максимальным Dij>0 несколько, то выбирают ту, в которой стоимость перевозок наименьшая. Если и таких клеток несколько, то выбирают любую.
4) Из выбранной клетки осуществляют сдвиг по циклу.
Пример 6. В нашем примере:
1) Найдём оценки для клеток для клеток (i, j), в которых условие (8.3) нарушается (напоминаем, что u3+v1>c31 и u3+v2>c32, и условие (8.3) нарушается в клетках (3, 1) и (3, 2)): D31=u3+v1-c31=3+1-2=2, D32=u3+v2-c32=3+3-1=5.
2) Выбираем клетку с максимальным из Dij>0: Это - (3, 2): D32>D31.
3) Из клетки (3, 2) строим помеченный цикл:
bj ai | |||||
- | + | ||||
+ | - | ||||
-1 |
4) Осуществляем сдвиг по циклу: минимальное содержимое клеток со знаком «-» оказалось равном 0, то есть этот 0 мы будем вычитать из клеток со знаком «-» и прибавлять в клетки со знаком «+». Фактически опорный план не изменится, но изменится система заполненных клеток (что тоже влияет на ход решения задачи!):
bj ai | |||||
Далее мы доведём решение задачи до конца:
2.1) Найдём потенциалы. Сначала присваиваем u1=0 и по заполненным клеткам первой строки определяем v1=c11-u1=1-0=1 и v2=c12-u1=3-0=3. Теперь по заполненным клеткам второго столбца (а они оказались заполненными все) определяем u2=c22-v2=3-3=0 и u3=c32-v2=1-3=-2. Далее, по заполненной клетке второй строки определяем v3=c23-u2=1-0=1. Наконец, по заполненной клетке третьей строки определяем v4=c34-u3=2-(-2)=4. Найденные потенциалы записываем в клетках справа и снизу таблицы:
bj ai | |||||
-2 | |||||
2.2) Проверяем условие оптимальности для пустых клеток:
u1+v3=0+1<4=c13, u1+v4=0+4<5=c14, u2+v1=0+1<5=c21,
u2+v4=0+4>2=c24, u3+v1=-2+1<2=c31, u3+v3=-2+1<4=c33,
и условие оптимальности нарушается в единственной клетке (2.4).
2.3) Строим помеченный цикл из клетки (2, 4):
bj ai | |||||
10 - | + | ||||
+ | - | -2 | |||
2.4) Имеем m= = =10. Эти 10 единиц вычитаем из клеток со знаком «-» и прибавляем в клетки со знаком «+». Получаем очередной опорный план:
bj ai | ||||
3.1) Ищем потенциалы: u1=0, v1=c11-u1=1-0=1 и v2=c12-u1=3-0=3, u3=c32-v2=1-3=-2, v4=c34-u3=2-(-2)=4, u2=c24-v4=2-4=-2, v3=c23-u2=1-(-2)=3:
bj ai | |||||
-2 | |||||
-2 | |||||
3.2) Проверяем условие оптимальности для пустых клеток:
u1+v3=0+1<4=c13, u1+v4=0+4<5=c14, u2+v1=-2+1<5=c21,
u2+v2=-2+3<3=c24, u3+v1=-2+1<2=c31, u3+v3=-2+3<4=c33.
Таким образом, условие оптимальности ui+vj£cij выполнено, то есть данный план оптимален. Вычислим, во сколько обойдутся перевозки при данном плане: 70×1+20×3+20×2+10×2+10×1+50×2=320.
Ответ: Матрица перевозок: . Стоимость перевозок Fmin=320 у.е.
8.3.5. Метод наименьших затрат построения первоначального опорного плана.
Так же, как и с методом северо-западного угла, с методом наименьших затрат построения первоначального опорного плана познакомимся на конкретном примере задачи Таблицы 8.1. В отличие от метода северо-западного угла, в этом методе на очередном шаге из оставшихся клеток заполняется клетка с самыми дешёвыми перевозками. Но, как и в методе северо-западного угла, на каждом шаге, за исключением последнего, вычёркивается только один участник.
Наименьшая стоимость перевозок - в клетках (1, 1), (2, 3) и (3, 2). Заполняем, по возможности, эти клетки, вписывая соответственно 70, 20 и 30, и вычёркивая соответственно первый, третий и второй столбцы:
bj ai | - | - | - | ||
Из оставшихся клеток наиболее дешёвыми являются клетки (2, 4), (3, 1) и (3, 4) со стоимостями c24=c31=c34=2. Клетка (3, 1) не может участвовать при заполнении плана, так как первый столбец вычеркнут. В клетку (2, 4) вписываем 10 (так как у второго поставщика осталось только 10 единиц груза), вычеркнув второго поставщика, и клетку (3, 4) вписываем 10 (так как у третьего поставщика также осталось 10 единиц груза, а четвёртому потребителю требуется ещё 30 единиц груза), вычеркнув третьего поставщика:
bj ai | - | - | - | |
- | ||||
- |
Невычеркнутыми, остались первая строка и последний столбец, что означает, что осталось заполнить только одну клетку (1, 4). Вписываем в неё 20:
bj ai | - | - | - | - |
- | ||||
- | ||||
- |
8.3.6. В заключение пункта 8.3 резюмируем алгоритм метода потенциалов:
1) Построить первоначальный опорный план.
2) Проверить план на оптимальность. Для этого:
2.1) Вычислить потенциалы ui (i=1, 2, …, m) и vj (j=1, 2, …, n).
2.2) Проверить условие оптимальности ui+vj=cij (i=1, 2, …, m, j=1, 2, …, n). Если критерий оптимальности не выполнен, то перейти к пункту 3). В противном случае задача решена. Перейти к пункту 5).
3) Перейти к очередному опорному плану. Для этого:
3.1) Найти оценки Dij=ui+vj-cij для клеток (i, j) ui+vj>cij.
3.2) Выбрать клетку с максимальным Dij>0.
3.3) Из выбранной клетки построить помеченный цикл.
3.4) Осуществить сдвиг по циклу.
4) Перейти к пункту 2).
5) Вычислить стоимость перевозок.
Пример 6. Решить транспортную задачу. Первоначальный опорный план построить методом наименьших затрат.
bj ai | ||||
Решение. 1) Построим первоначальный опорный план (методом наименьших затрат). Самые дешёвые перевозки - в клетках (1, 2), (2, 1) и (2, 4). Из них по полной «загрузим» первые две, после чего оставшиеся 20 единиц груза второго поставщика впишем в клетку (2, 4):
bj ai | - | |||
- | ||||
- | ||||
Из оставшихся клеток самыми дешёвыми являются перевозки со стоимостью 4. Из всех клеток с этой стоимостью не вычеркнутой является клетка (3, 2), куда вписываем 10 (второму ещё потребителю требуется 10 единиц груза):
bj ai | - | - | ||
- | ||||
- | ||||
Из оставшихся двух невычеркнутых клеток (3, 3) и (3, 4) сначала вписываем в клетку (3, 4) 20 (так как она дешевле клетки (3, 3), и четвёртому ещё требуется 30 единиц груза, а у третьего поставщика их 80 единиц), а затем остальные 50 вписываем в клетку (3, 3):
bj ai | - | - | - | |
- | ||||
- | ||||
21) Проверим план на оптимальность. Для этого
2.11) Найдём потенциалы:
bj ai | |||||
Присваиваем u1=0 и по заполненной клетке (1, 2) первой строки определяем v2=c12-u1=3-0=3. По заполненной клетке (3, 2) второго столбца определяем u3=c32-v2=4-3=1. Далее, по заполненным клеткам (3, 3) и (3, 4) третьей строки определяем v3=c33-u3=6-1=5 и v4=c34-u3=5-1=5. Теперь по заполненной клетке (2, 4) второй строки определяем u2=c24-v4=4-3=1. Наконец, по заполненной клетке (2, 1) второй строки определяем v1=c21-u2=3-1=2.
2.21) Проверяем условие оптимальности для пустых клеток:
u1+v1=0+2<6=c11, u1+v3=0+5>4=c13, u1+v4=0+4=4=c14,
u2+v2=1+3=4=c22, u2+v3=1+5>5=c23, u3+v1=1+2<4=c33,
и условие оптимальности нарушается в клетках (1, 3) и (2, 3): u1+v3>c13, u2+v3>c23.
3.11) Вычисляем оценки клеток, в которых нарушается условие оптимальности (D13=u1+v3-c13=0+5-4=1, D23=u2+v3-c23=1+5-5=1).
3.21) Оценки оказались одинаковыми: выбираем клетку с наименее дешёвыми перевозками.
3.31) Строим помеченный цикл из выбранной клетки (1, 3):
bj ai | |||||
50 - | + | ||||
+ | - | ||||
3.41) Перемещаем по циклу 50 единиц груза. Получили очередной опорный план:
bj ai | ||||
22) Проверим план на оптимальность. Для этого
2.12) Найдём потенциалы. Присваиваем u1=0 и по заполненной клетке (1, 3) первой строки определяем v3=c13-u1=4-0=3. По заполненной клетке (3, 3) третьего столбца определяем u3=c33-v3=6-4=2. Далее, по заполненным клеткам (3, 2) и (3, 4) третьей строки определяем v2=c32-u3=4-2=2 и v4=c34-u3=5-2=3. Теперь по заполненной клетке (2, 4) второй строки определяем u2=c24-v4=3-3=0. Наконец, по заполненной клетке (2, 1) второй строки определяем v1=c21-u2=3-0=3:
bj ai | |||||
2.22 - 3.32) Проверяем условие оптимальности для пустых клеток:
u1+v1=0+3<6=c11, u1+v2=0+2<3=c13, u1+v4=0+3<4=c14,
u2+v2=0+2<4=c22, u2+v3=0+4<5=c23, u3+v1=2+3>4=c33,
и условие оптимальности нарушается в единственно клетке (3, 1), из которой строим помеченный цикл.
bj ai | |||||
40 - | + | ||||
+ | - | ||||
3.42) Осуществляем сдвиг по циклу:
bj ai | ||||
+ | ||||
23) Проверим план на оптимальность.
2.13) Найдём потенциалы:
bj ai | |||||
2.23) Проверив условие оптимальности, убеждаемся, это условие выполнено, и задача решена.
5) Вычисляем стоимость перевозок:
50×4+10×3+50×3+30×4+60×4=740.
Ответ: Матрица перевозок: . Стоимость перевозок Fmin=740 у.е.