Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Задачи ЛП и методы их решения

.pdf
Скачиваний:
155
Добавлен:
29.03.2016
Размер:
7.64 Mб
Скачать

 

49

 

 

 

 

 

Полученный план перевозок имеет уже 5 заполненных клеток

 

 

 

 

 

Переходим к описанию следующего шага метода потенциалов.

 

 

 

 

 

ШАГ 1. Проверка текущего плана на оптимальность.

 

 

 

 

 

Признаком того, что текущий план перевозок является оптимальным, служит условие

 

(Y1)

ui + v j cij 0

 

 

 

 

 

которое выполняется для

всех клеток таблицы. Неизвестные здесь величины ui и vj

(называемые потенциалами) определяются из условий

 

 

 

 

 

(Y2)

ui + v j = cij

 

 

 

 

 

(для заполненных клеток (i

, j) таблицы).

 

 

 

 

 

Поясним экономический смысл потенциалов. Введем обозначение u'

=

u

i

Тогда

u'

 

i

 

 

 

i

можно трактовать, как цену единицы продукции у поставщика, а v j = ui' + cij (см. (Y2))

как цену единицы продукции у потребителя, которая возросла на цену перевозки. Условие (Y1)

vj ui' + cij

означает невозможность появления “спекулятивной” цены. Само же название “потенциалы” заимствовано из физического закона о том, что работа по перемещению заряда в электростатическом поле равна разности потенциалов в данных точках поля (У нас: “...цена перевозки единицы продукции по коммуникации равна разности цен в конце и в начале пути”)

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

Заполненные клетки Уравнения

 

 

(1, 1 )

 

 

u

+ v

 

= 5

 

 

 

 

 

 

1

1

 

 

 

 

(1, 2 )

 

 

u1 + v2 =10

 

 

 

 

 

 

 

+ v3 =12

 

 

 

(1, 3 )

 

 

u1

 

 

 

( 2 ,3 )

 

 

 

+ v3 = 4

 

 

 

 

 

u2

 

 

 

(3 ,2 )

 

 

u

+ v

2

= 0

 

 

 

 

 

 

3

 

 

 

Положим, например, неизвестное u1

равным 0 (через него можно из первых трех уравнений

определить v1 , v2 и v3 ). Последовательно имеем:

 

 

 

 

 

u1 = 0

 

Из 1-го урав.

v1

= 5

 

 

 

 

 

 

 

Из 2-го урав.

v2

=10

Из 5-го урав.

u3 = 0 10 = −10

 

 

Из 3-го урав.

v3

= 12

Из 4-го урав.

u2 = 4 12 = −8

50

Но лучше определять u и v непосредственно в таблице, используя для их хранения клетки, где ранее записывались запасы и потребности. Предварительно перепишем условия (Y1) в двух эквивалентных формах записи

(**)ui = cij v j

(***)v j = cij ui

Их можно сформулировать в виде единого правила

НЕИЗВЕСТНЫЙ ПОТЕНЦИАЛ НАХОДИТСЯ ВЫЧИТАНИЕМ ИЗВЕСТНОГО ИЗ ЦЕНЫ ПЕРЕВОЗКИ В ЗАПОЛНЕННОЙ КЛЕТКЕ

u1

u2

u3

.

Применим это правило для определения u и v в нашем примере.

 

 

 

 

 

 

 

 

 

 

5

10

12

В качестве потенциала, который полагается равным

0

60

50

10

некоторому числу (у нас нулю) выбираем тот,

 

 

 

 

 

 

 

 

который соответствует

строке

или

столбцу с

 

-

-

70

 

максимальным

числом

заполненных

клеток (это

 

 

 

 

позволит сразу определить максимальное число

 

 

 

 

 

-

50

 

неизвестных потенциалов через

него). В данном

 

 

случае таким потенциалом является u1 (в первой

 

 

 

 

 

 

 

 

 

5

10

12

строке все клетки заполнены). По правилу в форме

 

(***) определяем v1 = c11

u1 = 5 0 = 5,

 

 

 

 

 

 

 

v1

v2

v3

 

 

v2 =10

0 =10 , v3 =12 0 =12

 

 

 

 

 

 

