Вопросы для исследования: 1. 2. 3. Изучить постановку задачи и алгоритмы поиска экстремума функции многих переменных. Рассмотреть, проанализировать и сопоставить различные способы определения шага в алгоритмах наискорейшего спуска. Ознакомиться с принципами использования метода наискорейшего спуска в задаче оценки параметров объектов (задаче параметрической идентификации). 1. Необходимые теоретические сведения 1.1. Назначение задач поиска экстремума функции многих переменных Прикладные задачи: Определение неизвестных параметров (коэффициентов) объекта управления (эмпирической формулы) по результатам последовательных наблюдений за входными воздействиями (причиной, вектором xi размерности n1) и процессом на выходе (следствием, скаляром yi) для i = 1, ... , N (N - общее число наблюдений). Структура связи причина следствие считается заданной с точностью до kмерного вектора неизвестных параметров a, определение которого и составляет существо прикладной задачи). Такая задача называется задачей параметрической идентификации. 2. Настройка режима работы объекта с целью получить наилучшее (в рамках заданной структуры системы управления, т.е. закона управления, реализуемого регулятором, и способа связи регулятора с объектом управления) значение некоторого показателя качества управления (по выбору пользователя, заказчика). Существо прикладной задачи (так же, как и в задаче параметрической идентификации, описанной выше) состоит в определении вектора настроечных параметров регулятора по результатам наблюдений за входом и выходом системы управления (следствием) и соответствующим значением вектора настроечных параметров (причиной). В отличие от первой задачи структура (формула, оператор) связи причина следствие может быть неизвестной (о ней имеется лишь информация качественного, описательного характера - о наличии экстремума в зависимости следствия от причины). 1. 3 Несмотря на различия, первая и вторая задачи имеют общие черты, позволяющие рассматривать их на единой теоретической базе: 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 ) ) (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) - шаг градиентной процедуры (определяет число векторов единичной 4 длины (если >0 - целое) или долей длины вектора (если дробное), которое укладывается в направлении, противоположном градиенту при совершении (k+1)-го шага). Геометрическая интерпретация алгоритма наискорейшего спуска: траектория x(k) ортогональна линиям равного уровня минимизируемой функции. Поскольку шаг движения к экстремуму имеет конечную длину, по мере перемещения к точке x(k+1) ортогональность нарушается. В точке x(k+1) направление корректируется и снова становится ортогональным к линиям равного уровня. 1. 3. Классификация алгоритмов наискорейшего спуска Как видно из (1.2.), алгоритмы наискорейшего спуска могут различаться по способу определения шага (k) (остальные элементы формулы (2) для всех модификаций алгоритма наискорейшего спуска одинаковы). Классификация способов определения шага представлена на рис. 1. Способы определения шага в алгоритмах наискорейшего спуска Величина шага зависит от формы минимизируемой функции Величина шага НЕ зависит от формы минимизируемой функции Для определения шага используется производная по направлению Алгоритмы с постоянным шагом Алгоритмы с переменным шагом Алгоритмы с использованием матрицы вторых производных (метод Ньютона) Рис. 1. Классификация способов определения шага в алгоритмах наискорейшего спуска 1. 4. Алгоритмы наискорейшего спуска с шагом, не зависящим от формы минимизируемой функции Если шаг (k) не зависит от k (является постоянным), то в окрестности экстремума будут наблюдаться незатухающие колебания, амплитуда которых зависит от величины и от формы минимизируемой функции. Например, если функция имеет овраг, вытянутый вдоль одной из координат (пусть для конкретности вдоль j-той координаты), то частная произ- 5 водная минимизируемой функции по этой координате мала, значение проекции 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. 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). 6 В точке 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) Условие минимума квадратической аппроксимации f(x(k+1)) по (k) (скаляру!): df ( ) [f ( x ( k ) )]T s ( k ) ( k ) [ s ( k ) ]T 2 f ( x ( k ) ) s ( k ) 0 (k ) d Из (8) получим формулу для определения шага: [f ( x ( k ) )]T s ( k ) ( k ) ( k ) T 2 [s ] f ( x( k ) ) s (k ) (8) (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); 1) 2) 3) 4) 5) 7 7) 8) 9) 10) значение шага (k) по (9); новое значение приближения x(k+1) по (2); закончить итерационный процесс, используя одно из следующих условий: если по постановке задачи пользователя интересует значение функции в точке оптимума (а не значение аргумента x), то следует прекратить вычисления, если, начиная с k* - той итерации k>k* абсолютное значение нормированной разности между значениями функции в “соседних” точках не превышает наперед заданного малого числа >0: f ( x ( k 1) ) f ( x ( k ) ) f ( x (k ) ) k k * . (10) Задачи такого типа встречаются очень часто (пользователя обычно интересует именно результат, и при этом безразлично какие значения параметров этот результат обеспечивает). Сходимость такого типа называется сходимостью по функционалу1; 11) если же по постановке задачи пользователя интересует именно значение аргумента (а не функции), то следует прекратить вычисления, если, начиная с k** - той итерации k>k** абсолютное значение нормированной разности между значениями аргумента в “соседних” точках не превышает наперед заданного малого числа >0: x ( k 1) x ( k ) x(k ) k k * * (11) Задачи такого типа обычно относятся к классу гносеологических задач, например, состоящие в определении или уточнении физических констант. Сходимость такого типа называется сходимостью по параметрам. Можно было бы ожидать, что оба условия почти эквивалентны. Однако, это справедливо только в том случае, когда функция f(x) не имеет оврага по “дну” которого из-за малого значения градиента сходимость к точке минимума будет очень медленной. Поскольку при этом значение функции f(x) почти не изменяется (и если пользователя интересует именно функция), то процесс можно прервать сразу при достижении любой точки на “дне” оврага. Если же требуется найти значение аргумента, то приходится продолжать движение (к сожалению, медленно) по оврагу до окрестности минимума. 1 Функционалом в математической литературе называют критерий. 8 При использовании обоих правил остановки необходимы страховочные меры для предотвращения слишком длительных вычислений (наиболее простая из них – прерывание вычислений при 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) Для учета фактических особенностей минимизируемой функции будем использовать в (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) по формуле: x(k+1)=x(k)+x(k) 9 3) закончить итерационный процесс, используя одно из условий, описанных в п 1.5. Достоинства метода Ньютона: 1) если минимизируемая функция является квадратической, то метод позволит найти минимум за один шаг; 2) если минимизируемая функция относится к классу поверхностей вращения (т.е. обладает симметрией), то метод также обеспечивает сходимость за один шаг (поскольку в точке минимума аргументы минимизируемой функции и ее квадратической аппроксимации совпадают); 3) если функция несимметрична, то метод не обеспечивает сходимость за конечное число шагов. Но для многих функций (даже очень сложных, например, для функции Розенброка, которая будет исследоваться Вами в ходе лабораторной работы) достигается гораздо более высокая скорость сходимости, чем при использовании других модификаций метода наискорейшего спуска. Недостатки метода Ньютона связаны с необходимостью вычислений и (главное!) обращения матриц вторых производных. При этом не только расходуется машинное время, но (это существеннее) могут появиться значительные вычислительные погрешности, если матрица 2f(x(k)) окажется плохо обусловленной (т. е. значение определителя этой матрицы будет близко к нулю). 2. Методика проведения работы Существо лабораторной работы состоит в исследовании и сопоставлении различных модификаций метода наискорейшего спуска. 2. 1. Общие положения Данная лабораторная работа выполнена в виде страницы электронной книги в среде MathCad 7.0. Открыть лабораторную работу можно из основного меню электронной книги. Каждая из модификаций метода наискорейшего спуска описана в электронном приложении к данной лабораторной работе. Все формулы в этом приложении “живые”, что позволит провести все необходимые исследования описанных выше алгоритмов. Кроме основной своей цели лабораторная работа позволяет продолжить освоение пакета программ MathCad 7.0 , в том числе познакомиться с символьными преобразованиями и построением различных видов трехмерных графиков. 10 2. 2. Методика вычислительных экспериментов Вычислительный эксперимент №1. Тема: Исследование алгоритмов наискорейшего спуска с шагом, независящим от свойств минимизируемой функции. Эксперимент 1 Исследование алгоритмов с постоянным шагом: 1. Для 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), окажется недостаточно для достижения сходимости, тогда увеличьте его. Убедитесь, что значение шага выбирается из условия компромисса между скоростью сходимости (чем больше , тем лучше) и величиной автоколебаний (чем больше , тем хуже). Постройте график связи числа шагов до сходимости и размаха автоколебаний (получится область неулучшаемых решений, иначе – область Парето). 2. Убедитесь, что факт сходимости не зависит от выбранной точки начального приближения (для этого варьируйте x0,y0). 3. Исследуйте, как изменяется характер сходимости при появлении оврага. Для этого варьируйте значения параметра в формуле для минимизируемой функции в диапазоне =0.3…3 с шагом d=0.5. Рассмотрите по графику, как меняется форма функции. Обратите внимание на изменение характера траектории движения к экстремуму и автоколебаний вблизи экстремума. Объясните, почему кривая имеет такую форму? Для какой-либо длины шага по Вашему выбору постройте зависимость числа итераций (необходимых для достижения сходимости) от параметра , объясните ее вид. 11 Эксперимент 2 Исследование алгоритмов с переменным шагом (убывающим с ростом числа итераций): 1. Установите параметр =1 в формуле для f(x,y). Измените значения параметров в формуле для определения длины шага, например, установите =0.5, =0.3 в формуле для функции Step. Внимательно проследите, к чему приведет такая замена (должна ухудшиться скорость сходимости и уменьшиться амплитуда автоколебаний). Исследуйте зависимость числа итераций, необходимых для достижения сходимости и амплитуды автоколебаний в зависимости от параметра (изменяйте его в диапазоне от 0.1 до 1.5 с шагом 0.1), постройте соответствующие графики. При больших значениях параметра максимального числа итераций max , предусмотренного в исходном варианте (т. е. 20), окажется недостаточно для достижения сходимости, тогда увеличьте его. 2. Испытайте какую-либо другую формулу убывания шага, например, =e- при =1 и =0.4. Постройте график зависимости числа итераций, обеспечивающих сходимость от параметра (факт сходимости фиксируйте по достижению точки с координатами минимума xmin=0 ymin=0, с точностью до округлений, т. е. когда выводимые в таблицу значения станут нулями). Вычислительный эксперимент №2. Тема: Исследования алгоритмов с шагом, зависящим от формы функции. 1. Убедитесь, что алгоритм сохраняет высокую скорость сходимости при изменении формы минимизируемой функции. Для этого изменяйте один из параметров формулы функции (например, lx в диапазоне от –1 до 1). Следите, чтобы график функции f(x,y) сохранял “экстремальную” форму (при нескольких сочетаниях параметров она теряется). Постройте графики зависимости числа итераций, необходимых для достижения сходимости от этого параметра. 2. Замените (при исходных значениях параметров миинимизируемой функции) данный алгоритм на алгоритм с постоянным шагом. Сравните результаты. 3. Оцените (хотя бы очень приближенно) затраты (в машинных операциях) на одну итерацию данного алгоритма и алгоритма с постоянным шагом. Сравните затраты на процесс достижения сходимости. Может ли оказаться, что более простой алгоритм, обеспечивающий достижение экстремума за большее число шагов, чем исследуемый, обеспечит нахождение экстремума быстрее? 12 Вычислительный эксперимент №3. Тема: Исследование метода Ньютона 1. Попытайтесь найти минимум функции Розенброка алгоритмом, использующим производную по направлению. Сравните эффективность алгоритмов по числу шагов, необходимых для достижения минимума. 2. Используйте метод Ньютона для нахождения минимума функции, исследованной в предыдущем вычислительном эксперименте. Сравните эффективность алгоритмов по числу шагов, необходимых для достижения минимума. 3. Оформите результаты (приведите графики, таблицы и комментарии). Сделайте вывод об области применимости и сравнительной эффективности всех исследованных в данной лабораторной работе алгоритмов. 3. Содержание отчета по лабораторной работе 1. Краткий конспект теоретической части. 2. Результаты вычислительных экспериментов и комментарии к ним. 3. Краткий сравнительный анализ всех рассмотренных алгоритмов. 13 Приложения Приложение 1 Алгоритм поиска экстремума с шагом, независящим от свойств минимизируемой функции Простейший вариант метода наискорейшего спуска рассмотрим на примере поиска минимума квадратической функции f(x,y) = x2 +y2 двух переменных с оврагом, пологость которого определяется параметром . Прифункция f(x,y) представляет собой круговой параболоид. При >1 параболоид становится эллиптическим, "вытягиваясь" вдоль оси x (при <1 - вдоль оси y). Свойства минимизируемой функции Представление о функции легче всего получить по ее графику. Используем для этого средства MathCad. Необходимо провести следующие операции: а) задаться значением параметра ; б) задаться числом точек отсчета по осям x, y и пронумеровать эти точки; в) определить формулу для расчета координат x и y по заданному номеру точек (иными словами, задать величины дискретных отсчетов x, y между точками); г) только после этого записать формулу функции с использованием знака оператора присваивания в виде: f(x,y) := x2 +y2; д) подготовить матрицу значений функции в точках дискретных отсчетов (она понадобится для вывода графика); е) вывести трехмерный график; ж) преобразовать график в чертеж линий равного уровня (проекций сечений поверхности f(x,y) плоскостями f(x,y)= const); з) "поэкспериментировать" с графиком, изменяя , убедиться в появлении оврага. Проделаем выше описанные операции. 1 - значение параметра, определяющего пологость оврага; i 0 10 - точки отсчета по оси x; j 0 10 - точки отсчета по оси y; xi 5 i yj 5 j - расчет координаты x, соответствующей точке i, и координаты y, соответствующей точке j; 2 2 f( x y ) x y - формула для расчета квадратической функции; Mi j f xi yj - формула для вычисления точек f(x,y) по значениям дис- 14 кретных аргументов (элементов [i j] матрицы M). Подсказка. Для того чтобы построить трехмерный график выберите в меню Graph пункт Surface Plot или нажмите сочетание клавиш Ctrl-2. Появится заготовка графика со слотом в нижнем левом углу, в который нужно вставить идентификатор поверхности (M). Для того чтобы преобразовать полученный график в чертеж линий равного уровня, щелкните два раза мышью внутри области графика и в появившемся диалоговом окне выберите Contour Plot . Вы можете построить новый график линий равного уровня с помощью позиций меню Graph, Contour Plot или сочетания клавиш Ctrl-5. 1 15 20 30 25 15 0.5 50 10 8 10 10 8 6 4 2 25 0 0 5 15 10 15 10 30 15 20 25 30 0 0.5 1 1 M 20 20 0.5 6 5 15 10 4 5 0 20 25 10 15 20 30 2 20 5 40 0 30 10 0.5 1 M Рис. 2. График минимизируемой функции Рис. 3. Линии равного уровня для f(x,y) На каждой линии равного уровня показаны значения, которые принимает функция. Мы видим, что линии равного уровня являются проекциями сечений поверхности f(x,y) плоскостями f(x,y) = const на плоскость XOY. Подготовка данных для алгоритма наискорейшего спуска В основной части описания лабораторной работы указывается, что для алгоритма наискорейшего спуска требуются следующие исходные данные: а) координаты точки начального приближения x(0), y(0)(выбираются произвольно); б) значение минимизируемой функции в этой точке f(x(0), y(0)); в) значение длины шага ; г) максимальное число max итераций процесса движения к точке минимума. 15 Параметры и расчетные формулы для градиентного метода max 20 - максимальное число итераций процесса движения к минимуму; 0 max - диапазон изменения номера итераций; x0 2 - начальное значение аргумента x; y0 1 - начальное значение аргумента y; f0 f( x0 y0) - значение минимизируемой функции в начальной точке; 0 0.3 - начальное значение шага к экстремуму. В рассматриваемом простейшем примере формулы, определяющие градиент минимизируемой функции, легко выводятся "в уме". Но, поскольку в лабораторной работе Вы будете рассматривать и более сложные задачи, целесообразно освоить автоматизацию вывода формул с помощью символьных преобразований в MathCad из Меню Symbolics (это сильно помогает избежать описок). Скопируем формулу для f(x,y) в свободную зону MathCad и рассчитаем элементы вектора градиента (которые являются частными производными f(x,y) по каждому аргументу). Подсказка. Для того чтобы рассчитать частные производные f(x,y) по каждому аргументу: 1) выделите (щелчком мыши) переменную (например, x) в формуле f(x,y); 2) выберите позицию Меню Symbolics - Varifble - Differentiate; 3) MathCad выведет частную производную по x, но обозначит ее как f(x,y); 4) исправьте обозначение - например, замените на g_x(x, y); 5) проделайте те же действия с аргументом y. Будут получены формулы для частных производных функции f(x, y) по агрументам x, y - т. е. элементы вектора градиента этой функции. 2 2 f( x y ) x y - копия формулы для минимизируемой функции. g_x( x y ) 2x - частная производная по x после переобозначения. g_y( x y ) 2 y - частная производная по y после переобозначения. Теперь запишем формулы для определения элементов вектора - единичного шага в сторону, обратную направлению градиента: а) длина вектора (корень из суммы квадратов его элементов) Подсказка. Знак корня набирается либо с арифметической панели (arithmetical palette, иконка с калькулятором), либо нажатием клавиши "обратный слэж" (\). L( x y ) g_x( x y ) 16 2 2 g_y( x y ) ; б) проекции s_x(x,y) и s_y(x,y) на оси x,y шага единичной длины в направлении, противоположном направлению вектора градиента: g_x(x, y) ; g_y(x, y) , s_x : s_y : L(x, y) L(x, y) в) формула для зависимости длины шага от номера такта (в первом задании шаг постоянен): α : 1; β : 1; γ : 0 - параметры формулы для определения шага. λ0 λ(x, y) : Step( ) . Step( ) : α ; β γν Для постоянного шага=1, =1, =0, г) определяем вектор начальных значений для итеративной градиентной процедуры. Компоненты вектора: a) итеративно изменяющееся значение аргумента x; b) итеративно изменяющееся значение аргумента y; c) значение минимизируемой функции. Создаем вектор размерности 31. Присваиваем переменным с индексами их значения (для функции f(x,y) просто указываем значения аргументов). Получится: x 0 x0 y : y0 . 0 ff 0 f(x0, y0) Записываем формулы для изменения компонентов вектора в ходе градиентной процедуры. Обратите внимание на особенность формул: правая часть может зависеть только от значений аргументов на предшествующей итерации. Попытка использовать значения, найденные на текущей итерации, приведет к ошибке: в MathCad не будет информации, нужной для вычислений, поскольку все формулы пересчитываются как бы одновременно. Именно поэтому формула для f(x,y) записана так "длинно". x (ν 1) x ν λ(x ν , y ν ) s_x(x ν , y ν ) y(ν 1) : y ν λ(x ν , y ν ) s_y(x ν , y ν ) ff f(x λ(x , y ) s_x(x , y ), y λ(x , y ) s_y(x , y )) ν ν ν ν ν ν ν ν ν (ν 1) ν Работа с формулами завершена. Осталось вывести таблицу значений аргументов и минимизируемой функции и графики, иллюстрирующие сходимость к точке минимума. 17 В рассматриваемом примере эта точка очевидна: x*=0, y*=0, f(x*,y*)=0. Для вывода таблиц наберите идентификатор переменной (при необходимости - с индексом) и знак равенства. x 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 2 1.732 1.463 1.195 0.927 0.658 0.39 0.122 0.147 0.122 0.147 0.122 0.147 0.122 0.147 0.122 0.147 0.122 0.147 0.122 0.147 y 1 0.866 0.732 0.598 0.463 0.329 0.195 0.061 0.073 0.061 0.073 0.061 0.073 0.061 0.073 0.061 0.073 0.061 0.073 0.061 0.073 ff 5 3.748 2.677 1.785 1.073 0.542 0.19 0.019 0.027 0.019 0.027 0.019 0.027 0.019 0.027 0.019 0.027 0.019 0.027 0.019 0.027 По таблице можно установить, сколько тактов занял процесс сходимости к минимуму: при исходном сочетании параметров (=1, =0.3) автоколебания ( +0.122...-0.147 по оси x, -0.061...+0.073 по оси y и +0.019... +0.027 для f(x,y) ) имеют место начиная с 7-го такта. Рассчитаем амплитуду колебаний по аргументам: (0.122 0.147) 2 (0.061 0.073) 2 0.301 (мы видим, что, как и следовало ожидать, с точностью до вычислительной погрешности значение амплитуды совпадает с величиной шага =0.3). Выведем графики, показывающие зависимости аргументов x,y и значений функции f(x,y) от номера итерации. Выведем отдельный график изменения значения f(x,y) (поскольку масштабы функции и аргумента сильно разнятся, совмещение на одном графике нецелесообразно). 18 x 2 6 1 4 ff y 0 2 1 0 0 5 10 15 20 0 Рис. 4. Сходимость к точке минимума 10 20 Рис. 5. Изменение значения минимизируемой функции Как видно из графиков, в окрестности точки минимума имеют место автоколебания. Их размах точно соответствует длине шага (который в нашем случае выбран постоянным). Движение к минимуму осуществляется по траектории, показанной на рис. 6. 0.5 0 y 0.5 1 1 0 x 1 2 Рис. 6. Пошаговое движение к минимуму Для вывода графика, иллюстрирующего характер движения к минимуму, используйте "мастер" графиков (укажите Step в списке Trace Type). Рис. 5 показывает, что в окрестности минимума (x=0, y=0) происходят автоколебания. Будет также заметно, что проекция градиента перпендикулярна линиям равного уровня функции f(x, y) (в рассматриваемом примере - эллипсам, эксцентриситет которых зависит от коэффициента в формуле для f(x,y) ). Если параболоид круговой (т. е. =1), то амплитуда колебаний по обеим переменным одинакова (убедитесь в этом). 19 Приложение 2 Алгоритм поиска экстремума с шагом, зависящим от свойств минимизируемой функции (использование производной по направлению) Работа с алгоритмом. Исследуем алгоритм применительно к минимизации функции двух переменных, заданной полиномом 4-го порядка: f(x,y)=kxx4+kyy4 + lxx3+lyy3+oxx2+oyy2+pxx+pyy+q+kxyx4 y4+lxyx3y3+oxyx2y2+pxyxy. Форма функции определяется коэффициентами kx, ky, lx, ly и т. д. Последовательность действий для ввода функции и изучения ее формы - такая же, как описана в разделе "Алгоритм наискорейшего спуска с шагом, независящим от свойств минимизируемой функции". Параметры минимизируемой функции: lx 0.3 ly 0.4 ox 1 px 1.2 lxy 0.4 oxy 0.3 q 3 kx 0.5 ky 1 oy 2 py 0.6 kxy 0.2 pxy 0.1 Диапазон изменения индексов и формулы для расчета аргументов x, y, соответствующих каждому значению индекса: xi 2 0.4i yj 2 0.4j i 0 10 j 0 10 Формула минимизируемой функции: Подсказка. Для того чтобы написать длинную формулу так, чтобы ее было видно на одном экране, используйте "косметический" перенос суммирования на другую строку (нажмите комбинацию клавиш левый ctrl+Enter). 4 4 3 3 2 2 ff( x y ) kx x ky y lx x ly y ox x oy y px x py y q 4 4 3 3 2 2 kxy x y lxy x y oxy x y pxy x y Mi j ff xi yj - матрица значений функции в точках xi , yj. После построения графика преобразуйте его в чертеж линий равного уровня. Вы увидите, что график имеет "плато" - чрезвычайно пологое "дно". Понятно, что градиент в области "дна" будет иметь малую величину, и можно сразу предсказать, что алгоритмы с шагом, независящим от формы функции, будут иметь плохую сходимость. 20 100 0 50 2 4 6 0 2 4 6 8 8 10 10 M Рис. 7. График функции f(x,y) Вычислим градиент - вектор с элементами - частными производными по аргументам x,y, используя символьный процессор, дифференцирование по переменным. Обозначение: g_x(x,y) - частная производная ff(x,y) по x, g_y(x,y) - аналогично, по y. g_x( x y ) 4 kx x g_y( x y ) 3 4 ky y 3 3 lx x 2 2 ox x 2 3ly y 2oy y px 3 4 4 kxy x y 2 3 3 lxy x y 2 oxy x y 2 pxy y py 4 3 4kxy x y 3 2 3 lxy x y 2 2oxy x y pxy x Нормирование вектора, направленного противоположно градиенту (в качестве нормы используется длина вектора). g_x ( x y ) - проекция вектора единичной s_x( x y ) 2 g_x ( x y ) g_y ( x y ) длины на ось x; g_y ( x y ) s_y( x y ) 2 2 - проекция вектора единичной 2 g_x ( x y ) g_y ( x y ) длины на ось y. Выводим, используя символьный процессор, формулы для элементов матрицы вторых производных функции ff(x, y): 1) дифференцируем элементы вектора градиента g_x(x, y) по x, получа- 21 ем вторую производную по x g_xx (x, y); 2) затем дифференцируем g_x (x, y) по y, получаем смешанную вторую производную g_xy (x, y); 3) затем дифференцируем g_y (x,y) по x, получаем вторую смешанную производную g_yx (x, y), которая должна быть равна g_xy (x, y); 4) затем дифференцируем g_y (x, y) по y, получаем вторую производную g_yy (x, y). Таким образом, определены все элементы 22 матрицы вторых производных минимизируемой функции. Вторая производная по x: 4 2 3 2 g_xx( x y ) 3 ( 4 kx 4 kxy y ) x 2 ( 3 lx 3 lxy y ) x 2 ox 2 oxy y . Смешанные производные по x,y: 3 3 2 2 g_xy( x y ) 16kxy y x 9 lxy y x 4 oxy y x pxy , 3 3 2 2 g_yx( x y ) 16kxy y x 9 lxy y x 4 oxy y x pxy . Вторая производная по y: g_yy( x y ) 3 ( 4 ky 4 kxy x ) y 4 2 2 ( 3 ly 3 lxy x ) y 3 2 oy 2 oxy x 2 Запишем формулу для определения шага l_f(x,y): _f( x y ) g_x( x y ) s_x( x y ) g_xx( x y ) s_x( x y ) 2 g_y( x y ) s_y( x y ) 2 g_xy( x y ) s_x( x y ) s_y( x y ) g_yy( x y ) s_y( x y ) 2 . Выбираем точку начального приближения x0 , y0 (произвольно) и определяем соответствующие ей значения функции ff(x0 ,y0 ), ее градиента и матрицы вторых производных, а также шага l_f(x0 ,y0 ): max 10 - максимальное число итераций для процесса движения к минимуму; 0 max - диапазон изменения итераций; x0 1 y0 0.5 - координаты точки начального приближения; 0 _f( x0 y0 ) - значение шага, соответствующее точке начального приближения; sx0 s_x( x0 y0 ) - значение элементов вектора градиента в точке начального приближения; sy0 s_y( x0 y0 ) f0 ff ( x0 y0 ) - значение минимизируемой функции в точке начального приближения; 22 Сформируем 31 вектор начальных значений для итерационного процесса: x0 x0 y0 y0 f0 f0 Запишем формулы для итеративного вычисления аргументов и соответствующих им значений функции (помня при этом, что в MathCad итерационные вычисления должны быть записаны так, чтобы справа все индексы были меньше, чем слева - иначе формулы окажутся не обеспеченными информацией): x( 1) x _f x y s_x x y y( 1) f( 1) y ff x _f x y s_y x y _f x y s_x x y y _f x y s_y x y Выведем таблицы значений номеров итераций, аргументов и функции: y x f 0 1 0.5 7.45 1 0.471 0.158 4.04 2 0.1 0.141 3 0.621 0.161 2.514 4 0.568 0.125 2.529 5 0.559 0.133 2.532 6 0.557 0.132 2.533 7 0.557 0.132 2.533 8 0.557 0.132 2.533 9 0.557 0.132 2.533 10 0.557 0.132 2.533 2.846 Обратите внимание на чрезвычайно быструю сходимость и на отсутствие автоколебаний. Это достигается за счет того, что формула для шага строится с учетом формы минимизируемой функции. Из графика (рис.7) видно, что функция имеет очень пологое "дно" (для алгоритмов с шагом, не зависящим от формы функции, это было бы причиной очень плохой сходимости). 23 1 x y 0.72 0 10 Рис. 8. Сходимость аргументов к экстремуму 7.45 f 2.51 0 10 Рис. 9. Сходимость функции к экстремуму 0.6 0.4 y 0.2 0 0.2 1 0.5 0 x Рис. 10. Траектория движения к экстремуму 24 0.5 1 Приложение 3 Алгоритм поиска экстремума с шагом, зависящим от свойств минимизируемой функции (метод Ньютона) Поиск минимума тестовой функции (функция Розенброка) Назначение тестовой функции и ее форма К настоящему времени известно огромное количество алгоритмов поиска экстремума, и поэтому весьма актуальна задача выбора подходящего алгоритма для решения конкретной задачи. В общем случае критерий выбора представляет собой компромисс между точностью приближения к точке экстремума, затратами ресурсов ЭВМ для этой цели и простотой требуемых аналитических выкладок (от которой зависят затраты времени разработчика на отладку). С целью сравнения эффективности различных алгоритмов разработаны специальные (так называемые тестовые) функции, имеющие "неприятные" для методов поиска экстремума особенности. Одна из самых известных - функция Розенброка (автора многих популярных алгоритмов поиска экстремума). Формула, определяющая функцию Розенброка: 2 2 2 f( x y ) 100( y x ) (1 x) . Эта функция имеет крайне пологий изогнутый овраг, что сильно затрудняет поиск минимума (значения аргументов в точке минимума очевидны: x* =1, y* = 1 (при этом f(x*,y*) = 0 ). Благодаря "неприятным" для методов поиска экстремума особенностям функция Розенброка часто используется для испытания сходимости различных алгоритмов и для их сравнения. Используем функцию Розенброка для сравнительных испытаний метода наискорейшего спуска и метода Ньютона. Форма и свойства функции Розенброка. 2 2 2 f( x y ) 100( y x ) (1 x) - записываем формулу для последующего вывода на график; n 20 - максимальное число отсчетов по осям x, y; i 0 n j 0 n - номера отсчетов по осям; a1 0.2 a2 0.2 - настроечные параметры для формул расчета значений аргументов x, y по номерам точек i, j; 0.06 b1 0.06 b2 xi a1 b1 i yj a2 b2 j - формулы для расчета аргументов по номерам i, j; 25 Mi j f xi yj - матрица значений функции Розенброка. Форму оврага лучше всего увидеть по графику линий равного уровня. Преобразуйте график в эту форму и (предварительно отключив Numbered и AutoContur в Color&Lines, установите число уровней (No. of Contours) максимально большим (99)). Вы увидите на чертеже форму оврага. 0 5 10 15 20 20 15 10 5 0 M Рис. 11. График функции Розенброка Согласно общим формулам для метода Ньютона необходимо вычислить матрицу вторых производных и обратную к ней. 1. Вычисляем элементы вектора градиента функции Розенброка: 2 g_x( x y ) 400( y x ) x 2 2 x - частная производная по x; g_y( x y ) 200y 2 200x - частная производная по y; 2 1200x 400 y 2 - вторая частная производная по x; 400x - вторая смешанная производная по x,y; 400x - вторая смешанная производная по y,x; g_xx( x y ) g_xy( x y ) g_yx( x y ) g_yy( x y ) 200 - вторая частная производная по y. 2. Выполним вычисления элементов обратной матрицы, с помощью символьного процессора MathCad можно получить формулы для определения ее элементов. Подсказка. Для того чтобы с помощью символьного процессора получить формулы для определения обратной матрицы необходимо: а) сформировать матрицу соответствующей размерности и вписать функциональные соотношения для ее элементов. (Не обозначайте матрицу!) б) выделите ее и, используя позицию Меню Symbolics, Matrix, Invert, по- 26 лучите готовую формулу для элементов обратной матрицы. Заполненные элементы матрицы вторых производных g_xx ( x y ) g_xy ( x y ) g_yx ( x y ) g_yy ( x y ) Синтезированная средствами MathCad формула обратной матрицы: g_yy( x y ) g_xy( x y ) 1 ( g_xx( x y ) g_yy( x y ) g_yx( x y ) g_xy( x y ) ) g_yx( x y ) g_xx( x y ) Осталось переобозначить элементы формулы для получения выражений элементов обратной матрицы. Сомножитель перед матрицей - ее определитель det_g( ): det_g( x y ) g_xx( x y ) g_yy( x y ) g_yx( x y ) g_xy( x y ) Элементы обратной матрицы gij(x,y): g_yy( x y ) g11( x y ) g21( x y ) g12( x y ) det_g( x y ) g_yx( x y ) g_xy( x y ) det_g( x y ) g_xx( x y ) g22( x y ) det_g( x y ) det_g( x y ) 3. Параметры для алгоритма Ньютона: max 10 - максимальное число итераций; 0 max - номера итераций; x0 0.5 y0 0.8 - начальные значения аргументов (произвольные); ff0 f ( x0 y0 ) - соответствующее им значение функции Розенброка. Сформируем вектор начальных значений для итерационной процедуры: x0 x0 y0 y0 ff 0 ff0 4. Используя формулы для метода Ньютона, запишем итерационную процедуру: x( 1) y( 1) ff ( x g11 x y g_x x y g12 x y g_y x y y g21 x y g_x x y g22 x y g_y x y g11 x y g_x x y y g21 x y g_x x y g12 x y g_y x y g22 x y g_y x y f x 1) 27 5. Выводим таблицу результатов расчета и строим графики. x y ff 0 0.5 0.8 112.5 1 0.493 0.243 2.229 2 0.985 1.214 3 0.985 0.97 477.136 2.22110 4 1 1 4.93510 5 1 1 0 6 1 1 0 7 1 1 0 8 1 1 0 9 1 1 0 10 1 1 0 4 6 Обратите внимание на прекрасную скорость сходимости! Подберите объяснение этому факту. 1 600 0.25 450 x y ff 0.5 1.25 300 150 2 0 0 2.5 5 7.5 10 0 Рис. 12. Сходимость аргументов к точке экстремума 28 2.5 5 7.5 10 Рис. 13. Сходимость функции 1 0.25 y 0.5 1.25 2 0.5 0.13 0.25 x 0.63 1 Рис. 14. Траектория движения к экстремуму Литература 1. 2. Химмельблау Д. Прикладное нелинейное программирование. – М.: Мир, 1975. - С. 72-83. Аоки М. Введение в методы оптимизации. – М.:Наука,1977. - С.119, 187. 29 Содержание ВОПРОСЫ ДЛЯ ИССЛЕДОВАНИЯ: .................................................................. 3 1. НЕОБХОДИМЫЕ ТЕОРЕТИЧЕСКИЕ СВЕДЕНИЯ ........................................... 3 1.1. Назначение задач поиска экстремума функции многих переменных.............................................................................................. 3 1. 2. Общая форма алгоритма наискорейшего спуска для решения задачи нахождения экстремума функции многих переменных ........ 4 1. 3. Классификация алгоритмов наискорейшего спуска ................... 5 1. 4. Алгоритмы наискорейшего спуска с шагом, независящим от формы минимизируемой функции ........................................................ 5 1. 5. Алгоритм наискорейшего спуска с шагом, длина которого зависит от свойств минимизируемой функции (использование производной по направлению) ............................................................... 6 1. 6. Алгоритм наискорейшего спуска с шагом, длина которого зависит от свойств минимизируемой функции (использование вторых производных). Метод Ньютона ............................................. 9 2. МЕТОДИКА ПРОВЕДЕНИЯ РАБОТЫ .......................................................... 10 2. 1. Общие положения ....................................................................... 10 2. 2. Методика вычислительных экспериментов ............................. 11 3. СОДЕРЖАНИЕ ОТЧЕТА ПО ЛАБОРАТОРНОЙ РАБОТЕ ................................ 13 ПРИЛОЖЕНИЯ ............................................................................................. 14 Приложение 1 ..................................................................................... 14 Приложение 2 ...................................................................................... 20 Приложение 3 ...................................................................................... 25 ЛИТЕРАТУРА .............................................................................................. 29 30