Методические указания к лабораторной работе по дисциплине "Численные методы оптимизации сложных систем". Тема: Безусловная минимизация сложной функции многих переменных градиентными методами в среде MATLAB
Одной из актуальных математических и инженерных задач, как известно, является проблема поиска оптимальных значений сложных функций многих переменных.
Для решения указанной задачи было разработано большое количество численных алгоритмов, практическое применение которых связано, в том числе, с методами функционирования оборудования, установленного на борту летательных аппаратов. Программа MATLAB представляет собой удобную систему компьютерной математики (СКМ), в которой имеются удобные средства программирования, отладки, запуска и визуализации программ с целью обучения (в том числе дистанционного) оптимизационным методикам и их последующего перевода на машинно-ориентированные языки программирования.
Целью работы является исследование возможностей СКМ MATLAB для решения практической задачи поиска численного минимума целевой функции двух переменных с применением "градиентного метода наискорейшего спуска Коши".
Теоретическая часть
Далее будем говорить о минимизации функций , поскольку максимизация , очевидно, эквивалентна минимизации функции .
Получившие широкое распространение градиентные методы относятся к методам первого порядка, поскольку для определения направления оптимального поиска в них используется лишь информация о первых частных производных целевой функции (ЦФ) .
К методам первого порядка относятся градиентные методы с постоянным и переменным шагом, в частности, градиентный метод с фиксированным шагом и метод наискорейшего спуска Коши.
Метод наискорейшего спуска (МНС) Коши относится к градиентным методам оптимизации с изменяемым шагом. Данный алгоритм хорошо зарекомендовал себя и широко применяется на практике.
Итерации метода наискорейшего спуска Коши строятся по формуле
где - переменный шаг поиска на - м этапе вычислений выбирается оптимальным образом из условия минимизации по неотрицательной переменной k целевой функции при движении в направлении антиградиента , т.е.:
Согласно алгоритму МНС, процесс поиска идет в направлении вектора антиградиента ЦФ из точки , в которой ЦФ принимает наименьшее значение. Таким образом, проблема определения оптимальной величины шага сводится к задаче поиска минимума функции одной переменной.
Вычисления с использованием рассмотренного метода прекращаются, когда выполняется одно из следующих условий:
где - заданные малые числа, характеризующие точность нахождения минимума (для дифференцируемой функции в точке минимума для всех ).
Однако, методы первого порядка обладают рядом недостатков.
В окрестности точки минимума компоненты вектора градиента малы, и процесс вычислений существенно замедляется, в особенности, когда ЦФ является «овражной» (для нее характерны резкие отличия частных производных по величине и направлению).
Поскольку свойство наискорейшего спуска локально, МНС может "зациклиться" из-за резкой и частой смены направлений антиградиента для существенно "овражных" ЦФ.
Преимущества метода наискорейшего спуска – простота вычисления градиента и сходимость независимо от выбора начальной точки, а главный недостаток – медленная сходимость в окрестности точки оптимума. Кроме того, алгоритм неприменим в тех случаях, когда линии уровня ЦФ имеют точки излома, где целевая функция недифференцируема.
Блок-схема алгоритма метода наискорейшего спуска Коши представлена на рисунке 1.
Рисунок 1 - Блок-схема алгоритма метода наискорейшего спуска Коши
Траектория спуска представляет собой ломаную, состоящую из отрезков прямых, параллельных координатным осям x1, x2 (см. Рисунок 2).
Рисунок 2 - Геометрическая интерпретация метода наискорейшего спуска на плоскости x1 O x2 .
Практическая часть
Постановка задачи
Для заданной в варианте функции двух переменных из начальной точки выполнить поиск численного значения безусловного минимума ЦФ с заданной точностью вычислений и сравнить результаты, полученные с использованием стандартных средств СКМ MATLAB.
Порядок выполнения работы
- Изучить теоретический материал.
- Составить программу, реализующую оптимизационный алгоритм МНС Коши.
- Произвести запуск и отладку программы.
- Выполнить численные расчеты с помощью разработанной процедуры и сравнить результаты безусловной минимизации заданной целевой функции с использованием стандартных средств СКМ MATLAB. Расхождения оценить при помощи вычислений абсолютных погрешностей по значениям целевых функций, полученных при запуске программы МНС и стандартных оптимизационных методов СКМ MATLAB (функций fminsearch, fminunc).
- Построить график целевой функции, отметить на нем начальную и оптимальную точки решения задачи.
- Оформить отчет по лабораторной работе и защитить ее.
Содержание отчета по работе
- Титульный лист лабораторной работы.
- Блок-схемы оптимизационного алгоритма МНС.
- Тексты программ, реализованных в СКМ MATLAB.
- Результаты проведенных расчетов в виде Workspace - скрипта и графика ЦФ.
- Выводы по работе.
- Список использованной литературы и источников.
Пример выполнения лабораторной работы
Пусть задана целевая функция двух переменных, начальная точка поиска, точность решения задачи и предельное количество итераций алгоритма МНС в следующем виде:
Составим для заданной ЦФ программу в редакторе Editor СКМ MATLAB с переменным набором выходных значений, в составе которых могут быть значение ЦФ, ее градиент (вектор первых частных производных) и матрица вторых частных производных (гессиан) функции:
function [f,g,H] = fun2(x)
f=(3.456*x(1)^2-65.32)^2+(2.537*x(2)^2-77.43)^2;
if nargout > 1
g=[(13.824*(3.456*x(1)^2-65.32))*x(1);(10.148*(2.537*x(2)^2-77.43))*x(2)];
end
if nargout > 2
H = [143.327232*x(1)^2-902.98368 0; 0 77.236428*x(2)^2-785.75964];
end
Разработаем программу алгоритма МНС Коши согласно приведенной выше блок-схеме
(Рисунок 1):
function [XX,FF, iter_count, modgr,T] = SteepestDescent(f, x0, eps, MM, T0)
% Инициализируем номер итерации алгоритма МНС:
iter_count = 0;
% Задаем начальный вектор, транспонируем его:
XX = x0';
[~, grad] = f(x0);
format long;
% Вычисляем модуль градиента:
modgr = norm(grad, 2);
% Инициализируем длину шага спуска:
T = T0;
while ((modgr > eps) && (iter_count < MM))
iter_count = iter_count + 1;
arg = @(t) f(XX - t*grad);
options = optimset('MaxFunEvals',3000, 'TolX', 1e-22);
% Вычисляем оптимальный шаг спуска:
T = fmincon(arg,T,-1,0,[],[],[],[],[],options);
% Выполняем итерацию алгоритма МНС:
XX = XX - T*grad;
[FF, grad] = f(XX);
% Пересчитываем модуль градиента:
modgr = norm(grad, 2);
end
XX = XX';
Напишем скрипт вызова метода Коши:
X0=[-.81 -.81];
eps0 = 1e-3;
[XX, FF, iter_count, modgr] = SteepestDescent(@fun2, X0, eps0,50,0.01);
Реализуем вызов стандартных оптимизационных методов СКМ MATLAB и расчет абсолютных разностей полученных значений с запрограммированным нами численным алгоритмом МНС:
[x,y] = fminsearch(@fun2,X0);
options = optimset('MaxFunEvals',3000, 'TolX', eps0);
[x1,y1] = fminunc(@fun2,X0,options);
delY11 = abs(FF-y); delY12 = abs(FF-y1);
После запуска скрипта на выполнение были получены следующие результаты в Workspace:
X0 = [-0.81 -0.81];
eps0 = 0.001;
XX = [-4.34746620824486 -5.5245180316083653];
FF = 3.4157388825249043E-12;
delY11 = 1.3307230166066404E-6;
delY12 = 3.81282585334422E-6;
iter_count = 8;
modgr = 0.00011097610958758026;
x = [-4.3474453757120148 -5.5244835154603287];
x1 = [-4.34750923101793 -5.52457030118019];
y = 1.3307264323455229E-6;
y1 = 3.8128292690831027E-6;
Построим график ЦФ и отметим на нем начальную точку (зелёным цветом) и конечный оптимальный вектор (красным цветом).
Примечание
В ряде случаев численные алгоритмы и стандартные процедуры MATLAB могут сойтись к разным локальным минимумам ЦФ с близкими величинами (в случае мультимодальной овражной целевой функции), в зависимости от заданных начальных условий поиска, что является допустимым для градиентных алгоритмов.
Вывод:
В ходе лабораторной работы проведена безусловная минимизация функции 2-х переменных методом наискорейшего спуска Коши и стандартными процедурами СКМ MATLAB.
Для заданных начальных условий за 8 итераций МНС достигнута приемлемая точность решения оптимизационной задачи, которая получилась выше, чем у методов fminsearch, fminunc.
Литература
- Медынский М. М., Дьячук А. К. Численные методы оптимизации с использованием системы Maple 11. – М.: Изд-во МАИ-ПРИНТ, 2009. 287 c., ил.
- Дьяконов В. П. MATLAB. Полный самоучитель.– М.: ДМК Пресс, 2012. – 768 с., ил.
- Конспект лекций по курсу «Численные методы оптимизации сложных систем». Автор: доцент, к.т.н. Дьячук А.К.
Комментарии