Теперь переходим к найденным потенциалам (v1 ,v2 ,v3 ) и ищем в соответствующих им

столбцах (1,2,3) заполненные клетки, которым отвечают неизвестные потенциалы . В первом столбце таких клеток нет. Во втором столбце - это клетка (3,2). Применяя правило в виде (**), находим

u3 = 0 10 = −10

 

 

5

10

12

 

 

 

 

 

 

 

 

u1

0

60

50

10

В третьем столбце находим заполненную клетку

 

 

 

 

 

u2

 

 

 

 

(2,3),

которой

соответствует

неизвестный

пока

 

-

-

70

потенциал

u2 .

Определяем

u2

через

v3 и

c23

 

 

 

0

 

u2 = 412 = −8 и тем самым завершаем определение

u3

 

 

 

системы потенциалов.

 

 

 

 

-10

-

50

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

5

10

12

 

 

 

 

 

 

 

 

 

 

v1

v2

v3

 

 

 

 

 

 

 

 

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

51

является оптимальным и может быть улучшено. Проверим на оптимальность имеющееся решение.

Клетки Условия оптимальности

( 2 , 1 )

u

 

+ v

c

 

= −8 + 5 8 = −11< 0

 

 

2

 

1

 

21

 

( 2 , 2 )

u

2

+ v2 c22 = −8 + 10 6 = −4 < 0

 

 

 

+ v1 c31 = −10 + 5 0 = −5 < 0

( 3 , 1 )

u3

( 3 ,3 )

u

 

+ v

3

c

33

= −10 + 12 0 = 2 > 0

 

3

 

 

 

Условие оптимальности нарушено в клетке (3,3). Следовательно, имеющийся план перевозок можно улучшить.

Дадим описание заключительного шага алгоритма метода потенциалов.

ШАГ 2. Улучшение плана перевозок.

Улучшение плана происходит путем назначения перевозки θ > 0 в ту клетку (i , j) таблицы, в которой нарушилось условие оптимальности. Но назначение ненулевой перевозки нарушает условия баланса вывоза продукции от поставщика i (вывозит весь запас и еще плюсθ > 0 ) и условия баланса привоза продукции к потребителю j (получает все что можно и еще плюс θ > 0). Условия баланса восстанавливают путем уменьшения вывоза от i-поставщика к какому-то другому потребителю j (уменьшают на θ перевозку в какой-то заполненной клетке (i , j) строки i). При этом нарушается баланс привоза продукции к потребителю j (получает на θ меньше, чем ему требуется). Восстанавливают баланс в столбце j, тогда он нарушается в некоторой строке i и т.д. до тех пор, пока цикл перемещения перевозок не замкнется на клетке, в которой нарушалось условие оптимальности. Продемонстрируем эти рассуждения на нашем примере.

1

2

3

1

2

3

 

1

 

2

3

120

60

50

10

70

-

 

-

70

50

-

50

+ θ

 

60

100

80

120

60

50

10

70

-

 

-

70

50

-

50

- θ

+ θ

 

 

 

60

100

80

 

1

 

2

3

1. Оптимальность нарушена в клетке (3,3). Назначим в нее перевозку θ > 0 ( +θ означает, увеличение на θ ).

2. Нарушается баланс вывоза от поставщика 3 (вывозит 50+θ , а это больше его запаса!). Уменьшаем на θ перевозку в заполненной клетке строки 3 (в незаполненной уменьшать нельзя, так как это приведет к отрицательной перевозке). Баланс в строке восстановлен.

52

1

120

60

50

10

 

 

 

+ θ

 

2

70

-

-

70

 

3

50

-

50

 

 

 

 

 

 

- θ

+ θ

 

 

60

100

80

 

 

1

2

3

3. Нарушился баланс привоза ко второму потребителю (получает 100- θ ). В заполненной клетке 2-го столбца увеличиваем перевозку на θ (в незаполненной увеличивать нельзя, так как это приведет к увеличению заполненных клеток до числа большего, чем m+n-1). Баланс во втором столбце восстановлен.

1

120

2

70

 

3

50

 

60

 

50 + θ

 

- θ 10

 

