Автоматика и телемеханика, № 10, 2021
© 2021 г. В.П. КОРНЕЕНКО, канд. техн. наук (vkorn@ipu.ru)
(Институт проблем управления им. В.А. Трапезникова РАН, Москва)
ЭФФЕКТИВНЫЙ АЛГОРИТМ ТУПИКОВЫХ УПРАВЛЕНИЙ
ДЛЯ РЕШЕНИЯ ЗАДАЧ КОМБИНАТОРНОЙ ОПТИМИЗАЦИИ
Предлагается алгоритм тупиковых управлений, предназначенный для
точного решения NP-трудных задач комбинаторной оптимизации. Эф-
фективность алгоритма демонстрируется на примерах решения задачи
разбиения на равные части и задачи об одномерном рюкзаке. В статье
также показано, что применение идеи тупиковых управлений при реали-
зации метода динамического программирования позволяет значительно
сократить на каждом шаге оптимизации число переменных состояний за-
дачи. Проведен сравнительный анализ предлагаемого метода с известны-
ми алгоритмами решения этих задач.
Ключевые слова: тупиковое управление, функция Беллмана, алгоритм,
задача разбиения, задача о рюкзаке.
DOI: 10.31857/S000523102110007X
1. Введение
В настоящее время на практике получили распространение два основных
оптимальных метода решения задач комбинаторной оптимизации, к которым
относится задача об одномерном рюкзаке (0-1 knapsack problem) и сводящая-
ся к ней задача разбиения на равные части (set-partition problem), а именно:
метод ветвей и границ в рамках статичной модели, когда параметры задачи
не меняются во времени, и различные модификации метода динамического
программирования [1-3]. Подробный обзор различных методов и алгоритмов,
разработанных для решения задачи о рюкзаке, изложены в [4].
Наряду с модификациями метода динамического программирования для
решения задачи о рюкзаке применяются и приближенные алгоритмы, в част-
ности жадный алгоритм и аппроксимационный алгоритм, подробно изложен-
ные в [2, с. 448-478; 5, с. 417-424] соответственно.
Комбинированные эвристические алгоритмы для задачи о рюкзаке по-
дробно изложены в [6]. В [7-9] представлен графический подход к решению
задачи разбиения на равные части и задачи об одномерном рюкзаке.
Несмотря на то что данные задачи относятся к классу NP-трудных, в по-
следнее время в большом количестве научных публикаций появляются новые
алгоритмы для задачи о ранце в виде как точных алгоритмов, так и прибли-
женных, включая и эвристические алгоритмы, обладающие различной вре-
менной трудоемкостью [10-12].
76
Рассмотрим математические постановки задач комбинаторной оптимиза-
ции.
1. Задача разбиения на равные части (partition) состоит в следующем:
задано множество целых чисел B = {b1, . . . , bn}. Требуется разбить множе-
ство B на два непересекающихся подмножества B1 и B2 так, чтобы миними-
зировать значение:
(1)
bj -
bj
→ min .
bj∈B1
bj∈B2
2. Задача об одномерном рюкзаке (0-1 knapsack). В общем виде вербаль-
ная постановка задачи сводится к следующему: из заданного множества
предметов, характеризующихся для j-го предмета “ценностью” pj и “весом
(объемом)” wj, требуется отобрать такое число предметов, чтобы получить
максимальную суммарную ценность при одновременном соблюдении ограни-
чения b на суммарный вес или объем.
Математическую постановку целочисленной задачи представим в виде за-
дачи булевого линейного программирования:
f (x1, . . . , xn) =
pjxj → max ,
x1,..., xn
j=1
(2)
jxj ≤ b, xj ∈ {0, 1} , j = 1,2,... ,n.
 w
