Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЭММ: Методичка Забуга С.И.doc
Скачиваний:
21
Добавлен:
12.11.2018
Размер:
2.28 Mб
Скачать

Условия (1) и (2), а также

3), т. е. матрица Гессе положительно определена в точке .

В. Задачи с ограничениями в виде равенств и неравенств (см.(2.2.1))

Если функции дважды дифференцируемы в точке , то необходимыми условиями наличия в точке минимума задачи (2.2.1) являются существование векторов (множителей Лагранжа), для которых

где

Достаточные условия – это необходимые условия плюс следующее:

детерминант матрицы Якоби для функций не обращается в нуль в точке .

Наконец, остановимся на классификации методов решения задач нелинейного программирования. Для решения общей задачи НЛП предложено немало алгоритмов, каждый из которых имеет свою сферу применимости. Выбор того или иного метода определяется конкретным содержанием задачи и опытом вычислителя. Классификация методов ведется, в основном, по двум аспектам.

  1. По постановке задачи.

    1. По допустимой области:

а) задачи без ограничений;

б) задачи с ограничениями-равенствами;

в) задачи с ограничениями-неравенствами;

г) задачи с ограничениями обеих типов.

    1. По характеру переменных:

а) дискретные (целочисленные);

б) непрерывные.

2. По характерным чертам алгоритмов.

2.1. Детерминированный поиск:

а) методы, использующие производные (здесь можно отдельно выделить методы, использующие первые или вторые производные, аналитические производные или численное дифференцирование);

б) методы, не использующие производные (делятся на одновременные или релаксационные);

2.2. Случайный поиск.

В дальнейшем (п. 2.5) мы начнем обзор методов с простейшей классической ситуации – методы, использующие производные для задач без ограничений.

2.3. Эффективные методы одномерной минимизации

Как правило, любой алгоритм численного нахождения минимума функции нескольких переменных включает в себя процедуру одномерной минимизации, т. е. нахождения минимума функции одной переменной. При решении практических задач в силу особенностей целевой функции (например, негладкости или разрывности) классические методы нахождения минимума, связанные с дифференцированием, могут оказаться неприменимы. В силу этого обстоятельства серьёзное внимание уделяется разработке приближенных методов, некоторые из которых мы рассмотрим ниже.

Общая идея многих приближенных методов – в предположении, что функция одной переменной f(x) унимодальна на интервале [a; b], выделить из него достаточно малый отрезок, содержащий точку минимума х* (будем его называть первичным интервалом неопределенности), а затем, пользуясь той или иной процедурой, «стягивать» этот отрезок вокруг х* пока не будет достигнута заданная точность. Для нахождения первичного интервала неопределенности можно предложить следующую процедуру, описанную в [3]: на интервале [a; b] выбираем точку х0 и вычисляем f(x0). Выбираем шаг Δх и вычисляем f(x0х). Если f(x0х) < f(x0), то направление убывания функции найдено, в противном случае переходим в точку x0 – Δх, причем f(x0 – Δх) < f(x0) в силу унимодальности f(x). Теперь двигаемся в направлении убывания f(х) с удвоенными шагами до тех пор, пока на каком-то шаге значение функции не увеличится. Делим последний шаг пополам и перемещаемся с уменьшенным шагом один раз в противоположном направлении (см. рис. 2.3.1).

Из рисунка видно, что из начальной точки х0 сделан переход с шагом Δх в точку х1, и, т. к. f(x1) < f(x0), с шагом 2Δх переходим в точку х2. Опять f(x2) < f(x1), следовательно, с шагом 4Δх переходим в точку х3. Теперь уже f(x3) > f(x2), и мы должны с уменьшенным вдвое шагом (т. е. 2Δх) вернуться назад – в точку х4. Очевидно, за первичный интервал неопределенности следует выбрать интервал [x2; x4; x3], т. к. на концах этого интервала значения минимизируемой функции больше, чем в его середине.

