Курс: 4(специалитет)

Методические указания к выполнению лабораторной работы №1.

Тема: Транспортная задача. Метод потенциалов.

Дисциплина: Теория принятия решений.

Курс: 4(специалитет).

Задача:

У поставщиков A1, A2, A3, находится соответственно 70, 80, 110 единиц однотипной продукции, которая должна быть доставлена потребителям B1, B2, B3, B4 в количестве 50, 70, 60, 80 единиц соответственно.

Стоимость доставки единицы продукции от поставщика A1 к указанным потребителям равна 14, 16, 13, 7 ден.ед.

Стоимость доставки единицы продукции от поставщика A2 к указанным потребителям равна 15, 11, 9, 8 ден.ед.

Стоимость доставки единицы продукции от поставщика A3 к указанным потребителям равна 12, 17, 18, 16 ден.ед.

Требуется найти оптимальное решение доставки продукции от поставщиков к потребителям, минимизирующие стоимость доставки.

Решение:

Что мы будем делать?
Найдем начальное решение методом северо-западного угла. Если начальное решение окажется оптимальным, то задача решена. Если начальное решение окажется не оптимальным, используя метод потенциалов, будем последовательно получать решение за решением, причем каждое следующее, как минимум, не хуже предыдущего. И так, до тех пор, пока не получим оптимальное решение.

Для разрешимости транспортной задачи необходимо, чтобы суммарные запасы продукции у поставщиков равнялись суммарной потребности потребителей. Проверим это условие.

В нашем случае, потребность всех потребителей - 260 единиц продукции равна запасам всех поставщиков.
1)    
Согласно условию задачи составим таблицу. (тарифы cij располагаются в нижнем правом углу ячейки)
  Поставщик Потребитель Запас
  B 1 B 2 B 3 B 4
  A 1
-
   
-
   
-
   
-
   
 
  A 2
-
   
-
   
-
   
-
   
 
  A 3
-
   
-
   
-
   
-
   
 
  Потребность          
                 

2)

Рассмотрим маршрут доставки от поставщика A1 к потребителю B1 (ячейка A1B1).

Запасы поставщика A1 составляют 70 единиц продукции. Потребность потребителя B1 составляет 50 единиц продукции. (см. таблицу пункта 1)

От поставщика A1 к потребителю B1 будем доставлять min = { 70, 50 } = 50 единиц продукции.

Разместим в ячейку A1B1 значение равное 50

Мы полностью удовлетворили потребность потребителя B1. Вычеркиваем столбец 1 таблицы, т.е исключаем его из дальнейшего рассмотрения.

Поставщик Потребитель Запас
B 1 B 2 B 3 B 4
A 1
 
   
-
   
-
   
-
   
 
A 2
-
   
-
   
-
   
-
   
 
A 3
-
   
-
   
-
   
-
   
 
Потребность          
3)    
Рассмотрим маршрут доставки от поставщика A1 к потребителю B2 (ячейка A1B2).
Запасы поставщика A1 составляют 20 единиц продукции. Потребность потребителя B2 составляет 70 единиц продукции. (см. таблицу пункта 2)
От поставщика A1 к потребителю B2 будем доставлять min = { 20, 70 } = 20 единиц продукции.
Разместим в ячейку A1B2 значение равное 20
Мы полностью израсходoвали запасы поставщика A1. Вычеркиваем строку 1 таблицы, т.е исключаем ее из дальнейшего рассмотрения.
  Поставщик Потребитель Запас  
  B 1 B 2 B 3 B 4  
  A 1
 
   
 
   
-
   
-
   
   
  A 2
-
   
-
   
-
   
-
   
   
  A 3
-
   
-
   
-
   
-
   
   
  Потребность            
                 
4)    
Рассмотрим маршрут доставки от поставщика A2 к потребителю B2 (ячейка A2B2).
Запасы поставщика A2 составляют 80 единиц продукции. Потребность потребителя B2 составляет 50 единиц продукции. (см. таблицу пункта 3)
От поставщика A2 к потребителю B2 будем доставлять min = { 80, 50 } = 50 единиц продукции.
Разместим в ячейку A2B2 значение равное 50
Мы полностью удовлетворили потребность потребителя B2. Вычеркиваем столбец 2 таблицы, т.е исключаем его из дальнейшего рассмотрения.
Поставщик Потребитель Запас
B 1 B 2 B 3 B 4
A 1
 
   
 
   
-
   
