Файл: Ху, Т. Целочисленное программирование и потоки в сетях.pdf

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 15.10.2024

Просмотров: 180

Скачиваний: 0

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

414 гл : 19. ЛИНЕЙНОЕ И ЦЕЛОЧИСЛЕННОЕ п р о г р а м м и р о в а н и е

Заметим, что решения задачи (30), полученные с использова­ нием этих периодических поправок, являются оптимальными целочисленными тогда и только тогда, когда

х в = B -1b — B _1Nx^ ^ 0.

В настоящем случае / [41, 47] = g3, так что

x N = (0, 0, 0, 1, 1).

Используя значения для В _1Ь и B -1N из оптимальной таблицы; задачи линейного программирования, получаем

 

’ 43

1

Г4/6 “I

Г2/61

 

Г42”

х в =

123/6J “ L3/6J 1

L 0

J

1 =

L20^

 

 

 

 

 

 

 

 

Так как компоненты

х в неотрицательны,

решение

Х2 1 >Гз, ^4,

Х§,

хъ, X’j)

(42,

2 0>

6 )

0,

0, 1, 1)'

является оптимальным решением.

Хотя у нас имеются достаточные условия (теорема 19.8) приме­ нимости асимптотического алгоритма, реальные вычисления пока­ жут, что алгоритм дает оптимальное решение и в большинствеслучаев, когда достаточные условия не выполнены. На рис. 19.4 зачерненные точки обозначают пра­ вые части Ь, для которых асимптоти­ ческий алгоритм дает оптимальное решение, а светлые кружки указы­ вают правые части, где алгоритм не

дает решения.

19.3. Алгоритм групповой миними­ зации (Ху [112])

В этом параграфе мы рассмотрим, алгоритм решения задачи групповой; минимизации:

минимизировать

2 c*(g)-t(g)

g £ G - 0

 

при условии

 

2 _g-t(g) = go,

(!)

g £ G - 0

 

t(g )^ Q (целые).

 

Очевидно, что задача (1) охватывает случай g (; ц cz (3 \ 0. Действительно, для элемента g' $ ц можно взять в качестве его стоимости с* (g') еколь угодно большое число, так что g' в опти­


 

19.3.

АЛГОРИТМ

ГРУППОВОЙ

МИНИМИЗАЦИИ

415

мальном

решении использоваться

не

будет. Заметим также, что

с * ( & ) ^

О для всех S 6

G ,

поскольку В

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

базис

соответствующей

задачи

линейного

программирования *).

Для

удобства изложения заменим с* (gt)

= 0

на положительные е*,

такие, что

D s t < min с* (g)

(с*

(g)

ф О)*2).

 

 

 

 

Мы предполагаем, что группа G является циклической группой порядка D.

Заметим, что g0 является одним из элементов группы G. Поэто­ му, решение задачи (1) определяет представление группового элемента g0 через другие элементы группы с наименьшей стоимо­ стью; gQ = g0 со стоимостью с* (g0) является одним из возмож­ ных представлений элемента g0. Вместо того, чтобы решать зада­ чу (1) для одного g0 мы решим ее для всех возможных правых частей go = gi, g2, . . ., gD-i. Другими словами, каждый эле­ мент группы мы хотим выразить с наименьшей стоимостью через другие групповые элементы, на которых эта стоимость дости­ гается. Эту задачу мы будем решать по этапам. Информация, рас­ сматриваемая на каждом этапе, называется текущей. Пусть с (go) — наименьшая (текущая) стоимость представления ga через другие элементы, известная к данному текущему моменту. Пару, образованную из с (ga) и числа, указывающего (кодирующего) 3) представление ga в виде комбинации со стоимостью с (ga), будем называть пометкой группового элемента ga. Пометку назовем временной, если она может-быть изменена в процессе вычислений, т. е.| если может быть найдено представление для ga в виде ком­

бинации элементов из G \ 0 со стоимостью, меньшей текущей стои­ мости с (ga)- В противном случае пометку назовем постоянной.

Вычисления начинаются с пометок [с* (^а), а]. Эти помет­ ки — временные, поскольку нет уверенности, что стоимость с* ( g a ) представления g a = g a элемента g a наименьшая. Первую компо­

ненту пометки будем называть ее стоимостью. Будем говорить, что пометка элемента g a меньше пометки элемента £р, -если стоимость

пометки элемента ga меньше стоимости пометки элемента gp. Алгоритм (Ху [112]) состоит в следующем.

