Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Нелинейное программирование.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
1.41 Mб
Скачать

Методы первого порядка Градиентные методы

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

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

или , k=0,1,2,....

Здесь – множитель, определяющий длину шага;

– градиент в точке ;

– направление поиска.

В координатах : , .

Поиск минимума для градиентных методов выполняется по следующему общему для них алгоритму.

Критерием завершения поиска точки минимума может быть один из следующих критериев или их комбинация

, , ,

где - соответственно допустимая погрешность по модулю градиента, расстоянию между соседними точками и значению целевой функции в соседних точках траектории оптимизации.

Различие градиентных методов определяется способом выбора длины шага на каждой - той итерации. Шаг может быть выбран одним из следующих способов:

  1. Значение постоянно для всех итераций;

  2. Значение выбирается дроблением для каждой итерации;

  3. Выполняется оптимизация значения для каждой итерации.

Градиентный метод с постоянным значением параметра шага.

Выполняется по рассмотренному выше алгоритму при . Поэтому, помимо начальной точки и заданной погрешности, параметр является исходным данным.

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

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

Градиентный метод с дроблением шага.

Этот метод обеспечивает монотонное убывание целевой функции на каждой итерации и тем самым сходимость метода к точке минимума. Убывание функции обеспечивается коррекцией шага на каждой итерации. Расчетной формулой является рассмотренная выше

Итерация выполняется следующим образом. Находится точка с шагом предыдущей k – той итерации и вычисляется значение . Если функция не уменьшилась, т.е. , шаг уменьшается (дробится) . С уменьшенной величиной шага снова находится , . Процесс дробления продолжается пока не будет получено уменьшение целевой функции.

Если в точке , найденной с шагом предыдущей k – той итерации, функция уменьшилась, шаг увеличивается , пока функция продолжает убывать.

Описанный метод реализован в практическом алгоритме оптимизирующей функции, ориентированном на систему MATLAB.

Несколько первых строк кода функции:

function [ x,f ] = gradh(z,dz,x,e )

% Минимизация функции n переменных градиентным методом

% с дроблением шага

z=fcnchk(z);

dz=fcnchk(dz);

k=0;

hmax=-1;

hmin=1e7;

maxit=10000;

kz=0;

global xf;

d=-dz(x);

f=z(x);

h=1;

tic

while k<maxit

xf(1,k+1)=x(1);

xf(2,k+1)=x(2);

if norm(d)<e

toc

disp('gradh: минимум найден,')

disp(['итераций - ' num2str(k)....

', hmin=' num2str(hmin)....

', hmax=' num2str(hmax)])

disp(['вычислений функции - ' num2str(kz)])

disp(['вычислений градиента - ' num2str(k)])

f=z(x);

x=x';

return

end

. . . . . . . . . . . . . . . . .

Пример тестирующего скрипта

clear all

clc

x=[10 10];

e=0.00001;

x0=x

global xf;

[x,z]=gradh('fun','dfun',x,e), c='r';

plot(xf(1,:),xf(2,:),c)

hold on

x1=x(1)-5:0.1:x(1)+10;

x2=x(2)-5:0.1:x(2)+15;

[x1,x2]=meshgrid(x1,x2);

z=9*x1.^2+x2.^2-18*x1+6*x2+18;

contour3(x1,x2,z,[1 5 17 39 57 101 151 199 251 301])

Алгоритм функции градиентного метода с дроблением шага.

Результаты оптимизации функции z=9*x1^2+x2^2-8*x1+6*x2+18 из начальной точки [10 10]

x =

10 10

e =

1.0000e-005

Elapsed time is 0.005358 seconds.

gradh: минимум найден,

итераций - 46, hmin=0.0064, hmax=0.4398

вычислений функции - 193

вычислений градиента - 46

x =

1.0000

-3.0000

f =

5.2935e-012

Траектория оптимизации показана на рисунке