4. Нет баланса вывоза от 1-го поставщика (вывоз

 

 

 

 

 

 

 

 

 

 

составляет 100+ θ). Уменьшаем перевозку на θ в

-

 

-

 

70

 

одной из заполненных клеток строки 1, а

 

 

 

именно, в клетке (1,3). (Клетка (1,1) не

 

 

 

 

 

 

подходит, потому что из нее “нет выхода”, т.е. в

 

 

 

 

 

 

-

 

50 - θ

 

+ θ

 

соответствующем ей 1-м столбце нет больше

 

 

 

заполненных клеток). Баланс в 1-ой строке

 

 

 

 

 

 

60

 

100

 

80

 

восстановлен.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1

2

3

+ θ - θ

1

120

60

50

10

2

70

-

-- θ + θ70

 

3

50

-

50

 

 

 

 

 

60

100

80

 

 

1

2

3

Цикл построен

5. Баланс в 3-ем столбце не нарушается, так как мы находимся в том столбце, где имеется клетка (3,1), в которой нарушилось условие оптимальности (перевозка в ней увеличивалась на θ ). Цикл перевозок построен.

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

Необходимо только следить за тем, чтобы из каждой клетки, являющейся “кандидатом” для включения в цикл, “был выход”, т.е. чтобы в направлении выхода из нее (строка или столбец) были еще заполненные клетки, не включенные в цикл. Когда цикл построен, клетки, входящие в него (запомните - это клетки, лежащие в углах ломаной!) помечаются попеременно знаками (+) и (-), начиная со знака (+) в клетке, где нарушалась оптимальность. Знак (+) означает увеличение перевозки на величину θ (пока неизвестную), а знак (-) соответственно уменьшение на такую же величину.

Величину θ перевозки продукции по циклу определяют исходя из следующих двух условий:

53

1.Ни одна перевозка на цикле не может стать отрицательной (а такими могут стать перевозки только в клетках, отмеченных знаком (-)).

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

Вышеприведенные условия позволяют записать правило выбора θ .

θ = min {xij , где (i , j) - клетки цикла, отмеченные знаком (-)}

Одна из клеток (i*, j*), где достигается этот минимум и станет незаполненной. Для нашего примера имеем

θ= min {x32 ,x13 , где (3 ,2),(1 , 3) - отрицательные клетки цикла}= min{50 , 10}=10

а). Если в качестве θ взять величину, большую 10, то перевозка в клетке (1,3) станет отрицательной (10- θ) и нарушится условие 1.

б). Если же взять меньше 10, то нарушится условие 2, так как число заполненных клеток в таблице увеличится и станет равным m+n=6 (так как 10- θ >0 в этом случае!)

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

x'

= x

ij

+ θ ,

(i, j) - клетка цикла со знаком (+)

ij

 

 

 

x'

= x

ij

θ ,

(i, j) - клетка цикла со знаком (-)

ij

 

 

 

x'

= x

ij

,

(i, j) - клетка не принадлежит циклу.

ij

 

 

 

Для нашего примера:

x33 = 0 + 10 =10

x32 = 50 10 = 40

x12 = 50 + 10 = 60

x13 = 10 10 = 0- клетка становится незаполненной,

x11 = 60

x23 = 70

-перевозки не изменяются.

54

Новый план перевозок

1

2

3

 

 

 

 

h Если θ достигается более чем в одной клетке

1

60

60

-

цикла,

то

при

изменении

перевозок

на

цикле

незаполненной клеткой нужно считать только одну

 

 

 

 

 

 

 

 

(например, с большей ценой), а остальные считать

2

-

-

70

заполненными с перевозкой равной нулю

 

 

 

 

 

 

 

 

 

 

 

3

-

40

10

Таким образом, получен новый план перевозок. Его

 

стоимость можно подсчитать как и ранее, умножив

 

 

 

 

 

 

 

 

ненулевые перевозки на цены в их клетках. Однако

 

 

 

 

проще подсчитывать на сколько уменьшилась

 

 

 

 

стоимость предыдущего плана перевозок. Выделим

 

мысленно цикл с изменением перевозок на нем.

 

 

 

 

 

 