х) с* (g) неотрицательно, так как оно равно компоненте вектора ciy

оценок небазисных переменных относительно оптимального базиса В. См. задачу (5) из предыдущего параграфа,— Прим. ред.

2)Нулевые стоимости заменяются стоимостями ег > 0 только для удоб­ ства доказательства. Нет необходимости делать такие замены при вычисле­ ниях.

3)Кодировка представления элемента в виде суммы с соответствующей стоимостью осуществляется специальным образом посредством запоминания лишь одного слагаемого этого представления, по которому рекурсивна можно восстановить остальные. Подробнее об этом будет сказано далее.—

Прим. ред.


416гл. 19. ЛИНЕЙНОЕ И ЦЕЛОЧИСЛЕННОЕ ПРОГРАММИРОВАНИЕ

Ша г 1. Сравнить стоимости всех временных пометок, объя­ вить пометку с минимальной стоимостью постоянной и выделить

ее. Если

несколько пометок имеют минимальную стоимость, то

в качестве постоянной

выделить любую из них.

Ш аг

2. Пусть g { it

g i 2, . . . , g ir —элементы группы с постоян­

ными пометками и пусть gir—последний групповой элемент, получивший постоянную пометку. Найти суммы

С ( g i i ) +

с

( g i r ) , С ( g i2) +

С ( g i T) ,

. . . ,

с ( g ir) + с ( g i r )

и сравнить их соответственно с

 

 

 

С ( f t , +

g i r ) ,

С { g i2 +

gir),

. . . ,

с ( g ir + g i r) .

Если с ( g i .) -f- с (gir) ^ c

( g ^

+

gir),

то пометки не менять. Если же

с (gi ■ )J r c ( g i ) < ^ c (gi t +

gir) i

T0 заменить пометку группового эле­

мента (gi. + g ir)

на

[ c ( g i . ) - | - c ( g i r ) , д],

где

q вторая компонента

текущей пометки элемента g i . 1). (Можно также заменить вторую компоненту пометки (gi + gir) второй компонентой пометки g ir).

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

Прежде чем привести доказательство и подсчитать число опе­ раций в алгоритме, рассмотрим численный пример. Предположим, что группа G — циклическая порядка 10; соответствующие стои­ мости приведены ниже:

с* ( g t ) = 10,

3,

2,

7,

8,

5,

4,

9,

7

 

 

 

 

\

 

 

 

 

g t i

g 2>

g 3 )

gtti

g b i

g e t

g i t

g s t

gH‘

Сначала заполним ряд из D — 1 пар, соответствующих D — 1 элементам группы. Все пометки — временные:

g1

gz

gz

git

gb

g6

gi

g8

8q

10

3

2

7

8

5

 

4

9

7

1

2

3

4

5

6

'

7

8

9

1.Сравниваем стоимости всех временных пометок и выделяем

[2, 3] как постоянную

пометку посредством введения знака *

в <<нижний правый угол»

пары.i*

 

 

 

0 Достаточно запоминать информацию

лиш ь об одном

слагаемом g i .

представления ( g i . + g l ),

так

как

второе

однозначно восстанавливается

как разность элементов (g .• +

g ,

) и g.;

. П оск ольку элемент g ,

имеет посто-

i г j u j

янную пометку, ее стоимость может не совпадать с исходной c * { g i ) . Стоимость пометки определяется представлением элемента с наименьшей стоимостью, информация о котором и дается второй компонентой q .— П р и м . р е д .


19.3. АЛГОРИТМ ГРУППОВОЙ МИНИМИЗАЦИИ

417

2.Поскольку [2, 3] — единственная постоянная пометка, то

сравниваем с (g3) -f

с (g3) с с (g6),

так как g3 + g3 =

ge г).

Имеем

с (ёз) + С (g3) = 2 +

2 = 4 < 5 =

с (g6y. Заменим

[5, 6 ],

соот-/-

ветствующую ge, на [4,3]. (Заметим, что вторая компонента помет­

ки элемента g6 заменяется

второй компонентой пометки g3). Это

показано ниже:

 

 

 

 

 

 

 

 

 

е1

 

gz

g 3

 

gi

g5

 

g6

Si

g8

g 9

10

 

3

2

 

1

8

 

4

4

9

7

1

 

2

з*

 

4

5

 

3

7

8

9

1. Сравниваем стоимости всех временных пометок и выделяем

13, 2] как постоянную пометку.

 

групповой элемент, получив­

