Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
21
Добавлен:
02.05.2014
Размер:
64.51 Кб
Скачать

Федеральное агентство по образованию Российской Федерации

Уфимский государственный авиационный технический университет

Кафедра АПрИС

Лабораторная работа №2

Многомерная безусловная оптимизация

Выполнил: студент группы САПР-327 Васильев А.А.

Проверила: Колоденкова А.Е.

Уфа 2006

Многомерная безусловная оптимизация

1. Цель работы

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

2. Условие задачи

Вариант 1:

Составить программы, реализующие следующие методы поиска:

- метод наискорейшего спуска;

- метод покоординатного спуска с постоянным шагом.

Найти точку минимума функции

Начальное приближение: (1;0)

Точность решения: 0,0001

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

program naiskor;

uses crt, graph;

var k,n,m,i,dr,md:integer;

q,y,a,b,a1,a2,yk,ymin,xmin,d,e,x1,x2,p_1,p_2,us:real;

function realst(r:real; dig,deg:integer):string;

var Buf:string[20];

begin str(r:dig:deg,buf); realst:=Buf; end;

function f(var x1,x2:real):real;

begin f:=x1-1.4*x2+exp(0.01*x1*x1+0.11*x2*x2); end;

Function p1(var x1,x2: real): real;

begin p1:=1+exp(0.01*x1*x1+0.11*x2*x2)*0.02*x1; end;

Function p2(var x1,x2: real): real;

begin p2:=-1.4+exp(0.01*x1*x1+0.11*x2*x2)*0.22*x2; end;

function fa1(var x1,p_1,a1:real):real;

begin fa1:=x1-a1*p_1; end;

function fa2(var x2,p_2,a2:real):real;

begin fa2:=x2-a2*p_2; end;

begin

clrscr;

write('vvedite nachalnoe priblisenie Xo1 '); readln(x1);

write('vvedite nachalnoe priblisenie Xo2 '); readln(x2);

write('vvedite uslovie ostanova e '); readln(e);

k:=0; dr:=detect; initgraph(dr,md,''); setGraphmode(md);

line(399,0,399,470); line(0,200,640,200);

outtextxy(620,210,'x1'); outtextxy(410,455,'x2');

setcolor(black); lineto(410,250);

lineto(round(x1*20+399),round(x2*50+200));

setcolor(white);

p_2:=p2(x1,x2);

p_1:=p1(x1,x2);

repeat

k:=k+1; a:=0; b:=1; n:=75; m:=1;

a1:=(a+b)/2; yk:=fa1(x1,p_1,a1); ymin:=999999;

repeat

m:=m-1;

for i:=1 to n do

begin

a1:=a+i*(b-a)/(n+1);

if fa1(x1,p_1,a1)<ymin then

begin

ymin:=fa1(x1,p_1,a1);

xmin:=a1;

end;

end;

a1:=xmin; yk:=ymin; d:=b-a;

a:=a1-d/(n+1); b:=a1+d/(n+1);

until m=0;

a:=0; b:=1; n:=75; m:=1; a2:=(a+b)/2;

yk:=fa2(x2,p_2,a2); ymin:=999999;

repeat

m:=m-1;

for i:=1 to n do

begin

a2:=a+i*(b-a)/(n+1);

if fa2(x2,p_2,a2)<ymin then

begin

ymin:=fa2(x2,p_2,a2);

xmin:=a2;

end;

end;

a2:=xmin; yk:=ymin; d:=b-a;

a:=a2-d/(n+1); b:=a2+d/(n+1);

until m=0;

x1:=x1-a1*p_1;

x2:=x2-a2*p_2;

p_1:=p1(x1,x2);

p_2:=p2(x1,x2);

us:=sqrt(p_1*p_1+p_2*p_2);

lineto(round(x1*30+400),round(x2*30+200));

until (abs(us)<e)or(abs(us)=e);

y:=f(x1,x2);

outtextxy(40,20,'tochka minimuma imeet koordinati: ');

outtextxy(40,30,'x1= ' + realst(x1,10,5));

outtextxy(40,40,'x2= ' + realst(x2,10,5));

outtextxy(40,50,'y= ' + realst(f(x1,x2),10,10));

outtextxy(40,60,'chislo vichislenij ravno '+realst(k,5,0));

readkey; closegraph; end.

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

Program pocoord;

Uses crt,graph;

Var

x,y,e,a,x1,x2,g: real;

i,k,dr,md: integer;

function realst(r:real; dig,deg:integer):string;

var Buf:string[20];

begin str(r:dig:deg,buf); realst:=Buf;

end;

Function f(x1,x2: real): real;

Begin f:=x1-1.4*x2+exp(0.01*x1*x1+0.11*x2*x2); end;

Function p1(x1,x2: real): real;

Begin p1:=1+exp(0.01*x1*x1+0.11*x2*x2)*0.02*x1; end;

Function p2(x1,x2: real): real;

Begin p2:=-1.4+exp(0.01*x1*x1+0.11*x2*x2)*0.22*x2; end;

begin

clrscr;

write('vvedite nachalnoe priblisenie Xo1 '); readln(x1);

write('vvedite nachalnoe priblisenie Xo2 '); readln(x2);

write('vvedite postoianij shag a '); readln(a);

write('vvedite uslovie ostanova e '); readln(e);

k:=0; dr:=detect; initgraph(dr,md,''); setGraphmode(md);

line(399,0,399,470); line(0,200,640,200);

outtextxy(620,210,'x1'); outtextxy(410,455,'x2');

setcolor(black); lineto(399,455); setcolor(white);

repeat

if (i mod 2)=0 then x1:=x1-a*p1(x1,x2);

if (i mod 2)<>0 then x2:=x2-a*p2(x1,x2);

i:=i+1; g:=sqrt(p1(x1,x2)*p1(x1,x2)+p2(x1,x2)*p2(x1,x2));

k:=k+1; lineto(round(x1*30)+400,round(x2*30)+200);

until (abs(g)<e)or(abs(g)=e);

outtextxy(40,20,'tochka minimuma imeet koordinati: ');

outtextxy(40,30,'x1= ' + realst(x1,10,5));

outtextxy(40,40,'x2= ' + realst(x2,10,5));

outtextxy(40,50,'y= ' + realst(f(x1,x2),10,10));

outtextxy(40,60,'chislo vichislenij ravno '+realst(k,5,0));

Readkey; closegraph;

end.

5.1 график траектории промежуточных приближений

метода наискорейшего спуска

5.2 график траектории промежуточных приближений

метода покоординатного спуска с постоянным шагом

6. Результаты сравнения рассмотренных методов поиска

Метод поиска

Полученная точка минимума

Значение f(x1,x2)

Кол-во итераций

X1

Х2

1

метод наискорейшего спуска

-11.25188

1.43189

-8.8124053413

2087

2

метод покоординатного спуска с постоянным шагом

-11.25108

1.43211

-8.8124053443

89

Вывод:

В данной работе были изучены два метода многомерной безусловной оптимизации:

- метод наискорейшего спуска;

- метод покоординатного спуска с постоянным шагом.

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

Соседние файлы в папке №2