- •Глава 8. Нелинейное программирование
- •8.1. Характеристика задач
- •8.2. Условия оптимальности
- •Теорема
- •8.3. Квадратичное программирование
- •8.4. Сепарабельное программирование (сп)
- •8.5. Задачи дробно-линейного программирования
- •8.6. Методы "спуска"
- •8.7. Методы одномерной минимизации
- •8.7.1. Метод деления шага пополам
- •8.7.2. Квадратичная аппроксимация
- •8.7.3. Метод деления интервала пополам
- •8.7.4. Метод золотого сечения
- •8.7.5. Метод Фибоначчи
- •8.7.6. Метод первого порядка
- •8.8. Многомерный поиск безусловного минимума
- •8.8.1. Метод Гаусса-Зейделя (покоординатного спуска)
- •8.8.2. Метод Хука-Дживса (метод конфигураций)
- •8.8.3. Симплексный метод
- •8.8.4. Градиентные методы
- •8.8.6. Методы сопряженных направлений
- •8.8.7. Методы случайного поиска
- •Алгоритм с возвратом при неудачном шаге
- •Алгоритм с обратным шагом
- •Алгоритм наилучшей пробы
- •Алгоритм статистического градиента
- •8.8.8. Генетические алгоритмы
- •8.9. Методы условной оптимизации
- •8.9.1. Метод проектирования градиента
- •8.9.2.Метод штрафных функций
- •8.9.3. Метод барьерных функций
- •8.9.4. Другие методы условной оптимизации
- •8.10. Задания для самостоятельной работы
8.7.4. Метод золотого сечения
Золотое сечение – это определенное отношение части к целому. Отрезок АВ делится точкой С в отношении золотого сечения (рис. 8.10), если
. (8.37)
Положим АВ = 1, АС = х, СВ = 1 – х, тогда из (8.37) получаем уравнение
х2 + х – 1 = 0,
из которого следует
, .
Эти отношения используются для выбора двух точек внутри интервала неопределенности. Они располагаются, как показано на рис. 8.11. Каждая из точек делит интервал [a, b] в отношении золотого сечения.
Вэтих точках вычисляется функция. Еслиf(x1) > f(x2), то отбрасывается часть интервала[a, x1], еслиf(x1) < f(x2), то отсекается часть[x2, b], а при равенстве значений функции – любая из них. Оставшаяся часть интервала равна от величины исходного. Очевидно, что после такого сокращения интервала одна из внутренних точек остается с изменением индекса, а вторая берется на основе золотого сечения или, что одно и то же, симметрично оставшейся (рис. 8.12). Сокращение интервала продолжается до достижения заданной точности.
Алгоритм.
Задать точность по координате .
Вычислить
Вычислитьf( x1), f( x2).
Если f(x1)>f(x2), положить a=x1, x1=x2, или x2=a+b-x1, иначе – b=x2, x2= x1, илиx1= a+b-x2.
Если (b-a)< , закончить поиск.
Вычислить функцию в новой точке и перейти на 4.▲
Итерации алгоритма графически иллюстрируются на рис. 8.12.
Покажем, что сохраняемая точка (x1 или x2) делит сокращенный интервал также в отношении золотого сечения. Пусть на k-й итерации внутренние точки делят интервал [ak, bk] в отношении золотого сечения. Обозначив = bk - ak, имеем
.
Тогда для нового, сокращенного, интервала находим
,
В результате получаем:
.
Благодаря этому свойству, внутренние точки не сливаются при любом числе итераций.
Согласно алгоритму функция вычисляется 2 раза на начальном интервале и по одному разу на всех последующих. Поэтому после n вычислений функции интервал неопределенности составит от величины первоначального.При заданной точности можно найти необходимое количество вычислений функции n из условия
8.7.5. Метод Фибоначчи
Схема метода почти полностью совпадает с методом золотого сечения. Отличие в том, что вместо золотого сечения используется отношение чисел Фибоначчи: на k-й итерации доли малого и большого отрезков интервала равны и соответственно.
Числа Фибоначчи F вычисляются по известным соотношениям: F0=F1=1, F = F -1+ F -2, 2.
Точки x1 и x2 вычисляются по формулам:
, (8.38)
. (8.39)
Как видно, они идентичны приведенным в предыдущем разделе. Однако если при использовании золотого сечения внутренние точки не могут сливаться, то здесь это не так. Действительно, при k=n-1 из (8.38) и (8.39) имеем
, .
Но так как F0/F2=F1/F2=1/2, то и, следовательно, точки сливаются в середине интервала. Поэтому до начала итераций необходимо определить значение n, гарантирующее достижение минимума с заданной точностью . После 1-й итерации длина интервала составит от величины исходного, после 2-й – ()(),…, после (n-1)-й –
.
Значит, длина последнего интервала будет равна (b1- a1)/Fn, где [a1, b1] – исходный интервал. Для обеспечения заданной точности требуется, чтобы
или . (8.40)
Таким образом, соотношение (8.40) позволяет определить номер числа Фибоначчи по исходным данным. На начальном интервале точки вычисляются по формулам (8.38) и (8.39) при k=1. На последующих итерациях числа Фибоначчи не требуются, так как одна точка переносится из предшествующей итерации, а вторая берется симметрично ей, то есть лучше использовать вторые формулы из п.4 алгоритма золотого сечения.
После слияния внутренних точек остается неопределенность с положением минимума. Для ее устранения вторая точка берется слева или справа от центра на расстоянии 1(0,010,05). Для случая сдвига второй точки влево (рис. 8.13) приf(x1)<f(x1-1) минимум лежит в интервале (2), в противном случае – в интервале (1).
Метод Фибоначчи является самым эффективными из всех прямых методов. Очень близок к нему метод золотого сечения: приn>9 они практически совпадают по эффективности и чем больше n, тем ближе эти методы. А в пределе отношение, используемое в методе Фибоначчи на 1-й итерации, становится равным золотому сечению:
.