Кузьмина А. А.
МНОГОШАГОВЫЙ АЛГОРИТМ МНОГОМЕРНОЙ ПОИСКОВОЙ ОПТИМИЗАЦИИ
Предлагается видоизмененный алгоритм регулярного поиска экстремума, имеющий преимущество в быстродействии по отношению к классическому алгоритму регулярного поиска.
В настоящее время для решения задач оптимизации активно используются распределенные вычислительные системы. Это позволяет существенно сократить временные затраты на вычисления и решать задачи такого уровня сложности, который ранее был недоступен.
В то же время использование распределенных вычислительных систем требует специальных мер по организации параллельных вычислений, и выбора таких методов оптимизации, которые удобны для распараллеливания. Поэтому, наиболее предпочтительными методами оптимизации функций являются методы полного перебора и пассивного случайного поиска - по причине их внутреннего параллелизма. Однако эти методы имеют существенный недостаток - большое количество вычислений в бесперспективных областях.
Чтобы избавиться от поиска в областях, которые не могут содержать оптимум, необходимо использовать какую-либо дополнительную информацию о характере функции - либо априорную, любо полученную уже в ходе поиска. В последнем случае алгоритм поиска будет уже не строго параллельным, а последовательно-параллельным.
Примером такого последовательно-параллельного алгоритма является многошаговый алгоритм многомерной поисковой оптимизации унимодальной функции, предложенный в настоящем докладе.
Приводится видоизмененный алгоритм регулярного поиска, в котором разбиение пространства поиска происходит сначала грубо, затем детализируется. Область поиска покрывается равномерной сеткой с большим интервалом, и таким образом разбивается на подобласти. В середине каждой подобласти берется итерация (вычисляется значение функции). Затем подобласть, для которой получено рекордное (то есть минимальное на данном этапе вычислений) значение функции, снова разбивается на подобласти, и так далее. Такой подход дает преимущество в быстродействии при сохранении точности за счет снижения объема вычислений в областях, где оптимум находиться не может.
Важно заметить, что такой принцип поиска работает только для унимодальных функций, поэтому применять предложенный алгоритм можно лишь для решения задач, в которых есть основания предполагать наличие только одного экстремума.
1. Постановка задачи
Пусть исследуемая целевая функция имеет один минимум и зависит от n независимых параметров -
v v v тг - ^ Г min max 1
Х^Х2---ХП. Каждый параметр Xj изменяется в диапазоне х;- •
Необходимо найти минимум целевой функции с некоторой точностью £ за время Т.
В строгом смысле точность - это разница между истинным значением экстремума и найденным. Однако поскольку истинное значение экстремума функции нам неизвестно, мы не можем использовать это определение точности в качестве заданного априори критерия остановки. Тем не менее, очевидно, что косвенным критерием точности может являться расстояние между соседними точками, в которых берется итерация. В самом деле, каким бы ни был характер функции - чем ближе друг к другу мы берем итерации, тем точнее будет найденное значение экстремума.
Из этих соображений в качестве критерия точности £ примем расстояние вдоль одной оси между двумя соседними точками, в которых производится итерация, выраженное в процентах от длины диапазона изменения соответствующей переменной.
2. Алгоритм поиска экстремума
2.1. Определяем число циклов вычислений
Пусть n - число переменных (координатных осей пространства переменных), /jj - время выполне-
ния одним процессором одной итерации.
2.1.1. Задаем точность разбиения £ - расстояние между соседними точками, в которых берется
итерация, в процентах от всей длины интервала изменения переменной. Принимаем £ одинаковой для всех переменных.
2.1.2. Вычисляем число узлов сетки - это такое количество точек, которое мы имели бы при заданной точности, если бы не разбивали процесс вычислений на этапы.
2.1.3. Задаем приемлемое время всего процесса вычислений - Т. Это время чистых вычислений, за вычетом времени на коммуникации.
2.1.4. Определяем, сколько итераций процессор успеет произвести за время Т.
Т
^ед =— (2)
Ч г
2.1.5. Определяем число циклов.
Пусть С - это число циклов (которое нам предстоит найти). Зависимость числа итераций от С выражается следующим соотношением:
1
2.1.5. Поскольку уравнение (4) не решается относительно С аналитически, построим график функций:
Введение
(1)
Що = N ■(N6s) (3)
Подставив (1) и (2) в (3), получаем соотношение между С, £ и ton: n
є ' (5)
Ч I
2.1.6. Найдем точку пересечения этих графиков в положительном квадранте и примем С как ближайшее большее целое к точке пересечения по оси С.
2.2. Построим равномерную сетку на пространстве поиска
При заданной точности разбиения г и заданном числе циклов С число точек на каждом цикле будет п_
ЛГ (100%^с
*-Ы (б)
В дальнейшем, в целях лучшего визуального представления будем рассматривать функцию двух переменных, однако предложенный алгоритм можно распространить на случай п независимых переменных, поскольку если функция выпукла (например, книзу), то в любой точке, которая ближе к минимуму, значение функции меньше, чем в любой точке, которая дальше от минимума.
Разбив пространство переменных на N точек, присвоим каждой точке координаты I, ] - по осям
Х^, Х^ соответственно.
2.3. Распределяем точки по процессорам
Пусть однородная вычислительная среда содержит Р процессоров. Каждый процессор должен произ-N
вести — итераций. Пусть на один процессор приходится z точек по оси х1 и к точек по оси х2, так Р
что
z • к - *
Р
2 — оаёг а к — оаёг а
Присваиваем каждому процессору номер рЕ\...Р .
Диспетчер рассылает каждому процессору с ярлыком р пакеты точек с координатами
{и} ' р\, у е[к-(р-\\...,к- р\ .
і*1),-_1 +(Х1 )Л (Х2)у-1 +(*2)^
2.4. Введем обозначение фф ,•= Р ( ; ) - значение целевой функции в середу 2-2
дине прямоугольника с координатами {г,у} . Каждый процессор вычисляет ф— для присвоенных ему то-
чек. Каждый процессор находит ф
Ш1П
для своих точек.
2.5. Каждый процессор отсылает диспетчеру свое значение Фтп и координаты {/, у} области, которой оно соответствует. Диспетчер находит область с минимальным значением Ф\тп .
2.6. Область с минимальным рекордом Фтп вновь разбиваем на N подобластей.
Пусть ]’} - координаты минимальной области.
Присваиваем
(ХД -(Х1)г-—1 ( х1 )г-=( х1)1+(1)г' 21);,—1 -(г'—1)
I е 1..2
(Х2 )1 -(Х2)/—1
(Х2)у-(■Х2), + ^^ (У — О
У е1.. Р
Повторяем шаги 2.3 - 2.5 до тех пор, пока расстояние между двумя соседними итерационными точками не станет равным 8 , то есть пока не будет удовлетворен критерий точности.
3. Пример применения метода
Рассмотрим на примере, какое преимущество в быстродействии дает вышеописанный метод по сравнению с классическим методом регулярного поиска. Критерий точности примем как расстояние между итерационными точками, критерий быстродействия - как количество итерационных точек.
Для этого рассмотрим задачу на оптимизацию заданной алгоритмически функции двух переменных
/ (Х|, Х^) на области изменения параметров
Х е(0..25)
*2 є (0..250).
3.1. Решение методом классического регулярного поиска
Разбиваем диапазон изменения каждой переменной на интервалы длиной 4% от длины диапазона. Получаем по 25 точек вдоль каждой оси и 625 точек с координатами (х1, х2). Вычисляем значение функции для каждого вектора (х1, х2). Таблица с результатами итераций в докладе не приведена в силу громоздкости.
В результате поиска найден минимум / Ц, х2) = О в точке (9,40). Сделано 252 = 625 итераций, достигнутая при этом точность - 4% для каждой переменной.
. Решение методом пошагового регулярного поиска
Разобьем процесс вычислений на два этапа, так как для данного простого примера этого достаточно, и покажем, какое преимущество дает такая организация вычисления по сравнению с одношаговой.
Первый цикл. Разбиваем диапазон изменения каждой переменной на интервалы длиной 20% от длины диапазона. Получаем по 5 интервалов вдоль каждой оси. В середине каждого интервала вычисляем значения функции. Результаты итераций приведены в таблице 1.
Таблица 1
\ х2 х1 0- 50 50- 100 100- 150 150- 200 200- 250
0-5 267 1289 7289 18289 34289
5-10 227 1274 7274 18274 34274
5 1 1 0 1 237 1261 7261 18261 34261
15-2 297 1250 7250 18250 34250
20-25 407 1241 7241 18241 34241
На первом цикле устанавливаем промежуточный минимум / (х^, х^) = 227 в точке (7,5,25). Поскольку функция унимодальная, ее минимум находится в области, для которой получили промежуточный минимум:
Х| е(0..5),Х2 е(0..50).
Второй цикл. Разбиваем область Х| е(0..5), х^ е(0..50) на 5 интервалов вдоль каждой оси. Получаем
по 5 точек вдоль каждой оси и 25 точек с координатами (х1, х2). На этом шаге достигается заданная точность разбиения - 4% от первоначального диапазона. Поэтому итерации берем не в середине интервала между соседними точками, а в самих точках.
Вычисляем значение функции для каждого вектора (х1, х2). Результаты итераций приведены в таблице 2.
Таблица 2.
0 10 20 30 40
5 1616 916 416 116 16
6 1609 909 409 109 9
7 1604 904 404 104 4
8 1601 901 401 101 1
9 1600 900 400 100 0
2
Получаем минимум / (хР х2)=0 в точке (9,40). Сделано 2 • 5 = 50 итераций, достигнутая при этом
точность - 4% для каждой переменной.
Сравним теперь два метода нахождения оптимума для общего случая.
Пусть п - число переменных,
г -заданная точность разбиения в процентах длины диапазона (примем равной для каждой переменной).
С - число циклов в алгоритме пошагового регулярного поиска.
Для достижения заданной точности г методом классического регулярного поиска необходимо произ-
100%
зести /П итераций, где / -
Є
Для достижения той же точности є методом пошагового регулярного поиска необходимо произвести п
п гГ г 100%
С • итераций, где ] —-----------, С - число циклов.
Є
В таблице 4 показано, как зависит число итераций от точности для классического алгоритма регулярного поиска, и для пошагового с числом циклов 2, 3, 4, 5. В рассмотренном примере число неза-
висимых переменных равно 5.
Таблица 4.
Точность є Классический Регулярный поиск Пошаговый регулярный поиск
2 цикла 3 цикла 4 цикла 5 циклов
0,001 О 1 6,32х1012 646330407 7113118 500000
0,01 О 1 2х1010 13924767 400000 50000
0,1 1 О 63245554 300000 224 94 5000
1 1 о 200 000 64 64 1265 500
2 312500000 35356 2036 532 250
4 9765625 6250 642 224 125
5 3200000 3578 442 170 100
10 100000 633 140 72 50
Таким образом, алгоритм пошагового регулярного поиска дает существенное сокращение числа итераций по сравнению с алгоритмом классического регулярного поиска. Это сокращение выражено тем больше, чем больше в задаче число независимых переменных, и чем больше число циклов, на которые мы разбиваем процесс вычислений.
Метод пошагового регулярного поиска распараллеливается так же успешно, как и метод классического регулярного поиска, но при этом лишен главного его недостатка - большого числа вычислений в бесперспективных областях.
Недостаток метода пошагового регулярного поиска заключается в том, что он применим только для унимодальных функций.