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) |
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 |
|
|
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 )).— П р и м , перев .