Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Методы одномерной минимизации.
Изучение методов безусловной оптимизации мы начнем с наиболее простого типа оптимизационных задач, в которых целевая функция зависит от одной переменной. Необходимость отдельного рассмотрения численных методов поиска экстремума функций одной переменной диктуется следующими обстоятельствами. Во-первых, эти методы используются во многих алгоритмах поиска экстремума функций, зависящих от нескольких переменных. Во-вторых, функции одной переменной служат удобной моделью для теоретического исследования эффективности методов оптимизации. В-третьих, иногда удаётся, используя те или иные приёмы, непосредственно с помощью алгоритмов одномерной оптимизации получить решение многомерных задач. Поскольку универсальных методов, пригодных для минимизации любых функций одной переменной, не существует, приходится строить алгоритмы, ориентированные на различные встречающиеся в прикладных задачах классы функций. 1. Унимодальные функции. Рассмотрим методы минимизации так называемых унимодальных функций. Пусть Х = [ a, b ]. Определение 2.1. Функция f называется унимодальной на Х, если существует такая точка х* Î Х, что для любых x 1, x 2 Î X f (x 1) > f (x 2) если х 1 < x 2 < x *, f (x 1) < f (x 2) если х * < x 1 < x 2. Для непрерывных функций свойство унимодальности попросту означает наличие у неё единственного локального минимума. Все методы минимизации унимодальных функций опираются на следующее утверждение. Теорема 2.3. Пусть функция f унимодальна на Х, х 1 < x 2. Тогда, если f (x 1) £ f (x 2), то х* £ х 2, если же f (x 1) ³ f (x 2), то х* ³ х 1. Предположение о том, что Х = [ a, b ], не является слишком ограничительным. В самом деле, если предположить, что множество Х не ограничено (является прямой или полупрямой), то с помощью теоремы 2.3. легко построить алгоритм, позволяющий найти отрезок, в котором содержится точка х*. Этот алгоритм называется методом сканирования (см., например [5]). Зададим для этого некоторое число h 1> 0 и вычислим значение f в точках х 1 и х 2 = x 1 + h 1 множества Х. Пусть, например, f (x 1) > f (x 2). Если Х = (-¥, с ], где с - действительное число, то х *Î [ x 1, c ]. Если же Х = (-¥, +¥), то следует вычислять значения f (xi) (xi = xi -1 + hi, i = 3, 4, …) до тех пор, пока не будет найдена такая точка хi, что f (xi -1) £ f (хi), причём f (xi -2) > f (xi -1). Тогда согласно теореме 2.3 х *Î [ xi -2, хi ]. Шаг hi можно выбирать постоянным или же hi +1 = 2 hi (i ³ 1) и т.д. Если f (x 1) < f (x 2), то значения функции следует вычислять в точках xi = xi -1 - hi. Если f (x 1) = f (x 2), то х *Î [ х 1, х 2]. Если известен какой-либо отрезок [ хk, хm ], которому принадлежит х *, мы будем говорить, что точка минимума х * локализована в отрезке [ хk, хm ]. Сам отрезок при этом будем называть о трезком локализации минимума. В литературе интервал (хk, хm) называется интервалом неопределённости. Приступим к описанию алгоритмов минимизации унимодальных функций. Будем предполагать, если не оговорено противное, что используется информация лишь о значениях минимизируемой функции. Будем также считать, что функция унимодальна на отрезке [ a, b ]. 2. Метод дихотомии. Пусть количество допустимых вычислений функции N =2 k. Положим где d - некоторое положительное число, d< (a+b)/2 k. Вычислим f (x 1) и f (x 2). Тогда согласно теореме 2.3: 1) если f (x 1) < f (x 2), то х* Î [ а, х 2], т.е. новым отрезком локализации минимума является [ a, x 2]; 2) если f (x 1) > f (x 2), то х * [ x 1, b ], т.е. новым отрезком локализации минимума является [ x 1, b ]; 3) если f (x 1) = f (x 2), то х * [ x 1, x 2], т.е. новым отрезком локализации минимума является [ x 1, x 2]. Для единообразия в случае f (x 1) = f (x 2) будем рассматривать в качестве нового отрезка локализации минимума, например, [ a, x 2]. Так что длина отрезка локализации после первой пары вычислений функции равна Вторая пара значений f вычисляется в точках х 3, х 4, отстоящих на расстоянии d по обе стороны от середины нового отрезка локализации. Если, например, этим отрезком оказался [ a, x 2], то Используя снова теорему 2.3, мы определяем новый отрезок локализации минимума длиной В нашем примере это будет [ a, x 4] при f (x 3) £ f (x 4) и [ x 3, x 2] при f (x 3) > f (x 4). После третьей пары вычислений длина отрезка локализации становится равной , …, после k -й - Итак после N вычислений функции мы нашли отрезок локализации минимума [ xN -1, xN ] длиной на котором расположена точка х *. Величину l называют прогрешностью метода дихотомии. Соответсвующим выбором d величину l можно сделать сколь угодно близкой к (b - a)/2 N /2. Приняв приближёно х * (xN -1+ xN)/2, получим, что погрешность вычисления х * не будет превышать величины l /2. Число f ((xN -1 + xN)/2) принимается за минимальное значение f (x) на [ a, b ]. 3. Метод Фибоначчи. Предположим, что нужно определить минимум х * как можно точнее, т.е. с наименьшим возможным отрезком локализации, но при этом можно выполнить только N вычислений функции. Пусть известно значение функции f (x 1) в некоторой точке х 1 внутри отрезка [ a, b ] (см. рис. 2.1). Выясним, где следует поместить следующую точку х 2 (N = 2), чтобы получить наименьший возможный отрезок локализации.
Положим х 1 - а = L и b - х 1 = R. Причём L < R, как показано на рис. 2.1. Тогда согласно теореме 2.3 1) если f (х 1) < f (x 2), то новым отрезком локализации будет [ a, x 2] длиной x 2 - a; 2) если f (x 1) > f (x 2), то новым отрезком локализации будет [ x 1, b ] длиной L. Поскольку не известно, какая из этих ситуаций будет иметь место, выберем x 2 таким образом, чтобы минимизировать наибольшую из длин x 2 - a и b - x 1. Достигнуть этого можно, сделав эти длины равными, то есть поместив х 2 внутри интервала (a, b) симметрично относительно точки x 1, уже лежащей внутри интервала. Если N > 2 и можно выполнить еще одно вычисление функции, то следует применить описанную процедуру к отрезку [ a, x 2], в котором ужеесть значение функции, вычисленное в точке x 1, или к отрезку [ x 1, b ], в котором уже есть значение функции, вычисленное в точке x 2. Итак, стратегия поиска ясна. Нужно поместить следующую точку внутри отрезка локализации симметрично относительно уже находящейся там точки. Теперь остается найти положение начальной точки х3. На N -м вычислении N -ю точку нужно поместить симметрично по отношению к (N -1)-й точке (см. рис. 2.1). Отрезок локализации будет иметь наименьшую длину на
данном этапе, если мы поместим точку х 1 так, чтобы после соответствующих построений точка ХN- 1оказалась посередине N- 1-го отрезка ([ хN- 2, хN- 3] на рис. 2.1). В этом случае точка ХN будет совпадать с точкой ХN- 1. Обозначим длину N -го отрезка локализации через LN. Тогда длина N- 1-го отрезка локализации LN- 1 = 2 LN. (2.3) Согласно стратегии поиска, точки хN- 1, хN- 2 должны быть помещены симметрично внутри предыдущего отрезка локализации длиной LN- 2 на расстоянии LN- 1 от концов этого отрезка (см. рис.2.2 при j = n - 1), т. е. LN- 2 = LN- 1 + LN = 3 LN. В общем случае (рис.2.2) Lj- 1 = Lj + Lj+ 1при 2 £ j £ N- 1.(2.4) Определим последовательность чисел Фибоначчи следующим образом: F 0 = 1, F 1 = 1 и Fk = Fk -1 + Fk -2 для k ³ 2. Из (2.3) и (2.4) вытекает, что LN-j = Fj+ 1 LN, j= 1, 2, …, n - 1. (2.5) Если начальный отрезок имеет длину L 1 = b - a, тo . Теперь мы можем найти положение точки x 1, которая помещается на расстоянии L 2 от одного из концов начального отрезка [ a, b ], причем не важно, от какого конца. Согласно (2.5) . Тогда можно считать, что (2.6) Таким образом, метод Фибоначчи, названный так ввиду появления при поиске чисел Фибоначчи, является итерационной процедурой. В процессе поиска очередного отрезка локализации следующая точка x 2 на отрезке [ a, b ] с точкой x 1, уже лежащей внутри отрезка, всегда выбирается такой, что x 2 = a + b - x 1 (2.7) Приведем алгоритм нахождения точки локального минимума методом Фибоначчи. 1. Задаем а, b, N (N ³ 2). 2. Вычисляем x 1 по формуле (2.6). Полагаем j = 2. 3. Вычисляем x 2по формуле (2.7). Вычисляем e = f (x 1) - f (x 2). 4. Если x 1 > x 2и е £ 0, то полагаем a = x 2. Если x 1 > x 2 и e > 0, то полагаем b = x 1, x 1 = x 2. Если x 1 < x 2 и е £ 0, то полагаем b = x 2. Если x 1 < x 2 и е > 0, то полагаем a = x 1, x 1= x 2. 5. Увеличиваем j: j = j + 1. 6. Если j £ N, то переходим к пункту 3. В противном случае полагаем x*» x 1, f min» f (x*). Модуль абсолютной погрешности метода Фибоначчи, как следует из построений, не превосходит длины N -го отрезка, т.е. (2.8) Заметим, что на каждом шаге метода Фибоначчи точка, лежащая внутри отрезка локализации, делит его в отношении двух последовательных чисел Фибоначчи. Так после i шагов . Из формулы, выражающей числа Фибоначчи в явном виде (2.9) где t» 1, 618034, вытекает, что Fj +1/ Fj ®t при j ® ¥. Это замечание наводит на мысль выбирать новую точку на каждом шаге таким образом, чтобы отрезок локализации минимума оказывался поделенным в одном и том же отношении t, что приводит к так называемому алгоритму золотого сечения. 4. Метод золотого сечения. Алгоритм определяется той же стратегией, что и метод Фибоначчи: на каждом шаге точка очередного вычисления выбирается симметрично относительно середины отрезка локализации к лежащей внутри этого отрезка точке, в которой уже проведено вычисление. Разница состоит лишь в выборе точки х 3. Пусть снова f унимодальна на [ a, b ] и L 1 = b- a. Положим (2.10) где t - величина из (2.9). Тогда Легко проверить, что t - 1 = 1/t. Следовательно, Деление отрезка в таком отношении носит название золотого сечения. Точку х 2 выберем симметрично точке х 1 относительно середины отрезка [ a, b ], (2.11) Сравнив значения f (x 1) и f (x 2), находим новый отрезок локализации минимума с помощью теоремы 2.3. Если f (х 1) < f (x 2), то новым отрезком локализации будет отрезок [ x 2, b ]. При f (х 1) ³ f (x 2) новый отрезок локализации - [ a, x 1]. Длина полученного отрезка L 2 = L 1/t. Нетрудно видеть, что лежащая внутри отрезка локализации точка, где вычисление уже проведено, делит отрезок снова в отношении золотого сечения. Так что отношение L 2 к длине следующего отрезка локализации L 3снова будет равно t, а L 3 = (b- a)/t2. Причем L 1 =L 2 +L 3 так же как и в методе Фибоначчи. Повторяя описанную процедуру, мы получим после N вычислений, что N -й отрезок локализации минимума будет иметь длину Алгоритм нахождения точки локального минимума методом золотого сечения отличается от поиска методом Фибоначчи, приведенного в предыдущем пункте, только тем, что точки х 1и х 2 вычисляются по формулам (2.10) и (2.11) соответственно. Как следует из построений, модуль абсолютной погрешности метода золотого сечения после N вычислений не превосходит длины N -го отрезка локализации минимума, т. е. (2.12) 5. Сравнение методов. При практическом использовании описанных выше методов надо иметь в виду, что каждый из них имеет свои достоинства и недостатки. Метод дихотомии (его еще называют метод деления отрезка пополам) – самый простой, но и самый трудоемкий из них. На каждом шаге данного метода нужно вычислять значение функции f (х) дважды, тогда как в методе Фибоначчи и золотого сечения это делается на каждом шаге только один раз, что и определяет большую трудоемкость вычисления значения х* с заданной точностью. А именно, если N раз вычислить значение функции f (х), то, например, методом золотого сечения значение х* может быть найдено в 1, 44 N раз точнее, чем методом дихотомии. Сравним теперь погрешности (2.8) и (2.12) методов Фибоначчи и золотого сечения после N вычислений значений целевой функции, то есть длины N -ых отрезков локализации минимума. Как видно, оба метода обеспечивают экспоненциальное уменьшение длины исходного отрезка [ a, b ]. С учетом (2.9) мы получаем, что при N ® ¥ т. е. при больших N длина отрезка локализации минимума после N вычислений в методе золотого сечения примерно на 17% больше, чем в методе Фибоначчи. Однако метод золотого сечения обладает тем существенным преимуществом, что в нем не нужно задавать количество вычислений значений функции заранее, как в методе Фибоначчи, и можно прекратить вычисления в любой момент, потому что точки, где проводятся вычисления, не зависят от общего числа итераций N. 6. Интерполяционные методы. Перейдем к описанию так называемых методов полиномиальной интерполяции. Суть их заключается в том, что по полученной в ходе вычислений информации строится интерполяционный многочлен (обычно второй или третьей степени) и его минимум принимается за точку очередного вычисления. Такие методы широко распространены на практике. Они дают хорошие результаты при минимизации унимодальных функций, имеющих непрерывные производные достаточно высокого порядка. Мы не будем рассматривать здесь подтверждающие этот факт теоретические соображения и результаты численных экспериментов. Ограничимся лишь кратким описанием одного конкретного алгоритма, а именно, метода парабол. Пусть a 1 < c 1 < b 1, f (c 1) £ f (a 1), f (c 1) £ f (b 1), то есть [ a 1, b 1] - отрезок локализации минимума f. Тройку чисел a 1, c 1, b 1 можно найти, сделав несколько шагов, например, по методу золотого сечения (если, конечно, точка минимума не совпадает ни с одним из концов отрезка [ a, b ], на котором определена функция f). Построим квадратный трехчлен j1, график которого проходит через точки (a 1, f (a 1)), (c 1, f (c 1)), (b 1, f (b 1)): Поскольку f - унимодальная функция, то хотя бы одно из неравенств f (с 1) £ f (a 1) или f (с 1) £ f (b 1) строгое и, следовательно, коэффициент при старшем члене квадратного трехчлена j1 положителен. Нетрудно видеть, что j1 достигает минимума в точке причем (a 1 + c 1)/2 £ s 1 £ (c 1 + b 1)/2. Эта точка и выбирается в качестве точки очередного вычисления значения функции f (если оказалось, что s 1 = c 1, условимся в качестве точки очередного вычисления выбирать точку (a 1 + c 1)/2). Итак, следующее вычисление проводится в точке Как и в методах Фибоначчи и золотого сечения, определим новый отрезок локализации [ a 2, b 2] c лежащей внутри него точкой c 2, в которой значение функции f уже вычислено. Ясно, что c 2 = c 1 или c 2 = t 1. Далее строится квадратный трехчлен j2, график которого проходит через точки (a 2, f (a 2)), (c 2, f (c 2)), (b 2, f (b 2)), определяется точка его минимума и т. д. Отметим, что существуют и другие методы полиномиальной интерполяции, использующие многочлены более высокой степени (например, методы кубической интерполяции). Эти методы можно применять и для минимизации многоэкстремальных функций, то есть функций, имеющих более одного экстремума.
|