Методические указания к исследовательской лабораторной работе по дисциплине “Математические основы кибернетики” Тема: Алгоритмы поиска экстремума функции многих переменных. 1. 2. 3. Вопросы для исследования: Изучить постановку задачи и алгоритмы поиска экстремума функции многих переменных. Рассмотреть, проанализировать и сопоставить различные способы определения шага в алгоритмах наискорейшего спуска. Ознакомиться с принципами использования метода наискорейшего спуска в задаче оценки параметров объектов (задаче параметрической идентификации). 1. Необходимые теоретические сведения 1.1. Назначение задач поиска экстремума функции многих переменных Прикладные задачи: 1. Определение неизвестных параметров (коэффициентов) объекта управления (эмпирической формулы) по результатам последовательных наблюдений за входными воздействиями (причиной, вектором xi размерности n*1) и процессом на выходе (следствием, скаляром yi) для i = 1, ... , N (N - общее число наблюдений). Структура связи причина следствие считается заданной с точностью до kмерного вектора неизвестных параметров a, определение которого и составляет существо прикладной задачи). Такая задача называется задачей параметрической идентификации. 2. Настройка режима работы объекта с целью получить наилучшее (в рамках заданной структуры системы управления - т.е. закона управления, реализуемого регулятором, и способа связи регулятора с объектом управления) значение некоторого показателя качества управления (по выбору пользователя, заказчика). Существо прикладной задачи (так же, как и в задаче параметрической идентификации, описанной выше) состоит в определении вектора настроечных параметров регулятора по результатам наблюдений за входом и выходом системы управления (следствием) и соответствующим значением вектора настроечных параметров (причиной). В отличие от первой задачи структура (формула, оператор) связи причина следствие 116 может быть неизвестной (о ней имеется лишь информация качественного, описательного характера - о наличии экстремума в зависимости следствия от причины). Несмотря на различия, первая и вторая задачи имеют общие черты, позволяющие рассматривать их на единой теоретической базе: 1. наличие нелинейной скалярной функции, имеющей (по крайней мере) один экстремум; 2. отсутствие ограничений на значения искомого вектора параметров. Значение для теории оптимизации: хорошо изученные и простые алгоритмы нахождения экстремума функции многих переменных служат базой для решения более сложных нелинейных оптимизационных задач с ограничениями (равенствами и/или неравенствами). 1.2. Общая форма алгоритма наискорейшего спуска для решения задачи нахождения экстремума функции многих переменных Далее всюду будем рассматривать задачи нахождения минимума скалярной функции f(x) векторного аргумента x = [x1, x2, ... xn]Т (без ограничений общности: задача нахождения максимума решается так же с помощью переобозначения функции: f(x) max эквивалентно [ f(x)] min). Алгоритм наискорейшего спуска реализует итерационную процедуру движения к минимуму из произвольно выбранной точки начального приближения в направлении наиболее сильного уменьшения функции, определенном в окрестности текущего значения аргумента минимизируемой функции. Такое направление противоположно направлению, задаваемому вектором градиента f(x) минимизируемой функции f(x): f(x) = [ дf/ дx1 , дf/ дx2 , . . . , дf/ дxn , ]Т (1) Общая формула для нахождения значения аргумента x(k+1) по значению x(k), найденному на k-м шаге работы алгоритма наискорейшего спуска: x(k+1) = x(k) + (k) s(k) (2) (k) где: s - вектор единичной длины в направлении, противоположном направлению градиента f(x), определенном в точке x(k) (далее будет использоваться обозначение f(x(k)) ); s(k ) f ( x ( k ) ) f ( x ( k ) ) 117 (3) // f(x(k))// - - норма (например, длина) вектора градиента f(x(k)): f ( x ( k ) ) ( f ( x n( k ) ) 2 f ( x1( k ) ) 2 f ( x 2( k ) ) 2 ) ( ) ... ( ) x1 x 2 x n (4) (k) - шаг градиентной процедуры (определяет число векторов единичной длины (если >0 - целое) или долей длины вектора (если дробное), которое укладывается в направлении, противоположном градиенту при совершении (k+1)-го шага). Геометрическая интерпретация алгоритма наискорейшего спуска: траектория x(k) ортогональна линиям равного уровня минимизируемой функции. Поскольку шаг движения к экстремуму имеет конечную длину, по мере перемещения к точке x(k+1) ортогональность нарушается. В точке x(k+1) направление корректируется и снова становится ортогональным к линиям равного уровня. 1.3. Классификация алгоритмов наискорейшего спуска Как видно из (1.2.), алгоритмы наискорейшего спуска могут различаться по способу определения шага (k) (остальные элементы формулы (1.2.) для всех модификаций алгоритма наискорейшего спуска одинаковы). Классификация способов определения шага представлена на рис. 1. Способы определения шага в алгоритмах наискорейшего спуска. Величина шага НЕ зависит от формы минимизируемой функции. Величина шага зависит от формы минимизируемой функции. Алгоритмы с постоянным шагом. Для определения шага используется производная по направле- Алгоритмы с переменным шагом. нию. Алгоритмы с использованием матрицы вторых производных (метод Ньютона). Рис.1. Классификация способов определения шага в алгоритмах наискорейшего спуска 118 1.4. Алгоритмы наискорейшего спуска с шагом, не зависящим от формы минимизируемой функции 1) Если шаг (k) не зависит от k (является постоянным), то в окрестности экстремума будут наблюдаться незатухающие колебания, амплитуда которых зависит от величины и от формы минимизируемой функции. Например, если функция имеет овраг, вытянутый вдоль одной из координат (пусть для конкретности вдоль j-той координаты), то частная производная минимизируемой функции по этой координате мала, значение проекции sj (k) на эту координату также мало, и колебания xj = sj (k) невелики. По тем координатам, вдоль которых функция f(x) в окрестности экстремума изменяется сильнее, колебания будут иметь большую амплитуду. В любом случае амплитуда колебаний пропорциональна величине . Мы видим, что использование постоянного шага: 1. позволяет построить наиболее простой вариант алгоритма; 2. при больших значениях обеспечивает быстрое движение к экстремуму, но приводит к заметным колебаниям в его окрестности; 3. при малых значениях приводит к низкой скорости сходимости к экстремуму; 4. информация о приемлемой величине шага может быть получена только в ходе отладки алгоритма, т.к. никакая информация о свойствах минимизируемой функции не используется. Естественным путем усовершенствования способа с постоянным шагом, позволяющего устранить колебания в окрестности экстремума без существенного усложнения алгоритма является использование шага , величина которого убывает по ходу итерационного процесса (т.е. зависит от номера итерации k). Можно предложить различные формулы для такой зависимости, например: (k) = a / (b+k ), a, b, - положительные константы; (k) = d e , d, - положительные константы. Наряду с очевидными достоинствами (простота и устранение колебаний при k ) алгоритм имеет и недостаток, связанный с оторванностью значений (k) от формы минимизируемой функции. Если вдали от экстремума функция f(x) имеет малый градиент, то шаг успеет сильно уменьшиться еще вдали от экстремума. Из-за этого сходимость к экстремуму может оказаться недопустимо медленной. Поэтому, как и в п.1), необходим этап отладки алгоритма (т.е. настройки параметров формулы, определяющей шаг, на работу с конкретной функцией). 119 1.5. Алгоритм наискорейшего спуска с шагом, длина которого зависит от свойств минимизируемой функции (использование производной по направлению) Пусть найдена точка x(k) и в этой точке определено направление движения к минимуму, задаваемое вектором единичной длины s(k) (формула (3)). Тогда из (2) видно, что положение следующей точки x(k+1) и значение функции f(x(k+1)) в этой точке зависят только от единственной скалярной переменной (k). Возникает идея не изменять направления поиска (и соответственно не расходовать ресурсов ЭВМ) до тех пор, пока функция f(x) в направлении s(k) убывает (улучшается). Точка x(k+1) соответствует минимуму f(x) по направлению s(k). В точке x(k+1) должно быть определено новое направление движения к минимуму s(k+1). Это направление будет ортогональным предыдущему s(k). Значение (k) определим из условия минимума функции, являющейся квадратической аппроксимацией f(x) в точке x(k): f(x(k+1)) = f(x(k) +x(k)) (ряд Тейлора с двумя слагаемыми) f(x(k) ) + [ f(x(k) ) ]Т x(k) + (1/2!)[ x(k)]Т 2f(x(k) ) x(k) (5) (k) где x = (k) s(k); 2f(x(k)) - матрица вторых производных, вычисленная в точке x(k): 2 f x12 2 f 2 f ( x ( k ) ) x2 x1 2 f x1x2 ... 2 f x1xn 2 f x22 ... 2 f x2 xn ( 6) ... ... ... ... ... ... ... 2 f xn x1 2 f xn x2 ... 2 f xn2 После подстановки x(k) = ( k) s(k) в (5) получим: f(x(k) + (k) s(k)) f(x(k) ) + ( k) [ f(x(k) ) ]Т s(k) + + (1/2!) [( k)]2 [s(k) ]Т2f(x(k) ) s(k) (7) (k+1) Условие минимума квадратической аппроксимации f(x ) по ( k) (скаляру!): df () [f ( x ( k ) )]T s ( k ) ( k ) [ s ( k ) ]T 2 f ( x ( k ) ) s ( k ) 0 (k ) d 120 (8) Из (8) получим формулу для определения шага: ( k ) [f ( x ( k ) )]T s ( k ) [ s ( k ) ]T 2 f ( x ( k ) ) s ( k ) (9) Последовательность вычислений для реализации алгоритма: задать (произвольно) точку начального приближения x(0); в цикле по номеру итерации k=0,1,… вычислить: значение вектора градиента f(x(k)) в точке x=x(k) по формуле (1); значение нормы (длины) вектора градиента f(x(k)) по (4); значение вектора единичной длины в направлении, противоположном вектору градиента s(k) по формуле (3); 6. значение матрицы вторых производных 2f(x(k)) по (6); 7. значение шага (k) по (9); 8. новое значение приближения x(k+1) по (2); 9. закончить итерационный процесс, используя одно из следующих условий: 10. если по постановке задачи пользователя интересует значение функции в точке оптимума (а не значение аргумента x), то следует прекратить вычисления, если, начиная с k* - той итерации k>k* абсолютное значение нормированной разности между значениями функции в “соседних” не превышает наперед заданного малого числа >0: 1. 2. 3. 4. 5. f ( x ( k 1) ) f ( x ( k ) ) f ( x(k ) ) k k * (10) Задачи такого типа встречаются очень часто (пользователя обычно интересует именно результат, и при этом безразлично какие значения параметров этот результат обеспечивает). Сходимость такого типа называется сходимостью по функционалу1. 11. если же по постановке задачи пользователя интересует именно значение аргумента (а не функции), то следует прекратить вычисления, если, начиная с k** - той итерации k>k** абсолютное значение нормированной разности между значениями аргумента в “соседних” точках не превышает наперед заданного малого числа >0: 1 Функционалом в математической литературе называют критерий. 121 x ( k 1) x ( k ) x(k ) k k * * (11) Задачи такого типа обычно относятся к классу гносеологических задач, например, состоящие в определении или уточнении физических констант. Сходимость такого типа называется сходимостью по параметрам. Можно было бы ожидать, что оба условия почти эквивалентны. Однако, это справедливо только в том случае, когда функция f(x) не имеет оврага по “дну” которого из-за малого значения градиента сходимость к точке минимума будет очень медленной. Поскольку при этом значение функции f(x) почти не изменяется (и если пользователя интересует именно функция), то процесс можно прервать сразу при достижении любой точки на “дне” оврага. Если же требуется найти значение аргумента, то приходится продолжать движение (к сожалению, медленно) по оврагу до окрестности минимума. При использовании обоих правил остановки необходимы страховочные меры для предотвращения слишком длительных вычислений (наиболее простая из них – прерывание вычислений при k k***, k*** большое число порядка 105). 1. 6. Алгоритм наискорейшего спуска с шагом, длина которого зависит от свойств минимизируемой функции (использование вторых производных). Метод Ньютона Метод Ньютона основан на квадратической аппроксимации минимизируемой функции в окрестности точки x(k). Минимум квадратической функции легко найти, приравнивая ее градиент нулю. Можно сразу же вычислить положение экстремума и выбрать его в качестве следующего приближения к точке минимума. Вычисляя точку нового приближения по формуле: x(k+1)=x(k)+x(k) и разлагая f(x(k+1)) в ряд Тейлора, получим формулу квадратической аппроксимации fкв(x(k+1)): f(x(k+1)) = f(x(k)+x(k)) fкв(x(k+1)), где fкв(x(k+1))= f(x(k))+ [f(x(k))] T x(k) +(1/2!) [ x(k)] T 2f(x(k)) x(k) (12) 2f(x(k)) – матрица вторых производных (см. формулу 6). Условие минимума fкв(x(k+1)) по x(k) : fкв(x(k+1))=0. Вычислим градиент fкв(x(k+1)) из (12) и найдем значение x(k) : fкв(x(k+1))= fкв(x(k))+ 2fкв(x(k)) x(k) = 0 (13) 122 Для учета фактических особенностей минимизируемой функции будем использовать в (13) значения градиента и матрицы вторых производных, вычисленных не по аппроксимирующей fкв( . ), а непосредственно по минимизируемой функции f(x). Заменяя fкв( . ) в (13), найдем длину шага x(k) : x(k) = -[ 2f(x(k))] -1 f(x(k)) (14) Последовательность вычислений для реализации алгоритма: 1. задать (произвольно) точку начального приближения x(0); 2. в цикле по номеру итерации k=0,1,… вычислить: a) значение вектора градиента f(x(k)) в точке x=x(k) по формуле (1); b) значение матрицы вторых производных 2f(x(k)) по формуле (6); c) значение матрицы обратной матрице вторых производных 2f(.); d) значение шага x(k) по формуле (14); e) новое значение приближения x(k+1) по формуле (2); 3. закончить итерационный процесс, используя одно из условий, описанных в п 1.5. Достоинства метода Ньютона: 1. если минимизируемая функция является квадратической, то метод позволит найти минимум за один шаг; 2. если минимизируемая функция относится к классу поверхностей вращения (т.е. обладает симметрией), то метод также обеспечивает сходимость за один шаг (поскольку в точке минимума аргументы минимизируемой функции и ее квадратической аппроксимации совпадают); 3. если функция несимметрична, то метод не обеспечивает сходимость за конечное число шагов. Но для многих функций (даже очень сложных, например, для функции Розенброка, которая будет исследоваться Вами в ходе лабораторной работы) достигается гораздо более высокая скорость сходимости, чем при использовании других модификаций метода наискорейшего спуска. Недостатки метода Ньютона связаны с необходимостью вычислений и (главное!) обращения матриц вторых производных. При этом не только расходуется машинное время, но (это существеннее) могут появиться значительные вычислительные погрешности, если матрица 2f(x(k)) окажется плохо обусловленной (т.е. значение определителя этой матрицы будет близко к нулю). 123 2. Методика проведения работы Существо лабораторной работы состоит в исследовании и сопоставлении различных модификаций метода наискорейшего спуска. 2.1. Общие положения Данная лабораторная работа выполнена в виде страницы электронной книги в среде MathCad 7.0. Открыть лабораторную работу можно из основного меню электронной книги. Каждая из модификаций метода наискорейшего спуска описана в Электронном приложении 6. Все формулы в этом приложении “живые”, что позволит провести все необходимые исследования описанных выше алгоритмов. Кроме основной своей цели лабораторная работа позволяет продолжить освоение пакета программ MathCad 7.0 , в том числе познакомиться с символьными преобразованиями и построением различных видов трехмерных графиков. 2.2. Методика вычислительных экспериментов Вычислительный эксперимент №1. Тема: Исследование алгоритмов наискорейшего спуска с шагом, не зависящим от свойств минимизируемой функции Эксперимент 1: Исследование алгоритмов с постоянным шагом. a) Для f(x,y) с =1 (круговой параболоид) исследовать скорость сходимости, амплитуды автоколебаний по аргументам и функции от величины шага . Факт сходимости устанавливайте по достижению режима колебаний аргументов с постоянными амплитудами Ax и Ay, фиксируйте эти амплитуды и соответствующие им амплитуды автоколебаний значения минимизируемой функции Af(x,y). Изменяйте шаг в диапазоне =0.05…2.0 с приращением d=0.1. Постройте графики зависимостей Ax, Ay и Af(x,y) от шага . Для контроля обязательно вычисляйте размах колебаний ргумента (определяется как квадратный корень из (Ax)2+(Ay)2 ). Этот размах должен быть равен шагу с точностью до округлений. Возможно, при малых значениях шага максимального числа итераций max , предусмотренного в исходном варианте (т.е. 20), окажется недостаточно для достижения сходимости, тогда увеличьте его. Убедитесь. Что значение шага выбирается из условия компромисса между скоростью сходимости (чем больше , тем лучше) и величиной автоколебаний (чем больше , тем хуже). Постройте график связи 124 числа шагов до сходимости и размаха автоколебаний (получится область неулучшаемых решений, иначе – область Парето). b) Убедитесь, что факт сходимости не зависит от выбранной точки начального приближения (для этого варьируйте x0,y0). c) Исследуйте, как изменяется характер сходимости при появлении оврага. Для этого варьируйте значения параметра в формуле для минимизируемой функции в диапазоне =0.3…3 с шагом d=0.5. Рассмотрите по графику, как меняется форма функции. Обратите внимание на изменение характера траектории движения к экстремуму и автоколебаний вблизи экстремума. Объясните, почему кривая имеет такую форму. Для какой-либо длины шага по Вашему выбору постройте зависимость числа итераций (необходимых для достижения сходимости) от параметра , объясните ее вид. Эксперимент 2: Исследование алгоритмов с переменным шагом (убывающим с ростом числа итераций). a) Установите параметр =1 в формуле для f(x,y). Измените значения параметров в формуле для определения длины шага, например, установите =0.5, =0.3 в формуле для функции Step. Внимательно проследите, к чему приведет такая замена (должна ухудшиться скорость сходимости и уменьшится амплитуда автоколебаний). Исследуйте зависимость числа итераций, необходимых для достижения сходимости и амплитуды автоколебаний в зависимости от параметра (изменяйте его в диапазоне от 0.1 до 1.5 с шагом 0.1), постройте соответствующие графики. При больших значениях параметра максимального числа итераций max , предусмотренного в исходном варианте (т.е. 20), окажется недостаточно для достижения сходимости, тогда увеличьте его. b) Испытайте какую-либо другую формулу убывания шага, например, =e- при =1 и =0.4. Постройте график зависимости числа итераций, обеспечивающих сходимость, от параметра (факт сходимости фиксируйте по достижению точки с координатами минимума xmin=0 ymin=0, с точностью до округлений, т.е. когда выводимые в таблицу значения станут нулями). 125 Вычислительный эксперимент №2. Тема: Исследования алгоритмов с шагом, зависящим от формы функции a) Убедитесь, что алгоритм сохраняет высокую скорость сходимости при изменении формы минимизируемой функции. Для этого изменяйте один из параметров формулы функции (например, lx в диапазоне от –1 до 1). Следите, чтобы график функции f(x,y) сохранял “экстремальную” форму (при нескольких сочетаниях параметров она теряется). Постройте графики зависимости числа итераций, необходимых для достижения сходимости, от этого параметра. b) Замените (при исходных значениях параметров миинимизируемой функции) данный алгоритм на алгоритм с постоянным шагом. Сравните результаты. c) Оцените (хотя бы очень приближенно) затраты (в машинных операциях) на одну итерацию данного алгоритма и алгоритма с постоянным шагом. Сравните затраты на процесс достижения сходимости. Может ли оказаться, что более простой алгоритм, обеспечивающий достижение экстремума за большее число шагов, чем исследуемый, обеспечит нахождение экстремума быстрее? Вычислительный эксперимент №3. Тема: Исследование метода Ньютона a) Попытайтесь найти минимум функции Розенброка алгоритмом, использующим производную по направлению. Сравните эффективность алгоритмов по числу шагов, необходимых для достижения минимума. b) Используйте метод Ньютона для нахождения минимума функции, исследованной в предыдущем вычислительном эксперименте. Сравните эффективность алгоритмов по числу шагов, необходимых для достижения минимума. c) Оформите результаты (приведите графики, таблицы и комментарии). Сделайте вывод об области применимости и сравнительной эффективности всех исследованных в данной лабораторной работе алгоритмов. 3. Содержание отчета по лабораторной работе. 1. Краткий конспект теоретической части. 2. Результаты вычислительных экспериментов и комментарии к ним. 3. Краткий сравнительный анализ всех рассмотренных алгоритмов. 126