Необходимо сосчитать, на сколько увеличилась стоимость в клетках, где перевозки возросли, и на сколько уменьшилась стоимость в клетках, где перевозки уменьшились.

Разность этих величин и даст нам уменьшение стоимости полученного плана перевозок по сравнению с предыдущим. Итак,

10

+10

0

-10

Стоимость увеличивается

12

-10

0

+10

Стоимость уменьшается

1. Увеличение стоимости θ с33 + θ с12 =θ (с33 + с12 ) =10 (0 + 10) =100

2. Уменьшение стоимости θ с32 + θ с13 =θ (с32 + с13 ) =10 (0 + 12) =120

3. Разность θ (с33 + с12 ) θ (с32 + с13 ) = θ ((с33 + с12 ) (с32 + с13 )) = 10 (10 12) = −20

С учетом вышесказанного подсчет уменьшения транспортных расходов при переходе к новому плану можно ввести по формуле

 

 

 

 

 

 

 

 

 

 

 

[

 

Сумма цен в

 

-

 

Сумма цен в

 

]

f =θ

 

клетках цикла со

 

 

клетках цикла со

 

 

 

 

знаком (-)

 

 

 

знаком (+)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Окончательно имеем, что новый план перевозок на 20 единиц дешевле предыдущего. Расходы предыдущего плана составляют

f0 = 1200 ед.

Значит, расходы по новому плану будут равны

f1 = f0 + f =1200 - 20 = 1180 ед.

55

Описанием этого шага завершается описание одной полной итерации метода потенциалов. Новый план далее необходимо проверять на оптимальность и в случае, если он не является оптимальным, проводить дальнейшее его улучшение в соответствии с шагами 1, 2 алгоритма метода потенциалов. Через конечное число шагов на шаге 1 мы получим оптимальный план перевозок.

Закончим рассмотрение нашего примера. Имея новый план, переходим к шагу 1 (проверка на оптимальность)

ШАГ 1

 

 

 

 

 

 

 

 

 

u1

 

5

10

12

Для определения новой

системы

потенциалов

10

60

60

 

положим

u3 = 0

третьей

строке

две

 

 

 

 

 

заполненные клетки). По известному u3

u2

4

-

-

70

находим

v2 = v3 = 0

 

. Далее

по

v2

находим

 

 

 

0

 

 

= 10 0 = 10 , по v

 

 

 

 

 

= 4 0 = 4 , по

u3

 

 

 

u

 

находим u

 

0

-

40

10

1

 

 

3

 

 

 

2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

u1

находим v1 = 5 10 = −5

. Проверяем

условия

 

 

 

 

оптимальности

 

 

 

 

 

 

 

 

 

 

-5

0

0

 

 

ui + v j

cij 0

 

 

 

 

 

 

 

v1

v2

v3

(1 , 3) 10 + 0 -12 < 0

 

выполняется

 

 

 

 

 

 

 

 

 

 

 

 

(2 , 1) 4 + (-5) -8 < 0

 

выполняется

 

 

 

 

 

 

 

(2 , 2) 4 + 0 -6 < 0

 

выполняется

 

 

 

 

 

 

 

(3 , 1) 0 + (-5) -0 < 0

 

выполняется

 

 

 

 

 

 

 

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

Стоимость

 

 

перевозок

 

 

1180 ед.

 

 

 

 

60

60

 

Недопоставка

120

 

 

40 ед.

 

 

 

60

100

 

 

70

70

80

 

 

 

Это

 

 

оптимальный план

 

Недопоставка

 

10 ед.

перевозок

 

 

 

Читателю предлагается самостоятельно рассмотреть этот же пример, взяв в качестве начального базисного решения план перевозок, найденный по способу северо-западного угла (СЗУ).

56

4.3. Пример решения классической транспортной задачи

Замечание. Это пример решения транспортной задачи одним студентом – заочником. На мой взгляд, решение излишне подробное. Достаточно было изображать по одной таблице с потенциалами на каждом шаге. А.А.Холопов

Исходные данные (запасы, потребности и цены)

 

 

Потребитель

 

 

 

 

 

Поставщик

 

 

 

 

 

Запасы

 

В1

В2