-
   
 
A 2
-
   
 
   
-
   
-
   
 
A 3
-
   
-
   
-
   
-
   
 
Потребность          
5)    
Рассмотрим маршрут доставки от поставщика A2 к потребителю B3 (ячейка A2B3).
Запасы поставщика A2 составляют 30 единиц продукции. Потребность потребителя B3 составляет 60 единиц продукции. (см. таблицу пункта 4)
От поставщика A2 к потребителю B3 будем доставлять min = { 30, 60 } = 30 единиц продукции.
Разместим в ячейку A2B3 значение равное 30
Мы полностью израсходoвали запасы поставщика A2. Вычеркиваем строку 2 таблицы, т.е исключаем ее из дальнейшего рассмотрения.
  Поставщик Потребитель Запас  
  B 1 B 2 B 3 B 4  
  A 1
 
   
 
   
-
   
-
   
   
  A 2
-
   
 
   
 
   
-
   
   
  A 3
-
   
-
   
-
   
-
   
   
  Потребность            
                 
6)    
Рассмотрим маршрут доставки от поставщика A3 к потребителю B3 (ячейка A3B3).
Запасы поставщика A3 составляют 110 единиц продукции. Потребность потребителя B3 составляет 30 единиц продукции. (см. таблицу пункта 5)
От поставщика A3 к потребителю B3 будем доставлять min = { 110, 30 } = 30 единиц продукции.
Разместим в ячейку A3B3 значение равное 30
Мы полностью удовлетворили потребность потребителя B3. Вычеркиваем столбец 3 таблицы, т.е исключаем его из дальнейшего рассмотрения.
Поставщик Потребитель Запас
B 1 B 2 B 3 B 4
A 1
 
   
 
   
-
   
-
   
 
A 2
-
   
 
   
 
   
-
   
 
A 3
-
   
-
   
 
   
-
   
 
Потребность          
7)    
Рассмотрим маршрут доставки от поставщика A3 к потребителю B4 (ячейка A3B4).
Запасы поставщика A3 составляют 80 единиц продукции. Потребность потребителя B4 составляет 80 единиц продукции. (см. таблицу пункта 6)
От поставщика A3 к потребителю B4 будем доставлять 80 единиц продукции.
Разместим в ячейку A3B4 значение равное 80
Мы полностью израсходoвали запасы поставщика A3. Вычеркиваем строку 3 таблицы, т.е исключаем ее из дальнейшего рассмотрения.
  Поставщик Потребитель Запас  
  B 1 B 2 B 3 B 4  
  A 1
 
   
 
   
-
   
-
   
   
  A 2
-
   
 
   
 
   
-
   
   
  A 3
-
   
-
   
 
   
 
   
   
  Потребность            
                 
Заполненные нами ячейки будем называть базисными, остальные - свободными.

Для решения задачи методом потенциалов, количество базисных ячеек (задействованных маршрутов) должно равняться m + n - 1, где m - количество строк в таблице, n - количество столбцов в таблице.

Количество базисных ячеек (задействованных маршрутов) равно 6, что и требовалось.

Мы нашли начальное решение, т.е израсходовали все запасы поставщиков и удовлетворили все потребности потребителей.

S0 = 14 * 50 + 16 * 20 + 11 * 50 + 9 * 30 + 18 * 30 + 16 * 80 = 3660 ден. ед.
Общие затраты на доставку всей продукции, для начального решения, составляют 3660 ден. ед..
Дальнейшие наши действия будут состоять из шагов, каждый из которых состоит в следующем:
 Находим потенциалы поставщиков и потребителей для имеющегося решения.
 Находим оценки свободных ячеек. Если все оценки окажутся неотрицательными - задача решена.
 Выбираем свободную ячейку (с отрицательной оценкой), выбор которой, позволяет максимально снизить общую стоимость доставки всей продукции на данном шаге решения.
 Находим новое решение, как минимум, не хуже предыдущего.
 Вычисляем общую стоимость доставки всей продукции для нового решения.

Шаг 1

