Численные методы и программирование с Maxima
4.3.4 Оптимизация с использованием пакета lbfgs
Основная функция пакета () позволяет найти приближенное решение задачи минимизации без ограничений целевой функции, определяемой выражением , по списку переменных с начальным приближением . Критерий окончания поиска определяется градиентом нормы целевой функции (градиент нормы ).
Данная функция использует квазиньютоновский алгоритм с ограниченной памятью (алгоритм BFGS). Этот метод называют методом с ограниченным использованием памяти, потому что вместо полного обращения матрицы Гессе (гессиана) используется приближение с низким рангом. Каждая итерация алгоритма — линейный (одномерный) поиск, то есть, поиск вдоль луча в пространстве переменных с направлением поиска, вычисленным на базе приближенного обращения матрицы Гессе. В результате успешного линейного поиска значение целевой функции () уменьшается. Обычно (но не всегда) норма градиента также уменьшается.
Параметр функции позволяет контролировать вывод сообщений о прогрессе поиска. Величина управляет частотой вывода ( — сообщения не выводятся; — сообщения на первых и последних итерациях; — вывод сообщений на каждой итерации). Величина управляет объёмом выводимой информации (если , выводится счётчик итераций, число вычислений целевой функции, её величину, величину нормы градиента и длины шага). Увеличение (целая переменная, принимающая значения 0,1,2,3) влечёт за собой увеличение количества выводимой информации.
Обозначения колонок выводимой информации:
- I — число итераций, которое увеличивается после каждого линейного поиска;
- NFN — количество вычислений целевой функции;
- FUNC — значение целевой функции в конце линейного поиска;
- GNORM — норма градиента целевой функции в конце очередного линейного поиска;
- STEPLENGTH — длина шага (внутренний параметр алгоритма поиска).
Функция реализована разработчиками на Lisp путём перекодирования классического алгоритма, первоначально написанного на Фортране, поэтому сохранила некоторые архаичные черты. Однако используемый алгоритм обладает высокой надёжностью и хорошим быстродействием.
Рассмотрим примеры использования .
Простейший пример — минимизация функции одной переменной. Необходимо найти локальный минимум функции . Результаты расчётов:
(%i1) load (lbfgs);
(%i2) FOM:x^3+3*x^2-2*x+1;
(%i3) lbfgs(FOM,[x],[1.1], 1e-4, [1, 0]); ************************************************* N= 1 NUMBER OF CORRECTIONS=25 INITIAL VALUES F= 3.761000000000001D+00 GNORM= 8.230000000000001D+00 ************************************************* I NFN FUNC GNORM STEPLENGTH 1 2 8.309999999999997D-01 1.370000000000000D+00 1.215066828675577D-01 2 3 7.056026396574796D-01 3.670279947916664D-01 1.000000000000000D+00 3 4 6.967452517789576D-01 3.053950958095847D-02 1.000000000000000D+00 4 5 6.966851926112383D-01 5.802032710369720D-04 1.000000000000000D+00 5 6 6.966851708806983D-01 8.833119583551152D-07 1.000000000000000D+00 THE MINIMIZATION TERMINATED WITHOUT DETECTING ERRORS. IFLAG = 0
Рассмотрим результаты минимизации функции нескольких переменных при помощи :
(%i1) load (lbfgs)$ (%i2) FOM:2*x*y+8*y*z+12*x*z+1e6/(x*y*z);
(%i3) lbfgs(FOM,[x,y,z],[1,1,1],1e-4,[-1,0]);
4.3.4.1 Оптимизация с ограничениями методом неопределённых множителей Лагранжа
Для решения задач минимизации с ограничениями в составе Maxima предусмотрен пакет augmented_lagrangian_method, реализующий метод неопределённых множителей Лагранжа.
Синтаксис вызова функции:
- .
Рассматриваемая функция возвращает приближенное решение задачи минимизации функции нескольких переменных с ограничениями, представленными в виде равенств. Целевая функция задаётся выражением , варьируемые переменные — списком , их начальные значения — списком , ограничения — списком (предполагается, что ограничения приравниваются к 0). Переменные задаются в форме символ=значение.
Распознаются следующие символы:
- — число итераций метода неопределённых множителей Лагранжа;
- — точность поиска LBFGS;
- — тот же параметр, что и для ;
- — начальное значение неопределённого множителя для метода Лагранжа.
Для использования функции необходимо загрузить её командой .
Данная реализация метода неопределённых множителей Лагранжа базируется на использовании квазиньютоновского метода LBFGS.