2. Поскольку g2 — последний

ший постоянную пометку, сравниваем

 

 

 

с (ёз)

+

с (g2) =

2 - . f 3 = 5 < 8

=

c (g5),

и заменяем

 

 

 

 

[8 , 5]

на

[5,

3];

 

 

 

с (ёз)

+

с (g2)

=

3 +

3 =

6 < 7

=

с (g4),

и заменяем

 

 

 

 

[7,4]

на

[6,2].

 

 

 

В результате получается

 

 

 

 

 

 

 

Si

gz

g3

g i

gf,

ge

g 7

g 8

g9

10

3

2

 

6

5

 

4

4

9

7

1

2#

3*

2

3

 

3

7

a

9

1.Сравниваем стоимости всех временных пометок и выделяем либо [4,3], либо [4,7] как постоянную пометку. Здесь мы выде­ ляем [4,3].

2.Поскольку g6 — последний групповой элемент, получивший постоянную пометку, сравниваем

с (ёз)

+

с (ge) =

2 +

4 =

6 < 7

= c(g9),

и заменяем

[7,9]

 

 

 

 

 

 

 

-

 

 

 

 

на [6,3];

с (ёг)

+

с (ёв)

=

3

+

4

=

7 < 9

=

с (g8),

и заменяем

[9,8]

 

 

 

 

 

 

 

 

 

 

 

 

на [7,2]:

с (ёв) +

с (ge)

=

4

+

4

=

8 > 3

=

с (g2),

замен нет.1

 

1) Вообще gt +

gj =

gi+j =

ga ,

где а =

г + / (mod 10), поэтому с (g i + g j ) =

—c (§i+j)~c(gal)‘

Прим.

ред.

 

 

 

 

 

27 т. Ху


418 ГЛ. 19. ЛИНЕЙНОЕ И ЦЕЛОЧИСЛЕННОЕ ПРОГРАММИРОВАНИЕ

Тогда имеем

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

е 1

£2

g3

 

84

 

 

8з

86

81

g8 £9

 

 

10

3

2

 

6

 

 

5

4

4

7

6

 

 

1

2*

3*

 

2

 

;

3

3*

7

2

3

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1.

Выделяем

[4,7]

как

постоянную

пометку.

 

 

 

2.

Сравниваем

 

 

 

 

 

 

 

 

 

 

 

 

 

 

с (ёз) +

с (g7)

= 2 + 4 = 6 > 0

=

с (0),

замен

нет;

 

с ( ё г ) +

с ( £ 7)

=

3 +

4 =

7 > 6

=

с (g9),

замен

нет;

 

с (ёв) +

с (g7)

= 4 + 4 = 8 > 2 = с

(йГз), замен нет;

 

с (ёт) +

с ( # 7)

= 4 + 4 = 8 > 6 = с

{gi),

замен нет.

1.

Выделяем

[5,3]

как

постоянную

пометку.

 

 

 

2.

Сравниваем

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

с (ёз) +

с ( g 5)

= 2 + 5 =

7 =

7

=

с

замен

нет;

 

с (ёг) +

с (ёз)

= 3 + 5 = 8 > 4

 

= с (ё7), замен нет;

 

с (ёв) +

с (g5)

= 4 4 - 5 = 9 <

10

=

с (gt),

заменяем

 

 

 

 

 

 

 

 

 

 

 

 

 

[10,1] на [9,3].

 

Заметим здесь, что второй компонентой текущей пометки ge

является 3:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

с (ё7) +

с (gs) =

4 +

5

=

9 > 3

=

с (gg),

замен

нет;

 

с (ёъ) +

с (g5) =

5 +

5

=

10 >

0

=

с (0), -замен нет.

Продолжая процесс,

выделяем

[6,2],

как постоянную

пометку,

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

81

82

gз

g4

£5

86

8i

#8

g9

9

 

 

6

 

4

f

 

6

3

2

5

4

7

3^[

2*

3#

2*

з*

3#

7*

2 *

3*

Предлолржим, что мы хотим найти представление группового элемента gi, имеющее наименьшую стоимость. Второй компонентой пометки gi является 3. Следовательно, мы знаем, что в искомое

представление gi — 2 * (ё)'ё входит t (g3) ^ 1 . Возвращаясь назад, получаем gt g3 = gs и видим, что второй компонентой пометки элемента g8 является 2. Это означает, что t (g2) ^ 1. Возвращаясь назад, получаем gs g2 = ge и видим, что второй компонентой