В3

В4

 

 

 

 

 

 

 

A1

22

14

16

28

 

350

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

A2

19

 

26

 

 

200

 

 

17

36

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

A3

37

 

31

 

 

300

 

 

30

39

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Потребность 170 140 200 195

Транспортная задача является открытой, так как запас груза больше потребностей на 145 единиц. Приведем задачу к закрытому типу - введем фиктивного потребителя B5.

Находим начальный базисный план (он содержит 3+5 –1=7 заполненных клеток). План найден методом минимальной стоимости.

 

 

Начальный план

 

 

 

 

 

Потребитель

 

 

 

Поставщик

В1

В2

В3

В4

В5

Запасы

 

 

A1

22

14

16

28

0

350

 

140

65

 

145

 

 

 

 

A2

19

17

26

36

0

200

170

 

30

 

 

 

 

 

 

 

A3

37

30

31

39

0

300

 

 

105

195

 

 

 

 

 

 

Потребность

170

140

200

195

145

 

Стоимость перевозок = 14*146+…+ 39*195 = 17870.

 

 

Решаем задачу методом потенциалов.

1-й этап.

Полагая потенциал U1 = 0, определяем остальные потенциалы из соотношения

57

U j + Vi = Ci, j (i = 1..m, j = 1..n),

просматривая все занятые клетки. Потенциалы:

U1 = 0,

V2 = C1,2 U1 = 14,

V3 = C1,3 U1 = 16,

V5 = C1,5 U1 = 0,

U2 = C3,2 V3 = 10,

U3 = C3,3 V3 = 15,

V1 = C2,1 U 2 = 9,

V4 = C3,4 U3 = 24.

Определяем значения оценок, для всех свободных клеток:

 

Si, j = Ci, j (V j Ui ).

 

 

 

 

Значения оценок

 

 

 

В1

В2

В3

В4

В5

A1

13

 

 

4

 

 

A2

 

 

-7

2

-10

 

 

 

 

 

 

 

 

A3

 

13

1

 

-15

 

 

 

 

 

 

 

Выделенные оценки не являются оптимальными, а именно:

S2,2

= C2,2

(V2

U 2 )= −7,

S2,5

= C2,5

(V5

U 2 )= −10,

S3,5

= C3,5

(V5

U3 )= −15.

Выберем из этих двух оценку S3,5

= −15

, как максимальную по модулю.

Строим для этой клетки цикл, помечая клетки цикла знаками "плюс" и "минус".

58

 

 

План грузоперевозок

 

 

 

 

 

 

Потребитель

 

 

 

Потенциалы

Поставщик

В1

В2

 

В3

 

В4

В5

 

Ui

 

 

 

 

 

A1

 

22

14

+

16

28

0

0

 

140

 

65

 

 

145

 

 

 

 

 

 

 

 

A2

 

19

17

 

26

36

 

0

10

170

 

 

30

 

 

 

 

 

 

 

 

 

 

 

 

A3

 

37

30

31

39

+

0

15

 

 

 

105

 

195

 

 

 

 

 

 

 

 

 

 

Потенциалы

9

14

 

16

 

24

0

 

 

Vj

 

 

 

 

 

 

 

 

 

 

 

 

 

Перемещаем по циклу груз величиной в 105 единиц. В результате перемещения по циклу

получим новый план.

 

 

 

 

 

 

 

 

 

Новый план грузоперевозок

 

 

Потребитель

 

 

 

Поставщик

В1

В2

В3

В4

В5

Запасы

 

 

A1

22

14

16

28

0

350

 

140

170

 

40

 

 

 

 

A2

19

17

26

36

0

200

170

 

30

 

 

 

 

 

 

 

A3

37

30

31

39

0

300

 

 

 

195

105

 

 

 

 

 

Потребность

170

140

200

195

145

 

Стоимость перевозок при этом = 16295.

Значение стоимости перевозок изменилось на 1575 единиц, по сравнению с предыдущей стоимостью.

2 этап.

Полагая потенциал U1 = 0, определяем остальные потенциалы из соотношения

U j + Vi = Ci, j (i = 1..m, j = 1..n),

просматривая все занятые клетки.