2010 Вычислительные методы в дискретной математике №4(10)
ВЫЧИСЛИТЕЛЬНЫЕ МЕТОДЫ В ДИСКРЕТНОЙ МАТЕМАТИКЕ
УДК 519.857
НОВЫЕ АЛГОРИТМЫ ОПТИМАЛЬНОГО РАСПРЕДЕЛЕНИЯ РЕСУРСА
В. И. Струченков
Московский государственный институт радиотехники, электроники и автоматики,
г. Москва, Россия
E-mail: [email protected]
Предложены новые алгоритмы решения задачи оптимального распределения ресурса, использующие множества Парето и двусторонние прогностические оценки оптимума, получаемые по методу ветвей и границ.
Ключевые слова: оптимальное 'распределение ресурса, множество Парето, метод ветвей и границ.
1. Постановка задачи
Рассмотрим задачу: найти минимум (или максимум) суммы
П
Eg(x) (1)
¿=1
при ограничениях
n
/¿(Жг) ^ R, X е Xi, i = 1, 2,..., n, (2)
i=1
где Xi — конечные множества; /¿(жг) ^ 0; дг(жг) ^ 0 и R > 0. Целочисленность функций /¿(xi) и gi(xi) необязательна. Предполагается, что множество (2) допустимых решений не пусто. В таком виде могут быть записаны различные задачи, сводящиеся к распределению заданного ресурса R между n потребителями. В задаче на максимум функции /¿(жг) характеризуют ресурс, а дг(жг) —эффективность его использования [1]. При /¿(xi) = ргжг и g (жг) = сгжг получается задача оптимальной загрузки транспортного средства предметами, веса которых равны рг, стоимости — сг, а количества — Xi (xi = 0,1, 2,...) [1]; если при этом Xi е {0,1}, то получается известная задача о ранце. В задаче на минимум функции /i(xi) —ресурс, а gi(xi) —затраты. Например, /¿(xj) — ресурс времени, а g(xi) —затраты на осуществление некоторого проекта. Или (как при проектировании оптимальной защиты поверхности [2]) /¿(xj) —допускаемый ущерб от неполной защиты i-го элемента поверхности, а g (xj) —затраты на его защиту.
2. Новые алгоритмы
Для решения задачи оптимального распределения ресурса предложено несколько алгоритмов [1-3], в частности, в [2] излагается следующий алгоритм, который является обобщением алгоритма Немхаузера — Ульмана, предназначенного для решения простейшей задачи о ранце [4].
Далее рассматривается задача (1), (2) на максимум. Пусть ^т = {(х^...,хт) :
т
(Х1, . . . ,Хт) е XI X ... X Хт, Е /¿(хг) ^ Д}. Каждому вектору X = (XI, . . . ,Хт) е ^т
¿=1
тт
сопоставляется пара чисел (Рт(х), Ст(х)) вида Рт(х) = ^ /¿(хг), Ст(х) = ^ дг(хг).
¿=1 г=1
Из полученной совокупности пар, образующей мультимножество (так как могут существовать такие х,у е фт, что (Рт(х), Ст(х)) = (Рт(у), Ст(у)), выделяется его носитель N и на нём вводится следующее отношение частичного порядка:
(а, Ь) >- (с, ^) ^ (а ^ с & Ь ^ ^).
Подмножество Парето в N составляют пары, максимальные относительно этого порядка, также называемые паретовскими точками. Алгоритм состоит в последовательном построении множеств Парето $0, $ъ ... , $п, где $0 = {(0, 0)}, а $т = {(Рт(х), Ст(х)) : х (х1, . . . , хт) е (^т_1 (х1, . . . , хт-1) , ^т-1 (х1, . . . , хт-1)) е 5т_1 и для любой
пары (^т(у), Ст(у)) е £т либо Рт(у) < Рт(х) и Ст(у) < &т(х), либо Рт(х) < Рт(у)
и Ст(х) < Ст(у)}.
Технически, для каждой пары (Рт_ 1(х), Ст—1(х)) е £т_ 1 и таких значений а е Хт, что (х о а) е ^т, где о — операция конкатенации, строятся векторы длины т и соответствующие им пары (Рт—1(х) + /т(а), Ст—1(х)+ дт(а)). Если для очередной полученной пары в множестве £т нет равных или больших нее, то она также добавляется в £т, при этом все пары, которые меньше нее, исключаются из £т. Решением задачи (1), (2) на максимум является вектор х е фп, которому соответствует пара (Рп(х), Сп(х)) е £п с максимальным значением Сп(х).
Для решения задач большой размерности также актуальна дополнительная отбраковка тех векторов, которым соответствуют бесперспективные паретовские точки. Предлагаемый в данной работе алгоритм (алгоритм отбраковки паретовских точек) делает это, используя идеи метода ветвей и границ.
Далее рассматривается задача (1), (2) на минимум. Обозначим затраты, соответствующие некоторому начальному приближенному решению, через Е (в методе ветвей и границ они называются рекордом), а их нижнюю границу через Н. Пусть теперь построено частичное решение х1 = (х1,... , хт) е ^т и соответствующая ему точка (Рт(х'), Ст(х')) принадлежит £т, т. е. является паретовской. Для этой точки рассмот-
П П
рим задачу (Рт) : Е /¿(хг) ^ Д - ^Цх^,... ,хт), Е д(хг) —> ш1п. Пусть Ет —
¿=т+1 ¿=т+1
п
затраты ( ^ дг(хг)), соответствующие некоторому приближенному решению г зада-
¿=т+1
чи (Рт), а Нт — нижняя граница затрат в решении (Рт). Тогда условие отбраковки этой точки, ввиду ее очевидной бесперспективности, примет вид Ст(х') + Нт ^ Е. Если же Ст(х;) + Ет < Е, то новое значение рекорда равно Ст(х;) + Ет. Соответственно изменяется и вектор, задающий рекорд. Если Ет = Нт, то это значит, что приближенное решение г задачи (Рт) является точным, и её дальнейшее рассмотрение не требуется. Если при этом Ст(х') + Ет < Е, то вектор (х; о г) запоминается и хранится до тех пор, пока не будет получено значение рекорда, меньшее чем Ст(х;) + Ет. Если «рекорд устоит», то соответствующее ему решение и является оптимальным. Если при некотором т не останется ни одной паретовской точки, то рекорд является решением.
При каждом т можно корректировать нижнюю границу, вычисляя значение Н = т1п(Ст(х) + Нт), где минимум берётся по всем оставшимся паретовским точкам из £т, и заменяя Н на Н при Н > Н. Если не требуется точное решение, то счёт
прекращается при Е — Н < еН, где е определяется требуемой точностью решения задачи. В этом случае рекорд Е и соответствующий ему вектор х дают приближённое решение задачи (1), (2). Заметим, что оценки Нт и Ет нужно получать для каждой паретовской точки для т = 1, 2,... , п — 1. Эти оценки, как правило, получаются решением вспомогательной задачи. Для эффективности алгоритма в целом существенное значение имеют и качество этих оценок (их близость к оптимуму), и быстродействие алгоритма решения вспомогательной задачи. В задачах большой размерности число паретовских точек может быть велико, и время, затрачиваемое на дополнительные вычисления, может сводить к нулю эффект от дополнительной отбраковки паретовских точек.
3. Построение начального приближения и двусторонних оценок
Начальное приближение строится следующим образом: элементы х^ для г = = 1, 2,..., п пронумеруем так, чтобы выполнялось условие / < /2 < ... < /^ . Здесь х^ для г = 1, 2, ...,п, ] = 1, 2,..., к — элементы конечных множеств X; к = |Хг|; / = /¿(х^) и д^ = д*(х^) —соответствующие значения ресурса и затрат (в задаче на минимум). Другими словами, для каждого г значения х^ упорядочиваем по возрастанию ресурса; соответственно затраты должны строго убывать.
Получим: д1 > д2 > ... > дк. Если условие монотонности нарушается, то соответствующая точка (/(х),д*(х^)) исключается из дальнейшего рассмотрения как бесперспективная (непаретовская) ещё на этапе предварительной обработки данных [5, с. 239].
Откладывая // по оси абсцисс, а д^ по оси ординат, получаем последовательность точек, которая определяет для каждого г строго монотонно убывающую кусочно-линейную функцию. Будем считать, что такие функции построены для всех г. Множество их графиков (ломаных линий) обозначим через ¿ь Те из ломаных, которые не являются выпуклыми, заменим их выпуклыми оболочками. Полученное множество ломаных линий и*(2), г = 1, 2,..., п, обозначим через ¿2. Поскольку при замене невыпуклой ломаной её выпуклой оболочкой уменьшается число вершин, введём новые обозначения:
2 вместо / и и* вместо д*.
В результате получаем оценочную задачу: найти минимум суммы
п
Еи* (2 ) (3)
¿=1
при ограничениях
п
Е 2г(х*) ^ Я, х* € X, г =1, 2,..., п. (4)
=1
Крайние точки ломаных из ¿2 совпадают с крайними точками соответствующих ломаных из ¿1. Абсолютные величины угловых коэффициентов звеньев ломаных Wi (2*) будем называть уклонами. В силу выпуклости для каждой ломаной из ¿2 последовательность уклонов строго монотонно убывающая. Абсциссы концов звеньев ломаных из ¿2 обозначим через 6^, их множества — через В*, а уклоны звеньев — через М.
Рассматриваем непрерывную задачу: на каждой ломаной из ¿2 найти точку с абсциссой 2* и ординатой и* так, чтобы сумма абсцисс не превосходила заданный ресурс Я, а сумма ординат была минимальной.
Оптимум непрерывной задачи (3), (4), который, очевидно, не более оптимума задачи (1), (2), примем в качестве искомой нижней границы. Решение непрерывной задачи (3), (4) можно найти следующим образом.
1. Фиксируем точку с минимальными значениями всех , то есть на каждой ломаной берём начальную точку. Ей соответствует значение целевой функции
П П
Еиг(/) = Е Л1.
г=1 г=1
Это максимальное значение целевой функции при допустимых значениях переменных, то есть искомых абсцисс. Предстоит в п-мерном пространстве построить траекторию спуска так, чтобы, не нарушая ограничений, максимально уменьшить целевую функцию, то есть спуститься как можно ниже. Фиксируем остаток ресурса
П
т = я-Е/1 =1
2. Из всех звеньев всех ломаных из выбираем звено с максимальным уклоном. Пусть это будет звено с номером ] ломаной с номером 5. На первом шаге ] = 1 в силу выпуклости ломаных. Будем менять только переменную г8. Её увеличение даёт уменьшение целевой функции с наибольшей скоростью. Вычисляем шаг движения с = тт(6^+1 — 6^, Т) и меняем на + с. Целевая функция уменьшится на и?с, а оставшийся ресурс — на с.
3. Из оставшихся звеньев всех ломаных из выбираем звено с максимальным уклоном и повторяем п. 2, пока оставшийся ресурс Т не будет исчерпан.
Отметим, что в точке минимума все переменные £8, кроме, быть может, той, которая менялась на последнем шаге, примут значения из соответствующих множеств В5.
Если при выборе звена с максимальным уклоном таких звеньев оказывается несколько, то приоритет отдаётся звену с максимальной длиной, которое оставшийся ресурс позволяет использовать полностью (расход ресурса не превышает его текущий остаток), то есть 6^+1 — 6^ ^ Т. При отсутствии такого звена среди звеньев с равными максимальными уклонами используется любое из них, например звено с наименьшей длиной. Попытка отказаться от использования максимальных уклонов в этой ситуации и разместить полностью какой-либо другой элемент приводит к неоправданному усложнению алгоритма и увеличению времени счёта
Если окажется, что и последняя из изменяемых переменных в точке минимума примет значение из множества В (6к+1 — 6^ = Т), то решение непрерывной задачи совпадает с решением исходной дискретной задачи, и на этом расчёт заканчивается. В противном случае полученное решение непрерывной задачи является начальным приближением, а значение целевой функции в точке минимума является искомой нижней границей Н. Если последним рассматривалось звено ломаной, которая изначально была выпуклой, то приближённое решение исходной дискретной задачи получаем, аннулируя последний шаг (этим объясняется стремление сделать его как можно меньше). В противном случае по оптимальному значению определяется абсцисса ближайшей слева вершины к-й ломаной из Ь1. Ординату этой вершины обозначим через $£. Нижняя граница Н не изменяется, а рекорд становится равным Е = Н + — и(г^).
Изложенный алгоритм даёт оптимальное решение непрерывной задачи за счёт выбора на каждом шаге максимального из всех оставшихся уклонов, то есть оптимального варианта использования ресурса. Чтобы в этом убедиться, рассмотрим первый шаг алгоритма. Если максимальный уклон М не использовать, то соответствующий ему ресурс 62 — 6^ будет исчерпан каким-то другим способом (изменится одна или несколько других переменных вместо г8), но при этом снижение затрат будет меньше.
На всех прочих шагах также нет смысла игнорировать максимальный уклон, так как очевидно, что именно он даёт наибольшее снижение затрат.
Другими словами, предположив, что в точке минимума непрерывной задачи = 2^, приходим к противоречию, так как уменьшение абсциссы любой другой точки при соответствующем увеличении г8, очевидно, даёт уменьшение целевой функции. Изложенный алгоритм можно использовать и при построении границ затрат на оставшихся шагах для каждой паретовской точки. Вместо Я нужно взять оставшийся ресурс, начальная точка имеет координаты /, I = г, г+1,... , п, где г — номер очередного шага. Значение целевой функции в этой точке равно
П
Е (/).
г=1
Для реализации алгоритма существенное значение имеет способ поиска наибольших уклонов. Простой способ состоит в сортировке всех уклонов всех звеньев ломаных из ¿2 как единого массива в порядке невозрастания. Возможны и более экономные способы, но мы не будем их рассматривать.
Аналогично может быть решена и задача (1), (2) на максимум. При этом алгоритм несколько изменяется: используются вогнутые оболочки вместо выпуклых, решение непрерывной задачи становится нижней границей и т.д. Однако, чтобы не разрабатывать новую компьютерную программу, можно преобразовать задачу на максимум в эквивалентную ей задачу на минимум, взяв в качестве целевой функции вместо
П
Ед* (х)
=1
функцию
п
Е(дтах - д(х)),
=1
где дтах — максимальная эффективность для ¿-го потребителя ресурса. В вышеупомянутых частных случаях рассматриваемой задачи вычисления существенно упрощаются, так как при / (хг) = ргхг и (хг) = сгхг для каждой ломаной все звенья имеют один уклон, а при хг Е {0,1} каждая ломаная состоит из одного звена.
Экспериментально установлено, что для задачи (1), (2) общего вида, особенно при вещественных значениях функций /г (хг), алгоритм с отбраковкой паретовских точек по методу ветвей и границ даёт существенное снижение времени счёта по сравнению с отбраковкой только непаретовских точек.
Так, уже упоминавшаяся задача о защите поверхности [5] при числе элементов п = 400 и числе способов защиты различных элементов , равном 13, 42 или 45, решалась без отбраковки непаретовских точек по алгоритму «киевский веник» за 65 мин, при отбраковке только непаретовских точек за 12 с, а при дополнительной отбраковке паретовских точек по методу ветвей и границ за 2 с при снижении максимального (по шагам) числа точек с 11954 до 2609. Решение по методу регулярной сетки [1] с той же точностью потребовало более 3 ч, что объясняется необходимостью введения малого дискрета и соответственно большим числом дискретов сетки при вещественных и неравноотстоящих значениях ресурса. При этом из-за недостаточности оперативной памяти (512 Мбайт) подключается внешняя память, обмен с которой занимает много времени.
Дополнительно были выполнены расчёты на моделях с числом элементов 600 и способов зашиты до 70. Установлено, что и в этом случае алгоритм дополнительной
отбраковки паретовских точек по методу ветвей и границ даёт существенное сокращение времени счёта по сравнению с отбраковкой только непаретовских точек, но это сокращение в значительной степени зависит от конкретных числовых данных при неизменных П и fcj.
Исследования свойств алгоритмов продолжаются, однако уже сейчас в целом можно констатировать, что новый алгоритм позволяет решать задачи распределения ресурса (1), (2) большой размерности много быстрее, чем традиционный алгоритм регулярной сетки [1] и алгоритм «киевский веник» [3] за счёт отбраковки бесперспективных вариантов (непаретовских и части паретовских точек) и всех их продолжений.
ЛИТЕРАТУРА
1. Беллман Р., Дрейфус С. Прикладные задачи динамического программирования. М.: Наука, 1965. 458 с.
2. Струченков В. И. Динамическое программирование с использованием множеств Парето // Дискрет. анализ и исслед. опер. 2008. Т. 15. №6. С. 58-62.
3. Михалевич В. С. Последовательные алгоритмы оптимизации и их применение // Кибернетика. 1965. №1. С. 45-46.
4. Кузюрин Н. Н., Фомин С. А. Эффективные алгоритмы и сложность вычислений. М.: МФТИ, 2007. 210c.
5. Струченков В. И. Методы оптимизации в прикладных задачах. М.: Солон-Пресс, 2009. 310с.