Методы многомерной оптимизации

Дана некоторая функция многих переменных f(x1,x2,x3,…..,xn) или надо найти такое значение при котором функция принимает экстремальное значение (минимальное или максимальное). Процесс поиска экстремального значения иногда называют оптимизацией. называют оптимизируемой или целевой функцией называют вектором параметров оптимизации. В области определения функции может быть несколько экстремумов. Все существующие методы многомерной оптимизации позволяют определить лишь один из экстремумов. Какой именно экстремум будет определён, зависит от выбора начального приближения: Методы поиска экстремума будем рассматривать относительно случая поиска минимума, для функции двух переменных.

Все методы многомерной оптимизации делятся на два класса: градиентные; безградиентные.

Градиентный метод. Градиентом называется вектор равный сумме произведений частных производных на соответствующие орты. Орта – единичный связанный вектор, направленный вдоль координатной оси.

 Основные свойства градиента: Норма градиента определяет скорость изменения функции в направление градиента; Градиент всегда направлен в сторону наиболее быстрого возрастания функции, т.е. в этом направлении норма вектора градиента максимальна; Градиент перпендикулярен линии уровня. Антиградиентом называется вектор, направленный в сторону противоположную градиенту.

Алгоритм

1) Дана функция n переменных точность ε, параметр шага h, задаем начальное приближение вычисляем значение функции

2) Вычисляем вектор градиента  и единичный вектор градиента

3) Вычисляем новое приближение, делая шаг в направление антиградиента  и вычисляем значение функции

4) Проверяем условие Fz < Fx

5) Если условие выполняется, то за начальное приближение принимаем  т.е. , переходим на пункт 2.

6) Иначе, проверяем условие окончания h < ε

7) Если условие выполняется, то выводим Конец алгоритма

8) Если не выполняется, то уменьшаем параметр шага h=h/3 и переходим на пункт 2

Программа. Многомерная оптимизация. Градиентный метод.

function DATA

global x0 h eps;

x0=[0.3;0.3];

h=0.5;

eps=0.1;

end

 

function [ fx ] = f(x)

fx=x(1)^2+x(2)^2-5;

end

 

function [ G ] = Grad(x)

G=[2*x(1);2*x(2)];

end

 

function [ x,fx ] = fun_MnogomernOpt_Grad(x0,h,eps)

x=x0;

fx=f(x);

for i=1:100

v=Grad(x)./norm(Grad(x));

z=x-h*v;

fz=f(z);

if fz<fx

   x=z;

   fx=fz;

else

   if abs(h)<eps

       i

       break;

   else

       h=h/3;

   end %if

end %if

end %for i

end % function

 

function GLAV_MnogomernOpt_Grad

global x0 h eps x fx;

DATA;

[ x,fx ] = fun_MnogomernOpt_Grad(x0,h,eps);

REPORT;

end % function

 

function REPORT

global x0 h eps x fx;

disp('Mnogomernaya optimizaciya gradient');

disp(' ');

disp('Arguments');

x0

disp(['h = ' num2str(h,'%10.5f') ]);

disp(['eps = ' num2str(eps,'%10.5f') ]);

disp('Results');

x

disp(['fx = ' num2str(fx,'%10.5f') ]);

end % function

 

Программа. Многомерная оптимизация. Метод наискорейшего спуска.

function DATA

global x0 h eps;

x0=[0.3;0.3];

h=0.5;

eps=0.1;

end

 

function [ fx ] = f(x)

fx=x(1)^2+x(2)^2-5;

end

 

function [ G ] = Grad(x)

G=[2*x(1);2*x(2)];

end

 

function [ xm,fm ] = rvs(x,v,h,eps)

xm=x;

fm=f(x);

for i=1:100

if abs(h)<=eps

   i

   break;

else

   x=xm-h*v;

   fx=f(x);

   if fx<fm

       xm=x;

       fm=fx;

   else

       h=-h/3;

   end %if

end %if

end %for i

end

 

function [ x,fx ] = fun_MnogomernOpt_NSpusk(x0,h,eps)

x=x0;

for i=1:100

v=Grad(x)./norm(Grad(x));

[ xm,fm ] = rvs(x,v,h,eps);

dx=xm-x;

ndx=norm(dx);

x=xm;

fx=fm;

if ndx<eps

   i

   break;

end %if

end %for i

end % function

 

function GLAV_MnogomernOpt_NSpusk

global x0 h eps x fx;

DATA;

[ x,fx ] = fun_MnogomernOpt_NSpusk(x0,h,eps);

REPORT;

end % function

 

function REPORT

global x0 h eps x fx;

disp('Mnogomernaya optimizaciya naiskor spusk');

disp(' ');

disp('Arguments');

x0

disp(['h = ' num2str(h,'%10.5f') ]);

disp(['eps = ' num2str(eps,'%10.5f') ]);

disp('Results');

x

disp(['fx = ' num2str(fx,'%10.5f') ]);

end % function

 

Симплексный метод. Симплексом в n-мерном пространстве называется выпуклый многоугольник с n+1 вершиной. n=2 треугольник n=3 тетраэдр.

Алгоритм

1) Дана функция 2x переменных  точность ε, параметр h, начальное приближение

2) Вычисляем координаты вершин симплекса

3) Вычисляем значения функции

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


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: