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

Задачи математического программирования

.pdf
Скачиваний:
0
Добавлен:
24.11.2025
Размер:
2.05 Mб
Скачать

Улучшение плана осуществляется за счет увеличения компоненты x32 , добавление ее к базисным компонентам порождает един-

ственный цикл x32 , x22 , x24 , x14 , x13 , x33 . Определяем

δ1 = min(x22 , x14 , x33 ) =1.

Увеличиваем нечетные компоненты цикла (помеченные знаком «+») и уменьшаем четные (помеченные знаком «») на величину δ1 =1 и получаем новый опорный план (пустые клетки соответ-

ствуют нулевым компонентам плана).

 

 

 

 

 

 

 

 

 

 

 

 

 

 

4

0

 

 

1(+) 1()

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

()

(+)

 

 

X

 

2

X =

= 0

 

0 1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0(+)

 

 

3() 0

 

 

 

 

 

0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Итерация 2. Множество базисных компонент

B(X ) ={(1,1), (1, 3), (2, 2), (2, 4), (3, 2), (3, 3)},

О(Х ) – все остальные компоненты плана.

Определяем потенциалы для полученного опорного плана:

u1 + u1 =1 ; u1 + u3 = 2 ; u2 + u2 =1 ; u2 + u4 =1 ; u3 + u2 = 2 ; u3 + u3 =1 .

Полагая

u1 = 0 ,

последовательно

вычисляем

υ1 =1, υ3 = 2 ,

υ3 = −1,

υ2 =3 ,

u2 = −2 , υ4 =3 .

Вычисляем

величины

ij , (i, j) O(X ) :

 

 

 

20

12 = 4 0 3 =1; 14 =5 3 0 = 2 ;

21 = 2 (2) 1 =3;

23 = 4 (2) 2 = 4 ; 31 =3 (1) 1 =3 ;

34 =3 (1) 3 =1.

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

Рассмотрим теперь общую транспортную задачу с ограниченными пропускными способностями в сетевой постановке.

На плоскости отмечаются (кружками) источники (с номерами 1, 2, …, m) и стоки (с номерами m +1, m + 2, m + n ), а также отмечают-

ся фиктивный источник и сток с номерами n + m +1 и n + m + 2 соответственно (рисунок).

1 m+1

m+n+1

i

m+j

m+n+2

 

 

m

m+n

Если принять пропускную способность коммуникации m + n +1, i , равной ai , коммуникации m + j, m + n + 2 , равной bj ,

а стоимости переноса по ним единицы продукта, равными 0, то задача может быть сформулирована следующим образом: построить максимальный поток продукта из фиктивного источника m + n +1 в фиктивный сток m + n + 2 , стоимость которого мини-

мальна. Понятно, что величина потока xkl > 0 по любой коммуникации k, l не может превышать ее пропускной способности dkl . Суммарный объем продукта, перемещаемого из каждого источника i , равен величине продукта, перемещаемого в i из фик-

21

тивного источника m + n +1 , а суммарный объем продукта, перемещаемого в каждый сток j, равен величине продукта, перемещаемого из j в фиктивный сток m + n + 2 .

Введем в рассмотрение векторы модифицированных мощностей

a* =(a1*,...,an*+m )=(a1,...,am , b1,...,bn ),

b* =(b1*,...,bn*+m )=(a1,...,am ,b1,...,bn ),

матрицы модифицированных стоимостей C* = cij* и пропускных

способностей D* = dij* порядка (m + n +1)×(m + n + 2), определенных следующим образом:

 

0,

i = m + n +1,

j =

 

,

 

 

1,m

 

 

 

 

 

 

 

 

 

 

 

 

*

0,

i = m +1,m + n,

j = m + n + 2,

cij

=

 

 

 

 

 

 

 

 

 

 

i =1,m,

j = m +1,m + n,

 

cij ,

 

 

 

 

 

 

 

 

 

 

 

 

 

∞ −в остальных случаях,

a j , i = m + n +1,

j =

 

,

 

1,m

 

 

 

 

 

 

 

 

 

 

i = m +1,m + n, j = m + n + 2,

dij* = bi ,

 

 

 

 

 

 

 

 

dij ,

i =1,m, j = m +1,m + n,

 

в остальных

случаях.

 

 

0

 

 

Опишем алгоритм решения транспортной

задачи. Неуменьшая

общности, предположим, что dij = min (ai ,bj ),

если dij > min (ai ,bj )

для всех i =1,m, j =1,n.

22

Общая итерация. Осуществляем тернарные операции над эле-

ментами матрицы модифицированных стоимостей

 

