- •1. Множество. Функция. Скалярные и векторные функции.
- •2. Поле, пространство. Виды пространств.
- •3. Критические точки. Стационарные точки. Лемма Ферма. Связь оптимизации и поиска корня.
- •Вопрос 6. Чем выпуклая функция упрощает задачу оптимизации?
- •Вопрос 7. Если функция имеет одинаковые минимальные значения в двух точках, можно ли говорить о двух глобальных минимумах?
- •Вопрос 8. Как критерии максимума связаны с критериями минимума?
- •4. Градиент. Матрица Гессе. Ряд Тейлора.
- •5. Квадратичная форма. Квадратичная функция. Связь знакоопределенности и собственных чисел матрицы.
- •6. Квадратичная форма. Квадратичная функция. Критерии минимума (максимума) квадратичной формы.
- •7. Условия Вульфа. Их геометрическая интерпретация. Правило Армихо.
- •8. Метод дихотомии. Запрограммировать, показать работу на функциях.
- •9. Метод трехточечного деления. Запрограммировать, показать работу на функциях.
- •10. Метод золотого сечения. Запрограммировать, показать работу на функциях.
- •11. Метод Фибоначчи. Запрограммировать, показать работу на функциях.
- •12. Метод Ньютона одномерный. Запрограммировать, показать работу на функциях.
- •13. Метод секущих. Запрограммировать, показать работу на функциях.
- •14. Метод Мюллера. Запрограммировать, показать работу на функциях.
- •15. Метод обратной параболической интерполяции. Запрограммировать, показать работу на функциях.
- •16. Запрограммировать метод градиентного спуска. Показать его работу на функциях.
- •17. Запрограммировать метод наискорейшего спуска. Показать его работу на функциях.
- •19. Запрограммировать метод Ньютона многомерный. Показать его работу на функциях.
- •20. Запрограммировать метод Левенберга-Марквардта. Показать его работу на функциях.
- •21. Запрограммировать метод Нестерова-Немировского. Показать его работу на функциях.
- •22. Запрограммировать метод Барзилая-Борвейна 1. Показать его работу на функциях.
- •23. Запрограммировать метод Барзилая-Борвейна 2. Показать его работу на функциях.
- •28. Запрограммировать метод Армихо. Показать его работу на функциях.
- •29. Запрограммировать метод dfp. Показать его работу на функциях.
- •30. Запрограммировать метод bfgs. Показать его работу на функциях.
- •31. Запрограммировать метод l- bfgs. Показать его работу на функциях.
- •32. Запрограммировать метод доверительных областей. Показать его работу на функциях.
28. Запрограммировать метод Армихо. Показать его работу на функциях.
def armijo_search(f, df, x0, p0, alpha0=1.0, rho=0.5, c=1e-4, tol=1e-6, max_iter=1000):
xk = x0.copy()
coords = [xk.copy()]
neval = 0
for k in range(max_iter):
gk = df(xk)
neval += 1
if norm(gk) < tol:
break
# Проверяем, что направление спуска
if np.dot(gk, p0) >= 0:
p0 = -gk # делаем направление антиградиента
alpha = alpha0
phi0 = f(xk)
dphi0 = np.dot(gk, p0)
# Линейный поиск по Армихо
iter_armijo = 0
while f(xk + alpha * p0) > phi0 + c * alpha * dphi0 and iter_armijo < 100:
alpha *= rho
iter_armijo += 1
neval += 1
# Обновляем точку
x_new = xk + alpha * p0
coords.append(x_new.copy())
xk = x_new
xmin = xk
fmin = f(xmin)
return [xmin, fmin, neval, coords]
Зачем вообще нужен линейный поиск в методах спуска?
Ответ: Чтобы выбрать длину шага, которая обеспечивает убывание функции и сходимость метода без лишних вычислений.
Почему не всегда используют точный линейный поиск?
Ответ: Он вычислительно дорогой, требует много вызовов функции и производных.
Что такое функция ϕ(α) в линейном поиске?
Ответ: Это одномерная функция ϕ(α) = f(xₖ + αpₖ), значение целевой функции вдоль направления поиска.
Как вычисляется производная ϕ′(α)?
Ответ: ϕ′(α) = pₖᵀ∇f(xₖ + αpₖ).
Почему направление pₖ должно быть направлением спуска?
Ответ: Потому что должно выполняться pₖᵀ∇f(xₖ) < 0, иначе шаг может увеличить значение функции.
Что означает «достаточное уменьшение функции»?
Ответ: Что новое значение функции уменьшается не хуже линейного предсказания по градиенту.
Сформулируйте правило Армихо.
Ответ: ϕ(αₖ) ≤ ϕ(0) + c₁αₖϕ′(0).
Как правило Армихо записывается через f и ∇f?
Ответ: f(xₖ₊₁) ≤ f(xₖ) + c₁αₖpₖᵀ∇f(xₖ).
Каков геометрический смысл правила Армихо?
Ответ: Новая точка должна лежать ниже касательной к функции в текущей точке.
Почему правило Армихо считается слабым?
Ответ: Оно не контролирует поведение производной в новой точке.
Какую роль играет параметр c₁?
Ответ: Он задаёт строгость требования к уменьшению функции.
Почему должно выполняться 0 < c₁ < 1?
Ответ: Иначе условие либо невозможно выполнить, либо оно теряет смысл.
Что произойдёт, если c₁ выбрать слишком маленьким?
Ответ: Шаги будут слишком маленькими, метод сильно замедлится.
Что будет, если c₁ слишком большой?
Ответ: Возможны слишком большие шаги и потеря сходимости.
Как выбирается начальное значение шага α₀ в методе Армихо?
Ответ: Обычно берут максимально допустимый шаг или α₀ = 1.
Зачем вводится параметр β ∈ (0,1)?
Ответ: Для последовательного уменьшения шага, если условие Армихо не выполняется.
Почему β должен быть меньше 1?
Ответ: Чтобы шаг действительно уменьшался.
Гарантирует ли метод Армихо выполнение условия Армихо за конечное число шагов?
Ответ: Да, при разумном выборе c₁ и β.
В каких методах чаще всего используется правило Армихо?
Ответ: В градиентных, квазиньютоновских и методах сопряжённых градиентов.
Какие два требования предъявляются к шагу в условиях Вульфа?
Ответ: Достаточное уменьшение функции и достаточное уменьшение производной.
В чём отличие первого и второго условий Вульфа?
Ответ: Первое контролирует значение функции, второе — производную.
Что означает условие кривизны?
Ответ: Что производная в новой точке не должна быть слишком большой по модулю.
Зачем нужно условие кривизны?
Ответ: Чтобы шаг не был слишком маленьким и метод эффективно двигался к минимуму.
Чем сильное условие кривизны отличается от слабого?
Ответ: Сильное использует модуль производной, слабое — только знак.
Почему сильные условия Вульфа важны для сходимости?
Ответ: Они гарантируют, что ∇f(xₖ) → 0.
Почему должно выполняться 0 < c₁ < c₂ < 1?
Ответ: Чтобы сначала контролировать убывание функции, а затем уменьшение градиента.
Какие значения c₁ и c₂ обычно используют?
Ответ: c₁ = 10⁻⁴, c₂ = 0.9.
В каких методах предпочтительны сильные условия Вульфа?
Ответ: В методе Ньютона и квазиньютоновских методах.
Зачем нужен алгоритм zoom?
Ответ: Для поиска шага внутри интервала, где нарушаются условия Вульфа.
Когда вызывается функция zoom?
Ответ: Когда нарушено условие Армихо или наблюдается рост функции.
Что означает знак производной ϕ′(α)?
Ответ: Он показывает, прошли ли мы минимум вдоль направления поиска.
Зачем используется интерполяция при поиске шага?
Ответ: Чтобы быстрее найти подходящий α без перебора.
Когда используется квадратичная интерполяция?
Ответ: Когда известны ϕ(0), ϕ(α₀) и ϕ′(0).
Когда используется кубическая интерполяция?
Ответ: Когда известны значения и производные в двух точках.
Почему нужно проверять корректность интерполяционного шага?
Ответ: Возможны деление на ноль или комплексные значения.
Какой наиболее компактный код проверки корректности α?
Ответ: Проверка положительности знаменателей и подкоренного выражения, иначе возврат к предыдущему шагу.
Как повлияет замена сильного условия кривизны на слабое?
Ответ: Метод может сходиться медленнее и хуже контролировать уменьшение градиента.