j=1
n
Когда pj = wj = b, j = 1, n, и b =1
bj, то задачи (1) и (2) являются
2
j=1
эквивалентными.
Идея тупиковых управлений взята из задачи минимизации и получения
сокращенной (тупиковой) дизъюнктивной нормальной формы (ДНФ) [13],
представляющей собой произвольную дизъюнкцию элементарных конъюнк-
ций логических функций булевой алгебры, которую нельзя упростить. По
аналогии с ДНФ допустимое управление, в котором замена произвольной ну-
левой компоненты в булевском векторе на единицу приводит к нарушению
ресурсных ограничений, в задаче о ранце будем называть тупиковым.
В данной статье предлагается новый оптимальный алгоритм тупиковых
управлений, который по своей эффективности на данный момент превосходит
опубликованные алгоритмы для решения задачи разбиения на равные части
и задачи об одномерном рюкзаке.
Кроме того, предлагаемый алгоритм может быть применим в задачах вы-
полнения комплекса взаимосвязанных работ, математическая постановка ко-
торых представлена на динамических управляемых моделях [14]. В статье
демонстрируется применение тупиковых управлений при решении задачи о
рюкзаке методом динамического программирования.
77
2. Алгоритм тупиковых управлений
Рассмотрим шаги а л г о р и т м а тупиковых управлений более подробно.
Шаг 1. Упорядочение номеров предметов в порядке убывания весов. Не
умаляя общности, будем предполагать, что для любого предмета справедливо
неравенство:
wj ≤ b ∀j = 1,n.
Построение тупиковых управлений начинается с упорядочения номеров
предметов в порядке убывания весов (объемов):
wj1 ≥ ... ≥ wjk ≥ ... ≥ wjn.
Пусть uk ≡ xjk ∈ {0, 1} - переменная управления, принимающая значение
единица, если k-й предмет по порядку помещается в рюкзак, и нулевое зна-
чение в противном случае. В связи с перенумерацией переменных математи-
ческая постановка задачи о рюкзаке сводится к нахождению такого вектора
управления u = (u1, . . . , un), который доставляет максимум целевой функ-
ции:
(3)
f (u) =
pkuk → max
u1,..., un
k=1
при условии
(4)
wkuk ≤ b, uk
∈ {0, 1} , k = 1, 2, . . . , n.
k=1
Очевидно, что задача (3)-(4) эквивалентна задаче (2).
Шаг 2. Построение тупиковых управлений. В первое тупиковое управ-
ление включаем первый предмет, который соответствует управлению u1 = 1,
если он не нарушает ограничения (4), т.е. выполняется неравенство: w1u1 ≤ b,
в противном случае полагаем u1 = 0. Точно так же поступаем со вторым, тре-
тьим и так далее по порядку и с n-м предметом в соответствии с формулой:
1, если
uiwi ≤ b;
i=1
(5)
uk =
 0, если