* =C* =

 

 

 

c*

 

 

 

,

 

 

 

 

 

C

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ij

 

 

 

 

последовательно по всем k =1, 2,...,

n + m + 2 ; полагая

 

 

 

 

 

 

 

 

 

 

 

 

 

 

*

 

 

 

 

 

 

 

 

*

 

 

 

*

 

 

 

 

*

 

 

 

 

 

 

 

 

 

 

 

 

 

*

cij ,

 

 

если

cij

cik

+ckj

,

 

(2.5)

 

 

cij :=

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

*

 

 

*

 

 

 

 

*

 

 

*

 

 

 

*

 

 

 

 

 

 

 

 

 

 

 

 

 

 

cik

+ckj , если

 

cij > cik +ckj ,

 

 

 

 

 

 

 

 

 

для всех i j k,

i =

 

 

j =

 

 

 

 

 

 

 

 

 

 

 

 

 

1,n + m + 2,

1,n + m + 2.

 

 

 

 

 

 

 

 

 

 

 

Одновременно с выполнением операций (2.5) изменяем элемен-

ты вспомогательной

матрицы

R* =

 

 

 

r*

 

 

 

 

порядка

(m + n + 2)×

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ij

 

 

 

 

 

 

 

 

 

 

 

×(m + n + 2) (первоначально полагаем r* = j, i,

j =

 

):

1,n + m + 2

 

 

 

 

 

 

 

ij

 

 

 

 

 

 

 

 

 

 

r*

, если

 

 

 

*ij

 

 

*ik +

 

 

*kj ,

 

 

 

 

r* :=

c

c

c

 

 

 

 

ij

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ij

 

 

 

 

 

 

*ij >

 

 

*ik +

 

 

*kj .

 

 

 

 

 

r*

, если

 

 

c

c

c

 

 

 

 

 

ik

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Если c*m+n+1, m+n+2 = ∞ − задача решена. В противном случае

с помощью вспомогательной матрицы R* определяем множество индексов

 

l = m + n +1, i1, i2 ,..., lk ,

 

m + n + 2 = p,

 

где

 

 

 

 

 

i1

= rm+n+1, m+n+2 , i2

= ri , m+n+2 ,

i3

= ri , m+n+2...,

p = rl p ,

 

 

1

 

2

k

и множество

L ={(l,i1 ),(i1,i2 ),...,(ik , p)}.

23

Находим d=

min

 

(ai ,dij ,bj ) и вычисляем:

 

 

 

 

 

 

(i, j) L

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

x*

,

(i, j) L,

 

 

 

 

 

 

 

 

 

 

 

ij

 

 

 

 

 

 

 

 

 

 

 

 

 

 

xij*

 

 

 

 

 

 

 

( j,i) L,

 

 

 

 

 

 

 

:= xij* −δ,

 

 

 

 

 

 

 

 

 

 

 

*

востальных случаях;

 

 

 

 

 

 

 

 

x

 

 

 

 

 

 

 

 

 

ij

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

d*

−d,

(i, j) L,

 

 

 

 

 

 

 

 

 

 

 

ij

 

 

 

 

 

 

 

 

 

 

 

 

 

 

dij* :=

 

 

 

 

 

( j,i) L,

 

 

 

 

 

 

 

xij* +d,

 

 

 

 

 

 

 

 

 

 

 

 

востальных

случаях;

 

 

 

 

 

 

 

d*

 

 

 

 

 

 

 

 

ij

 

 

 

 

 

 

 

 

 

 

 

 

a* := a* −δ, b*

 

:=b* −δ,

a*

:= a* ,

b*

: =b*

j

;

l

l

 

p

 

p

 

 

p

p

 

l

l

 

 

 

,

 

j =

 

 

,

если

a* = 0,

 

 

 

 

 

1,n + m

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

i

 

 

 

 

 

*

 

 

 

 

 

 

 

 

 

 

 

 

*

 

 

 

 

 

 

 

 

i =1,n

+ m,

если

= 0,

 

 

 

cij

= ∞,

 

bj

 

 

 

 

 

*

 

востальных

случаях.

 

 

 

 

 

 

c

 

 

 

 

 

 

 

 

ij

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Переходим к общей итерации.

После окончания работы алгоритма находим матрицу X = xij m×n ,

где x

= x*

, i =

 

, j =

 

, которая является решением задачи.

1,m

1,n

ij

i,m+ j

 

 

 

 

 

Если одно из ограничений не выполнено, то это означает, что исходная задача не имеет допустимых решений. Тем не менее полученный план является оптимальным планом перемещения максимально возможного количества продукта из источников в стоки при данных ограничениях.

