1.3 Методы одномерной оптимизации
Эти методы строятся в предположении унимодальности функции F(x) на заданном интервале [a, b]. К функции не предъявляются требования непрерывности или дифференцируемости, предполагается лишь, что для любого x [a, b] значение F(x) может быть вычислено.
Методы одномерного поиска можно разделить на методы последовательного поиска (методы сокращения интервалов: дихотомии, золотого сечения и Фибоначчи) и методы, использующие аппроксимацию функции (методы квадратичной и кубической интерполяции и др.)
Методы последовательного поиска (методы сокращения интервалов, методы исключения интервалов)
Методы этой группы нацелены на построение такой стратегии поиска x*, при которой любая пара вычислений F(x) позволяет сузить область поиска (или интервал неопределенности). Вычисляя F(x) в точках x1 и x2 таких, что a < x1 < x2 < b, можно локализовать интервал неопределенности путем анализа полученных значений функции:
если F(x1) < F(x2), то x* [a, x2];
если F(x1) = F(x2), то x* [x1, x2];
если F(x1) > F(x2), то x* [x1, b];
Основное различие между методами последовательного поиска состоит в стратегиях выбора значений x1 и x2.
Метод дихотомии (половинного деления) – один из самых простых методов последовательного поиска.
Метод половинного деления (метод дихотомии) проиллюстрирован ниже.
Метод золотого сечения предполагает такое сокращение интервала на каждом шаге, что отношение целого к большей части было равно отношению большей части к меньшей. Это отношение, равное 1.618, и называют «золотым сечением». (1 : 0,618 = 1,618; 0.618 : 0,382 = 1,618)
Координаты точек x1,k и x2,k определяются следующим образом:
x1,k = ak + 0.382(bk – ak) ; x2,k = bk – 0.382(bk – ak).
Значение коэффициента К (0,382) подобрано так, что в полученном отрезке меньшей длины одна из промежуточных точек совпадет с промежуточной точкой от предыдущего шага. Это позволяет сократить число вычислений целевой функции на всех шагах (кроме первого) в 2 раза.
Таким образом, требуется не более N шагов и N+1 вычисление целевой функции, где N можно рассчитать, используя соотношение (b–a)/ε = (1–a)N при заданной погрешности ε определения экстремума.
САПР-1986, кн. 9: |
САПР-1986, кн. 8: |
|
|
Метод чисел Фибоначчи
Стратегия поиска связана с использованием чисел Фибоначчи, которые можно получить из рекуррентного соотношения Rk = Rk-1 + Rk-2 , k = 2, 3, …, R0 = R1 = 1. В отличие от метода золотого сечения, здесь коэффициент сокращения интервала изменяется от итерации к итерации, хотя он также близок к значению 0.382.
Норенков-2000: Согласно методу чисел Фибоначчи, используют числа Фибоначчи Ri, последовательность которых образуется по правилу Ri+2 = Ri+1 + Ri при R0 = R1 = 1, т.е. ряд чисел Фибоначчи имеет вид 1, 1, 2, 3, 5, 8, 13, 21, 34, .... Метод аналогичен методу золотого сечения с тем отличием, что коэффициент K равен отношению Ri-2 /Ri, начальное значение i определяется из условия, что Ri должно быть наименьшим числом Фибоначчи, превышающим величину (b–a)/ε, где ε — заданная допустимая погрешность определения экстремума. Так, если (b–a)/ε = 100, то начальное значение i = 12, поскольку R12 = 144, и K = 55/144 = 0,3819, на следующем шаге будет K = 34/89 = 0,3820 и т.д.
Основной недостаток метода – необходимость задания числа шагов. Основное преимущество – быстрое сужение интервала неопределенности: при числе шагов n = 14 интервал неопределенности примерно в 5 раз меньше, чем получаемый по методу половинного деления. В то же время по сравнению с методом золотого сечения метод Фибоначчи позволяет получить интервал только на 17% меньше, и при большом числе шагов оба эти метода практически идентичны.
Методы полиномиальной аппроксимации
Общая идея методов, использующих аппроксимацию функции, основана на приближении функции гладким полиномом и использовании этого полинома для оценки координаты минимума.
Метод квадратичной интерполяции – один из популярных методов этой группы.
Метод заключается в замене нелинейной функции F(x) квадратичной параболой F2(x), построенной по трем точкам, принадлежащим F(x), так, чтобы значения аппроксимирующей функции F2(x) совпали со значениями F(x) в этих трех точках. Минимум квадратичной функции находится с использованием аналитического условия оптимальности: df/dx = 0.
На первом этапе в качестве исходных трех точек используются
x1 = a, x2 = (a + b)/2, x3 = b.
В этих точках вычисляется f(x) и по полученным точкам f(x1), f(x2), f(x3) строится парабола
f2 = C2 x2 + C1 x + C0 ,
коэффициенты которой находятся из решения соответствующей системы уравнений:
f2(x1) = f(x1), f2(x2) = f(x2), f2(x3) = f(x3)
Значения коэффициентов:
C0 = f(x1),
C1 = [f(x2) – f(x1)] / (x2 – x1),
C2 = 1 / (x3 – x2) {[ f(x3) – f(x1)] / (x3 – x1) – [f(x2) – f(x1)] / (x2 – x1)}
Условие оптимальности приводит к уравнению x4 = – C1 / 2C2 , где х4 – точка минимума параболы f2(x).
Далее выбирается новый отрезок, внутри которого находится точка х4, и c использованием х3, х4 строится новая парабола, по которой уточняется положение минимума f(x), и т. д. до тех пор, пока величина отрезка, внутри которого находится оптимум, не станет меньше заданной погрешности . Таким образом, метод имеет итерационный характер.
К достоинствам метода относится высокая скорость сходимости, хотя метод может не всегда сходиться.
Например, на рис. ниже показана ситуация (для случая максимизации функции), когда метод параболической аппроксимации сходится к решению уже на третьем этапе: парабола 3, построенная по точкам х3, х4, х5, практически совпадает с исходной функцией 1.
Пример. Найти максимум функции f(x) = sin (x + 1)на интервале [-1; 2], точность = 0,01.
Решение. Для построения аппроксимирующей параболы находим точки
x1 = a, x2 = (a + b)/2, x3 = b.
Система уравнений для нахождения коэффициентов параболы примет вид:
Решение системы
можно найти любым из известных способов,
например, по формулам Крамера. На первом
шаге получаем
=
0,5571, f(
)
= 0.9999. По этой
точке, а также по второй и третьей
исходным точкам, лежащим по обе стороны
от точки максимума параболы, аналогично
строится вторая парабола.
п |
x1 |
x2 |
x3 |
f(х1) |
f(x2) |
f(x3) |
C2 |
C1 |
C0 |
|
|
1 |
-1 |
0.5 |
2 |
0 |
0.9975 |
0.1411 |
-0.412 |
0.459 |
0.871 |
0.5571 |
0.9999 |
2 |
0.5 |
0.5571 |
2 |
0.9975 |
0.9999 |
0.1411 |
-0.4249 |
0.4914 |
0.858 |
0.5782 |
1 |
3 |
0.5571 |
0.5782 |
2 |
0.9999 |
1 |
0,1411 |
-0,4208 |
0.4809 |
0.8626 |
0.5714 |
1 |
4 |
0,5571 |
0,5714 |
0,5782 |
0,9999 |
1 |
1 |
-0,5 |
0,5708 |
0,8371 |
0,5708 |
1 |
Уже на третьем шаге разница между двумя точками максимума менее заданной погрешности, поэтому поиск можно заканчивать (четвертый шаг приведен для наглядности вычислений). Поэтому х* 0,5708, и f* f (0,5708) = 1.
Кроме описанных методов, существует и ряд других, например, метод Пауэлла, предусматривающий последовательное применение квадратичной аппроксимации, метод Давидона, использующий кубическую аппроксимацию, и др. Примеры программной реализации различных методов приведены в литературе, например, в книге Б. Банди «Методы оптимизации».
Заметим, что универсального метода, наилучшего для любых задач, пока не создано. Поэтому в современных математических пакетах возможна автоматическая смена метода в процессе решения задачи, как например в Matlab – переход от метода золотого сечения (golden) к методу квадратичной аппроксимации (parabolic):