В дальнейшем для обоснования алгоритмов уменьшения первичного интервала неопределенности нам будет полезна следующая

ОСНОВНАЯ ЛЕММА: Пусть функция f(x) унимодальна на интервале [a; b], х1 и х2 лежат на [a; b], причем х1 < х2. Тогда, если f(x1) ≤ f(x2), то точка минимума х* лежит на [a; x2], если же f(x1) ≥ f(x2), то х* лежит на [х1; b].

Данная лемма иллюстрируется рис. 2.3.2:

Рис. 2.3.2

Теперь рассмотрим некоторые конкретные алгоритмы.

Алгоритм пассивного поиска. Делим интервал [a; b] = ∆0 на n равных частей точками {х0 = a, x1, …, xn-1, xn = b} и в каждой из точек деления находим значение функции f(xj). Пусть минимальное значение функции достигается в точке xк. Тогда в силу основной леммы точка минимума должна лежать на интервале [xk-1; xk+1] = ∆1 и этот интервал принимается за новый интервал неопределенности. Снова делим его на n равных частей и продолжаем описанную процедуру до тех пор, пока после s шагов ∆s не станет меньше заданной точности: ∆s < ε. В этот момент поиск прекращается и за х* принимается середина ∆s.

Метод дихотомии (половинного деления). Пусть минимум функции локализован на интервале [a; b] = ∆0. Выберем малую положительную величину δ и найдем значения f(x) в точках :

Теперь, в силу Основной леммы, в качестве следующего интервала неопределенности ∆1 следует выбрать (в зависимости от соотношения значений f(x) в точках а, b, x1, x2) либо интервал [a; x2], либо [x1; b]. Очевидно, длина ∆1 равна 0,5(ba) + δ. Затем вычисляем f(x) в точках х3 и х4, отстоящих на δ от середины ∆1 и продолжаем описанный процесс уменьшения интервала неопределенности. Нетрудно вычислить, что после к-го деления длина ∆к будет равна: . При выполнении условия |Δк| < ε точка минимума х* определяется как в методе пассивного поиска.

Метод Фибоначчи. Определим последовательность чисел Фибоначчи следующим образом:

F0 = F1 = 1; Fi+1 = Fi-1 + Fi; i = 1, 2, …,

т. е. F2 = 2, F3 = 3, F4 = 5 и т. д. Можно вывести общую формулу:

.

Опишем метод Фибоначчи для интервала [0; 1], т. к. любой отрезок [a; b] линейной заменой переменных можно отобразить в отрезок [0; 1]:

. Зададим целое число n и возьмем на интервале [0; 1] две точки: Очевидно, при любом n эти точки будут лежать на [0; 1] симметрично относительно середины отрезка. Действительно, (по определению).

0 ξ1 ξ2 1

Вычислим значения функции в точках ξ1 и ξ2. Теперь, в силу Основной леммы, в качестве следующего интервала неопределенности ∆1 следует выбрать (в зависимости от соотношения значений f(x) в точках 0, 1, ξ1 и ξ2) либо интервал [0; ξ2], либо [ξ1; 1]. Далее нам достаточно вычислить координату еще одной точки:

(2.3.1)

В первом случае точка ξ3 будет лежать на этом интервале симметрично к точке ξ1 относительно его середины, во втором случае – симметрично к точке ξ2. Продолжая уменьшать интервал неопределенности подобным образом мы после (n–1)-го шага получим точку в середине отрезка локализации экстремума. Длина последнего интервала будет равна . Отсюда следует, что номер максимального числа Фибоначчи (n) следует выбирать по точности ε из неравенства .