Проиллюстрируем работу алгоритма на рассмотренном выше примере: a =(6, 3, 3), b =(4, 2, 4, 2),

24

1

4

2

5

 

 

2

1

4

 

,

C =

1

 

3

2

1

 

 

 

3

 

3

1

2

1

 

 

1

1

 

 

D = 1

2 .

 

1

1

 

 

2

1

 

Формируем матрицы модифицированных стоимостей и пропускных способностей:

− − − 1 4 2

5 − −

 

 

 

 

2 1

4

1

 

 

 

 

− − −

− −

 

 

 

 

3 2

1

3

 

 

 

 

− − −

− −

 

− − − − − −

− − 0

 

 

C = − − − − − −

− − 0

 

,

 

 

 

 

 

 

− − 0

 

 

− − − − − −

 

 

− − − − − −

− − 0

 

 

 

 

 

 

 

 

 

 

 

 

 

0 0 0 − − −

− − −

 

 

 

 

 

 

 

 

 

 

 

 

− − − − − −

− − −

 

0

0

0

3

1

2

1

0

0

 

 

0

0

1

1

1

2

0

 

 

0

0

 

 

0

0

2

1

1

1

0

 

 

0

0

 

0

0

0

0

0

0

0

0

4

 

D = 0 0 0 0 0 0

0

0

2 .

 

 

0

0

0

0

0

0

0

 

 

0

4

 

0

0

0

0

0

0

0

0

2

 

 

3

3

0

0

0

0

0

 

 

6

0

 

 

0

0

0

0

0

0

0

 

 

0

0

 

25

Прочерки вместо элементов матрицы означают сколь угодно

большое число ().

После осуществления общей итерации получим

 

 

− − − −

4 2 5 0

 

 

 

 

− − −

2

1 4 1

 

 

 

 

 

 

− −

 

 

 

 

− − −

3

2 1 3

 

 

 

 

 

 

− −

 

 

 

 

− − − −

− − − − 0

 

 

 

=

− − − −

− − − − 0

,

C *

 

 

 

− − − −

 

 

 

 

 

 

 

 

 

− − − − 0

 

 

 

 

− − − −

− − − − 0

 

 

 

 

0 0 0 1

1 1 1

 

 

 

 

 

 

1

 

 

 

 

− − − −

 

 

 

 

 

 

 

 

 

− − − − −

 

 

 

1

2

3

4

5

6

7

8

9

 

 

 

 

2

3

4

5

6

7

8

 

 

 

 

1

5

 

 

 

 

2

3

4

5

6

7

8

 

 

 

 

1

6

 

 

 

1

2

3

4

5

6

7

9

9

 

 

R* = 1 2 3 4

5

6

7

8

9 .

 

 

 

 

2

3

4

5

6

7

8

 

 

 

 

1

9

 

 

 

1

2

3

4

5

6

7

8

9

 

 

 

 

2

3

1

2

3

2

8

 

 

 

 

1

1

 

 

 

 

2

3

4

5

6

7

8

 

 

 

 

1

9

 

Так как C89* =1, с помощью матрицы R2 находим

r89* =1, r19* = 4, r49* =9, L ={(8, 1), (1, 4), (4, 9)} и изменяем матри-

цы X *, C*, D * :

26

 

 

0 0 0

3 0 0 0 3 0

 

 

 

 

0

0

0

0

0

0

0

0

 

 

 

 

 

 

0

 

 

 

 

0

0

0

0

0

0

0

0

 

 

 

 

 

 

0

 

 

 

3 0 0

0 0 0 0 0 3

 

X * =

0 0 0

0 0 0 0 0 0

,

 

 

 

0

0

0

0

0

0

0

0

 

 

 

 

 

 

0

 

 

 

 

0

0

0

0

0

0

0

0

0

 

 

 

 

3

0

0

0

0

0

0

0

 

 

 

 

 

 

0

 

 

 

 

0 0 0

 

 

 

 

 

 

 

 

 

 

 

3 0 0 0 0 0

 

 

 

− − −

4 2 5 0

 

 

 

 

− − −

2 1 4 1

− −

 

 

 

 

 

 

 

 

 

 

− − −

3 2 1 3

− −

 

 

 

 

 

 

 

 

 

1 − −

− − − − − 0

 

 

C *

=

− − −

− − − − − 0 ,

 

 

 

− − −

 

 

 

 

 

 

 

 

 

 

 

− − − − − 0

 

 

 

 

− − −

− − − − − 0

 

 

 

 

 

0 0 0