uiwi > b,
i=1
последовательно для k = 1, 2, . . . , n.
В результате получим первое тупиковое управление, состоящее из нулей и
единиц
(
)
(6)
u1 = u(1)1,u(1)2,... ,u(1)
n
78
Построенному вектору управления u1 (6) соответствует некоторое двоич-
ное число
(7)
ξ1
= (11010..1..01001) ,
где единицы стоят в тех разрядах, номера которых совпадают с номерами
предметов, включенных в управление u1 (6). Замена любого нуля единицей
делает это управление недопустимым по ограничению (4).
С помощью первого тупикового управления построим второе. Для этого
найдем самый младший разряд числа ξ1, в котором записан ноль. Во всех
разрядах справа от него вместо единиц записываем нули. В полученном дво-
ичном числе первую справа единицу перенесем на один разряд вправо. Ес-
ли полученное управление недопустимо по ограничению (4), то эту единицу
сдвигаем еще на один разряд вправо до тех пор, пока управление не окажется
допустимым.
Далее в разряды справа от этой единицы помещаем единицы по тому же
правилу (5), что и при построении числа ξ1 (7). В результате получаем дво-
ичное число ξ2 < ξ1. Этому числу соответствует тупиковое управление u2 =(
)
= u(2)1,u(2)2,... ,un2)
. Точно таким же образом из тупикового управления u2
строится тупиковое управление u3, которому соответствует двоичное число
ξ3 < ξ2 < ξ1 и т.д. В результате получаем множество тупиковых управлений
{ (
)
}
(8)
U =
ul = u(l)1,... ,u(l)k,... ,u(l)
|l = 1,2,...,N
,
n
которому соответствует упорядочение двоичных чисел:
ξN < ξN-1 < ... < ξ3 < ξ2 < ξ1.
Описанная процедура дает возможность получить все тупиковые управ-
ления, удовлетворяющие ограничению (4).
Шаг 3. Вычисление оптимального тупикового управления. Для каждо-
го тупикового управления ul, l = 1, N , находим значение целевой функцией
f (ul) (3).
За оптимальное управление принимаем тупиковое u ∈ U (8), обеспечи-
вающее максимальное значение целевой функции f (u) (3):
(
)
u = (u∗1,... ,u∗k,... ,u∗n) = arg maxf u(l)1,... ,u(l)k,... ,u(l)
n
ul∈U
Обоснование изложенного алгоритма решения задачи о рюкзаке базиру-
ется на следующих теоремах.
Теорема 1 (о существовании оптимального решения). Среди всех ту-
пиковых управлений из множества U (8) найдется по крайней мере одно
тупиковое управление, обеспечивающее максимум целевой функции задачи
о рюкзаке (3)-(4).
79
Доказательство. Пусть u - оптимальное тупиковое управление, яв-
ляющееся решением задачи (3)-(4). Предположим обратное, что u не явля-
ется оптимальным и тупиковым управлением, т.е. u ∈ U (8). Дополним его
до тупикового u0 ∈ U (8).
Это значит, что найдется предмет, который войдет в рюкзак, и значение
целевой функции при этом увеличится на величину ценности этого предмета.
При этом для целевой функции f (u) (3) будет выполняться неравенство, т.е.
f (u0) > f (u) .
Получили противоречие с тем, что нашлось решение u0 лучшее, чем u.
Следовательно, предположение u не верно, что и требовалось доказать. Тео-
рема 1 доказана.
От исходной прямой задачи (3)-(4) максимизации ценности рюкзака пе-
рейдем к двойственной задаче минимизации остатка веса (объема) рюкзака
по критерию:
(9)
g (ul) = b -
wku(l)k → min,
ul∈U
k=1
который равносилен максимизации суммы весов предметов, помещаемых в
рюкзак.
Очевидно, что для функции g (ul) (9) должно выполняться неравенство
(10)
g (ul) = b -
wku(l)k
≥ 0 ∀ l = 1,2,...,N,
k=1
где b - объем (вес) рюкзака, wk - вес k-го предмета управления ul ∈ U (8).
При этом имеет место следующее утверждение.
Теорема 2 (о связи прямой и двойственной задач). Пусть
(
)
(
)
uf = u(f)1,... ,u(f)k,... ,u(f)j
и
ug = u(g)1,... ,u(g)k,... ,u(g)
n
jn
оптимальные решения прямой f (ul) (3)-(4) и двойственной g (ul) (9)-(10)
задач соответственно.
Тогда для весов предметов, помещаемых в рюкзак, справедливо неравен-
ство
(11)
wku(f)k
wku(g)k.
k=1
k=1
Доказательство. Пусть
{
}
(12)
Umin =
ug ∈ U (8) | ug = arg min
g (ul)
ul∈U
80
подмножество множества U (8) тупиковых управлений, на которых крите-
рий g (ul) (9) достигает минимального значения, которое не всегда совпадает
с точной нижней гранью U (8), а именно: inf g (ul) = 0, ul ∈ U (8).
Очевидно, что если оптимальные решения прямой f (ul) (3)-(4) задачи
uf ∈ Umin (12) , то неравенство (11) выполняется как равенство.
Покажем, что если uf ∈ Umin (12), то неравенство (11) выполняется как
строгое. Действительно, в соответствии с определением минимума целевой
функции [5] должно выполняться неравенство
g (ug) < g (uf ) ∀ uf ∈ Umin
(12) ,
т.е.
b- wku(g)k <b- wku(f)k ⇒ wku(g)k >
wku(f)k.
k=1
k=1
k=1
k=1
Отсюда следует справедливость неравенства (11), что и требовалось дока-
зать. Теорема 2 доказана.
3. Метод динамического программирования с тупиковыми управлениями
на примере решения задачи о рюкзаке в прямом времени
Используя основную идею динамического программирования [1], сведем
решение задачи (3)-(4), поставленной на статичной математической модели,
к задаче оптимизации управляемой динамической системы, решение которой
сводится к следующим этапам.
1. Этап инвариантного погружения. Для этого вложим задачу о рюкзаке
в семейство задач той же природы, в результате чего получим управляемую
систему в прямом времени:
(13)
Z =
Zk : max
pjuj,
wjuj ≤ sk, k = 1,n
,
u1,...,u
k j=1
j=1
где uk ∈ {0, 1} - управление на k-м шаге оптимизации, sk - переменная со-
стояния, характеризующая остаточный вес рюкзака.
Множество допустимых значений переменной состояния sk управляемой
системы (13) для uk-го управления будем обозначать через Sk, являющееся
подмножеством множества числовых значений параметров S = {0, 1, . . . , b},
связанным с семейством задач (13). Исходная задача очевидным образом вхо-
дит в рассматриваемое семейство, если в (13) положить k = n и sn = b. По-
скольку из семейства задач выделяется исходная задача, то семейство задач Z
(13) реализует принцип инвариантного погружения в прямом времени.
Пусть на первом шаге k = 1 осуществляется выбор переменной управле-
ния u1 при некотором выборе переменных u2, u3, . . . , un таком, что
s1 = b - wjuj,
j=2
где 0 ≤ s1 ≤ b.
81
Величина s1 характеризует тот остаток общего ресурса b, который можно
использовать при выборе u1. Перейдя ко второму шагу, а затем и к третьему и
далее к k-му шагу, будем рассматривать остаток общего ресурса b на k-м шаге
как sk состояние процесса выбора управления uk управляемой системы (13).
Из ресурсных ограничений
(14)
0≤ wjuj ≤sk
,
k = 1,n,
j=1
имеем:
а) параметры состояния управляемой системы на k-м шаге оптимизации
(15)
Sk = sk =
b-
wjuj |uj ∈ {0,1} , k = 1,... ,n
,
j=k+1
где s0 = 0 начальное состояние на первом шаге k = 1,
sn = b конечное состояние на последнем шаге k = n;
б) уравнения состояний в прямом времени
sk-1 = sk - wkuk,
связывающие переменные состояний функций Р. Беллмана на шагах оптими-
зации k - 1 и k-м.
Множества значений функции Беллмана на k-м шаге оптимизации пред-
ставим в виде
(16)
Sk = {sk,sk
+ 1, . . . , b} ,
где минимальное значение переменной состояния sk ∈ Sk (15) определяется
из условия:
(17)
sk = min
b-
wjuj
,
uk+1,...,un
j=k+1
причем c учетом неравенства (14) переменные управления uk+1, . . . , un долж-
ны удовлетворять соотношению (5).
Поскольку для любых переменных uk+1, . . . , un и не обязательно тупико-
n
n
вых на k-м шаге справедливо неравенство
wjuj
wj, то ми-
j=k+1
j=k+1
нимальное значение переменной состояния sk ∈ Sk (15) для задач большой
размерности можно определять и из условия:

