
- •Глава 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-й итерации, становится
равным золотому сечению:
.