Скачиваний:
12
Добавлен:
03.06.2014
Размер:
95.32 Кб
Скачать

ФЕДЕРАЛЬНОЕ АГЕНСТВО ПО ОБРАЗОВАНИЮ.

Государственное образовательное учреждение высшего профессионального образования.

«Санкт-Петербургский государственный электротехнический университет «ЛЭТИ» имени В.И. Ульянова (Ленина)»

(СПБГЭТУ)

Кафедра ВТ

Практическая работа №7

«Исследование методов безусловной оптимизации первого порядка»

Выполнил: ст. группы 9307 Джабаров Р.Р.

Проверил: проф. Дмитревич Г.Д.

Санкт-Петербург

2014 г.

Оглавление

Задание. 2

Описание методов оптимизации. 2

Спецификация программы. 4

Результаты тестирования программы 6

Ответы на контрольные вопросы 6

Задание.

Целью работы является изучение методов сопряженных градиентов и методов с переменной метрикой

Описание методов оптимизации.

Метод трехточечного поиска на равных интервалах

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

Начальный этап (1) Задать [a1, b1] - начальный интервал поиска, где a1, b1 - границы интервала, удовлетворяющие условию f (a1)f (b1)<0;  - погрешность вычисления минимума х*. (2) Положить xm = (a1 + b1)/2 и k = 1.

Основной этап

Шаг 1. Взять две пробные точки x1 = ak + Lk/4 и x2 = bk - Lk/4, где Lk = bk - ak - длина текущего интервала. Точки х1, х2 и хm делят [ak, bk] на четыре равные части.

Шаг 2. Сократить текущий интервал локализации минимума:

(1) если f1 < fm, то положить ak+1 = ak, bk+1 = xm, xm = x1, перейти на шаг 3;

(2) если f1 ≥ fm ≤ f2, то положить ak+1 = x1, bk+1 = x2; иначе - ak+1 = xm, bk+1 = bk, xm = x2.

Шаг 3. Проверить критерий окончания поиска:

(1) заменить k на k +1;

(2) если Lk = bk - ak ≤ , то остановиться. Если данное условие не выполняется, вернуться на шаг 1.

Метод Полака-Рибьера

Метод Полака-Рибьера является разновидностью метода Флетчера-Ривза. Ниже приводятся операции этого алгоритма:

Шаг 1. В вычисляется

.

Шаг 2. На k-м шаге с помощью одномерного поиска в направлении , находим минимум . Это определяет точку .

Шаг 3. Вычисляются и .

Шаг 4. Направление определяется из соотношения

(4.5)

После (n+1) итерации (k=n) процедура циклически повторяется с заменой на .

Шаг 5. Алгоритм заканчивается, когда , где - произвольная константа.

Спецификация программы.

В программе использовался метод сопряженных градиентов – “метод Полака-Рибъера”, а также метод одномерного поиска – “Метод трехточечного поиска”.

Текст программы

// bn.cpp: определяет точку входа для консольного приложения.

//

#include "stdafx.h"

#include <stdio.h>

#include <iostream>

#include <conio.h>

#include <math.h>

using namespace std;

double icount =1;

double icountz=1;

double x0[2] = {0,3}, p[2];

double f(double x1, double x2) {

return (x1-2)*(x1-2)*(x1-2)*(x1-2) + (x1-2*x2)*(x1-2*x2);

}

double y (double alfa) {

return f (x0[0]+p[0]*alfa,x0[1]+p[1]*alfa);

}

double norm (double x[2]) {

return sqrt(x[0]*x[0] + x[1]*x[1]);

}

void swann( double x, double& a, double& b, double h = 0.0001) {

int k;

if( y(x) < y(x+h) )

h *= -1;

for( k=0; y(x+h) < y(x); k++ ) {

h *= 2;

x += h;

}

if(h>0)

{

a=x-h;

b=x+h;

}

else

{

a=x+h;

b=x-h;

}

if( icount )

icount = k;

}