Пример 2.3.1. Применим метод Фибоначчи для минимизации функции Понятно, что искомый минимум равен нулю и находится в точке х* = 1,5. Предварительно найдем Δ0в соответствии с описанным выше алгоритмом. Возьмем х0 = 0, Δх = 1, тогда х1 = 1. Очевидно, f(x0) = 9; f(x1) = 0,5. Функция уменьшилась, следовательно Δх = 2 и х2 = 3. f(x2) = 0,9 (функция увеличилась, значит Δх делим пополам), и х3 = 2, f(x3) = 0,2. Значит, за Δ0 принимаем отрезок [1; 3], т. к. значения функции на его концах больше, чем в середине. Сделаем теперь замену переменных, отображающую отрезок [1; 3] в отрезок [0; 1]: Соответственно, х = 2ξ + 1. Подставим в целевую функцию и получим: Эту функцию и будем минимизировать на интервале [0; 1]. Выберем точность ε = 0,05 и по ней из неравенства Fn > 1/ε = 20 найдем n = 7, т. к. F7 = 21. Теперь в соответствии с алгоритмом находим:

. Очевидно, в качестве Δ1 следует взять отрезок . Находим Следующий интервал неопределенности – Δ2 = . Находим на нем точку Новый интервал: Δ3=. Теперь исходя из формулы (2.3.1) мы должны вычислить Очевидно, . Берем на этом интервале точку Последним интервалом неопределенности будет Δ5 = , и его середина ξ* = может быть принята за приближенное решение задачи. Возвращаемся к переменной х и получаем: Заметим, что требуемая точность достигнута: │х* – 1,5│ < 0,05.

Метод «золотого сечения». Термин «золотое сечение» появился еще в античной Греции и подразумевал идеальное с точки зрения художественной эстетики деление отрезка на 2 части, такие, что отношение всей длины к большей части равнялось отношению большей части к меньшей

Теперь нетрудно найти координаты точек D1 и D2 для интервала [0; 1] из системы уравнений:

Отсюда .

Соответствующий метод одномерной минимизации (применительно к отрезку [0; 1]) организован следующим образом: вычисляем f(0); f(1); f(D1); f(D2) и в соответствии с основной леммой берем в качестве следующего интервала неопределенности либо отрезок [0; D2], либо отрезок [D1; 1]. Теперь на выбранный отрезок достаточно нанести еще одну точку, которая в совокупности с имеющейся разделит его в пропорции «золотого сечения». В дальнейшем процесс уменьшения интервала неопределенности проводится аналогично, причем после n шагов мы получим:

.

Пример 2.3.2. Будем минимизировать ту же функцию, что и в предыдущем примере начиная с интервала [1; 3], точность ε = 0,1. Делим интервал в пропорции «золотого сечения» и получаем: Имеем: f(0) = 0,5; f(3) = 0,9; f(D1) = 0,0678; f(D2) = 0,3611. В соответствии с основной леммой следующим интервалом неопределенности будет [1; D2] = [1; 2,236]. На него наносим точку D3 = 1 + (2,236 – 1)  0,382 = 1,4722; f(D3) = 0,00098. Дальнейшие шаги:

Δ(2) = [1; 1,764]; D4 = 1 + 0,764  0,382 = 1,2918; f(D4) = 0,065;

Δ(3) = [1,2918; 1,764]; D5 = 1,2918 + (1,764 – 1,2918)  0,618 = 1,5836;

(очевидно, D5 должна лежать правее D3); f(D5) = 0,008;

Δ(4) = [1,2918; 1,5836]; D6 = 1,2918 + (1,5836 – 1,2918)  0,382 = 1,4033; f(D6) = 0,0126;

Δ(5) = [1,4033; 1,5836]; D7 = 1,4033 + (1,5836 – 1,4033)  0,618 = 1,5147; f(D7) = 0,00026;

Δ(6) = [1,4722; 1,5836]; D8 = 1,4722 + (1,5836 – 1,4722)  0,618 = 1,5410; f(D8) = 0,002;

Δ(6) = [1,4722; 1,5410].

Длина последнего интервала │Δ(6)│ = 0,0688 < 0,1, значит в качестве приближенного решения берем его середину: х* = 1,5066; f(x*) = 0,00005.

