АСТРАХНСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ Кафедра «Автоматизация технологических процессов» ПОИСК ЭКСТРЕМУМОВ МНОГОМЕРНЫХ ФУНКЦИЙ Методические указания к лабораторным занятиям по курсу «Теория автоматического управления» для студентов специальностей 220301.65 «Автоматизация технологических процессов и производств» и 220200.62 «Автоматизация и управление» Астрахань, 2011 Составитель: Кокуев А. Г. – к.т.н., доцент кафедры «Автоматизация технологических процессов» Рецензент: д.т.н., проф. кафедры «Автоматизация технологических процессов» Есауленко В.Н. Поиск экстремумов многомерных функций: метод. указания к лабораторным занятиям по курсу «Теория автоматического управления» для студентов специальностей 220301 «Автоматизация технологических процессов и производств» и 220200 «Автоматизация и управление»/ АГТУ; Сост.: А. Г. Кокуев.- Астрахань, 2011.-34с. Указания содержат сведения, необходимые для изучения методов поиска экстремумов многомерных функций. Приведена постановка задачи, рассмотрены стратегии поиска экстремума функции многих переменных. Рассмотрены методы конфигураций, деформируемого многогранника, наилучшей пробы, Розенброка, сопряженных направлений и адаптивный метод случайного поиска. Предназначены для студентов, обучающихся на четвертом курсе по специальностям 220301 «Автоматизация технологических процессов и производств» и 220200 «Автоматизация и управление» Методические указания утверждены на заседании методической комиссии «Автоматизация и управление» « 25 » марта 2011 г, протокол № 3. 2 профильной Содержание ВВЕДЕНИЕ ........................................................................................... 4 1. КРАТКИЕ ТЕОРЕТИЧЕСКИЕ СВЕДЕНИЯ ПО РАБОТЕ В СРЕДЕ MATLAB .................................................................................. 5 1.1 Рабочая среда MATLAB ............................................................ 5 1.2 Простейшие вычисления............................................................ 6 1.3 Использование элементарных функций ................................... 7 1.4 М-файлы ...................................................................................... 7 1.5 Работа в редакторе М-файлов ................................................... 8 1.6 Управляющие конструкции языка программирования ........ 10 1.6.1 Операторы цикла ................................................................... 10 1.6.2 Оператор ветвления if ........................................................... 11 1.6.3 Прерывание и продолжение циклов .................................... 12 1.7 Построение графиков в системе MATLAB ............................ 12 1.7.1. Команда plot .......................................................................... 12 1.7.2. Разметка графика и надписи ................................................ 13 1.7.3 Изображение функций .......................................................... 15 2. Адаптивный метод случайного поиска (метод Монте-Карло)... 16 2.1 Постановка задачи и стратегии .............................................. 16 2.2 Метод конфигураций (метод Хука-Дживса) .......................... 18 2.3 Метод деформируемого многогранника (метод НелдераМида) ............................................................................................... 22 2.4 Метод наилучшей пробы (метод Монте-Карло) ................... 24 2.5 Метод Розенброка ..................................................................... 27 2.6 Метод сопряженных направлений .......................................... 30 3. ЗАДАНИЕ И ПОРЯДОК ВЫПОЛНЕНИЯ РАБОТЫ ................. 33 Задание............................................. Error! Bookmark not defined. Порядок выполнения работы......... Error! Bookmark not defined. Содержание отчета ......................................................................... 34 4. СПИСОК ЛИТЕРАТУРЫ .............................................................. 34 3 ВВЕДЕНИЕ Проблема выбора оптимального варианта решения относится к числу наиболее актуальных технико-экономических задач. В математической постановке она представляет собой задачу минимизации (максимизации) некоторого функционала, описывающего те или иные характеристики системы. Численное решение оптимизационных задач на ЭВМ сводится к поиску экстремума функции многих переменных. Таковы задачи оптимального управления и идентификации, задача супервизорного управления, оптимального проектирования и планирования. Среди различных типов оптимизационных задач особое место занимают задачи оптимизации невыпуклых детерминированных функций с единственной точкой экстремума – так называемые унимодальные задачи. Эти задачи представляют интерес с различных точек зрения. Прежде всего, невыпуклость порождает большие аналитические сложности при разработке методов решения унимодальных задач. Как известно, аналитические методы развиты для значительно более простых задач. Для линейных, квадратичных, выпуклых задач разработаны различные численные методы решения, доказана сходимость методов, получены оценки скорости сходимости. На практике класс унимодальных задач не является чем-то необычным. Имеются многочисленные примеры, когда в интересующей нас области определения функции существует лишь один экстремум. Если при этом оптимизируемая функция имеет сложный вид или задана неявно, ее выпуклость ничем не гарантируется. В такой ситуации естественно применить метод оптимизации, ориентированный на худший случай, т.е. на невыпуклость функции. Разнообразие численных методов минимизации делает актуальным вопрос об их сравнении. Невозможность строгого аналитического сравнения привела к тому, что получило широкое распространение сравнение на тестовых примерах. Установилась своеобразная культура такого сравнения — набор одних и тех же тестов. Однако этот способ сравнения имеет и свои недостатки. Результаты сравнения зависят от тестовой функции, от начальной точки процесса минимизации, от размерности задачи. Непонятным остается сам факт, почему одни методы оказываются более эффективными, чем другие. Все это определяет актуальность сопоставительного исследования существующих численных методов минимизации применительно к классу унимодальных задач. 4 1. КРАТКИЕ ТЕОРЕТИЧЕСКИЕ СВЕДЕНИЯ ПО РАБОТЕ В СРЕДЕ MATLAB 1.1 Рабочая среда MATLAB При запуске MATLAB на экране открывается рабочая среда MATLAB, изображенная на рис. 1.1. Рис. 1.1 Рабочая среда MATLAB Основными элементами рабочей среды являются: меню; панель инструментов с кнопками и раскрывающимся списком; окна с вкладками Workspace и Current Directory для просмотра переменных и установки текущего каталога; окно Command Window, служащее для ввода команд и вывода результата; 5 окно Command History, предназначенное для просмотра и повторного выполнения ранее введенных команд (окно Command History может быть не пустым, если до этого пакет MATLAB использовался); строка состояния с кнопкой Start. Окно Command Window состоит из следующих элементов: заголовка с названием окна и двумя кнопками справа; рабочей области с командной строкой, в которой находится мигающий вертикальный курсор; полос скроллинга. Все команды, следует набирать в командной строке. Сам символ >> приглашения командной строки, набирать не нужно. Для просмотра рабочей области командного окна удобно использовать полосы скроллинга или клавиши <Home>, <End> для перемещения влево или вправо и <PageUp>, <PageDown> для перемещения вверх или вниз. Если вдруг после перемещения по рабочей области командного окна пропала командная строка с мигающим курсором, просто нажмите <Enter>. Набор любой команды или выражения должен заканчиваться нажатием на <Enter>, для того чтобы программа MATLAB выполнила эту команду или вычислила выражение. 1.2 Простейшие вычисления Выберите вид рабочей среды "по умолчанию", наберите в командной строке 1+2 и нажмите <Enter>. В результате в командном окне MATLAB отображается следующее: >> 1 + 2 ans = 3 >> Что сделала программа MATLAB? Сначала она вычислила сумму 1 + 2, затем записала результат в специальную переменную ans и вывела ее значение, равное 3, в командное окно. Переменная ans автоматически создается, когда вычисляемое выражение не присваивается некоторой переменной. 6 1.3 Использование элементарных функций Предположим, выражения: что требуется вычислить значение следующего sin 2,45 cos 3,78 tg3,3 Введите в командной строке это выражение в соответствии с правилами MATLAB и нажмите <Enter>. e 2,5 (ln 11,3)0,3 >> exp(-2.5)*log(11.3)^0,3-sqrt((sin(2,45*pi)+cos(3.78*pi))/tan(3.3)) Ответ выводится в командное окно: ans = -3.2105 При вводе выражения использованы встроенные функции MATLAB для вычисления экспоненты, натурального логарифма, квадратного корня и тригонометрических функций. Аргументы функций заключаются в круглые скобки, имена функций набираются строчными буквами. Для ввода числа π достаточно набрать pi в командной строке. Арифметические операции в MATLAB выполняются в обычном порядке, свойственном большинству языков программирования: возведение в степень — ^; умножение и деление — *, /; сложение и вычитание — +, -. Для изменения порядка выполнения арифметических операторов следует использовать круглые скобки. 1.4 М-файлы В предыдущих разделах рассмотрены достаточно простые примеры, для выполнения которых требуется набрать несколько команд в командной строке. Для более сложных задач число команд возрастает, и работа в командной строке становится непродуктивной. Использование истории команд, сохранение переменных рабочей среды или ведение дневника при помощи diary незначительно повышают производительность работы. Эффективное решение состоит в оформлении собственных алгоритмов в виде программ (М-файлов), которые можно запустить из рабочей среды или из редактора. Встроенный в 7 MATLAB редактор М-файлов позволяет не только набирать текст программы и запускать ее целиком или частями, но и отлаживать алгоритм. 1.5 Работа в редакторе М-файлов Раскройте меню File рабочей среды MATLAB и в пункте New выберите подпункт M-file или нажмите кнопку New M-file на панели инструментов рабочей среды. Новый файл открывается в окне редактора М-файлов, которое приведено на рис. 1.2. Рис 1.2 Окно редактора М-файлов MATLAB Вид строки меню и панели инструментов зависит от ширины окна. Если оно достаточно узкое, то часть инструментов перемещается в раскрывающийся список. Сохранять файл с именем формата *.m следует в подкаталоге work основного каталога MATLAB, выбрав в меню File редактора пункт Save as. Имя может содержать латинские буквы и цифры, начинаться имя должно с буквы. Для запуска на выполнение всех команд, содержащихся в файле, следует выбрать пункт Run в меню Debug, или просто нажать <F5>. На экране появится результат эквивалентный последовательному выполнению содержащихся в Мфайле команд в командном окне. Если вы создали новый файл в редакторе и набрали в нем команды, то необязательно сначала сохранять его из меню File, а только потом выполнять. Можно сразу раскрыть меню Debug. Пункт Run в этом случае заменяется на Save and Run, он позволяет запустить программу, предварительно сохранив ее. Удобной возможностью редактора М-файлов является выполнение части команд. Для этого необходимо выделить при помощи мыши, удерживая 8 левую кнопку, необходимые команды, затем открыть контекстное меню правой кнопкой мыши и выбрать пункт Evaluate Selection. To же самое можете сделать, используя клавиатуру: клавишами со стрелками при нажатой <Shift> выделите необходимые команды и выполните их из пункта Evaluate Selection меню Text или нажмите клавишу <F9>. Если в М-файле при наборе сделана ошибка, то она выявляется в процессе исполнения. MATLAB выполняет команды до неправильно введенной, после чего в командное окно выводится сообщение об ошибке. Попытка выполнения такого файла приведет к выводу в командное окно следующего сообщения с гиперссылкой на место ошибки. Щелчок мыши по гиперссылке с именем М-файла делает окно редактора активным и помещает курсор в строку с ошибкой. Отдельные блоки М-файла (особенно большого размера) целесообразно снабжать комментариями, которые пропускаются при выполнении, но удобны при работе с М-файлом. Комментарии в MATLAB начинаются со знака процента и автоматически выделяются зеленым цветом (по умолчанию), например: % комментарий Для исключения части исполняемого кода без его удаления или если количество строк комментариев достаточно велико, можно использовать блок комментариев, начинающийся со строки из двух символов %{ (знака процента и открывающейся фигурной скобки) и заканчивающийся строкой из двух символов %} (знака процента и закрывающейся фигурной скобки). Открытие существующего М-файла производится при помощи пункта Open... меню File рабочей среды либо редактора М-файлов. Открыть файл в редакторе можно и командой edit из командной строки, указав в качестве аргумента имя файла, например: >> edit myfile Команда edit без аргумента приводит к открытию редактора и созданию нового файла без имени (Untitled). Если вы ввели команду с именем несуществующего файла myfile4: >> edit myfile4 то MATLAB воспримет это как желание создать новый М-файл с указанным именем. На экран будет выведено диалоговое окно с запросом: "File myfile4.m does not exist. Do you want to create it?" (Файл не существует, хотите ли вы 9 создать такой файл?). При выборе Yes файл будет создан и откроется в редакторе М-файлов. 1.6 Управляющие конструкции языка программирования Для решения многих более серьезных задач требуются программы, в которых действия повторяются циклически, а в зависимости от некоторых условий выполняются различные части программы. В данном разделе описаны управляющие конструкции языка программирования MATLAB, которые могут быть использованы при написании файл-программ. 1.6.1 Операторы цикла Схожие и повторяющиеся действия выполняются при помощи операторов цикла for и while. Цикл for предназначен для выполнения заданного числа повторяющихся действий, a while— для действий, число которых заранее не известно, но известно условие продолжения цикла. Цикл for Использование for осуществляется следующим образом: for count = start:step:final команды MATLAB end Здесь count — переменная цикла, start— ее начальное значение, final — конечное значение, a step — шаг, на который увеличивается count при каждом следующем заходе в цикл. Цикл заканчивается, как только значение count становится больше final. Переменная цикла может принимать не только целые, но и вещественные значения любого знака. Цикл while Цикл while служит для организации повторений однотипных действий в случае, когда число повторений заранее неизвестно и определяется выполнением некоторого условия. Конечно, до бесконечности действовать не удастся, но можно, например, накапливать сумму с заданной точностью. Значение, обеспечи 10 вающее малость текущего слагаемого, заранее неизвестно, поэтому циклом for воспользоваться не удастся. Выход состоит в применении цикла while который работает, пока выполняется условие цикла: while условие повторения цикла команды MATLAB end Условие цикла while может содержать логическое выражение, составленное из операций отношения и логических операций или операторов. Для задания условия повторения цикла допустимы операции отношения, приведенные в табл. 1.1. Табл. 1.1 Обозначение == < <= >= -= Операция отношения Равенство Меньше Меньше или равно Больше или равно Не равно Задание более сложных условий производится с применением логических операторов или операций. Например, условие -1 ≤ x < 2 состоит в одновременном выполнении неравенства х ≥ -1 и х < 2 и записывается при помощи логического оператора and and(x >= -1, х < 2). 1.6.2 Оператор ветвления if Условный оператор if позволяет создать гибкий разветвляющийся алгоритм, в котором при выполнении определенных условий выполняется соответствующий блок операторов или команд MATLAB. Практически во всех языках программирования имеются аналогичные операторы. Оператор if может применяться в простом виде, для выполнения блока команд при удовлетворении некоторого условия, или в конструкции if-elseif-else для написания разветвляющихся алгоритмов. 11 Применение оператора if в самом простом случае выглядит так: if условие команды MATLAB end Если условие верно, то выполняются команды MATLAB, размещенные между if и end, а если условие неверно, то происходит переход к командам, расположенным после end. 1.6.3 Прерывание и продолжение циклов Циклическое выполнение блока операторов в ряде случаев может потребовать либо прерывания цикла, т. е. досрочного выхода из него, либо перехода к следующему шагу цикла без выполнения части оставшихся операторов. При организации циклических вычислений операторами while или for следует позаботиться о том, чтобы внутри цикла не возникало ошибок или нежелательных действий. При возникновении подобных ситуаций используется оператор break. Внутри цикла может возникнуть ситуация, при которой выполнение оставшейся части операторов не требуется, а сразу следует перейти к новому шагу цикла. В этом случае оказывается удобным оператор continue, который хоть и не является незаменимым, но позволяет обойтись без разветвленной структуры if-elseif-else, что делает текст программы более понятным. 1.7 Построение графиков в системе MATLAB 1.7.1. Команда plot Команда plot создает x-y график в линейных осях; если x и y являются векторами одинаковой длины, то команда plot(x,y) открывает графическое окно и рисует зависимость y(x). Например, можно нарисовать график синуса на интервале от -4 до 4 с помощью команд: x = -4:.01:4; y = sin(x); plot(x,y) 12 Вектор x является набором равноотстоящих точек с шагом 0.01, а y вектор со значениями функции синуса в этих точках (синус – поэлементная функция). Рисунок при создании открывает отдельное окно. Переход между окнами (возврат в окноMATLAB или переход от рисунка к рисунку осуществляется в соответствии с правилами среды, например, с помощью комбинации Alt+Tab или с помощью мыши). В качестве второго примера можно нарисовать график e−x2 на интервале от -1.5 до 1.5 следующим образом: x =- 1.5:.01:1.5; y = exp(-x.ˆ2); plot(x,y) Обратите внимание на то, что точка перед ˆ обязательна, поскольку мы хотим, чтобы возведение в степень выполнялось поэлементно. Можно, например, рисовать кривые, заданные параметрически. Например, можно выполнить такие операторы t=0:.001:2*pi; x=cos(3*t); y=sin(2*t); plot(x,y) 1.7.2. Разметка графика и надписи Команда grid поместит сетку на график. График может быть снабжен заголовком, именами осей, и на сам график может быть помещен дополнительный текст с помощью команд вывода текста. Аргументами всех этих команд является текстовая строка. Например, команда title(’График’) добавит к вашему графику заголовок. Команда gtext(’Пятно’) позволяет с помощью мыши или клавишного курсора разместить на рисунке индикаторный крест, в месте размещения которого и будет помещен текст после нажатия произвольной клавиши. При необходимости сделать подписи осей используются команды Xlabel(’ПодписьX’), Ylabel(’ПодписьY’). Если выведена неправильная надпись, то можно ее стереть или заменить на другую, повторив такую же команду вывода текста, но с пустой или новой строкой в качестве аргумента. 13 Для изображения нескольких кривых на одном рисунке существуют два способа, которые иллюстрируются следующими примерами. 1) x=0:.01:2*pi; y1=sin(x); y2=sin(2*x); y3=sin(4*x); plot(x,y1,x,y2,x,y3) или, что полностью эквивалентно, формируется матрица Y, содержащая значения изображаемых функций в виде столбцов, и после этого рисунок создается последовательностью команд x=0:.01:2*pi; Y=[sin(x)’, sin(2*x)’, sin(4*x)’]; plot(x,Y) 2) Другим способом такого рисования является использование команды hold on, которая замораживает текущий график, так что последующие кривые помещаются на этот же график. При этом масштаб и разметка осей изменяются, если новая кривая не вписывается в нарисованные оси. Команда hold off приводит к тому, что любой последующий вызов команды plot создает новый рисунок на этом же листе, т.е. предыдущий график стирается. При выводе графика можно сменить принятый по умолчанию тип точек, с помощью которых рисуется данный график. Например, последовательность команд x=0:.01:2*pi; y1=sin(x); y2=sin(2*x); y3=sin(4*x); plot(x,y1,’--’,x,y2,’:’,x,y3,’+’) приведет к тому, что первый график будет нарисован пунктиром, второй– точками, а третий – символами +. В общем случае каждая линия на графике определяется триплетом x,y,s, где x и y -это вектора с координатами, а s – строковая переменная, образованная любыми комбинациями из каких-нибудь приведенных в табл. 1.2 столбцов. 14 S y m Цвет желтый фиолетовый S . o Маркер точка кружок S : c голубой x x-метка -. r g b w k красный зеленый синий белый черный + * s d v ^ < > p h плюс звездочка квадрат алмаз треугольник (вниз) треугольник (вверх) треугольник (влево) треугольник (вправо) шестиугольник восьмиугольник -- Табл. 1.2 Тип линии сплошная точечная штрихпунктирная пунктирная 1.7.3 Изображение функций Функция fplot предоставляет альтернативную возможность изображения функций по сравнению с вычислением вектора y по x и последующим изображением этой кривой с помощью функции plot. Эта функция бывает особенно полезной, когда кривая имеет несколько разных скоростей изменения и заранее не ясно, в скольких и каких точках необходимо вычислять и выводить кривую. Этой функции необходимо передавать строку, описывающую требуемую функцию в виде f(x). Строка, описывающая f(x), может содержать любые допустимые в MATLAB операции и/или функции. Функция f(x) должна возвращать вектор той же размерности, что и x, или матрицу, каждый столбец которой имеет столько же элементов, сколько и x. Например, для того чтобы нарисовать кривую y = sin(x)cos(2x) в диапа зоне x от 0 до 5π, необходимо вызвать функцию fplot (’sin(x) .*cos(2x)’, [0 5*pi]) Например, для того чтобы нарисовать кривую x 2 6 x 14 в диапа зоне x от -10 до 10, необходимо вызвать функцию fplot('x^2-6*x+14',[-10 10]); 15 Функция fplot имеет еще два дополнительных (необязательных) аргумента. Один из них – это строка, описывающая тип и цвет линии (аналогично функции plot), а вторая – точность. По умолчанию точность равна 2 · 10−3, и она определяет, на сколько точек делить интервал, чтобы погрешность от линейной интерполяции не превосходила этой заданной точности. Чем меньше точность, тем дольше вам придется ждать вывода графика на экран. 2. Адаптивный метод случайного поиска (метод Монте-Карло) 2.1 Постановка задачи и стратегии Постановка задачи Требуется найти безусловный минимум функции f(x) многих переменной, т.е. такую точку x R , * что f ( x * ) min f ( x) . Поставленная задача xR минимизации может быть решена с помощью необходимых и достаточных условий безусловного экстремума. Однако задача получения решения уравнения df ( x) 0 может оказаться весьма сложной. Более того, в практических dx задачах функция f(x) может быть не задана в аналитическом виде или часто неизвестно, является ли она дифференцируемой. Поэтому получение численного решения поставленной задачи является актуальным. Стратегия поиска Задается начальная точка x0. Каждая последующая точка находится по формуле , где – величина шага; - случайный вектор единичной длины, определяющий направление поиска; k - номер итерации. На текущей итерации при помощи генерирования случайных векторов получаются точки, лежащие на гиперсфере радиуса с центром в точке . Если значение функции в полученной точке не меньше, чем в центре, шаг считается неудачным (точки y1, y2 при поиске из х0; y1, y3 при поиске из х1). Если число неудачных шагов из текущей точки достигает некоторого числа М, дальнейший поиск продолжается из той же точки, но с меньшим шагом до тех пор, пока он не станет меньше заранее заданной величины R . Если же значение функции в 16 полученной точке меньше, чем в центре, шаг считается удачным и в найденном направлении делается увеличенный шаг, играющий роль ускоряющего шага (как при поиске по образцу в методе конфигураций). Если при этом значение функции снова меньше, чем в центре, направление считается удачным и дальнейший поиск продолжается из этой точки (точки при поиске из х0, 1 при поиске из х ). Если же значение функции стало не меньше, чем в центре, направление считается неудачным и поиск продолжается из старого центра (в точке y2 при поиске из х1 функция меньше, чем в х1, а в точке уже не меньше, поэтому направление неудачное) (рис. 2.1). Рис 2.1 Адаптивный метод случайного поиска (метод Монте-Карло) Алгоритм Шаг 1. Задать начальную точку х0, коэффициенты расширения и сжатия , М – максимальное число неудачно выполненных испытаний на текущей итерации, t0 = 1 – начальную величину шага, R – минимальную величину шага, N – максимальное число итераций. Положить k = 0, j = 1. Шаг 2. Получить случайный вектор , где случайная величина, равномерно распределенная на интервале [-1,1]. - Шаг 3. Вычислить Шаг 4. Проверить выполнение условий: 17 а) если , шаг удачный. Положить . Определить, является ли текущее направление удачным: - если , направление поиска удачное. Положить , , k = k + 1 и проверить условие окончания. Если k < N, положить j = 1 и перейти к шагу 2. Если k = N, поиск удачно завершить ; - если , направление поиска неудачное, перейти к шагу 5; б) если , шаг неудачный и перейти к шагу 5. Шаг 5. Оценить число неудачных шагов из текущей точки: а) если j < М, следует положить j = j +1 и перейти к шагу 2; б) если j = М, проверить условие окончания: - если , процесс закончить: , ; - если , положить , j = 1 и перейти к шагу 2. Замечания: 1. Величина , равномерно распределенная на интервале [-1,1], генерируется обычно с помошью датчиков псевдослучайных чисел на ЭВМ. Вырабатывается случайная величина равномерно распределенная на [0,1], а затем используется линейное преобразование: . 2. Шумер и Стейглиц [Schumer М.A., Steiglitz K.] рекомендуют следующие параметры алгоритма: α = 1,618; β = 0,618; М = 3n. При α = 1 точка на шаге 4 совпадает с , т.е. аналог поиска по образцу не производится. Начальный шаг можно задать произвольно. 3. Если выполнено условие окончания , то в качестве ответа можно использовать любую точку внутри шара с радиусом и центром в точке . 4. Многочисленные варианты случайного поиска могут включать элементы обучения, при котором направления убывания функции становятся более вероятными, а другие направления - менее вероятными. 2.2 Метод конфигураций (метод Хука-Дживса) Постановка задачи Требуется найти безусловный минимум функции f(x) многих переменной, т.е. такую точку x R , * что f ( x * ) min f ( x) . Поставленная задача xR минимизации может быть решена с помощью необходимых и достаточных условий 18 безусловного уравнения экстремума. Однако задача получения решения df ( x) 0 может оказаться весьма сложной. Более того, в практических dx задачах функция f(x) может быть не задана в аналитическом виде или часто неизвестно, является ли она дифференцируемой. Поэтому получение численного решения поставленной задачи является актуальным. Стратегия поиска Метод конфигураций (метод Хука-Дживса [R.Hooke, Т.А. Jeeves]) представляет собой комбинацию исследующего поиска с циклическим изменением переменных и ускоряющего поиска по образцу. Исследующий поиск ориентирован на выявление локального поведения целевой функции и определение направления ее убывания вдоль "оврагов". Полученная информация используется при поиске по образцу при движении вдоль "оврагов". Исследующий поиск начинается в некоторой начальной точке х°, называемой старым базисом. В качестве множества направлений поиска выбирается множество координатных направлений. Задается величина шага, которая может быть различной для разных координатных направлений и переменной в процессе поиска. Фиксируется первое координатное направление и делается шаг в сторону увеличения соответствующей переменной. Если значение функции в пробной точке меньше значения функции в исходной точке, шаг считается удачным. В противном случае необходимо вернуться в предыдущую точку и сделать шаг в противоположном направлении с последующей проверкой поведения функции. После перебора всех координат исследующий поиск завершается. Полученная точка называется новым базисом (на рис. 2.2 в точке х° произведен исследующий поиск и получена точка х1 новый базис). Если исследующий поиск с данной величиной шага неудачен, то она уменьшается и процедура продолжается. Поиск заканчивается, когда текущая величина шага станет меньше некоторой величины. Поиск по образцу заключается в движении по направлению от старого базиса к новому (от точки х° через точку х1, из точки х1 через точку х2, из х2 через x3 на рис. 2.2). Величина ускоряющего шага задается ускоряющим множителем λ. Успех поиска по образцу определяется с помощью исследующего поиска из полученной точки (например, из точек 6, 11, 15 на рис. 2.2). Если при этом значение в наилучшей точке меньше, чем в точке предыдущего базиса, то поиск по образцу удачен (точки 6, 11 - результат удачного поиска по образцу, а точка 15 - неудачного). Если поиск по образцу 19 неудачен, происходит возврат в новый базис, где продолжается исследующий поиск с уменьшенным шагом. Рис 2.2 Метод конфигураций (метод Хука-Дживса) На рис. 2.2 удачный поиск отображается сплошными линиями, а неудачный - пунктирными, числа соответствуют порождаемым алгоритмом точкам. Обозначим через d1,...,dn - координатные направления d1= , d2= , d3= При поиске по направлению di меняется только переменная хi , а остальные переменные остаются зафиксированными. Алгоритм Шаг 1. Задать начальную точку х°,число ε>0 для остановки алгоритма, начальные величины шагов по координатным направлениям ∆1,...,∆n ≥ε, ускоряющий множитель λ > 0, коэффициент уменьшения шага α> 1. Положить 20 =x°, i = 1, к = 0. Шаг 2. Осуществить исследующий поиск по выбранному координатному направлению: а) если f(yi+ ∆idi) < f(yi), т.е. f(yi,..,yii + ∆i,... yin)< f(yi1,... yii,.., yin), шаг считается удачным. В этом случае следует положить уi+1 = уi+ ∆idi и перейти к шагу 3; б) если в п. "а" шаг неудачен, то делается шаг в противоположном направлении. Если f(yi - ∆idi) < f(yi) т.е. f(yi,..,yii + ∆i,... yin)< f(yi1,... yii,.., yin) шаг считается удачным. В этом случае следует положить yi+1 = yi - ∆idi и перейти к шагу 3; в) если в пп. "а" и "б" шаги неудачны, положить yi+1 = уi. Шаг 3. Проверить условия: а) если i<n, то положить i = i + 1 и перейти к шагу 2 (продолжить исследующий поиск по оставшимся направлениям); б) если i = n, проверить успешность исследующего поиска: если f(уn+1) <f(xk) ,перейти к шагу 4; если f(уn+1) ≤f(xk) ,перейти к шагу 5. Шаг 4. Провести поиск по образцу. Положить xk+1= уn+1, у1 = xk+1 + k+1 k λ(х -х ), i = 1, к = к + 1 и перейти к шагу 2. Шаг 5. Проверить условие окончания: а) если все ∆i ≤ ε , то поиск закончить: х* = хk; б) для тех i, для которых ∆i >ε, уменьшить величину шага: ∆i= . Положить у1 = хk, xk+1 = хk, к = к + 1, i = 1 и перейти к шагу 2. 1 Замечания: 1. В алгоритме можно использовать одинаковую величину шага по координатным направлениям, т.е. вместо ∆1, ∆2…∆n применять ∆. 2. Существует модификация метода, где при исследующем поиске и поиске по образцу используется одномерная минимизация. Тогда если функция f(x) дифференцируема, метод сходится к стационарной точке. 21 2.3 Метод деформируемого многогранника (метод Нелдера-Мида) Постановка задачи Требуется найти безусловный минимум функции f(x) многих переменной, т.е. такую точку x R , * что f ( x * ) min f ( x) . Поставленная задача xR минимизации может быть решена с помощью необходимых и достаточных условий безусловного экстремума. Однако задача получения решения уравнения df ( x) 0 может оказаться весьма сложной. Более того, в практических dx задачах функция f(x) может быть не задана в аналитическом виде или часто неизвестно, является ли она дифференцируемой. Поэтому получение численного решения поставленной задачи является актуальным. Стратегия поиска В основу метода деформируемого многогранника (метода НелдераМида [J.A.Nelder, R.Mead]) положено построение последовательности систем n+1 точек хi(к), i =1,…..n+1, которые являются вершинами выпуклого многогранника. Точки системы хi(к + 1), i = 1,..., n+1 на к +1 итерации совпадают с точками системы х1 (к), i = l,...,n + l, кроме i = h, где точка xh(k)наихудшая в системе xi(k),i =1,….n+1, т.е. f(xh(k))= max f(xi(k)). 1≤i≤n+1 Точка хh(k) заменяется на другую точку по специальным правилам, описанным ниже. В результате многогранники деформируются в зависимости от структуры линий уровня целевой функции, вытягиваясь вдоль длинных наклонных плоскостей, изменяя направление в изогнутых впадинах и сжимаясь в окрестности минимума. Построение последовательности многогранников заканчивается, когда значения функции в вершинах текущего многогранника отличаются от значения функции в центре тяжести системы xi(k), i =1,...,n +1; i≠ h не более чем на ε > 0. Алгоритм Шаг 1. Задать координаты вершин многогранника х1,...,хn+1; параметры отражения α, сжатия β, растяжения γ; число ε > 0 для остановки алгоритма. 22 Положить к = 0 (последующие шаги 2-6 соответствуют текущему номеру к системы точек). Шаг 2. Среди вершин найти "наилучшую" х1 и "наихудшую" хh, соответствующие минимальному и максимальному значениям функции: f(x1)=min f(xj); f(xh)=man f(xj), j=1,…,n+1 j=1,…,n+1 а также точку xs, в которой достигается второе по величине после максимального значение функции Шаг 3. Найти "центр тяжести" всех вершин многогранника за исключением наихудшей хh: xn+2=[ ]= . Рис 2.3 Метод деформируемого многогранника (метод Нелдера-Мида) Шаг 4.проверить условие окончания: 23 2 1/2 a)σ= } ≤ε,процесс поиска можно завершить и в качестве приближенного решения взять наилучшую точку текущего многогранника: х* х1; б) если > ε, продолжать процесс. Шаг 5. Выполнить операцию отражения наихудшей вершины через центр тяжести хn+2 (рис. 2.3, а): xn+3=xn+2+α(xn+2-xh). Шаг 6. Проверить выполнение условий: а) если f(xn+3)≤ f(x1) выполнить операцию растяжения (рис. 2.3, б): xn+4=xn+2+γ(xn+3-xn+2). Найти вершины нового многогранника: - если f(xn+4)< f(x1),то вершина хh заменяется на хn+4 (при n = 2 многогранник будет содержать вершины х1,х3,х6). Затем следует положить к = к + 1 и перейти к шагу 2; - если f(xn+4)≥ f(x1) ,то вершина хh заменяется на хn+3 (при n = 2 многогранник будет содержать вершины х!,х3,х5). Далее следует положить к = к + 1 и перейти к шагу 2 ; б) если f(xs)<f(xn+3)≤f(xh) ,то выполнить операцию сжатия (рис.2.3, в): xn+5=xn+2+β(xh-xn+2). Следует заменить вершину xh на хn+2, положить к = к +1 и перейти к шагу 2 (при n=2 многогранник будет содержать вершины х1,x3,x7); в) если f(x1)<f(xn+3)≤f(xs) то вершину хh заменить на хn+3. При этом следует положить к = к + 1 и перейти к шагу 2; г) если f(xn+3)>f(xh) выполнить операцию редукции (рис. 2.3, г). Формируется новый многогранник с уменьшенными вдвое сторонами и вершиной x1: хj=x1+0.5(xj-x1),j=1,…,n+1. При этом следует положить k = k + 1 и перейти к шагу 2. Замечания: Нелдер и Мид рекомендуют использовать параметры α = 1;β= 0,5;γ = 2; Павиани (fl.Paviani) - α = 1; 0,4 ≤ β ≤0,6; 2,8 ≤ γ ≤ 3; Паркинсон и Хатчинсон (J.M.Parkinson, D.Hutchinson) - α = 2; β = 0,25; γ = 2,5. В последнем случае в рамках операции отражения фактически выполняется растяжение. 2.4 Метод наилучшей пробы (метод Монте-Карло) Постановка задачи 24 Требуется найти безусловный минимум функции f(x) многих f ( x ) min f ( x) * xR переменной, т.е. такую точку x R , что . Поставленная задача минимизации может быть решена с помощью необходимых и достаточных условий безусловного экстремума. Однако задача получения * df ( x) 0 решения уравнения dx может оказаться весьма сложной. Более того, в практических задачах функция f(x) может быть не задана в аналитическом виде или часто неизвестно, является ли она дифференцируемой. Поэтому получение численного решения поставленной задачи является актуальным. Стратегия поиска Задается начальная точка x0. Каждая последующая точка находится по формуле , где – величина шага; - случайный вектор единичной длины, определяющий направление поиска; k - номер итерации. На текущей итерации при помощи генерирования случайных векторов получается М точек y1,…, M y , лежащих на гиперсфере радиуса с центром в точке . Среди полученных точек выбирается точка ym, в которой значение функции наименьшее. Если в выбранной точке значение функции меньше, чем в центре, то дальнейший поиск продолжается из этой точки. Иначе поиск продолжается из старого центра, но с меньшим шагом до тех пор, пока он не станет меньше заранее заданной величины R. Алгоритм Шаг 1. Задать начальную точку x0, коэффициент сжатия ,М - число испытаний на текущей итерации, = 1 - начальную величину шага, R минимальную величину шага, N - максимальное число итераций. Положить k = 0, j = 1. Шаг 2. Получить М реализаций случайного вектора ,j = 1,…,M, где - случайная величина, равномерно распределенная на интервале [-1,1] . Шаг 3. Вычислить , j=1,…, M. Шаг 4. Найти из условия . 25 Проверить выполнение условий: а) если , шаг удачный. Положить , k = k + 1 и проверить условие окончания. Если k < N, положить 1 и перейти к шагу 2. Если k = N у поиск завершить: ; б) если шаг неудачный и перейти к шагу 5. Шаг 5. Проверить условие окончания: - если , процесс закончить: , ; - если , положить , j = 1 и перейти к шагу 2. , j= Рис 2.4 Метод наилучшей пробы (метод Монте-Карло) Замечания: 1. Существуют варианты данного метода, в которых на шаге 4 полагают . В этом случае становятся возможными шаги в направлении возрастания функции. Они могут позволить преодолевать локальные минимумы при поиске глобального экстремума. 2. Недостатком метода является учет только наилучшей пробной точки. В отбрасываемых точках содержится полезная информация о поведении целевой функции. 26 3. Одним из методов учета информации, содержащейся во всех сгенерированных точках, является алгоритм статистического градиента. Для каждой из М реализаций случайного вектора полученных в точке , вычисляются разности , где - пробное значение шага. В качестве направления поиска используется вектор статистического антиградиента или вектор . Далее алгоритм решения совпадает с описанным выше. 2.5 Метод Розенброка Постановка задачи Требуется найти безусловный минимум функции f(x) многих f ( x ) min f ( x) * xR переменной, т.е. такую точку x R , что . Поставленная задача минимизации может быть решена с помощью необходимых и достаточных условий безусловного экстремума. Однако задача получения * df ( x) 0 решения уравнения dx может оказаться весьма сложной. Более того, в практических задачах функция f(x) может быть не задана в аналитическом виде или часто неизвестно, является ли она дифференцируемой. Поэтому получение численного решения поставленной задачи является актуальным. Определение. Пусть d1, d2,…, dn – линейно независимые векторы, по норме равные единице. Они называются взаимно ортогональными, если для всех i=1,…,n справедливо условие diT dj=0, j≠i. Стратегия поиска Суть метода Розенброка [Rosenbrock H.H.] состоит в следующем. Задается начальная точка. Из нее осуществляется итеративный поиск направления убывания функции с помощью изменяемых дискретных шагов вдоль n линейно независимых и ортогональных направлений. В случае удачного шага в исследуемом направлении его значение на следующей итерации увеличивается с помощью коэффициента растяжения, а в случае неудачи уменьшается за счет умножения на коэффициент сжатия (при этом направление поиска изменяется на противоположное). Поиск в системе текущих 27 направлений проводится до тех пор, пока все возможные уменьшения функции не будут исчерпаны. Если по каждому направлению поиска имеет место не удача, строится новое множество линейно независимых и ортогональных направлений и циклический поиск по отдельным направлениям продолжается. Новые направления поворачиваются по отношению к предыдущим так, что они оказываются вытянутыми вдоль оврага (рис. 2.5). Рис 2.5 Метод Розенброка Алгоритм Шаг 1. Задать начальную точку х0, число ε >0 для остановки алгоритма, коэффициенты растяжения α >1 и сжатия -1< β <0, в качестве начальных линейно независимых и ортогональных направлений d1, d2,…, dn выбрать координатные направления: d1 = , d2 = ,…, dn = ; начальную длину шага вдоль каждого из направлений поиска ∆ 10,…, ∆n0 >0; N- максимальное число неудачных серий шагов по всем направлениям на одной итерации. Положить y1 = x0 , k=0 , i=I, ∆i=∆i0 для всех i. 28 Шаг 2. Сделать шаг по i-му направлению: а) если f ( yi +∆i di) < f( yi), шаг считается удачным. В этом случае следует положить yi+1 = yi +∆i di , ∆i =α∆i и перейти к шагу 3; б) если f (yi +∆i di) ≥ f( yi), шаг считается неудачным. Тогда следует положить yi+1 = yi , ∆i =β∆i и перейти к шагу 3. Шаг 3. Проверить выполнение условий: а) если i< n , то положить i=i+I и перейти к шагу 2(сделать шаги по оставшимся направлениям); б) если i= n, проверить успешность поиска по текущим ортогональным направлениям: - если f( y n+1) < f( y1),т.е. хотя бы один спуск по направлению на шаге 2 был успешным, положить: y1 = yn+1 , i=I и перейти к шагу 2; - если f( y n+1) = f( y1) ,т.е. каждый из n последних шагов был неудачным, оценить успешность поиска на текущей итерации: если f( y n+1) < f( xk) , т.е. на k-й итерации хотя бы один шаг удачный, то перейти к шагу 4; если f( y n+1) = f( xk) , т.е не было ни одного удачного шага на k-й итерации, процесс поиска приостановить. Если число l последовательно неудачных серий шагов по всем направлениям на текущей итерации не превышает N, проверить условие окончания, а иначе перейти к шагу 4. Проверяются величины ∆i , использованные во время последней серии шагов. Если |∆i | ε для всех i , то найдено приближенное решение задачи: х* хk . Если |∆i | ε хотя бы для одного i , то положить : y1 = yn+1 , i=1 и перейти к шагу 2. Шаг 4. Положить : xk+1 = yn+1 и проверить условие окончания: а) если , то поиск завершить: х* хk+1 ; б) если ,то вычислить длины шагов по каждому направлению поиска на k-й итерации λ1,…, λn из соотношения хk+1 - хk = . Далее построить новый набор линейно независимых и взаимно ортогональных направлений поиска с помощью процедуры Грама-Шмидта: ai = bi = . Заметим, что если λi =0, то = ,т.е. новые направления следует вычислять только для тех индексов, для которых λi 0. После нахождения новых направлений следует положить: = , ∆i = ∆i0 для всех i=1,…,n , k=k+1 , yI= xk+I ,i=1, и перейти к шагу 2. 29 Замечания: 1. 2. 3. Если шаг 2 удачен, то ∆i заменяется на α∆i , т.е. величина шага увеличивается, так как α>I. Неудача приводит к сдвигу в обратном направлении вдоль i-го направления при следующей попытке, так как β<0. Розенброк рекомендовал следующие коэффициенты растяжения и сжатия: α=3, β=-0,5. Дэвис, Свенн и Кемпи [Davies D., Swann W.H., Campey I.G.] модифицировали метод Розенброка, применив алгоритмы одномерной минимизации при поиске вдоль каждого направления di . Тогда, если функция f(х) дифференцируема, последовательность генерируемых точек сходится к стационарной точке. 2.6 Метод сопряженных направлений Постановка задачи Требуется найти безусловный минимум функции f(x) многих f ( x ) min f ( x) * xR переменной, т.е. такую точку x R , что . Поставленная задача минимизации может быть решена с помощью необходимых и достаточных условий безусловного экстремума. Однако задача получения * df ( x) 0 решения уравнения dx может оказаться весьма сложной. Более того, в практических задачах функция f(x) может быть не задана в аналитическом виде или часто неизвестно, является ли она дифференцируемой. Поэтому получение численного решения поставленной задачи является актуальным. Определение. Пусть H- симметричная матрица размера nxn. Векторы d1, d2,…, dn называются H-сопряженными или просто сопряженными, если diT H dj=0 при всех i≠j. Стратегия поиска В методе сопряженных направлений (методе Пауэлла [Powell M.J.D.]) используют факт, что минимум квадратичной функции может быть найден не более чем за n шагов при условии, что поиск ведется вдоль сопряженных относительно матрицы Гессе направлений. Так как достаточно 30 большой класс целевых функций может быть представлен в окрестности точки минимума своей квадратичной аппроксимацией, описанная идея применяется и для неквадратичных функций. Задается начальная точка и направления d1, d2,…, dn , совпадающие с координатными. Находим минимум f(х) при последовательном движении по (n+1) направлениям с помощью одного из методов одномерной минимизации. При этом полученная ранее точка минимума берется в качестве исходной для поиска по следующему направлению, а направление dn используется как при первом (d0= dn ), так и последнем поиске. Находится новое направление поиска, сопряженное с dn. Оно проходит через точки, полученные при первом и последнем поиске. Заменяется d1 на d2, d2 на d3 и т.д. Направление dn заменяется сопряженным направлением, после чего повторяется поиск по (n+1) направлениям, уже не содержащим старого направления d1. Для квадратичных функций последовательность n2 одномерных поисков приводит к точке минимума (если все операции выполнены точно). Построение сопряженного направления для квадратичной функции при n=2 изображено на рис 2.6. Оно проходит через точки 1 и 3. Рис 2.6 Метод сопряженных направлений 31 Алгоритм Шаг 1. Задать начальную точку х0, число ε >0 для окончания алгоритма, начальные направления поиска d1 = , d2 = ,…, dn = . Положим d0 = dn , i=0, y0 = x0 , k=0 . Шаг 2. Найти yi+1 = yi +ti di , где шаг ti находится в результате поиска минимума функции f(yi +ti di) по ti одним из методов одномерной минимизацию Шаг 3. Проверить выполнение условий: а) если i< n-1 , то положить i=i+1 и перейти к шагу 2; б) если i= n-1, проверить успешность поиска по n первым направлениям. Если yn = y0 , то поиск завершить: х* yn , иначе положить i=i+1 и перейти к шагу 2; в) если i= n, проверить успешность поиска по n последним направлениям. Если yn+1 = y1 , то поиск завершить: х* yn+1 , иначе перейти к шагу 4 для построения сопряженного направления. Шаг 4. Положить : xk+1 = yn+1 и проверить условие окончания: а) если , то поиск завершить: х* хk+1 ; б) иначе положить: = = yn+1 - y1 (новое направление); = , i= 1,..,n-1 (исключается старое направление). Если при этом rang( )= n, то новая система направлений линейно независима. В этом случае положить: = , i= 0,1,..,n ; k=k+1, i=0, y0 k+1 = x и перейти к шагу 2. Если rang( )< n , то новая система направлений линейно зависима. Тогда следует продолжать поиск в старых направлениях. Для этого положить: , i= 0,1,..,n ; y0 = xk+1 , k=k+1, i=0, и перейти к шагу 2. Замечания: Имеется также алгоритм Пауэлла, в котором не гарантируется линейная независимость направлений поиска, а в модификация алгоритма Пауэлла, предложенная Зангвиллом [Zangwill W.I.]. Последняя модификация гарантирует линейную независимость направлений поиска и сходимость за конечное число шагов. 32 3. ЗАДАНИЕ И ПОРЯДОК ВЫПОЛНЕНИЯ РАБОТЫ Найти экстремум функции z=f(x,y) в данной замкнутой области № вар функция область 1 в прямоугольнике 1≤x≤3, 1≤y≤4 2 в треугольнике, ограниченном осями Ох и Оу и прямой у = 2 - х 3 в прямоугольнике 2≤x≤6, 0≤y≤5 4 в области, ограниченной параболой и осью Ох 5 в квадрате 0≤x≤2, 0≤y≤2 6 в области 0≤x≤3, 0≤y≤3 7 в области x≥0, y≥0, x+y≤3 8 в области x≤1, y≥0, y≤x 9 в области x≥1, y≥-1, y+x≤1 10 в области -1≤x≤1, 0≤y≤2 11 в области x≥-1, y≥-1, y+x≤1 12 в области 0≤y≤4 - x2 13 в области x≤0, y≤0, y+x+2≥0 14 в области 4x2-4≤y≤0 15 в области -1≤x≤1, 0≤y≤3 16 в области x≥0, y≥0, y+x≤3 17 в области x2+y2≤1 18 в области x2+y2≤1 19 в замкнутой области, ограниченной прямыми x=0, y=0, 2x+3y-12=3 20 в квадрате, ограниченном прямыми x=1, x=2, y=2, y=2 33 Поиск заканчивается, когда длина текущего интервала неопределенности оказывается меньше установленной величины. Ответом является множество точек, принадлежащих последнему интервалу неопределенности, среди которых каким-либо образом выбирается решение задачи. Содержание отчета 1. Цель работы. 2. Задание согласно варианту. 3. График исследуемой функции. 4. Листинг М-файла. 5. Результаты выполнения М-файла с пояснениями: какие методы применялись, как именно. 6. Выводы к работе. Отчет принимается только при наличии М-файла 4. СПИСОК ЛИТЕРАТУРЫ 34 1. Пантелеев, А. В. Методы оптимизации в примерах и задачах: Учеб. пособие/А. В. Пантелеев, Т. А. Летова. — 2-е изд., исправл. — М.: Высш. шк., 2005. — 544 с: ил. 2. Ануфриев И. Е., Смирнов А. Б., Смирнова Е. Н. MATLAB 7. - СПб.: БХВ-Петербург, 2005. - 1104 с: ил. 3. Мартынов Н. Н., Иванов А. П., MATLAB 5.x. Вычисления, визуализация, программирование - М,:КУДИЦ-ОБРАЗ, 2000. - 336 с.