Задачи нелинейного программирования
Задача математического программирования формулируется следующим образом: найти значения переменных х1, х2,…,хn, , доставляющие максимум или минимум целевой функции y = f (х1, х2,…,хn) при условиях gj(х1, х2,…,хn) = (£, ³) bj, ( ).
Особенность задач нелинейного программирования заключается в том, что функции y и (или) gj не линейны. Разработано множество численных методов решения задач нелинейного программирования.
Классификация численных методов решения задач нелинейного программирования
Универсального метода, с помощью которого можно было бы решить любую задачу оптимизации, не существует. Поэтому для решения конкретной задачи применяют один или несколько численных методов.
Численные методы поиска экстремума функции одной переменной:
- классический метод;
- метод равномерного перебора;
- метод золотого сечения;
- метод Фибоначчи и т. д.
Численные методы поиска экстремума функции n-переменных:
- метод покоординатного спуска;
- метод линеаризации;
- метод Ньютона;
- метод сопряженных направлений;
- метод условного градиента;
- метод барьерных функций;
- метод штрафных функций;
- метод Хука-Дживса и т. д.
Классический метод минимизации (максимизации) функции одной переменной
Этот метод применяется в однопараметрических задачах оптимизации. В них ищется один оптимальный параметр. Таким образом, целевая функция – это функция одной переменной.
Постановка задачи. Найти значение переменной х, доставляющее минимум или максимум целевой функции y = f (x), при условиях
gj(х) = (£, ³) bj, ( ).
Пусть a £ х £ b, функция f (x) непрерывна на этом отрезке и имеет на нём непрерывную производную. Вычисляют значение производной f ¢(x) и определяют критические точки, т. е. такие внутренние точки отрезка
[a, b], в которых производная обращается в нуль или не существует. В окрестности каждой такой критической точки исследуют знак производной и отбирают те из них, при переходе через которые производная меняет знак с минуса на плюс (точки локального минимума) или с плюса на минус (точки локального максимума). Затем вычисляют значения целевой функции в этих точках и на границах отрезка [a, b]. Эти значения сравнивают между собой и определяют точку, в которой достигается минимум (максимум) целевой функции. Эта точка является точкой глобального минимума (максимума) функции f (x) на отрезке [a, b].
При решении реальных задач оптимизации данный метод применяется редко, т. к. зачастую производную целевой функции определить сложно или невозможно.
Метод равномерного перебора
Пусть задана целевая функция y = f (x) для которой необходимо отыскать глобальный минимум на отрезке [a, b] (рис. 3.6).
Рис. 3.6. Пример поиска экстремума функции
методом равномерного перебора
В соответствии с данным методом алгоритм поиска хопт заключается в следующем. Фиксируют величину шага h > 0. Вычисляют значения целевой функции f (x1) и f (x2) соответственно в точках х1 = а и х2 = х1 + h. Полученные значения сравнивают. Запоминают меньшее из этих двух значений. Далее выбирается точка х3 = х2 + h и в ней вычисляется значения целевой функции f (x3). Сравнивается оставшееся на предыдущем шаге значение и значение f (x3). Наименьшее из них опять запоминают. Так поступают до тех пор, пока очередное значение х не превысит b. Последнее оставшееся значение является приближенным значением глобального минимума.
Недостатки метода. Если целевая функция имеет узкую впадину, подобную приведенной на рис. 3.6, то можно ее проскочить, и вместо точки глобального минимума определить точку локального минимума. Т. е. вместо х’ можно найти х’’. Эта проблема частично снимается, если выбрать очень маленький шаг, но при этом потребуется много времени (в том числе и машинного) для решения задачи.
Метод золотого сечения
Рассматриваемая в данном методе функция должна быть унимодальной. Функция f (x) является унимодальной на отрезке [a, b], если она на этом отрезке имеет единственную точку глобального минимума и слева от этой точки является строго убывающей, а справа строго возрастающей.
Суть метода золотого сечения заключается в том, чтобы определить точку глобального минимума на отрезке [a, b] за минимальное количество шагов, т. е. за минимальное количество вычислений целевой функции.
В соответствии с данным методом в каждый текущий момент времени рассматривается всегда две точки, например, в начальный момент точки х1 и х2 так, чтобы а < х1 < х2 < b. При этом возможен один из двух случаев (рис. 3.7). Согласно свойству унимодальной функции в первом случае искомая точка хmin не может находиться на отрезке [x2, b], во втором случае на отрезке [a, x1] (показаны штриховкой). Значит, область поиска сужается, и следующую точку х3 необходимо брать на одном из укороченных отрезков: [a, x2] – случай 1 или [x1, b] – случай 2.
Далее следует определиться, где на исходном отрезке [a, b] необходимо выбирать точки х1 и х2. Первоначально о положении точки хmin ничего не известно, поэтому любой из приведенных выше случаев возможен с одинаковой вероятностью. Это означает, что лишним может оказаться любой из отрезков: [x2, b] или [a, x1]. Отсюда следует, что точки х1 и х2 необходимо выбирать симметрично относительно середины отрезка [a, b].
Рис. 3.7. Варианты выбора области поиска минимума целевой функции
Для того, чтобы максимально сузить область поиска, эти точки должны быть поближе к середине исходного отрезка. Однако, для минимизации общего количества вычислений целевой функции слишком близко к середине отрезка их тоже брать не следует.
Таким образом, с одной стороны, точки следует брать рядом с серединой отрезка, а, с другой стороны, слишком близко друг от друга их брать нельзя. То есть необходимо найти некую «золотую середину».
Рассмотрим для простоты вместо отрезка [a, b] отрезок единичной длины [0, 1] (рис. 3.8).
Рис. 3.8.
На рис. 3.8 ÷АВê=÷CDê= х, ÷АCê=÷ВDê= 1 – х, ÷ВСê= 1 – 2х.
Для того, чтобы точка B была «выгодной» как на данном, так и на следующем этапе (шаге), она должна делить отрезок AD в таком же отношении, как и AC: AB/AD = BC/AC. При этом в силу симметрии аналогичным свойством будет обладать и точка C: CD/AD = BC/BD. В обозначениях координаты x эти пропорции принимают вид: x/1 = (1 – 2x)/(1 – x). Решим эту пропорцию:
х(1 – х) = 1 – 2х Þ х – х2 = 1 – 2х Þ х – х2 – 1 + 2х = 0 Þ – х2 + 3х – 1 = 0 Þ х2 – 3х + 1 = 0; Д = b2 – 4ac = 9 – 4 = 5.
Корни этого уравнения равны:
.
Корень x2 > 1 не приемлем, т. е. уравнение имеет один корень.
О точке, которая расположена на расстоянии длины от одного из концов отрезка, говорят, что она осуществляет «золотое сечение» данного отрезка. Очевидно, что каждый отрезок имеет две такие точки, расположенные симметрично относительно его середины.
Таким образом, алгоритм метода «золотого сечения» заключается в следующем (рис. 3.9). На исходном отрезке [a, b] выбираются две точки x1 и x2 , так, чтобы выполнялось приведенное выше соотношение «золотого сечения» этого отрезка. Вычисляются значения целевой функции в этих точках f (x1) и f (x2). Они сравниваются, и из дальнейшего рассмотрения исключается отрезок, прилегающий к точке, дающей большее значение целевой функции (здесь отрезок [x2, b]). Т. е. исходный отрезок [a, b] «стягивается» до отрезка [a, b1].
Рис. 3.9. Иллюстрация алгоритма метода «золотого сечения»
Для этого нового отрезка находится его середина, и по отношению к ней симметрично оставшейся точке x1 ставится точка x3. Для нее рассчитывается значение целевой функции f (x3) и сравнивается с f (x1). Из дальнейшего рассмотрения опять исключается отрезок, прилегающий к точке с большим значением целевой функции, здесь это отрезок [a, x3]. Текущий отрезок «стягивается» до нового отрезка, здесь это [a1, b1] и т. д.
Метод «золотого сечения» прост, эффективен и широко применяется в практической оптимизации.
Метод линеаризации
Данный метод строго не относится к численным методам решения задач оптимизации, но он эффективен и часто используется на практике. Суть метода заключается в математическом преобразовании исходных данных задачи таким образом, чтобы из задачи нелинейного программирования можно было перейти к задаче линейного программирования.
Пример № 1. Рассмотрим суть данного метода на примере № 2 многопараметрической однокритериальной задачи оптимизации, который решался ранее. Напомним формулировку задачи: найти х1опт и х2опт. Целевая функция у = х2 / х1 ® max, ограничения:
1 £ х1 £ 8, 2 £ х2 £ 12, х1 × х2 ³ 10.
В первую очередь приводим данную задачу к задаче линейного программирования. Для этого проводим логарифмирование ограничений и целевой функции:
lg 1 £ lg х1 £ lg 8; lg 2 £ lg х2 £ lg 12; lg х1 + lg х2 ³ lg 10.
После вычислений получим:
0 £ lg х1 £ 0,903; 0,301 £ lg х2 £ 1,079; lg х1 + lg х2 ³ 1.
После логарифмирования целевой функции:
lg y = lg х2 – lg х ® max.
Далее задача решается с применением симплекс-метода или графо-аналитически.
Пример № 2. Необходимо определить область рациональных режимов резания (например, токарной обработки) исходя из условия максимума производительности.
Целевой функцией в данном случае является величина Q производительности обработки:
Q = B× n× S ® max,
где B – постоянный множитель; n – число оборотов шпинделя; S – подача.
При решении задачи оптимизации абсолютное значение целевой функции не играет никакой роли. Таким образом, от исходной формулировки целевой функции можно перейти к формулировке упрощённой:
Q = n× S ® max.
Полученная зависимость нелинейна, т. е. задача относится к классу задач нелинейного программирования. Приводим данную задачу к задаче линейного программирования. Для этого проводим логарифмирование ограничений и целевой функции:
ln Q = ln n + ln S. Тогда Z = ln Q;
x1 = ln n; x2 = ln S; Z = x1 + x2 ® max.
Ограничения, накладываемые на область допустимых решений задачи Smin, Smax, nmin, nmax, определяются паспортом станка, заданными параметрами шероховатости обработанной поверхности, стойкостью инструмента и др. Пример графо-аналитического решения задачи приведен на рис. 3.10.
Рис. 3.10. Область допустимых значений режимов резания