double three_point_search( double a, double b, double eps = 0.0001, int* icount = NULL ) {

double L, x_m = (a + b)/2, x_1, x_2;

int k;

for( k=0; abs(b - a) > eps; k++ ) {

L = abs(b - a);

x_1 = a + L/4;

x_2 = b - L/4;

if( y(x_1) < y(x_m) ) {

b = x_m;

x_m = x_1;

}

else if( y(x_m) <= y(x_1) && y(x_m) <= y(x_2) ) {

a = x_1;

b = x_2;

}

else {

a = x_m;

x_m = x_2;

}

}

if( icountz )

icountz = k;

return x_m;

}

void VecCopy ( double dst[2], double src[2]) {

dst[0] = src [0];

dst[1] = src [1];

}

double dif (double x[2], int nom, double h = 0.0001) {

if (nom == 0) {

return ( f(x[0] + h, x[1]) - f(x[0] - h, x[1]))/(2*h);

}

else

return ( f(x[0], x[1] + h) - f( x[0], x[1] - h))/(2*h);

}

double polaka_ribera (void) {

int k = 1;

double g [2];

double glast [2], beta, betaz ;

while (1) {

g[0] = dif(x0,0);

g[1] = dif(x0,1);

if (k%2) {

VecCopy ( p, g);

}

else {

beta = g[1]*(g[1]-g[0])/(glast[0]*glast[0]);

betaz = g[1]*(g[1]-g[0])/(glast[1]*glast[1]);

p[0] = - g[0] - beta*p[0];

p[1] = - g[1] - betaz*p[1];

}

VecCopy (glast,g);

double a, b;

swann( 0,a, b ); //работаем с одномерным пространством

double alpha = three_point_search( a, b ); //работаем с одномерным пространством

x0[0] = x0[0] + p[0]*alpha; //получаем векторные значения

x0[1] = x0[1] + p[1]*alpha;

if (abs(norm(g)) < 0.0001)

return alpha;

}

}

int main (void) {

double alpha = polaka_ribera();

cout << "Minimum function" ; cout << endl;

cout << (x0[0] + p[0]*alpha) ; cout << endl;

cout << (x0[1] + p[1]*alpha); cout << endl;

cout <<"Kol-vo Iteracii methoda trehtochechnogo poiska:" << icount; cout << endl;

getch();

return 0;

}

Результаты тестирования программы

Точность

0.001

Метод Полака-Рибьера

11- метод одномерного поиска

x=[2;1]

Ответы на контрольные вопросы

1. Определить характер матрицы Гессе функции y(x) = (x2 – x1)2 +  + (1 – x1)2 в точке минимума x* = (1; 1)t. Используя матрицу Гессе найти направление, сопряженное к p = (1; 0)t.

G= =>H=

P1*H*p2=0 =>

Пусть y=2 => x=1 => p2=

  1. Являются ли направления p1 = (0; 1)t и p2 = (1; 0)t линейно независимыми? Ортогональными? Сопряженными?

Данные вектора являются ортогональными =>независимы

P1*p2=0*1+1*0=0-Ортогональные

P1*H*p2= - Сопряженные

е

  1. Дана функция y(x) = x12 + x22 + x32 и точка xk = (1; 2; 3)t. Определить точку x+ 1 методом Даниела.

Ш1: p1=-g1==

Ш2: x2==>f(a1)=(1+2*a1)^2+(2+4*a1)^2+(3+6*a1)^2

F’(a1)=4(1+2*a1)+ 16(1+2*a1)+36*(1+2*a1)=0 => a1=1/2

Ш3: x2= Ш4: ||g1||=(4+16+36)^1/2 > E

  1. Используя метод сопряженных градиентов найти точку x+ 1 для функции y(x) = x12 + 2x1x2 + x22 и xk = (1; 1; 1)t.

Ш1: p1=-g1==

Ш2: x2==>f(a1)=(1+4*a1)^2+2*(1+4*a1)*(1+4*a1)+(1+4*a1)^2

F’(a1)=32*(1+4*a1) =0 => a1=1/4

Ш3: x2= Ш4: ||g1||=(4+4+1)^1/2=3 > E

Вывод.

Были изучены методы сопряженных градиентов и разработана программа, описывающая эти методы.

Соседние файлы в папке р 1-5, 2 вар.; 7 лаб. метод Полака Рибьера + Лекции МО + перевод ГА