Методы многомерной оптимизации: многомерная оптимизация методом Хука и Дживса
Контрольная работа - Компьютеры, программирование
Другие контрольные работы по предмету Компьютеры, программирование
МОСКОВСКИЙ АВИАЦИОННЫЙ ИНСТИТУТ
(НАЦИОНАЛЬНЫЙ ИССЛЕДОВАТЕЛЬСКИЙ УНИВЕРСИТЕТ)
Отчет по лабораторной работе за курс:
Теория оптимального планирования и управления
кафедры 302
Тема
Методы многомерной оптимизации: многомерная оптимизация методом Хука и Дживса
Выполнила студентка
группы 03-323:
Ежова О.С.
Преподаватель:
Красовская М.А.
Москва
Постановка задачи
Найти методом Хука и Дживса с непрерывным шагом:
MIN F1(x)= (Х1-4)4 +(X1-3 X2 )2,
с начальной точкой X0=(1;0)
Предусмотреть ввод точности .
Провести: многомерный оптимизация дживс розенброк
1.Нахождение экстремума функции F1(X) при различных значениях начальной точки;
2.Определение экстремума заданной функции при различных значениях точности (=0.01, =0.1, =0.001);
Алгоритм метода
Графики функции
Результаты работы программы
Начальная точка (1;0)
1) Начальная точка X0 = [1;0]
Точность ? = 0.1
Опт. значение аргумента (3,8826;1,3109)
Опт. значение функции 0,00269660220874356
Кол-во итераций метода 3
) Точность ? = 0.01
Опт. значение аргумента (4,0037;1,3344)
Опт. значение функции 1,48019246160121E-7
Кол-во итераций метода 3
) Точность ? = 0.001
Опт. значение аргумента (3,9957;1,3321)
Опт. значение функции 6,03879971567203E-7
Кол-во итераций метода 3
Начальная точка (-2;2)
1) Точность ? = 0.1
Опт. значение аргумента (3,7289;1,2470)
Опт. значение функции 0,00554697770081615
Кол-во итераций метода 5
) Точность ? = 0.01
Опт. значение аргумента (3,9867;1,3287)
Опт. значение функции 2,17609241998115E-7
Кол-во итераций метода 6
3) Точность ? = 0.001
Опт. значение аргумента (3,9907;1,3305)
Опт. значение функции 5,73924492635677E-7
Кол-во итераций метода 7
Начальная точка (4;2)
1) Точность ? = 0.1
Опт. значение аргумента (4,5855;1,5198)
Опт. значение функции 0,118199132492491
Кол-во итераций метода 2
2) Точность ? = 0.01
Опт. значение аргумента (4,5914;1,5296)
Опт. значение функции 0,122304388908469
Кол-во итераций метода 2
3) Точность ? = 0.001
Опт. значение аргумента (4,0108;1,3372)
Опт. значение функции 6,2375505275578E-7
Кол-во итераций метода 5
Листинг программы
unit Xuk;, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,, StdCtrls, Grids;= class(TForm): TEdit;: TEdit;: TLabel;: TLabel;: TLabel;: TComboBox;: TLabel;: TLabel;: TLabel;: TStringGrid;: TEdit;: TEdit;: TEdit;: TButton;: TEdit;: TLabel;: TEdit;: TEdit;FormCreate(Sender: TObject);Button1Click(Sender: TObject);
{ Private declarations }
{ Public declarations };Tper = class(TObject):real;:real;;schityvanie;func (h:real):real;sechenie(var c:real);: TForm1;,t1,t2,x1,x2,e,F:real;,j,v,q:integer;,y,xp,d:Tper;,ystr,dstr:string;
{$R *.dfm}TForm1.FormCreate(Sender: TObject);.Items.Add((x1-2)^4+(x1-2*x2)^2);.Items.Add(4*x1+8*x2-2*x1^2-2*x2^2);:=Tper.Create;:=Tper.Create;:=Tper.Create;:=Tper.Create;;
//считывание начальных значений
procedure schityvanie;
var,s,i,p:integer;,str1:string;:boolean;:=;.one:=0;.two:=0;:=true;o:=0 to 9 dos:=0 to Form1.StringGrid1.RowCount do.StringGrid1.Cells[o,s]:=;:=0;.StringGrid1.RowCount:=10;:=2;.one:=StrToFloat(Form1.Edit2.Text);.two:=StrToFloat(Form1.Edit3.Text);:=StrToFloat(Form1.Edit4.Text);:=1;.stringgrid1.Cells[0,0]:=K;.stringgrid1.Cells[1,0]:=Xk/F(Xk);.stringgrid1.Cells[2,0]:=j;.stringgrid1.Cells[3,0]:=dj;.stringgrid1.Cells[4,0]:=yj;.stringgrid1.Cells[5,0]:=shag;.stringgrid1.Cells[6,0]:=yj+1;.stringgrid1.Cells[7,0]:=d;.stringgrid1.Cells[8,0]:=shag;.stringgrid1.Cells[9,0]:=y3+shag*d;;
//вычисление значения функцииfunc(h:real):real;Form1.ComboBox1.Text=(x1-2)^4+(x1-2*x2)^2 then:=((y.one+h*d.one)-2)*((y.one+h*d.one)-2)*((y.one+h*d.one)-2)*((y.one+h*d.one)-2)+
((y.one+h*d.one)-2*(y.two+h*d.two))*((y.one+h*d.one)-2*(y.two+h*d.two))func:=4*(y.one+h*d.one)+8*(y.two+h*d.two)-2*(y.one+h*d.one)*(y.one+h*d.one)-2*(y.two+h*d.two)*(y.two+h*d.two);;
=e doFn > Fm then:=n;:=m;:=Fm;:=a+alfa*(b-a);:=func(m);:=m;:=n;:=Fn;:=a+(1-alfa)*(b-a);:=func(n);;;:=(a+b)/2;">//метод золотого сеченияsechenie(var c:real);,b,Fn,Fm,m,n:real;:=0;:=0;:=StrToFloat(Form1.Edit5.Text);:=StrToFloat(Form1.Edit8.Text);:=0.618;:=a+(1-alfa)*(b-a);:=a+alfa*(b-a);:=func(n);:=func(m);(b-a)>=e doFn > Fm then:=n;:=m;:=Fm;:=a+alfa*(b-a);:=func(m);:=m;:=n;:=Fn;:=a+(1-alfa)*(b-a);:=func(n);;;:=(a+b)/2;
end;
//метод Хука и Дживса
procedure TForm1.Button1Click(Sender: TObject);,w,num:integer;,Zfun,per:real;:boolean;:string;:=0;:=0;:=2;:=0;:=0;;:=[+FloatToStrF(x.one,ffFixed,7,4)+;
+ FloatToStrF(x.two,ffFixed,7,4)+];.one:=x.one;.two:=x.two;:=func(0);.stringgrid1.Cells[1,2]:=FloatToStr(Zfun);:=[+FloatToStrF(x.one,ffFixed,7,4)+;
+ FloatToStrF(x.two,ffFixed,7,4)+];:=false;not flag doj:= 1 to num do:=j mod 2;(q);j of
:.one:=1;.two:=0;;
:.one:=0;.two:=1;;;:=[+FloatToStrF(d.one,ffFixed,2,2)+;
0then(k);.stringgrid1.Cells[0,q]:=IntToStr(k);.stringgrid1.Cells[1,q]:=xstr;;.stringgrid1.Cells[2,q]:=IntToStr(j);.stringgrid1.Cells[3,q]:=dstr;.stringgrid1.Cells[4,q]:=ystr;.stringgrid1.Cells[5,q]:=FloatToStr(Shag);.one:=y.one+shag*d.one;.two:=y.two+shag*d.two;:=[+FloatToStrF(y.one,ffFixed,7,4)+;">+ FloatToStrF(d.two,ffFixed,2,2)+];(Shag);w <> 0 then(k);.stringgrid1.Cells[0,q]:=IntToStr(k);.stringgrid1.Cells[1,q]:=xstr;;.stringgrid1.Cells[2,q]:=IntToStr(j);.stringgrid1.Cells[3,q]:=dstr;.stringgrid1.Cells[4,q]:=ystr;.stringgrid1.Cells[5,q]:=FloatToStr(Shag);.one:=y.one+shag*d.one;.two:=y.two+shag*d.two;:=[+FloatToStrF(y.one,ffFixed,7,4)+;
9thenForm1.StringGrid1.RowCount:=Form1.StringGrid1.RowCount+1;;.one:=x.one;.two:=x.two;.one:=y.one;.two:=y.two;:=sqr((x.one-xp.one)*(x.one-xp.one)+(x.two-xp.two)*(x.two-xp.two));(per9 then Form1.StringGrid1.RowCount:=Form1.StringGrid1.RowCount+1;;.one:=x.one;.two:=x.two;.one:=y.one;.two:=y.two;:=sqr((x.one-xp.one)*(x.one-xp.one)+(x.two-xp.two)*(x.two-xp.two));(per<e) then flag:=true.one:=x.one-xp.one;.two:=x.two-xp.two;:=[+FloatToStrF(d.one,ffFixed,7,4)+;
+ FloatToStrF(d.two,ffFixed,7,4)+];(Shag);.one:=x.one+shag*d.one;.two:=x.two+shag*d.two;:=[+FloatToStrF(y.one,ffFixed,7,4)+;
100then:=true;(">+ FloatToStrF(y.two,ffFixed,7,4)+];:=ystr;w = 0 then.