3 ЧИСЛЕННЫЕ МЕТОДЫ ОПТИМИЗАЦИИ ФУНКЦИЙ ОДНОЙ ПЕРЕМЕННОЙ 3.1 МЕТОДЫ ДИХОТОМИИ И ТРИХОТОМИИ Начнем со случая, когда требуется найти точку минимума функции f(y) на отрезке [a,b] . Пусть функция непрерывна и унимодальна, т.е. имеет не более одной точки относительного минимума, причем по обе стороны от этой точки она строго монотонна. Тогда очевидно, что если в трех последовательных точках отрезка y1 < y2 < y3 вычислены значения функции и второе из них меньше двух других: f ( y2 ) min f ( yi ) , i 1, 2,3 то точка минимума функции заключена между y1 ,y3 и тем самым может быть подсчитана так: y min с ошибкой не более y1 y 3 2 y 3 y1 . Отрезок [y1, y3 ] называют зоной оптимума. На 2 основе этого факта построен ряд методов оптимизации. Простейшим из них является метод перебора. Он состоит в том, что на отрезке [a,b] равномерно размещаются n 1 точка (включая границы отрезка): yi a ba * i, n i 0,..., n, в которых вычисляются значения оптимизируемой функции. Затем находится номер точки s , соответствующей наименьшему значению функции f(ys) = min f(yi). i=0,..,n Тогда y min с ошибкой не более y s 1 y s 1 2 ba . n Но систему точек на отрезке [a,b] можно размещать не заранее, а в зависимости от уже вычисленных значений функции f(y). За счет использования этой информации ценой небольшого усложнения алгоритма можно достичь уменьшения числа точек, необходимого для вычисления точки минимума с заданной точностью. Соответственно уменьшится время счета. 53 На этой идее и построены все излагаемые далее методы. Метод дихотомии Разделим зону оптимума точкой y пополам. В зависимости от соотношения значений функции на границах и в середине зоны оптимума возможны случаи, представленные на рис. 3.1. В случаях " а"и "б" зона оптимума сразу уменьшается вдвое, в случае же "в" дополнительно вычисляется значение функции в достаточно близкой к y точке y' , и а если f(y)> f(y') , то зоной оптимума является та половина первоначальной зоны оптимума, которой принадлежит точка y' , а если f(y) < f(y') , то другая половина. Затем процесс повторяется для вновь полученной зоны б оптимума, и так до тех пор, пока ширина зоны не станет меньше 2*e , где e - заданная точность вычисления точки оптимума. Ясно, что для этого потребуется не более в Рис. 3.1 ba lg ba e n INT 1 1 INT 3,322 * lg 1 1 lg 2 e шагов алгоритма. Количество же использованных точек будет колебаться от n + 2 (если все время имеют место случаи "а", "б") до 2n+2 (если все время имеет место случай "в"). Можно размещать в зоне оптимума не одну, а две точки. Тогда всегда можно уменьшить эту зону, как видно из рис.3.2, где новая зона оптимума заштрихована. Проще всего это реализовано в методе трихотомии (деления на три части). Если этими точками делить зону оптимума на три равные части, то на каждом шаге алгоритма длина новой зоны будет равна 2/3 2 3 первоначальной длины. После n шагов она станет равна ( ) n (b a) .Таким образом, для достижения точности e потребуется ba lg lg 2 e 1 INT 5.679 * lg b a 1.709 1 n INT 3 e lg 3 lg 2 2 шагов и 2n точек. 54 Видно, что метод трихотомии требует большего числа шагов, чем метод дихотомии. Он обладает значительным недостатком: вычисленные на определенном шаге значения функции на последующих шагах не используются, хотя несут в себе полезную информацию, так как соответствующие точки попадают в новую зону оптимума. Ясно, что если на новом шаге использовать рассчитанное ранее значение Рис. 3.2 Рис. 3.2 функции во внутренней точке зоны оптимума, то потребуется дополнительно рассчитать ее значение не в двух, а лишь в одной точке. Правда, при этом пара внутренних точек уже не будет делить зону оптимума на равные части. Значит, следует предложить иное правило их размещения, что и реализовано в следующих алгоритмах. 3.2 МЕТОД ЗОЛОТОГО СЕЧЕНИЯ Золотым сечением называется деление отрезка на две части так, что отношение длины отрезка к длине большей части равно отношению длины большей части к длине меньшей. Если длина большей части обозначена через p , а меньшей - через q , то pq p p q где g q p положительный или корень g2 + g - 1 = 0 , этого уравнения, и пропорция соответствующего деления отрезка такова: g 1 5 0.618 . 2 Возможны два варианта золотого сечения: когда меньший отрезок лежит левее большего и наоборот. В первом случае точка деления отрезка y1 a 5 1 * (b a), 5 1 y2 a 2 * (b a). 5 1 во втором 55 Заметим, что при этом y1 производит золотое сечение отрезка [a,y2 ], а точка y2 - отрезка [y1, b], следовательно, в любом случае, представленном на рис. 3.2, одна из точек золотого сечения новой зоны оптимума будет рассчитана при золотом сечении предыдущей зоны. Итак, на первом шаге алгоритма на отрезке [a ,b] вычисляются две точки, осуществляющие золотое сечение, и выделяется зона оптимума; на каждом последующем шаге вычисляется лишь одна недостающая точка, осуществляющая золотое сечение. На каждом шаге длина новой зоны оптимума составит 1/1.618 от длины предыдущей зоны, что за n шагов даст (b-a)/(1.618)n. Соответственно, для нахождения точки оптимума с точностью e понадобится bd lg lg 2 ba e n INT 1 INT 4.785 * lg 1.44 1 lg 1.618 lg 1.618 e шагов и n+1 точка. В методах трихотомии и золотого сечения нам удалось рассчитать количество шагов, необходимых для получения зоны оптимума заданной длины, независимо от поведения функции f(y). Так получилось из-за того, что точки y1, y2 размещаются в зоне оптимума симметрично, поэтому в обоих возможных случаях (рис. 3.2) длина новой зоны оптимума одинакова. Встает вопрос: при каком правиле размещения симметричных точек в зоне оптимума и однократном вычислении функции на каждом шаге алгоритма заданная точность достигается за минимальное число шагов, или, что то же самое, при фиксированном числе шагов алгоритма получается зона оптимума минимальной длины. Можно доказать, что таким правилом является правило, которое легло в основу следующего метода. 3.3 МЕТОД ФИБОНАЧЧИ Задаемся целым числом шагов алгоритма n . Вычисляем числа Фибоначчи Fn , Fn+1 , которые определяются по формуле 1 при n 1, 2; Fn n 2. Fn2 Fn1 при Для n > 4 приближенно Fn = 0.4472 * (1.618)n . Ряд чисел Фибоначчи приведен в табл. 3.1: 56 n 1 Fn 1 n 13 Fn 233 2 1 14 377 3 2 15 610 4 3 16 987 5 5 17 1597 6 8 18 2584 7 13 19 4181 8 21 20 6765 9 34 21 1094 Таблица 3.1 10 11 12 55 89 144 Затем на отрезке [a,b] строятся две точки, удаленные от его границ на относительные расстояния Fn /Fn+2 (при n >= 4 это расстояние равно 0.382, почти как и в методе золотого сечения - 0.618/1.618 = 0.382), в них вычисляется значение функции и определяется зона оптимума. После этого на каждом шаге алгоритма вторая внутренняя точка в зоне оптимума строится симметрично точке, попавшей в нее от предыдущего шага. В результате после n шагов длина конечной зоны оптимума составит 2(b a ) (b a ) , т.е. точность вычисления точки оптимума e = , а количество Fn 2 Fn 2 точек, в которых вычислялось значение функции, равно n + 1. При n >= 4 по методу Фибоначчи e что в ba , 0.4472 * 1.618 n 2 1 0.854 раз меньше, чем по методу золотого сечения. 0.4472 * 1.618 2 Таким образом, последний имеет погрешность примерно на 17% больше, чем самый оптимальный метод - метод Фибоначчи. Описанные методы практически полностью решают проблему оптимизации унимодальной функции на отрезке. Как видно из табл.3.2, где показано количество вычислений значений оптимизируемой унимодальной функции одной переменной, в различных методах оптимизации для отыскания с их помощью оптимума функции с высокой точностью требуется вычисление ее значений во вполне приемлемом количестве точек. Таблица 3.2 Относительная точность вычисления точки оптимума 0,1 0,01 0,001 перебора Методы оптимизации дихотомии трихотомии золотого сечения Фибоначчи 11 101 1001 5-8 8-14 11-20 6 11 15 8 20 32 6 11 15 57 0,0001 10001 15-28 42 20 20 Пример 1. Рассмотрим задачу об изготовлении наиболее жесткого прямоугольного бруса из круглой заготовки (бревна). Размеры бруса b и h и диаметр заготовки D связаны соотношением b2 + h2 = D2, откуда b D2 h2 . Жесткость бруса измеряется его моментом инерции I b * h3 h3 * D 2 h2 , 12 12 который должен быть максимальным. Это задача оптимизации функции одной переменной. Легко проверить, что функция унимодальна. Перейдя к безразмерной переменной x=h/D , запишем функцию в виде f x3 * 1 x2 . Ее точка максимума xmax=0.866 , fmin=0.325 . Найдите рассмотренными методами и сравните скорость сходимости. ее всеми Однако если оптимизируемая функция не является унимодальной, эти методы могут не привести к правильному результату. 3.4 МЕТОД ЛОМАНЫХ Метод ломаных – практически универсальный метод оптимизации функции одной переменной, не требующий от функции никаких «хороших» свойств вроде унимодальности. Но и его область применения ограничена. Дело в том, что если функция обладает лишь самым общим из свойств свойством непрерывности, то вообще никакого строго приводящего к правильному результату метода оптимизации невозможно построить, так как в любом методе мы можем вычислить значения функции лишь в конечном числе точек, а свойство непрерывности не мешает функции в какой-либо из не рассмотренных нами точек, отстоящей от рассмотренных на сколь угодно малую, но конечную величину, принять любое, никак не связанное с вычисленными, значение. Таким образом, приступая к оптимизации функции, желательно выявить и другие ее свойства, кроме непрерывности. Наиболее общим из таких свойств является липшицевость. Функция f(y) обладает этим свойством на отрезке [a,b], т.е. является липшицевой, если можно указать такое число L, что для любых y1 , y2 из [a,b] f ( y1 ) f ( y2 ) L y1 y2 , 58 т.е. если крутизна ее графика не превосходит L. Например, функция, показанная на рис. 3.3, - липшицевая. Метод ломаных позволяет оптимизировать липшицевые функции. Пусть f(y) на [a,b] - липшицевая функция. Ясно, что ее график всегда лежит над двухзвенной ломаной, вершина которой принадлежит графику функции f(y), а звенья составляют с осью y углы - arctg(L), + arctg(L) (рис. 3.3). Если вершина ломаной имеет абсциссу x, обозначим ее уравнение через gx(y). Тогда сказанное можно записать в виде: f(y) >= gx(y) , x,y из [a,b] , f(x) = gx(x) . Если построить несколько таких ломаных с вершинами в точках y1, y2, ..., yn, то f ( y ) g yi ( y ), i 1...n, или f ( y ) G y1 , y 2 ... yn ( y ) , где G y1 , y2 ... yn ( y) max g yi ( y) . i 1,,,, n Таким образом, функция G y , y ... y ( y ) - ломаная, изображенная толстой линией на рис. 3.3 , является минорантой f(y), т.е. ограничивает ее снизу. Ясно, что чем больше n, тем ближе миноранта к f(y), а ее минимум к минимуму f(y). Если за следующий член последовательности y1 , y2 ,..., yn ,... принимать точку минимума миноранты на [a,b], то можно показать, что значение функции G y , y ... y ( y ) на этой последовательности будет Рис. 3.3 стремиться к минимальному значению f(y) на [a,b], а точка минимума f(y) будет лежать в интервалах, для которых G y , y ... y ( y ) max f ( yi ) . i 1... n 1 2 n 1 1 2 2 n n При этом приблизительно max f ( y) max f ( yi ) , y[ a ,b ] i 1... n а точность достижения оптимума на n-м шаге определяется оценкой min f ( yi ) min f ( y) min f ( yi ) Gy1y2 ... yn ( yn1 ) . i 1... n y[ a ,b ] i 1... n 59 Переходя к конкретной реализации алгоритма, отметим, что точками минимума миноранты могут быть лишь ее нижние вершины. Они возникают при включении очередной точки минимума миноранты в последовательность y1 , y2 ,..., yn ,... . При этом сама точка переходит из класса нижних вершин миноранты в класс элементов минимизирующей последовательности, а взамен возникают две новые нижние вершины. Если обозначить точку через y, а значение функции и миноранты в ней соответственно через f и g, то вновь образованные нижние вершины имеют координаты f G f G , y 2* L 2 и f G f G , y . (3.1) 2* L 2 С учетом этого алгоритм оптимизации функции состоит в последовательном построении массива нижних вершин { zk , G(zk )}, k=1,.. и вычислении предельных характеристик: A min f ( yi ) i 1,,, , B min G( z k ) k i ,,, (минимум берется по элементам, входящим на данном шаге в массив). Первоначально принимается yi ab , 2 z i a, z 2 b, G ( zi ) G ( z 2 ) f ( y1 ) ba . 2* L Затем на каждом шаге алгоритма из массива нижних вершин исключается вершина zp, для которой G(zp )=B , а вместо нее включаются две вершины. Их координаты подсчитываются по формулам (3.1). Кроме того, из массива нижних вершин удаляются точки zk , для которых G(zk)>A. Этот процесс завершается, когда разность B-A становится меньше заданной точности e вычисления минимального значения функции. Интервалы, которые могут содержать точку минимума, имеют вид B e G( z k ) , zk L zk B e G( z k ) , L где zk - те нижние вершины, для которых G(zk ) <= B + e . Метод ломаных требует большой памяти ЭВМ для хранения массивов, зато позволяет уверенно находить оптимум сколько угодно сложных многоэкстремальных функций. В худшем случае (при оптимизации функции f = const, для которой каждая точка отрезка является точкой минимума) он требует вычисления значений функции в таком же количестве точек, как и метод перебора. Во всех же остальных случаях ему необходимо меньшее количество точек. Целесообразно использовать этот метод на начальной стадии оптимизации с тем, чтобы выделить интервалы, на которых функция f(y) унимодальна, а затем на каждом из них применить один из эффективных методов оптимизации унимодальной функции. 60