sk = min
0,
b-
wj
uk+1,...,un

j=k+1
82
Множество допустимых управлений k-го шага представим в виде:
{
[sk ]},
U (sk) = uk ∈ {0, 1}0≤uk
wk
[
]
sk
где
- целая часть числаsk .w
wk
k
Отсюда под действием управления uk система, находящаяся в состоянии
sk-1, перейдет в состояние sk. Показатель эффективности k-го шага опреде-
лим как fk = pkuk.
Заключаем, что задача (3)-(4) поставлена как задача динамического про-
граммирования оптимизации управляемой системы.
2. Этап построения рекуррентных функциональных уравнения Р. Беллма-
на. На решениях задач Z (13) определим функцию Беллмана от k переменных
управления u1, . . . , uk в виде
(18)
Bk(sk) = max
pjuj
,
k = 1, 2,...,n,
u1,...,u
k j=1
с областью определения Sk (16), характеризующую суммарную ценность рюк-
зака от первогого шага до k-го шага.
Так как вычисление последовательности функций Беллмана Bk(sk) (18)
происходит в направлении возрастания дискретного аргумента k (идет слева
направо: 1, 2, . . . ), то для k-го шага имеем рекуррентное уравнение Беллмана
в прямом времени в виде:
(19)
Bk (sk) = m[ax
)} ,
]{pkuk + Bk-1 (sk - wkuk
uk
sk
wk
которое удовлетворяет начальному условию
B1 (sk) = ma[
]p1u1.
0≤u1s1
w1
Выбрав на k-м шаге некоторое произвольное управление uk, система из со-
стояния sk-1 придет в состояние sk. Так как в оптимальном решении задач Z
(13) должно быть либо 0, либо 1, то уравнения (19) запишутся в виде
}
{ p
k,
uk = 1
Bk (sk) = ma[
,
k = 1,2,...,n.
] Bk-1 (sk-1), uk = 0
0≤uksk
ak
Таким образом, для любого значения sk ∈ Sk определение величины Bk(sk)
сводится к простейшей задаче оптимизации сравнению двух чисел, началь-
ное условие при этом для начального шага k = 1 запишется в виде:
}
{ p1, u1 = 1
B1 (s1) = ma[
]
0, u1 = 0
0≤u1s1
a1
83
Дойдя до k = n, определим оптимальное значение целевой функции
Bn(sn), совпадающей со значением целевой функции исходной задачи.
3. Этап решения рекуррентных функциональных уравнений. На данном
этапе алгоритмом обратной прогонки, дойдя до k = n шага, определим оп-
тимальное значение функции Bn (sn), sn ∈ Sn, совпадающей со значением
целевой функции исходной задачи (3)-(4). Из условия Bn (sn) = fn (u∗n) +
+Bn-1 (sn - wnu∗n) имеем оптимальное управление u∗n = u∗n (sn).
Далее последовательно на каждом шаге для k = n, n-1, . . . , 1, определяем
оптимальные управления:
Bn (sn) → u∗n = u∗n (sn) → sn-1 = sn - wnu∗n;
Bk (sk) → u∗k = u∗k (sk) → sk-1 = sk - wku∗k;
B1 (s1) → u∗1 = u∗1 (s1) .
Тогда в конце работы пошаговой процедуры получим оптимальное управ-
ление
(20)
u = (u∗1,... ,u∗n
).
Необходимо заметить, что если на каждом шаге запоминать вектор управ-
ления вида u (k) = (u1, . . . , uk) , k = 1, n, то на последнем шаге сразу можно
выделить оптимальное решение u (20).
4. Сравнительная оценка эффективности алгоритма
Для оценки эффективности алгоритма сравним его трудоемкость с тради-
ционными методами решения задачи о рюкзаке. Продемонстрируем работу
алгоритма на примерах решения задачи разбиения и задачи о рюкзаке.
Пример 1. На данных примера из [9, с. 320-323] решим задачу разбие-
ния. Пусть числа множества B = {100, 70, 50, 20}, пронумерованы по невоз-
растанию, n = 4. Сведем задачу разбиения (1) к эквивалентной задаче о рюк-
заке (3), что можно представить в виде
f (u1,u2,u3,u4) = 100u1 + 70u2 + 50u3 + 20u4 → max ,
u1,...,u4
100u1 + 70u2 + 50u3 + 20u4 ≤ 120,
4
где b =1
bj = 120.
2
j=1
Выполнив шаги 2 и 3 алгоритма, тупиковые управления и соответствую-
щие им значения целевой функции представим в виде табл. 1.
В результате, построив четыре тупиковых управления, получаем два оп-
тимальных решения:
B1 = {b1,b4} = {100,20}, B2 = {b2,b3} = {70,50};
B1 = {b2,b3} = {70,50}, B2 = {b1,b4} = {100,20}.
84
Таблица 1
l
U u1 u2 u3 u4 f (ul)
1
u1
1
0
0
1
120
2
u2
0
1
1
0
120
3
u3
0
1
0
1
70
4
u4
0
0
1
1
70
Таблица 2
l
U u1 u2 u3 u4 f (ul)
1
u1
1
0
0
1
8
2
u2
0
1
1
0
13
3
u3
0
1
0
1
11
4
u4
0
0
1
1
12
Как видно из табл. 1, понадобилось всего лишь четыре тупиковых управле-
ния, чтобы найти точное оптимальное решение. Для решения данной задачи
разбиения графическим алгоритмом понадобилось рассмотреть семь точек
(см. [9, с. 322]), а для алгоритма тупиковых управлений потребовалось по-
строить всего лишь четыре управления (см. табл. 1).
Пример 2. Продемонстрируем работу алгоритма при решении задачи о
рюкзаке на данных примера из [9, с. 326-333].
Постановку исходной задачи представим с учетом убывания весов пред-
метов в виде
f (u) = 3u1 + 6u2 + 7u3 + 5u4 → max ,
u1,...,u4
7u1 + 5u2 + 3u3 + 2u4 ≤ 9,
uj ∈ {0,1} , j = 1,2,3,4.
Выполнив шаги 2 и 3 алгоритма, тупиковые управления и соответствую-
щие им значения целевой функции представим в виде табл. 2.
Построив четыре тупиковых управления, получаем оптимальное решение:
u = u2 = (0,1,1,0) ,
где
u1 = x4 = 0, u2 = x3 = 1, u3 = x2 = 1, u4 = x1 = 0.
Для решения данной задачи о рюкзаке графический алгоритм вычисляет
только 14 элементов [9, с. 333], в то же время для алгоритма тупиковых управ-
лений потребовалось построить всего лишь четыре управления (см. табл. 2).
Пример 3. Рассмотрим задачу о рюкзаке вместимостью b = 10 для мно-
жества из 7 предметов, т.е. J0 = {1, 2, 3, 4, 5, 6, 7}, вес и стоимость которых
представлены в табл. 3 (исходные данные взяты из [15, с. 437]).
85
Таблица 3. Исходные данные задачи о рюкзаке
j
1
2
3
4
5
6
7
wj
4
1
2
3
2
1
2
pj
299
73
159
221
137
89
157
Таблица 4. Результаты решения методом тупиковых управлений
(
)
ξl - значение в десятичной
l
ul = u(l)1, . . . , u(l)7
∑ wkuk
f (ul)
системе счисления
k=1
1
1110010
114
10
752
2
1110001
113
10
768
3
1101010
106
10
730
4
1101001
105
10
746
5
1100110
102
10
750
6
1100101
101
10
766
7
1100011
99
9
682
8
1011100
92
10
752
9
1011011
91
10
757
10
1010111
87
10
777
11
1001111
79
10
755
12
0111110
62
10
747
13
0111101
61
10
763
14
0111011
59
9
679
15
0110111
55
9
699
16
0101111
47
9
677
17
0011111
31
8
615
1. Решение псевдополиномиальным алгоритмом динамического програм-
мирования ДП-III. Результатом решения является подмножество
(21)
J
= {1, 2, 3, 6, 7} ,
где p =j∈J pj = 777.
При этом алгоритм проходит через построение 91 пары (J, p), где J ⊂ J0.
(
)
Трудоемкость данного алгоритма O
n2p
, где p - значение оптимальной
стоимости [15, с. 436].
2. Решение задачи о рюкзаке методом тупиковых управлений. Упорядочим
номера предметов в порядке убывания весов (объемов)
w11 > w42 > w33 ≥ w54 ≥ w75 > w26 ≥ w67 ,
где w11 = 4, w42 = 3, w33 = 2, w54 = 2, w75 = 2, w26 = 1, w67 = 1.
Пусть uk ∈ {0, 1} - переменная управления, принимающая значение еди-
ница, если k-й предмет по порядку помещается в рюкзак, и нулевое значение
в противном случае. Тогда постановку задачи о ранце представим в виде:
299u1 + 221u2 + 159u3 + 137u4 + 157u5 + 73u6 + 89u7 → max
86
N(b)
16
15
14
14
12
10
9
8
7
6
4
4
2
2
1
0
1
2
4
6
8
11
15
b
Зависимость числа тупиковых управлений от веса рюкзака.
при ограничениях
4u1 + 3u2 + 2u3 + 2u4 + 2u5 + 1u6 + 1u7 ≤ 10.
Построенные тупиковые управления и ценность предметов, попадающих
в рюкзак, представлены в табл. 4.
Решением задачи является тупиковое управление u10 = (1010111), которое
совпадает с решением J (21) в исходных обозначениях с величиной ценности
рюкзака:
pj = 299 + 159 + 157 + 73 + 89 = 777.
j∈J
Возникает вопрос о зависимости числа тупиковых управлений от веса рюк-
зака. Можно предположить, что максимальное число тупиковых управлений
будет приходить на вес рюкзака, равный примерно половине суммы весов
всех предметов.
На рисунке приведен график зависимости числа тупиковых управлений
N (b) от веса b рюкзака для исходных данных из табл. 3, где величина веса
(объема) рюкзака определялась по формуле
bk =
wj, k = 1,2,... ,7;
1 ≤ w1 ≤ w2 ≤ ... ≤ w7 ≤ 4.
j=1
Из рисунка видно, что максимальное число тупиковых управлений прихо-
дится на вес рюкзака, равный не менее половины суммы весов всех предме-
тов, и убывает, когда вес рюкзака возрастает, т.е.
1
wj ≤ b < wj,
2
j=1
j=1
[
]
n
n
1
где
wj
- целая часть числа 1
wj.
2
j=1
2
j=1
87
Таблица 5. Рекуррентные функциональные уравнения Р. Беллмана
Тупиковое
Множество
Номер
Функция Р. Беллмана B1(s1)
управление
состояний
шага k
ul
Sk(ul)
1
B1 (s1) = max
299u1, s1 ∈ S1
0111110
0 ÷ 10
0≤u1≤[s1/4]
2
B2 (s2) = max
{221u2 + B1 (s2 - 3u2)}
0011111
2 ÷ 10
0≤u2[s23 ]
3
B3 (s3) = max
{159u3 + B2 (s3 - 2u3)}
0001111
4 ÷ 10
0≤u3[s32 ]
4
B4 (s4) = max
{137u4 + B3 (s4 - 2u4)}
0000111
6 ÷ 10
0≤u4[s42 ]
5
B5 (s5) = max
{157u5 + B4 (s5 - 2u5)}
0000011
8 ÷ 10
0≤u5[s52 ]
6
B6 (s6) = max
{73u6 + B5 (s6 - u6)}
0000001
9,
10
0≤u6[s61 ]
7
B7 (s7) = max
{89u7 + B7 (s7 - u7)}
0000001
10
0≤u7[s72 ]
Таблица 6. Результаты расчетов функций Р. Беллмана в прямом времени
k Шаг 1
Шаг 2
Шаг 3
Шаг 4
Шаг 5
Шаг 6
Шаг 7
sk u1 B1(s1) u2 B2(s2) u3 B3(s3) u4 B4(s4) u5 B5(s5)
u6 B6(s6) u7 B7(s7)
0
0
0
-
-
-
-
-
-
-
1
0
0
-
-
-
-
-
-
-
2
0
0
0
0
-
-
-
-
-
-
-
-
0
0
0
3
-
1
221
-
-
-
-
0
0
299
0
299
4
1
299
1
1
-
-
-
-
0
0
299
0
5
1
299
1
1
380
0
0
299
0
0
458
-
-
-
6
1
299
1
1
458
1
-
-
-
0
0
0
520
0
520
7
1
299
1
520
1
1
-
-
0
0
0
520
0
0
8
1
299
1
520
1
1
595
1
615
0
299
0
520
0
679
0
657
0
677
0
688
-
9
1
1
1
1
1
1
1
0
0
0
1
679
0
0
0
10
1
299
1
520
1
679
0
1
752
1
750
1
777
В этом случае можно предположить, что мощность |U| множества тупи-
ковых U (8), как правило, значительно меньше числа bn, т.е. |U| ≤ cn, где
c > 0, поэтому трудоемкость алгоритма можно оценить как O(n).
88
Таблица 7. Результаты сравнений методов решения задачи о рюкзаке
Число
Процент
Метод решения
прямых
от полного
вычислений
перебора
Полный перебор
128
100%
91
Метод динамического программирования ДП III
91
× 100% ≈ 71%
128
38
Метод динамического программирования с ТУ
38
× 100% ≈ 30%
128
17
Метод тупиковых управлений
17
× 100% ≈ 13%
128
Представляет интерес нахождение функциональной зависимости числа ту-
пиковых управлений от веса рюкзака. Данную проблему, хотя бы для частных
случаев, автор предлагает исследовать читателю.
3. Решение задачи методом динамического программирования с тупико-
вым управлением. Расчет значений функций Беллмана ведется по всем до-
пустимым uk от начала к концу, k = 1, 2, . . . , 7.
Исходное дискретное множество области значений функции Р. Беллмана
S0 = {0,1,2,... ,10}. В табл. 5 сведены функции Р. Беллмана на каждом шаге
оптимизации и множество состояний в зависимости от тупиковых управлений
рекуррентных функциональных уравнений Р. Беллмана.
Результаты расчетов Bk (sk) представлены в табл. 6, где оптимальное
управление выделено подчеркиванием (в скобках после значения функции
Р. Беллмана текущего шага указано значение переменной состояния предше-
ствующей функции Р. Беллмана).
Алгоритмом обратной прогонки находим оптимальное управление:
B7 (s7)|s7=10=777→u7 (s7)|s7=10=1→s6=s7-1u7 =10-1=9;
B6 (s6)|s6=9=688→u6 (s6)|s6=9=1→s5=s6-1u6 =9-1=8;
B5 (s5)|s5=8=615→u5 (s5)|s5=8=1→s4=s5-2u5 =8-2=6;
B4 (s4)|s4=6=458→u4 (s4)|s4=6=0→s3=s4-2u4 =6-0=6;
B3 (s3)|s3=6=458→u3 (s3)|s5=6=1→s2=s3-2u3 =6-2=4;
B2 (s2)|s2=4=299→u2 (s2)|s2=4=0→s1=s2-3u2 =4-0=4;
B1 (s1)|s1=4=299→u1 (s1)|s1=4=1.
(
)
Отсюда u =
u∗1,u∗2,u∗3,u∗4,u∗5,u∗6,u∗7
= (1010111), что соответствует в исход-
ных обозначениях решению J (21). Сравнительный анализ по трудоемкости
методов решений задачи о рюкзаке представлен в табл. 7.
89
Из табл. 7 следует, что применение тупиковых управлений оказалось эф-
фективнее в9117 ≈ 5,3 раза, чем алгоритм ДП III [2, 16], и в3817 ≈ 2,2 раза, чем
метод динамического программирования с тупиковым управлением.
Традиционно считается, что временная сложность метода динамического
программирования линейна по числу этапов, что является его достоинством.
Если число состояний на каждом шаге ограничено константой b, то времен-
ная сложность для задачи распределения ресурсов с небулевским управле-
(
)
нием может быть оценена как O
b2n
[5]. Временная сложность алгоритма с
булевским управлением обычно не превышает величины O(nb) [8]. Покажем,
что если определять множество допустимых состояний k-го шага по форму-
ле Sk (16), то временную сложность вычислений можно оценить как O(n)
за n шагов алгоритма.
Теорема 3 (о трудоемкости метода динамического программирования
с тупиковым управлением). Пусть нижняя граница переменной состоя-
ния sk ∈ Sk (15) на k-м шаге определяется по формуле sk (17), тогда вре-
менная сложность алгоритма динамического программирования с тупико-
вым управлением решения задачи о рюкзаке в прямом времени будет удо-
влетворять неравенству
(22)
|Sk
| ≤ cn,
0 < c < b,
k=1
что равносильно оценке временной сложности как O(n), где |Sk| - число
состояний на k-м шаге оптимизации.
Доказательство. Поскольку для переменной состояний на k-м шаге
выполняется неравенство
sk = b -
wjuj ≥ 0,
j=k+1
то для любых (тупиковых) управлений
u(k) = (uk, uk+1, . . . , un) и
u(k + 1) = (uk+1, uk+2, . . . , un)
справедливо неравенство
b= wj ≥...≥ wjuj
wjuj ≥ ... ≥ wn > 0
∀k = 1,n - 1,
j=1
j=k
j=k+1
т.е.
b ≥ |S1| ≥ |S2| ≥ ... ≥ |Sn| = 1.
Отсюда следуют справедливость неравенства (22) и оценка временной слож-
ности O(n). Теорема 3 доказана.
90
5. Заключение
В статье рассмотрен эффективный алгоритм тупиковых управлений для
решения задач комбинаторной оптимизации, относящийся к классу точных
оптимальных алгоритмов с временной сложностью O(n). В [8, 9] показано,
что графический алгоритм решения задач комбинаторной оптимизации об-
ладает временной сложностью O(n), однако при этом, как показано в приме-
рах 1 и 2, алгоритм тупиковых управлений оказался более эффективным. По
своей эффективности, на данный момент, алгоритм тупиковых управлений
превосходит известные алгоритмы, включая алгоритм Balsub, представлен-
ный в [4].
Также показано, что применение идеи тупиковых управлений при реали-
зации метода динамического программирования позволяет значительно со-
кратить на каждом шаге оптимизации число переменных состояний задачи.
Достоинствами метода тупиковых управлений являются его вычислительная
простота и более высокое быстродействие по сравнению с известными алго-
ритмами, что позволяет решать с его помощью характерные для практики
задачи большой размерности.
СПИСОК ЛИТЕРАТУРЫ
1.
Беллман Р. Динамическое программирование. М.: Мир, 1960.
2.
Кормен Т., Лейзерсон Ч., Ривест Р., Штайн К. Алгоритмы: построение и ана-
лиз. М.: Издательский дом “Вильямс”, 2013.
3.
Pisinger D. A Minimal Algorithm for the 0-1 Knapsack Problem // University of
Copenhagen. Oper. Res. 1997. V. 46. No. 5. P. 758-767.
4.
Kellerer H., Pferschy U., Pisinger D. Knapsack Problems. Springer Science. Business
Media, 2010.
5.
Корнеенко В.П. Методы оптимизации. М.: Высш. шк., 2007.
6.
Сигал И.Х., Иванова А.П. Введение в прикладное дискретное программирова-
ние: модели и вычислительные алгоритмы. М.: Физматлит, 2002.
7.
Гафаров Е.Р., Долгий А., Лазарев А.А., Вернер Ф. Новый эффективный алго-
ритм решения задачи об инвестициях // АиТ. 2016. № 9. С. 150-166.
Gafarov E.R., Dolgui A., Lazarev A.A., et al. A New Effective Dynamic Program
for an Investment Optimization Problem // Autom. Remote Control. 2016. V. 77.
No. 9. P. 1633-1648. https://doi.org/10.1134/S0005117916090101
8.
Лазарев А.А. Графический подход к решению задач комбинаторной оптимиза-
ции // АиТ. 2007. № 4. С. 13-23.
9.
Лазарев А.А. Теория расписаний. Методы и алгоритмы. М.: ИПУ РАН, 2019.
10.
Bretthauer K.M., Shetty B. The Nonlinear Knapsack Problem - Algorithms and
applications // Eur. J. Oper. Res. 2002. V. 138. Iss. 3. P. 459-472.
11.
Riedhammer K., Gillick D., Favre B., Hakkani-Tür D. Packing the Meeting Sum-
marization Knapsack // Proc. Interspeech. Brisbane, Australia, 2008.
12.
Robson J.M. Finding a Maximum Independent set in Time O(2n/4) // Technical
Report 1251-01, LaBRI, Universitte de Bodeaux I, 2001.
13.
Яблонский С.В. Введение в дискретную математику. М.: Наука, 1986.
91
14. Korneenko V.P., Nazyuta S.V., Chursin A.A. System for Uncertainty Factors Ac-
counting When Optimizing and Choosing Effective Options for Network Work
Schedules on a Dynamic Model with Dead-End Controls / IOP Conference Series:
Earth and Environmental Science // Proc. Int. Science and Technology Conf. on
Earth Science. Vladivostok, Russian: IOP Publishing Ltd, 2021. Sci. 666 062129.
https://doi.org/10.1088/1755-1315/666/6/062129.
15. Пападимитриу Х., Стайглиц К. Комбинаторная оптимизация. Алгоритмы и
сложность. М.: Мир, 1985.
Статья представлена к публикации членом редколлегии А.А. Лазаревым.
Поступила в редакцию 20.01.2020
После доработки 17.03.2021
Принята к публикации 30.06.2021
92