

advertisement
Повышение эффективности алгоритма...

Р. В. Кудрявцев
Повышение эффективности алгоритма
динамического программирования для
решения булевых задач
Алгоритм динамического программирования для решения
булевых задач (АДПБЗ) предложен в работе [1] и реализован с
модуле Combinatorics инструментальной системы Decision [2].
В данной статье предложена модификация АДПБЗ, которая,
с одной стороны, позволит увеличить производительность
алгоритма (скорость счета) и, с другой стороны, достаточно
просто может быть реализована на объектно-ориентированных
языках программирования, в частности на языке Java.
Комбинаторные задачи часто встречаются при производственном планировании и в социально-экономических
исследованиях [3]. Так, например, при разработке инвестиционного проекта возникает необходимость компоновки
мероприятий, которые могут быть включены в рассматриваемый
проект, при условии наличия ограничений на ресурсы
(финансовые, трудовые и пр.). При этом инвестор стремится
к максимизации результата (значение целевого показателя),
в частности, прибыли от проекта. Таким образом, задача
компоновки мероприятий в рамках инвестиционного проекта
может быть сведена к задаче булева программирования
следующего вида:
161
Р. В. Кудрявцев
n
→ max
(1.1)
≤ bi , i = 1, m;
(1.2)
∑c x
n
∑a x
j
j =1
j =1
ij
j
j
(1.3)
x j ∈ {0,1}, j = 1, n ,
где переменная х j принимает значение 0 в случае, когда
мероприятие включается в проект, и 1 – в обратном случае,
коэффициент cj есть значение целевого показателя для j-го
мероприятия, коэффициент cij определяет значение количества
i-го ресурса, необходимого для проведения j-го мероприятия,
а коэффициент bi задает ограничение на соответствующий i-й
ресурс. Решением задачи (1.1)–(1.3) является набор значений
булевых переменных x j ∈ {0,1}, j = 1, n .
Задачу булева программирования (1.1)–(1.3) можно обобщить дополнительными ограничениями учитывая тот факт,
что на практике многие мероприятия могут иметь логическую
связь. Логическая связь мероприятий отражает некоторое
техническое, технологическое или организационное условие
их сочетания. С одной стороны, логическая связь позволяет
сделать постановку задачи более точной, с другой стороны,
включение логической связи вводит дополнительные ограничения, что сужает множество возможных вариантов сочетаний
мероприятий, тем самым облегчив процесс принятия решения
по проведению инвестиционной программы.
Логические связи можно представить как сочетание утверждений. Пусть Pi – переменная, значением которой является
следующее утверждение: «Включить элемент i в искомую
выборку». В работе [1] предлагается рассматривать 3 типа
логических связей, истинностные таблицы которых показаны
в таблице 1.
Таблица 1. Логические связи и их истинностные
таблицы
162
P1
P2
[P1, P2]
(P1) → (P2)
{P1, P2}
И
И
Л
Л
И
Л
И
И
Л
И
Л
И
И
И
И
Л
И
И
И
Л
Повышение эффективности алгоритма...
Для двух мероприятий Р1 и Р2 логическая связь [Р1, Р2]
означает, что не более одного из этих мероприятий может быть
включено в допустимую выборку. Присвоим данному типу
логической связи номер 1. Логическая связь Р1 → Р2 означает,
что если мероприятие Р1 включено в допустимую выборку, то
и мероприятие Р2 также может быть включено в допустимую
выборку. Присвоим данному типу логической связи номер 2.
Логическая связь {Р1, Р2} означает, что хотя бы одно из этих
мероприятий должно быть включено в допустимую выборку.
Присвоим данному типу логической связи номер 3. Кроме
этого, можно также выделить отдельный тип логической связи
«независимое мероприятие», которое вводится для любого
мероприятия, не отнесенного ни к одному из вышеуказанных
типов. Присвоим данному типу логической связи номер 4. Будем
считать допустимой ту выборку, которая удовлетворяет всем
логическим связям задачи.
АДПБЗ делится на 3 группы последовательно применяемых
алгоритмов:
- выделение связных подсетей;
- построение допустимых выборок каждой подсети;
- комбинирование допустимых выборок на принципах динамического программирования.
В данной статье предлагается усовершенствованная
модификация построения допустимых выборок. Для того
чтобы проиллюстрировать идею предлагаемой модификации
алгоритма, обратимся к условному примеру. Пусть имеются две
площадки для строительства. На площадке 1 можно построить
торговый центр либо спорткомплекс. Строительство паркинга
на площадке 1 возможно, если будет построен торговый центр.
На площадке 2 можно построить либо офисный центр, либо
библиотеку. Строительство ресторана на площадке 2 возможно
лишь после завершения строительства офисного центра. Причем
застройщик обязан сдать спорткомплекс или библиотеку в рамках
условий предоставления площадок под строительство. Для
удобства обозначим числами соответствующие мероприятия:
163
Р. В. Кудрявцев
Таблица 2. Список и номера мероприятий
Строительство торгового центра на площадке 1
Строительство паркинга на площадке 1
Строительство спорткомплекса на площадке 1
1
2
3
Строительство офисного центра на площадке 2
4
Строительство ресторана на площадке 2
5
Строительство библиотеки на площадке 2
6
Набор мероприятий из таблицы 2 имеет следующую сеть
логических связей:
[1,3] ; (1)→(2) ; {3,6}; [4,6] ; (4)→(5)
Приведенная сеть является связной. При небольшом числе
N «мероприятий» все допустимые выборки можно получить
методом полного перебора. При этом, однако,
придется
N
составить и рассмотреть на допустимость V = ∑ CiN выборок.
i =1
Это практически невозможно, так как V экспоненциально
возрастает с ростом N. Так, при N = 75 количество выборок
равно V ≈ 1022.
Рассмотрим метод, который позволяет отбросить достаточно
большое число выборок без необходимости их проверки. Для
простоты ограничимся случаем, когда по условиям задачи
можно выделить лишь одну связанную сеть, включающую
логические связи типа 1, 2 и 3 без независимых «мероприятий».
Вначале предположим, что имеются только логические
связи типа 1. Тогда можно предложить следующий алгоритм
построения множества допустимых выборок без учета ресурсных
ограничений. Для примера будем рассматривать следующий
набор логических связей: [1,2,3], [2,3,4], [5,6].
Шаг 1. В качестве допустимых выборок длины 1 можно
выписать по порядку все номера мероприятий (рис. 1).
1
2
3
4
5
6
Рис. 1. Допустимые выборки длины 1
164
Повышение эффективности алгоритма...
Шаг 2. С каждым номером мероприятия списка допустимых
выборок длины 1 мы можем сопоставить список больших
по значению мероприятий, с каждым из которых данный
номер мероприятия не может составить допустимую выборку
длины 2 согласно существующим логическим связям типа
1. Для этого достаточно для каждого элемента допустимой
выборки длины 1 выписать номера мероприятий, каждый из
которых имеет большее значение и включен хотя бы в одну
логическую связь типа 1, что и номер мероприятия, включенный
в рассматриваемый элемент. Тогда, согласно таблице 1, комбинация номера допустимой выборки длины 1 и любого номера
из соответствующего списка не сможет пройти проверку на
допустимость по логическим связям типа 1. На рисунке 2 эти
списки выделены серым цветом
1
2
3
2
3
4
3
4
4
5
6
6
Рис. 2. Выделение списков недопустимых номеров
мероприятий для составления допустимых выборок длины 2
После этого для каждой допустимой выборки длины 1
можно выделить список номеров мероприятий, с которыми
данная выборка может составить допустимую выборку длины
2. Для этого достаточно для любой допустимой выборки длины
1 выписать все номера мероприятий, имеющих значение,
большее, чем номер, включенный в рассматриваемую
выборку, а затем исключить из них все номера, включенные
в соответствующий список мероприятий, с которыми нельзя
составить допустимую выборку длины 2. На рисунке 3 для
каждой допустимой выборки длины 1 стрелкой указан список
мероприятий, годных для образования допустимых выборок
длины 2, причем пустой клетке соответствует пустой список.
165
Р. В. Кудрявцев
1
4
5
2
5
6
3
5
6
4
5
2
6
6
5
6
6
Рис. 3. Выделение списков допустимых номеров мероприятий
для составления допустимых выборок длины 2
В результате мы получаем список допустимых выборок длины
2, причем здесь нет выборок с одинаковым набором элементов
(см. рис. 4).
1
4
1
5
1
6
2
5
2
6
3
5
3
6
4
5
2
6
6
4
Рис. 4. Список допустимых выборок длины 2
Шаг 3. Мы рассматриваем список допустимых выборок длины
2. Для каждой допустимой выборки длины 2 выделяем списки
номеров мероприятий, не подходящих для создания допустимых
выборок длины 3, путем объединения соответствующих списков
для номеров мероприятий, включенных в рассматриваемую
выборку (рис. 5).
166
Повышение эффективности алгоритма...
1
4
1
5
1
6
2
5
2
6
3
5
3
6
4
5
2
6
6
4
6
6
6
6
Рис. 5. Выделение списков недопустимых номеров
мероприятий для составления допустимых выборок длины 3
Соответственно, создаем для каждой допустимой выборки
длины 2 список номеров мероприятий, годных для создания
допустимых выборок длины 3 (рис. 6).
1
4
1
5
1
6
2
5
2
6
3
5
3
6
4
5
2
6
6
4
5
6
Рис. 6. Выделение списков допустимых номеров мероприятий
для составления допустимых выборок длины 3
Также происходит построение допустимых выборок длины 4
на четвертом шаге, длины 5 на пятом и так далее до тех пор, пока
на каждом шаге n удается построить допустимую выборку длины
n. На рисунках 7–9 отражены этапы построения допустимых
выборок длины 4.
1
4
5
1
4
6
Рис. 7. Список допустимых выборок длины 3
167
Р. В. Кудрявцев
1
4
5
1
4
6
6
Рис. 8. Выделение списков недопустимых номеров
мероприятий для составления допустимых выборок длины 4
1
4
5
1
4
6
Рис. 9. Выделение списков допустимых номеров мероприятий
для составления допустимых выборок длины 4
Таким образом, на каждом шаге n происходит построение
списка допустимых выборок длины n в том случае, если на
шаге n – 1 существует хотя бы одна допустимая выборка длины
n – 1, имеющая непустой список номеров мероприятий, годных
для построения допустимой выборки длины n. На рисунке 10
показан результат построения списка всех допустимых выборок
рассматриваемого примера.
1
2
3
4
5
6
1
4
1
5
1
6
2
5
2
6
3
5
3
6
4
1
5
2
6
6
4
5
1
4
6
4
Рис. 10. Список всех допустимых выборок
168
Повышение эффективности алгоритма...
Преимущество указанного алгоритма заключается в том, что,
руководствуясь таблицей истинности для логических связей
первого типа (см. таблицу 1) и имея набор таких логических
связей данного типа, на шаге n мы можем сразу выписать
неповторяющиеся допустимые выборки длины n, если на шаге
n – 1 нам удалось построить выборку длины n – 1. Это позволяет
исключить перебор всевозможных комбинаций мероприятий
с проверкой на допустимость по логическим связям первого
типа, а также с проверкой на наличие допустимых выборок с
одинаковым набором мероприятий.
Эта процедура может быть обобщена также на связи типа
2 и типа 3.
Список литературы:
1. Лихтенштейн В. Е. Дискретность и случайность в экономико-математических
задачах. М.: Наука, 1973.
2. Лихтенштейн В. Е., Росс Г. В. Информационные технологии в бизнесе.
Практикум: применение системы Decision в микро- и макроэкономике. М.:
Финансы и статистика, 2008.
3. Росс Г. В. Моделирование производственных и социально-экономических
систем с использованием аппарата комбинаторной математики. М.: Мир,
2001.
169
Download