ПРОИЗВЕДЕМ ОЦЕНКУ ПОЛУЧЕННОГО РЕШЕНИЯ.

Каждому поставщику Ai ставим в соответствие некоторое число - ui, называемое потенциалом поставщика.
Каждому потребителю Bj ставим в соответствие некоторое число - vj, называемое потенциалом потребителя.
Для базисной ячеки (задействованного маршрута), сумма потенциалов поставщика и потребителя должна быть равна тарифу данного маршрута.
(ui + vj = cij, где cij - тариф клетки AiBj)
Поскольку, число базисных клеток - 6, а общее количество потенциалов равно 7, то для однозначного определения потенциалов, значение одного из них можно выбрать произвольно.

Примем v3 = 0.

v3 + u2 = c23

v3 + u2 = 9

u2 = 9 - 0 = 9

v3 + u3 = c33

v3 + u3 = 18

u3 = 18 - 0 = 18

v4 + u3 = c34

v4 + u3 = 16

v4 = 16 - 18 = -2

v2 + u2 = c22

v2 + u2 = 11

v2 = 11 - 9 = 2

v2 + u1 = c12

v2 + u1 = 16

u1 = 16 - 2 = 14

v1 + u1 = c11

v1 + u1 = 14

v1 = 14 - 14 = 0

Найдем оценки свободных ячеек следующим образом (в таблице они располагаются в нижнем левом углу ячейки):

13 = c13 - (u1 + v3) = 13 - (14 + 0) = -1

14 = c14 - (u1 + v4) = 7 - (14 + (-2)) = -5

21 = c21 - (u2 + v1) = 15 - (9 + 0) = 6

24 = c24 - (u2 + v4) = 8 - (9 + (-2)) = 1

31 = c31 - (u3 + v1) = 12 - (18 + 0) = -6

32 = c32 - (u3 + v2) = 17 - (18 + 2) = -3

Среди оценок свободных ячеек есть отрицательные, следовательно решение не является оптимальным.

Из свободных ячеек (незадействованных маршрутов), имеющих отрицательные оценки, остановим свой выбор на ячейке A3B1 ( 31 =-6).

Построим цикл для выбранной ячейки A3B1:
Поставьте курсор мыши в выбранную свободную ячейку A3B1. Используя горизонтальные и вертикальные перемещения курсора, соедините непрерывной линией базисные ячейки так, чтобы вернуться в исходную ячейку A3B1. Базисные ячейки, расположенные в вершинах построенной ломаной линии, образуют цикл для выбранной нами ячейки. Он единственный. Направление обхода не имеет значения.
Ячейки образующие цикл для свободной ячейки A3B1:
A3B1, A3B3, A2B3, A2B2, A1B2, A1B1
Пусть ячейка A3B1, для которой мы строили цикл, имеет порядковый номер один.
Поставщик Потребитель Запас
B 1 B 2 B 3 B 4
A 1
 
   
 
   
-
   
-
   
 
A 2
-
   
 
   
 
   
-
   
 
A 3
-
-6  
-
   
 
   
 
   
 
Потребность          

Среди ячеек цикла A3B3, A2B2, A1B1, номера которых четные, найдем ячейку, обладающую наименьшим значением.

min = { 30, 50, 50 } = 30

В данном случае, это ячейка A3B3.

Другими словами, из маршрутов доставки продукции, номера которых нечетные в данном цикле, выберем маршрут от поставщика A3 к потребителю B3, по которому доставляется меньше всего (30) единиц продукции. Данный маршрут мы исключим из схемы доставки продукции.

Поставщик Потребитель Запас
B 1 B 2 B 3 B 4
A 1
 
   
 
   
-
   
-
   
 
A 2
-
   
 
   
 
   
