Лабораторные работы3 / 1,2,3 / №2 / отчет2 а,г
.docФедеральное агентство по образованию Российской Федерации
Уфимский государственный авиационный технический университет
Кафедра АПрИС
Лабораторная работа №2
Многомерная безусловная оптимизация
Выполнил: студент группы САПР-327 Абдрафиков М.А.
Проверила: Колоденкова А.Е.
Уфа 2006
Многомерная безусловная оптимизация
1. Цель работы
Знакомство с методами многомерной безусловной оптимизации первого и нулевого порядка и их освоение, сравнение эффективности применения этих методов конкретных целевых функций.
2. Условие задачи
Вариант 1:
Составить программы, реализующие следующие методы поиска:
- градиентный метод с постоянным шагом;
- метод покоординатного спуска с постоянным шагом.
Найти точку минимума функции
Начальное приближение: (1;0)
Точность решения: 0,0001
4.1 Текст программы:
Program Grad_ConstStep;
Uses crt,graph;
Var
x,y,e,a,x1,x2,g: real;
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
x1:=x1-a*p1(x1,x2);x2:=x2-a*p2(x1,x2);
g:=sqrt(p1(x1,x2)*p1(x1,x2)+p2(x1,x2)*p2(x1,x2));
k:=k+3; 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.
4.2 Текст программы:
Program Grad_ConstStep;
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.25108 |
1.43208 |
-8.8124053445 |
135 |
2 |
метод покоординатного спуска с постоянным шагом |
-11.25108 |
1.43211 |
-8.8124053443 |
89 |
Вывод:
В данной работе были изучены два метода многомерной безусловной оптимизации:
- градиентный метод с постоянным шагом;
- метод покоординатного спуска с постоянным шагом.
Применив их к конкретной функции двух переменных и сравнив результаты, можно сказать, что наиболее оптимальным из них является метод покоординатного спуска с постоянным шагом, количество итераций которого меньше, чем в градиентном методе с постоянным шагом.