# Оптимизация формы

## 2. 1D поиск

Для элементов машиностроительных конструкций целевая функция, как правило, очень сложная и далека от квадратичной модели. Поэтому классическая схема с полным квазиньютоновским шагом:

d=−H−1g | (2)

даёт плохой результат, и нужно проводить 1D поиск вдоль квазиньютоновского направления d. Перед началом одномерного поиска мы задаем длину начального шага t, а вектор d нормируем. Начальная величина t задается исходя из прогноза поведения целевой функции. В процессе оптимизационного поиска она изменяется. Задаем также малую величину δ − критерий выхода. Алгоритм одномерного поиска такой.

1. В исходной точке x1 мы имеем целевую функцию y1 и её производную g1 вдоль направления d. Если g1>0, то направление d признается неудачным. Восстанавливаем диагональный гессиан и идем на шаг 1.
2. Делаем шаг длиной t в направлении d. Получаем точку x2. Вычисляем в ней целевую функцию y2 и её производную g2 вдоль направления d.
3. Если (y2<y1) and (g2<0), то минимум вдоль направления d еще не найден: он впереди. В этом случае вторую точку обозначаем как первую, увеличиваем t в k раз (мы брали t=2), и идём на шаг 2.

4. (y2<y1) and (g2=0), то минимум есть точка x2. Заканчиваем итерацию. В реальных расчётах это условие никогда не выполняется из-за погрешностей машинной арифметики.
5. Здесь (y2≥y1) or (g2>0), и минимум находится на отрезке между x1 и x2. Зная в двух точках x1 и x2 значения функций и их производных (4 параметра), мы строим по ним кубическую параболу и находим ее минимум x3. Вычисляем в этой точке целевую функцию y3 и её градиент.

6. Из трёх значений целевой функции y1, y2, y3 выбираем минимальное − это есть результат итерации. Если минимальное значение достигается в исходной точке x1, то вначале возвращаемся к диагональному гессиану и идем на шаг 1. Если это не помогает (гессиан уже диагональный), уменьшаем длину шага t в m раз (мы брали m=2) и проверяем: если t<δ, заканчиваем процесс оптимизации: минимум достигнут. В остальных случаях переходим к следующей итерации: идём на шаг 1.

На следующей итерации для одномерного поиска вдоль нового квазиньютоновского направления используется длина шага t, полученная в текущей итерации. Это учитывает особенности целевой функции: длина шага адаптируется к её поведению. Применение кубической интерполяции уменьшает количество вычислений целевой функции.