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

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

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

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

Добавлен: 15.10.2024

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

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

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

368 ГЛ. 17. ПРЯМОЙ АЛГОРИТМ

изменения таблиц в последовательности циклов прямого ал­ горитма.

Элементы таблицы можно рассматривать, как множество век­

тор-столбцов

{а7-

|/' € / } ,

которое

соответствует множеству точек

в (гг + 2 )-мерном

евклидовом

пространстве.

Определение

(20),

из которого

следует векторное

равенство (2 2 ), можно интерпре­

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

начала

координат,

т. е. записав

(2 2 )

как

 

 

 

 

 

 

 

& j = a L j r s - \ - A j ,

можно сказать, что вектор а7 выражен через отклонение А7 от точки aLjTs, расположенной на луче с направляющим вектором rs.

Такое представление вектора а7 в терминах А^ и a Ljrs под­

черкивает определенные геометрические соотношения в структуре таблиц прямого алгоритма.

Во-первых, отметим, что множество точек {а7 | / £ /} в любой

таблице прямого алгоритма содержится в полупространстве, которое включает начало координат и вектор rs, расположенный на границе этого полупространства.

Для доказательства этого утверждения достаточно построить

ненулевую

вектор-строку

и'

таким

образом,

чтобы

u'rs =

0

й и'а7С&0 для всех

 

Из

равенства

 

 

 

 

 

 

 

 

 

aj = a L j r s + Д7

 

 

 

 

 

 

тогда

будет

следовать

 

 

 

 

 

 

 

 

 

 

 

 

 

и'а7=

aLju'rs + и'А7.

 

 

 

 

 

Чтобы

построить и',

полагаем

и0 =

1,

Ui =

и2= . . . = ип=

0

и найдем uL,

так чтобы u'rs =

0. Поскольку Aj

0 для всех /

£ -Л

получим бо; ^

0 и по определению

(см.

(18)

и (2 0 )) имеем 8 lj

0

для всех / 6 J- Отсюда.и'А;

^

0, что и требовалось 2)1 .

в точку

Во-вторых,

заметим,

что перемещение любой точки а7-

а7, которое происходит в результате одного преобразования, имеет определенный геометрический смысл. Равенства (22) и (23) пока­

зывают, что движение от точки aj к а7 осуществляется парал.-

лельно вектору rs и, следовательно, параллельно гиперплоскости,

1) Тогда и ' — ортогонален

rs

и все aj

(J £ J )

составляют

с и ' нетупой

угол , т.

е. aj леж ат по одну сторону с

г6.

от гиперплоскости,

порождаемой

вектором

и ' . П р и м .

р е д .

 

 

 

 

 

 

2) Е с л и п о л о ж и т ь

щ = е

д л я

i =

0, 1, . . . ,

п и найти и ь , так чтобы

выполнялось u 'rs =

0,

то можно доказать более сильное утверждение о том,

что и 'а 7-

=

и 'Д 7- >

0 для всех j

ф

s для некоторого полож ительного и доста­

точного

малого е.

 

 

 

 

 

 

 

 


 

 

17.4. ВЫВОД СООТНОШЕНИЙ И ПОЯСНЕНИЯ

369

определяемой вектором и'. Справедливость утверждения

следует

из

того,

что aj имеет то

же отклонение Aj от aLjXs,

что и aj

от

a-Lps-

Этот факт можно

доказать

и алгебраически, вычтя (22)

из

(23)

и получив

 

 

 

 

 

 

{a L j

a L j ) Г8,

 

откуда видно, что вектор а;- — аотличается от rs скалярным мно­ жителем.

Доказательство конечности прямого алгоритма

показывает,

что полупространство, содержащее множество (ау- | /

6 / } ,

совпа­

дет с полупространством, определяемым из услрвия а0] ^

0 для

всех / £ / .

 

 

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

мещений

точек

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

{«,■ I K J } -

Эта

последовательность обрывается тогда, когда

в полупространстве содержатся только такие векторы ау-, у кото­ рых a0j ^ 0. Более подробную картину сдвигов в полупростран­ стве, происходящих от таблицы к таблице (которую мы не будем описывать здесь), можно получить, анализируя (24), (25) и (26).

Этот параграф заканчивается выводом соотношений (22) — (26). Формула (22) следует из (19), (20) и (21); (22) фактически является просто векторной формой скалярных уравнений из (2 0 ).

Для получения (23) воспользуемся формулами симплексного преобразования, используемыми в прямом алгоритме:

 

 

CLij =

&ij

d p j d i s

( i 6 *^)j

(30)

 

 

a L j —

&L5

d p j d b s ,

(31)

где p — индекс

ведущей

строки.

 

 

Домножив (31) на рг,

получим

 

 

 

 

Pi&L}

p i & L j

ft pj Pi &LS'

 

Используя

(18)

и (2 0 ), имеем

 

 

 

 

 

 

Рfob} — G-i]

 

6ij dpjCli$,

 

после чего

подстановка из

(30)

дает

 

 

 

 

P i d b j —

d

i ]

Sjj.

(32)

Остается заметить, что (23) является векторной формой соотно­ шения (32).

Формулы (24),

(25) и (26) получаются следующим

образом.

В соответствии с

(22)

 

 

dL]rI = aJ — A).

(33)

24 т. ху


370

ГЛ. 17. ПРЯМОЙ АЛГОРИТМ

Вычитая (33) из (23), получим

 

 

 

aLj{Ts —r-) =

\ j — \ j .

(34)

При