Методы, основанные на идее интерполяции (экстраполяции)

Рассмотрим два метода, в которых используется квадратичная или кубическая аппроксимация целевой функции.

А). Метод Дэвиса, Свенна и Кэмпи (ДСК). Находим первичный интервал неопределенности методом, описанным в начале параграфа (см. рис. 2.3.1 где таким интервалом является [x2; x4; x3]). Переобозначим эти точки – xa, хb, хс, где хb – центральная точка, xa = хb – Δx; хс = хb + Δx, т. е.

xa  = х2, хb = х4, xc  = х3. Теперь проводим квадратичную интерполяцию для нахождения первого приближения к минимуму:

. (2.3.2)

Если х* и любая из точек хa, хb, хс, в которой f принимает минимальное значение, отличаются меньше, чем на предписанную точность – поиск заканчивается и точкой минимума считается х*. В противном случае, начиная из точки х* с уменьшенным Δx, проводится новый поиск первичного интервала неопределенности с нахождением новых точек xa, хb, хс. Далее применяется формула (2.3.2) для вычисления х** и т. д. до достижения заданной точности.

В). Метод Пауэлла. В этом алгоритме используется аппроксимация более высокого порядка, благодаря чему можно упростить процедуру поиска трех первых точек. Именно:

  1. Из начальной точки х1 делаем шаг х2 = х1 + Δx.

  2. Вычисляем f(х1) и f(х2).

  3. Если f(х2) < f(х1), находим х3 = х1 + 2Δx,

Если f(х2) > f(х1), находим х3 = х1 − Δx.

  1. Вычисляем f(х3).

  2. Находим приближенное значение точки минимума х* по формуле:

(2.3.3)

  1. Как и в алгоритме ДСК, если х* и любая из точек х1, х2, х3, в которой f принимает минимальное значение, отличаются меньше, чем на предписанную точность – поиск заканчивается и решением задачи считается точка с наименьшим значением целевой функции. В противном случае из множества х1, х2, х3 отбрасываем «худшую» точку, но так, чтобы не «потерять» интервал, содержащий минимум, и заменяем ее на х*. Переходим к шагу 5.

  2. Работа алгоритма продолжается до тех пор, пока не будет достигнута желаемая точность, упомянутая в 6.

На практике наиболее эффективно себя проявила комбинация алгоритмов ДСК и Паулла. Она включает в себя поиск первичного интервала неопределенности и одного вычисления х* по формуле (2.3.2) более простой, чем (2.3.3). Затем повторяются шаги 5 и 6 метода Пауэлла до достижения заданной точности.

Пример 2.3.3. Рассмотрим применение комбинации алгоритмов ДСК и Паулла к уже решенной выше задаче:

начальный интервал [1; 3], точность ε = 0,1.

Так как первичный интервал неопределенности уже найден, применяем формулу (2.3.2) метода ДСК для нахождения х* (считаем, что xa  = 1, хb = 2, xc = 3; соответственно f(хa) = 0,5, fb) = 0,2, fc) = 0,9, Δx = 1.

Теперь переходим к алгоритму Пауэлла. Отбрасываем точку х3 = 3 с «худшим» значением функции и делаем аппроксимацию на интервале:

Применяем формулу (2.3.3):

Отбрасываем точку х = 2 и переобозначаем полученные точки:

Снова применяем (2.3.3):

Теперь, в соответствии с п. 6. алгоритма, мы не можем отбросить точку х = 1, несмотря на то, что в ней достигается максимальное значение функции, т. к. мы потеряем интервал, содержащий минимум. Отбрасываем точку х = 1,8, т. е. х1 = 1; х2 = 1,5801; х3 = 1,6371. Применяем (2.3.3):

Сейчас мы видим, что требуемая точность достигнута, т. к. │х**** – 1,5801│= = │1,5411 – 1,5801│ = 0,039 < 0,1, значит хmin = 1,5411, fmin = 0,002.