-
   
 
A 3
-
-6  
-
   
 
   
 
   
 
Потребность          
От ячеек цикла с четными номерами отнимает 30. К ячейкам с нечетными номерами прибавляем 30.
Что мы делаем?
Мы вводим новый маршрут доставки продукции от поставщика A3 к потребителю B1. По данному маршруту доставим 30 единиц продукции, по цене доставки 12 за единицу продукции. Общие затраты увеличатся на 12 * 30 ден. ед.
По маршруту от поставщика A3 к потребителю B3 мы полностью перестаем доставлять продукцию. Общие затраты уменьшатся на 18 * 30 ден. ед.
От поставщика A2 к потребителю B3 дополнительно поставим 30 единиц продукции, по цене доставки 9 за единицу продукции. Общие затраты увеличатся на 9 * 30 ден. ед.
Сократим поставку от поставщика A2 к потребителю B2 на 30 единиц продукции, по цене доставки 11 за единицу продукции. Общие затраты уменьшатся на 11 * 30 ден. ед.
От поставщика A1 к потребителю B2 дополнительно поставим 30 единиц продукции, по цене доставки 16 за единицу продукции. Общие затраты увеличатся на 16 * 30 ден. ед.
Сократим поставку от поставщика A1 к потребителю B1 на 30 единиц продукции, по цене доставки 14 за единицу продукции. Общие затраты уменьшатся на 14 * 30 ден. ед.
Данные преобразования не изменят баланс между поставщиками и потребителями. Все поставщики израсходуют все свои запасы, а все потребители получат необходимое им количество продукции.
Поставщик Потребитель Запас
B 1 B 2 B 3 B 4
A 1
50 - 30
   
20 + 30
   
-
   
-
   
 
A 2
-
   
50 - 30
   
30 + 30
   
-
   
 
A 3
+ 30
-6  
-
   
30 - 30
   
 
   
 
Потребность          
Что в итоге?
Общие расходы на доставку продукции от поставщиков к потребителям изменятся на
12 * 30 - 18 * 30 + 9 * 30 - 11 * 30 + 16 * 30 - 14 * 30 = (12 - 18 + 9 - 11 + 16 - 14) * 30 = -6 * 30 ден. ед.
Выражение, стоящее в скобках, равно оценке свободной ячейки (незадействованного маршрута), для которой мы строили цикл.
ГЛАВНОЕ: В тот момент, когда мы нашли ячейку с наименьшим значением (среди ячеек, номера которых четные в цикле), мы уже могли сказать, что общие затраты изменятся на 31 * 30 = -6 * 30 = -180 ден. ед.

Общие затраты на доставку всей продукции, для данного решения, составляют S0 = 3660 + (- 180) = 3480 ден. ед..

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

Воспользовавшись таблицей, в которой мы находили оценки свободных ячеек, вы можете убедиться, что в случае выбора:
ячейки A1B3, общая стоимость доставки всей продукции изменилась бы на 13 * 20 = -1 * 20 = -20 ден. ед.
ячейки A1B4, общая стоимость доставки всей продукции изменилась бы на 14 * 20 = -5 * 20 = -100 ден. ед.
ячейки A3B2, общая стоимость доставки всей продукции изменилась бы на 32 * 30 = -3 * 30 = -90 ден. ед.
Ячейка A3B3 выйдет из базиса, мы перестали доставлять продукцию от поставщика A3 к потребителю B3
Ячейка A3B1 станет базисной, мы ввели новый маршрут доставки продукции от поставщика A3 к потребителю B1.
Поставщик Потребитель Запас
B 1 B 2 B 3 B 4
A 1
 
   
 
   
-
   
-
   
 
A 2
-
   
 
   
 
   
-
   
 
A 3
 
   
-
   
-
   
 
   
 
Потребность          

Шаг 2

ПРОИЗВЕДЕМ ОЦЕНКУ ПОЛУЧЕННОГО РЕШЕНИЯ.
Каждому поставщику Ai ставим в соответствие некоторое число - ui, называемое потенциалом поставщика. Каждому потребителю Bj ставим в соответствие некоторое число - vj, называемое потенциалом потребителя. Для базисной ячеки (задействованного маршрута), сумма потенциалов поставщика и потребителя должна быть равна тарифу данного маршрута. (ui + vj = cij, где cij - тариф клетки AiBj) Поскольку, число базисных клеток - 6, а общее количество потенциалов равно 7, то для однозначного определения потенциалов, значение одного из них можно выбрать произвольно.
Примем v2 = 0.
v2 + u1 = c12 v2 + u1 = 16 u1 = 16 - 0 = 16
v2 + u2 = c22 v2 + u2 = 11 u2 = 11 - 0 = 11
v3 + u2 = c23 v3 + u2 = 9 v3 = 9 - 11 = -2
v1 + u1 = c11 v1 + u1 = 14 v1 = 14 - 16 = -2
v1 + u3 = c31 v1 + u3 = 12 u3 = 12 - (-2) = 14
v4 + u3 = c34 v4 + u3 = 16 v4 = 16 - 14 = 2
Поставщик Потребитель U j
B 1 B 2 B 3 B 4
A 1
 
   
 
   
-
   