− − − − − −

 

 

 

 

 

 

 

 

 

 

 

− − −

0 − − − − −

 

 

 

 

 

 

 

 

 

 

0

0

0

0

1

2

1

3

0

 

 

 

 

 

 

 

0

0

1

1

1

2

0

 

 

 

 

 

 

0

0

 

 

 

 

 

 

 

0

0

2

1

1

1

0

 

 

 

 

 

 

0

0

 

 

 

 

 

 

3

0

0

0

0

0

0

0

1

 

 

 

D* =

0 0 0

0 0 0 0 0 2 .

 

 

 

 

 

 

0

0

0

0

0

0

0

 

 

 

 

 

 

0

4

 

 

 

 

 

0

0

0

0

0

0

0

0

2

 

 

 

 

 

 

3

3

3

0

0

0

0

0

 

 

 

 

 

 

 

0

 

 

 

 

 

 

 

0

0

3

0

0

0

0

 

 

 

 

 

 

0

0

 

 

27

После осуществления над этими матрицами еще семи операций получаем матрицы C*, R* :

 

 

3 2 5 4 7 5

 

0 7

 

 

 

1 − −1 2 3 4 2

 

 

 

 

 

 

 

 

1 4

 

 

 

0 2 3 4 6 3

 

 

 

 

 

 

 

 

0 6

 

 

 

3 1 3 1 3 0

 

3 3

 

C* = −2 1 2 1 3 1

 

2 3

,

 

 

3 1 3 0 0

0

 

 

 

 

 

 

 

 

3 0

 

 

2

 

1 2 1 2 3

 

2 3

 

 

 

0 3 2 5 4 7 5

 

7

 

 

 

 

 

 

 

 

 

3 1 3 0 0 0 0

 

3

 

 

 

 

 

 

 

 

 

1

5

5

5

5

5

7

8

5

 

 

 

 

 

4

2

4

4

4

6

4

4

 

 

 

 

 

 

 

6

 

 

 

 

 

8

7

3

4

8

7

7

8

7

 

 

 

 

 

 

 

 

 

 

R*

 

3

3

3

4

3

3

3

3

3

 

 

 

=

3 2 3 2 5 2 3

3 2 .

 

 

 

 

 

9

9

9

9

9

6

9

9

 

 

 

 

 

 

 

9

 

 

 

 

 

2

2

2

2

2

2

7

2

2

 

 

 

 

 

1

1

1

1

1

1

1

8

 

 

 

 

 

 

 

1

 

 

 

 

 

4

5

4

4

5

6

7

4

 

 

 

 

 

 

 

9

 

 

Так как C*89 = 7 , с помощью матрицы R* определяем множество индексов

r*89 =1, r19 =5, r59 = 2, r29 = 6, r69 =9,

т. е.

L ={(8,1), (1,5), (5,2),(2,6),(6,9)}.

28

Находим δ =1 и вычисляем

 

 

 

 

x*81 = 6,

x*15 =1,

 

 

 

 

 

 

 

 

x51 = −1,

x52 =1,

 

 

 

 

 

 

 

 

x25 = 0,

x26 =1,

 

 

 

 

 

 

 

 

x62 = −1,

x69 = 2.

 

 

 

 

Новые матрицы X *, C*,

D* :

 

 

 

 

 

 

 

 

 

0 0 0 3

1

2 0 6 0

 

 

 

 

0 0 0 0

0

1 2

 

 

 

 

 

 

3 0

 

 

 

 

0 0 0 1

1

1 0

 

 

 

 

 

 

3 0

 

X * =

 

3 0 1 0

0

0 0 0 4

 

 

1 0 1 0

0

0 0 0 2

,

 

 

 

2 1 1 0

0

 

 

 

 

 

 

 

 

0 0 0 4

 

 

 

 

0 2 0 0

0

0 0 0 2

 

 

 

 

6

3

3

0

0

0

0

0

 

 

 

 

 

0

 

 

 

 

0 0 0 4

2

 

 

 

 

 

 

 

 

4 2 0 0

 

 

 

 

− − −

 

− − − 5 0

 

 

 

 

 

 

− − −

 

2 − − − 0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

3 − − 3 0

 

 

 

C

*

 

 

− − −

 

,

 

 

=

1 − −3

 

− − − − − −

 

 

 

 

 

4 − −2

 

− − − − − −

 

 

 

 

 

 

2 4 1

 

 

 

 

 

 

 

 

 

 

− − − − − −

 

 

 

 

 

 

− −1

 

 

 

 

 

 

 

 

 

 

 

 

− − − − − −

 

 

29