Изображения страниц
Текст статьи Шейнцвит Р. П. Ветви и границы // Квант. — 1972. — № 7. — С. 2—5.

Рассмотрим задачу:
На складе имеются предметы (каждый — по одному), вес и стоимость которых указаны в таблице.
$$
\def\c#1{\colsep{0pt}{\begin{array}{c}#1\end{array}}}
\def\v#1{\hphantom{50}\mathllap{#1}}
\def\s#1{\hphantom{670}\mathllap{#1}}
\begin{array}{c|c|c}\hline\\[-6pt]
\c{\text{Порядковый}\\\text{номер}}&\c{\text{Вес в цент-}\\\text{нерах}}&\c{\text{Стоимость}\\\text{(в рублях)}}\\\\[-6pt]\hline\\[-6pt]
1&\v{11}&\s{120}\\
2&\v{7}&\s{140}\\
3&\v{6}&\s{60}\\
4&\v{5}&\s{80}\\
5&\v{12}&\s{160}\\
6&\v{9}&\s{110}\\[6pt]\hline\\[-6pt]
\text{Всего}&\v{50}&\s{670}\\[6pt]
\end{array}
$$
Грузоподъёмность автомашины —
Очевидно, выгоднее брать предметы, имеющие при малом весе большую стоимость.
Введём понятие удельной стоимости предмета
Если загрузить автомашину предметами с наибольшей удельной стоимостью — вторым, четвёртым, пятым и шестым, — то сумма их весов окажется больше грузоподъёмности автомашины
Если же взять только 2-й, 4-й и 5-й предметы, то машина окажется недогруженной на 8 ц. Можно тогда погрузить ещё только один
Может быть, выгоднее оставить какой-либо из предметов с большей удельной стоимостью, но зато увеличить общую стоимость путём полного использования грузоподъёмности машины?
Как видим, «в лоб» задачу решить трудно. А в реальных условиях, когда речь зачастую идёт не о шести, а о шестидесяти предметах, и браться за неё нельзя, не вооружившись математическими методами. Переведём задачу на язык математики (как говорят, математизируем ситуацию). Пусть
Итак, отвлекаясь от «жизненной» ситуации, мы получаем чисто математическую задачу: найти значения переменных
Всего, очевидно, имеется
Естественно назвать вектор допустимым, если для него выполняется условие (1). Итак, решением задачи является допустимый вектор, максимизирующий целевую функцию
Теперь допустим, что 1-й предмет, погружен на автомашину. Тогда
Найти значения переменных
Если же 1-й предмет не погружен, то
Найти значения переменных
Таким образом, одну задачу с 6 переменными можно свести к двум задачам с 5 переменными; те в свою очередь сводятся к четырём задачам с 4 переменными и т. д., так что в конце концов мы получаем 64 задачи с одной переменной каждая. Но уж если надо решать такую систему, то проще непосредственно проверить условие (1) для каждого из 64 возможных векторов, для допустимых из них вычислить значение целевой функции и выбрать тот вектор, для которого значение максимально, т. е., как говорят, решить задачу «полным перебором».
А как же быть в тех случаях, когда число предметов (компонент векторов) велико? Ведь уже при 20 предметах число возможных вариантов превышает миллион! Ясно, что метод полного перебора в задачах такого рода в большинстве случаев непригоден.
Мы расскажем сейчас об одном методе, позволяющем, как правило, значительно уменьшить число сравниваемых вариантов, необходимое для получения решения. Метод этот, известный под названием «метод ветвей и границ», мы опишем в процессе его применения к нашей задаче.
Процесс отбора предметов для погрузки на автомашину можно изобразить в виде графа. Начальный узел 0 соответствует множеству

Каждый узел графа соответствует подмножеству векторов из
Но мы постараемся действовать таким образом, чтобы попутно обнаруживать «бесперспективные» узлы, из которых не могут выходить ветви, ведущие к решению. Чем раньше (выше) «отсечь» эти ветви, тем меньший перебор придётся нам делать потом. С этой целью сопоставим каждому узлу два числа (которые будем записывать под узлом). Верхнее из них показывает наибольшую возможную суммарную стоимость (границу стоимости) взятых предметов при любом способе погрузки, описываемом векторами данного узла. Нижнее число показывает, какой общий вес отбираемых предметов допустим на данном шаге (это число равно разности между грузоподъёмностью автомашины и весом всех уже погруженных предметов). Для примера найдём верхнее и нижнее числа для
Пусть
Этот узел соответствует некоторому допустимому способу погрузки, при котором значение целевой функции равно верхнему числу. Все неветвлённые узлы, у которых верхнее число меньше, чем у этого узла, незачем ветвить, так как при ветвлении верхнее число не может увеличиваться. Может оказаться, что верхнее число найденного узла больше, чем у любого другого узла. Тогда этот узел и даёт решение задачи. На рисунке 2 показан окончательный граф.

Построение графа проходит по следующим этапам (числа означают номера узлов): $$ \colsep{3pt}{\begin{array}{rl} 1)&0\to1\to3\to5\to7\to9;\\ 2)&6\to11\to13;\\ 3)&8\to15;\\ 4)&2\to17\to19\to21\to23\to25;\\ 5)&12\to27\to29;\\ 6)&4\to31\to33\to35;\\ 7)&10\to37;\\ 8)&20\to39\to41\to43;\\ 9)&22\to45\to47;\\ 10)&32\to49\to51\to53;\\ 11)&14\to55;\\ 12)&34\to57\to59. \end{array}} $$
Дальнейшее ветвление бесполезно, так как узел 55 находится на последнем уровне графа и имеет наибольшее верхнее число. Этот узел и даёт решение задачи. Он соответствует вектору
В процессе построения графа было «отсечено» свыше 50% бесперспективных вариантов. При увеличении числа переменных процент таких вариантов обычно растёт.
Кроме того, процесс можно ускорить, если сразу найти из каких-либо соображений «достаточно хорошее» решение. Так, в данном случае достаточно хорошее решение, соответствующее узлу 26, было найдено из соображений, связанных с удельной стоимостью.
Мы надеемся, что читатель ощутит общность описанного подхода к решению подобных задач. Конечно, наша задача достаточно проста: из каждого узла выходят лишь 2 ветви, и не составляет труда найти границы (верхнее и нижнее числа). В других задачах процессы ветвления и ограничения могут быть сложнее и зависеть от опытности и остроумия тех, кто её решает. Что же касается трудоёмкости самой реализации процесса, то здесь на помощь приходят электронно-вычислительные машины. Задачи, подобные рассматриваемой, часто называют «задачами о рюкзаке» (замените автомашину туристским рюкзаком, а её грузоподъёмность — предельными возможностями туриста, собирающегося в поход и совершающего трудный выбор среди «совершенно необходимых» предметов).
Конечно, задачи эти приходится решать далеко не только перед отпуском или каникулами. Ведь формирование годового плана предприятия во многих случаях — та же задача о рюкзаке. Неудивительно, что метод ветвей и границ «работает» во многих планово-экономических задачах, имеющих большое значение для народного хозяйства.



