Слайд 108/13/2019
Тема 2 Методы оптимизации нулевого порядка
Описание общего алгоритма методов покоординатного
                                                            
                                    
спуска 
Особенности программной реализации 
Метод ГАУССА-ЗЕЙДЕЛЯ 
Метод ПАУЭЛЛА 
Метод РОЗЕНБРОКА
                                    
Методы спуска с перебором направлений 
Хука-Дживса и Нелдера-Мидта
                                
                            							
							
							
						 
											
                            Слайд 208/13/2019
Методы покоординатного спуска
Среди методов нулевого порядка можно выделить группу методов
                                                            
                                    
покоординатного спуска:
Гаусса-Зейделя, 
Пауэлла,
 Дэвиса-Свена-Кемпи (ДСК), 
Розенброка.
Алгоритм этих методов в общем
                                    одинаков и описывается следующим образом:
                                
                            							
														
						 
											
                            Слайд 308/13/2019
x1
x2
d
z
Спуск по направлению
                            							
														
						 
											
                            Слайд 408/13/2019
Общий алгоритм
1. Задается начальная точка     и
                                                            
                                    начальный шаг h одномерного спуска .
2. Выбирается n линейно независимых
                                    направлений 
Обычно это единичные координатные орты (вообще их можно выбрать исходя из знания свойств целевой функции).
x1
x2
d1
d2
                                
 
                            							
														
						 
											
                            Слайд 508/13/2019
Общий алгоритм
3. По каждому  i-направлению поочередно делается спуск 
                                                            
                                    (i=1..n), т.е. находится zmi, доставляющий 
 пересчитывается точка 
При нахождении
                                    min используется либо метод последовательного перебора, если функция не гладкая, либо метод квадратичной параболы для гладких функций.
В результате выполнения этих спусков, называемых циклом, точка сдвинулась на вектор
x1
x2
d1
d2
zm1
zm2
                                
 
                            							
														
						 
											
                            Слайд 608/13/2019
Общий алгоритм
4. Проверяется условие
 если да, то процесс спуска заканчивается
5.
                                                            
                                    В зависимости от полученной информации о функции, делается некоторое преобразование
                                    выбранных направлений:
Процесс вычислений повторяется с новой точки
x1
x2
d1
d2
zm1
zm2
Δ
d1
d2
                                
 
                            							
														
						 
											
                            Слайд 708/13/2019
Особенности программной реализации. 
При программной реализации следует описать отдельно подпрограмму
                                                            
                                    вычисления минимизируемой функции, например, для целевой функции, имеющей вид
const n=2;
type
                                    mas=array[l..n] of real;
function F(х:mas): real;
begin
	F:=sqr(x[1]+2*x[2])
end;
                                
 
                            							
														
						 
											
                            Слайд 808/13/2019
Особенности программной реализации
После этого напишем подпрограмму метода оптимизации:
Type fun=function (x:mas):real
Procedure
                                                            
                                    
MPSP(F:fun;
  var x0:mas;eps,h:real;var fm:real);
внутри которой следует ввести:
для координат векторов
                                    направлений массив D[i,k] где помещается i-я координата вектора dk
var
D:array[1..n,1..n] of real
zm,x,a,b:array[1..n] of real; 
рабочие массивы zm, x, 
a и b в методе Розенброка, ДСК, Пауэлла;
                                
                            							
														
						 
											
                            Слайд 908/13/2019
Подпрограмма для функции ϕ(z)
 вдоль направления   
function F1(z:
                                                            
                                    
real): real;
	begin
		for k:=1 to n do
			x[k]=x0[k]+z*D[i,k];
		F1:=F(x);
	end;
                                                                    
                            							
														
						 
											
                            Слайд 1008/13/2019
Подпрограмма метода одномерного поиска 
Function MPP(z0,h,eps:real):real;
	begin
	 y1:=F1(z0); z1:=z0; 
 
                                                            
                                    
repeat
   repeat
    z0:=z1; y0:=y1;
 
                                      z1:=z0+h; y1:=F1(z1);
   until y1>y0;
   h:=-h/4;
  until abs(h)  Result:=y0; 
end;
                                
                            							
														
						 
											
                            Слайд 1108/13/2019
Подпрограмма преобразования векторов направлений [вычисляет d=∏(d,zm)]
Procedure PREOBD; (без параметров) 
	begin
	.
                                                            
                                    