-
   
u 1 = 16
A 2
-
   
 
   
 
   
-
   
u 2 = 11
A 3
 
   
-
   
-
   
 
   
u 3 = 14
V i v 1 = -2 v 2 = 0 v 3 = -2 v 4 = 2  
Найдем оценки свободных ячеек следующим образом (в таблице они располагаются в нижнем левом углу ячейки):
13 = c13 - (u1 + v3) = 13 - (16 + (-2)) = -1
14 = c14 - (u1 + v4) = 7 - (16 + 2) = -11
21 = c21 - (u2 + v1) = 15 - (11 + (-2)) = 6

24 = c24 - (u2 + v4) = 8 - (11 + 2) = -5

32 = c32 - (u3 + v2) = 17 - (14 + 0) = 3
33 = c33 - (u3 + v3) = 18 - (14 + (-2)) = 6
Поставщик Потребитель U j
B 1 B 2 B 3 B 4
A 1
 
   
 
   
-
-1  
-
-11  
u 1 = 16
A 2
-
   
 
   
 
   
-
-5  
u 2 = 11
A 3
 
   
-
   
-
   
 
   
u 3 = 14
V i v 1 = -2 v 2 = 0 v 3 = -2 v 4 = 2  
     
Среди оценок свободных ячеек есть отрицательные, следовательно решение не является оптимальным.
Из свободных ячеек (незадействованных маршрутов), имеющих отрицательные оценки, остановим свой выбор на ячейке A1B4 ( 14 =-11).
Построим цикл для выбранной ячейки A1B4:
Поставьте курсор мыши в выбранную свободную ячейку A1B4. Используя горизонтальные и вертикальные перемещения курсора, соедините непрерывной линией базисные ячейки так, чтобы вернуться в исходную ячейку A1B4. Базисные ячейки, расположенные в вершинах построенной ломаной линии, образуют цикл для выбранной нами ячейки. Он единственный. Направление обхода не имеет значения.
Ячейки образующие цикл для свободной ячейки A1B4:
A1B4, A1B1, A3B1, A3B4
Пусть ячейка A1B4, для которой мы строили цикл, имеет порядковый номер один.
Поставщик Потребитель Запас
B 1 B 2 B 3 B 4
A 1
 
   
 
   
-
   
-
-11  
 
A 2
-
   
 
   
 
   
-
   
 
A 3
 
   
-
   
-
   
 
   
 
Потребность          
Среди ячеек цикла A1B1, A3B4, номера которых четные, найдем ячейку, обладающую найменьшим значением.
min = { 20, 80 } = 20
В данном случае, это ячейка A1B1.
Другими словами, из маршрутов доставки продукции, номера которых нечетные в данном цикле, выберем маршрут от поставщика A1 к потребителю B1, по которому доставляется меньше всего (20) единиц продукции. Данный маршрут мы исключим из схемы доставки продукции.
Поставщик Потребитель Запас
B 1 B 2 B 3 B 4
A 1
 
   
 
   
-
   
-
-11  
 
A 2
-
   
 
   
 
   
-
   
 
A 3
 
   
-
   
-
   
 
   
 
Потребность          
От ячеек цикла с четными номерами отнимает 20. К ячейкам с нечетными номерами прибавляем 20.
Что мы делаем?
Мы вводим новый маршрут доставки продукции от поставщика A1 к потребителю B4. По данному маршруту доставим 20 единиц продукции, по цене доставки 7 за единицу продукции. Общие затраты увеличатся на 7 * 20 ден. ед.
По маршруту от поставщика A1 к потребителю B1 мы полностью перестаем доставлять продукцию. Общие затраты уменьшатся на 14 * 20 ден. ед.
От поставщика A3 к потребителю B1 дополнительно поставим 20 единиц продукции, по цене доставки 12 за единицу продукции. Общие затраты увеличатся на 12 * 20 ден. ед.
Сократим поставку от поставщика A3 к потребителю B4 на 20 единиц продукции, по цене доставки 16 за единицу продукции. Общие затраты уменьшатся на 16 * 20 ден. ед.
Данные преобразования не изменят баланс между поставщиками и потребителями. Все поставщики израсходуют все свои запасы, а все потребители получат необходимое им количество продукции.
Поставщик Потребитель Запас
B 1 B 2 B 3 B 4
A 1
20 - 20
   
 
   