j = s соотношение (23) принимает вид

 

 

=

— АГ-

(35>

Поскольку а - > 0 , то поделив (35) на аь~,

получим

 

rs — Гг —^— Л-.

 

 

а

-

 

 

 

Ls

 

что фактически совпадает с (24).

Воспользуемся соотношением (24), чтобы исключить rs и v- из (34), после чего получим

Aj =

Ai

 

 

 

Ls

 

 

и (25) доказано.

 

 

 

Наконец, можно использовать соотношение aj = aLjVj

(что воз­

можно, если aLj Ф 0), чтобы исключить

из (33). В

результате

получим соотношение (26):

 

 

 

Ь] =

аи{Г} — rj).

 

 


ГЛАВА 18

ЗАДАЧА О РЮКЗАКЕ

18.1. Задача о рюкзаке (Гилмор, Гомори [75], Гомори [84])

Рассмотрим простейшую задачу целочисленного программиро­ вания, а именно задачу только с одним ограничением. Эта задача, как и задача о кратчайшем пути, имеет многочисленные практи­ ческие приложения и часто возникает при решении различных задач оптимизации. Она имеет простую структуру и поэтому может быть решена методом динамического программирования ([15], [16], [74]). Мы обсудим этот метод, а в следующей главе рассмотрим его обобщение для решения общей задачи целочислен­ ного программирования.

Название «задача о рюкзаке» появилось благодаря следующей гипотетической ситуации. Турист, собираясь в поход, должен выбрать, какие предметы ему взять с собой. Каждый предмет имеет свой вес и свою ценность. Требуется, чтобы общий вес рюкзака с выбранными предметами не превышал некоторой задан­ ной величины, а их общая ценность была максимальной.

Обозначим через aj вес одного предмета /-го типа, через Cj — его ценность, через х} — число выбранных предметов /-го типа (т. е. таких предметов, которые турист берет с собой), через Ъ — за­ данную величину, ограничивающую вес рюкзака. Тогда задача примет вид

П

максимизировать 2

cixi

3 =

1

при ограничениях

 

 

П

 

з=1

0 ,

Xj —цельте, / = 1 , 2 , . . . , « .

Здесь a,j и b—положительные целые числа, с,-—неотрицательные целые числа.

Для решения задачи определим

функцию

(у) следующим

образом:

 

 

 

h

 

 

 

%(г/) = шах S

с л

( 1

 

3=

1

 

 

2 4 *


372

ГЛ. 18. ЗАДАЧА О РЮКЗАКЕ

где

k

 

 

(0 < г /< Ь ).

 

2 a j x j ^ y

 

з=1

 

То есть фй (у) — это максимальное значение целевой функции, когда предметы выбираются из первых к типов, а общий вес выбранных предметов ограничен величиной у. Полагаем ф0 (г/) = О для всех у (0 ^ у ^ Ь), это соответствует случаю, когда не выбрано ни одного предмета; фй (0 ) = 0 для всех к (0 ^ к ^ п) (случай,

когда общий вес рюкзака равен 0). Очевидно, чтоф! (у) — [y/a^-Ci, так как в рюкзак следует положить как можно больше предметов 1-го типа. Вообще при к ^ 1 для функции фй (у) справедливо следующее рекуррентное соотношение:

Фй(у) = тах[фй_1 (г/), фь (у —ak)+ ck].

(1 )

Обоснование этого соотношения просто. Когда при получении фй (у) предметы выбираются из первых к типов, то предмет &-го типа может оказаться либо выбранным, либо нет. Если он не выбран, то фй (у) =фй_1 (г/). Если же предмет к-то типа выбран

хотя бы один раз, то общий вес остальных предметов ограничи­ вается величиной у ah. Очевидно, что этот вес у ah следует

использовать наилучшим образом. Максимальное значение целе­ вой функции, которое можно получить, используя предметы пер­ вых к типов, при ограничении у ah на вес рюкзака, у нас полу­ чило обозначение фй ak). (Заметим, что мы берем фй ah), а не фй_1 ak), потому что предмет к-то типа может быть выбран

несколько раз.)

Можно составить таблицу, содержащую п строк и Ъ столбцов,

элементами

которой

являются величины фй (у) (к =

1 , 2 , . . .

. . ., щ у =

1, 2, . .

., b). С помощью рекуррентного

соотноше­

ния (1 ) величины фй {у) можно подсчитать в следующем порядке:

ф!

(1 ),

ф4 (2 ), . .

., фг (Ь);

ф2 (1), • •

•, Фг(Ь);

• •

•; Фп(1). • • •

. .

. , фn (b)J). При вычислениях по формуле (1)

полагаем фй (у) =

=

—оо,

если

у <

0 .

все

величины

фй (у)

(к =

1 , 2 , . . . , п;

 

После

того,

как

у — 1 ,

2 , . .

., Ь) найдены,

надо найти значения

которые их

определяют.

Для

этого

используется

еще одна таблица размера

п X Ъ.

При получении некоторой величины фй (у) в первой таблице,

сразу находится во второй таблице соответствующий элемент

i (к, у). Элементы i (к,

у) второй

таблицы

имеют следующий

смысл: если

i (к, у) у,

то это означает, что предмет /-го типа

используется

в фА(у) по

крайней

мере один

раз.)*

*) Нетрудно видеть, что величины % ( у ) (к < п ) зависят от того, как занумерованы предметы. Н о величина фп (Ь) не зависит от этой нумерации (этот факт следует из определения функции фп (6 )).— П р и м , перев .