. . . .
		D[i.k]=........
	end;
Отличаются методы видом оператора преобразования ∏ направлений
                                    после каждого цикла спуска
                                
                            							
														
						 
											
                            Слайд 1208/13/2019
Реализация алгоритма спуска к минимуму
Begin
 D:=0; for i:=1 to n
                                                            
                                    
do D[i,i]:=1;
repeat
 dl=0;
for i:=1 to n do //спуск по направлениям
                                     begin
   zm[i]:=MPP(0,h,h/5);
   x0:=x;
   dl:=dl+abs(zm[i]); //погрешность
  end;
 PREOBD; h:=h*0.5;
Until dlfm:=F(x0);
End; 
                                
                            							
														
						 
											
                            Слайд 1308/13/2019
Метод Гаусса-Зейделя
  не требует преобразования направлений, т.е. PREOBD; отсутствует,
                                                            
                                    
и спуск все время производится вдоль осей координат
x1
x2
x0
                                                                    
                            							
														
						 
											
                            Слайд 1408/13/2019
x1
x2
В случае длинного оврага, если оси координат направлены неудачно, метод
                                                            
                                    
спуска по координатам может сильно замедляться
Для исправления этого недостатка используют
                                    различные методы преобразования исходных векторов di
                                
                            							
														
						 
											
                            Слайд 1508/13/2019
 Метод ПАУЭЛЛА 
Пересчет направлений осуществляется следующим образом:
d1
d2
d2
d1
d2
d1
                            							
														
						 
											
                            Слайд 1608/13/2019
Преобразование векторов di
Procedure PREOBD;
Var a:MAS;
begin
 for k=l to n do
                                                            
                                    
begin a[k]=0; 
  for i=1 to n do
 
                                      a[k]=a[k]+zm[i]*D[i,k]
 end; 
 for i: =n downto 2 do 
 for k=1 to n do D[i,k]=D[i-1,k];
 da=0; for k=l to n do
     da=da+sqr(a[k]); da=sqrt(da);
 for k=1 to n do D[1,k]=a[k]/da;
end;
                                
                            							
														
						 
											
                            Слайд 1708/13/2019
Метод Розенброка
Формулы пересчета направлений:
Ортогонализация направлений
                            							
														
						 
											
                            Слайд 1808/13/2019
Траектория спуска
 по Методу Розенброка
d1
d2
d2
d1
d2
d1
a1
a2
                            							
														
						 
											
                            Слайд 1908/13/2019
Procedure PREOBD;//метод Розенброка
VAR a:array[1..n,l..n] of real;
	c: array[l...,n] of real;
	aa, cc,ad:real;
                                                            
                                    
i,j,k,l: integer;
begin
for i=l to n do
for k=l to n do
                                    
begin a[i,k]=0; for j:=i to n do
				a[i,k]=a[i,k]+zm[j]*D[j,k]
end;
da=0; for k=l to n do da=aa+sqr(a[1,k]); da=sqrt(da); 
for k=1 to n do D[1,k]=a[1,k]/da;
for i=2 to n do 
begin for k=l to n do
	begin c[k]=a[i,k];
	for j=1 to i-1 do
		begin ad=0 for l=1 to n do ad=ad+а[i,1]*D[j,1]
		c[k]=c[k]-ad*D[j,k];
		end; 
	end; 
dс=0; for k=l to n do dc=dc+sqr(c[k]); dc=sqrt(dc);
for k=l to n do d[i,k]=c[k]/dc;
end
end; 
                                
                            							
														
						 
											
                            Слайд 2008/13/2019
Методы спуска с перебором направлений 
Другая группа методов, нулевого порядка,
                                                            
                                    
представителями которых являются методы
 Последовательного покоординатного перебора
 Хука-Дживса 
 Нелдера-Мида
                                    иллюстрируют широкие возможности для творческого поиска разнообразных способов выбора направлений 
                                
                            							
														
						 
											
                            Слайд 2108/13/2019
Метод Хука-Дживса 
d1
d2
По каждой переменной делается спуск на шаг h,
                                                            
                                    
если удачно, то делаем шаг по диагонали
h
h
h
h
h
                                                                    
                            							
														
						 
											
                            Слайд 2208/13/2019
Траектория Метода Нелдера-Мида
p
m
q
o
r