-
   
+ 20
-11  
 
A 2
-
   
 
   
 
   
-
   
 
A 3
30 + 20
   
-
   
-
   
80 - 20
   
 
Потребность          
Что в итоге?
Общие расходы на доставку продукции от поставщиков к потребителям изменятся на
7 * 20 - 14 * 20 + 12 * 20 - 16 * 20 = (7 - 14 + 12 - 16) * 20 = -11 * 20 ден. ед.
Выражение, стоящее в скобках, равно оценке свободной ячейки (незадействованного маршрута), для которой мы строили цикл.
ГЛАВНОЕ: В тот момент, когда мы нашли ячейку с наименьшим значением (среди ячеек, номера которых четные в цикле), мы уже могли сказать, что общие затраты изменятся на 14 * 20 = -11 * 20 = -220 ден. ед.
Общие затраты на доставку всей продукции, для данного решения, составляют S0 = 3480 + (- 220) = 3260 ден. ед..
Если оценки всех свободных ячеек (незадействованных маршрутов) неотрицательные, то снизить общую стоимость доставки всей продукции невозможно.
Воспользовавшись таблицей, в которой мы находили оценки свободных ячеек, вы можете убедиться, что в случае выбора:
ячейки A1B3, общая стоимость доставки всей продукции изменилась бы на 13 * 50 = -1 * 50 = -50 ден. ед.
ячейки A2B4, общая стоимость доставки всей продукции изменилась бы на 24 * 20 = -5 * 20 = -100 ден. ед.
Ячейка A1B1 выйдет из базиса, мы перестали доставлять продукцию от поставщика A1 к потребителю B1
Ячейка A1B4 станет базисной, мы ввели новый маршрут доставки продукции от поставщика A1 к потребителю B4.
Поставщик Потребитель Запас
B 1 B 2 B 3 B 4
A 1
-
   
 
   
-
   
 
   
 
A 2
-
   
 
   
 
   
-
   
 
A 3
 
   
-
   
-
   
 
   
 
Потребность          

Шаг 3

ПРОИЗВЕДЕМ ОЦЕНКУ ПОЛУЧЕННОГО РЕШЕНИЯ.
Каждому поставщику Ai ставим в соответствие некоторое число - ui, называемое потенциалом поставщика. Каждому потребителю Bj ставим в соответствие некоторое число - vj, называемое потенциалом потребителя. Для базисной ячеки (задействованного маршрута), сумма потенциалов поставщика и потребителя должна быть равна тарифу данного маршрута. (ui + vj = cij, где cij - тариф клетки AiBj) Поскольку, число базисных клеток - 6, а общее количество потенциалов равно 7, то для однозначного определения потенциалов, значение одного из них можно выбрать произвольно.
Примем v4 = 0.
v4 + u1 = c14 v4 + u1 = 7 u1 = 7 - 0 = 7
v4 + u3 = c34 v4 + u3 = 16 u3 = 16 - 0 = 16
v2 + u1 = c12 v2 + u1 = 16 v2 = 16 - 7 = 9
v2 + u2 = c22 v2 + u2 = 11 u2 = 11 - 9 = 2
v3 + u2 = c23 v3 + u2 = 9 v3 = 9 - 2 = 7
v1 + u3 = c31 v1 + u3 = 12 v1 = 12 - 16 = -4

Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  


Поставщик Потребитель U j
B 1 B 2 B 3 B 4
A 1
-
   
 
   
-
   
 
   
u 1 = 7
A 2
-
   
 
   
 
   
-
   
u 2 = 2
A 3
 
   
-
   
-
   
 
   
u 3 = 16
V i v 1 = -4 v 2 = 9 v 3 = 7

double arrow