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

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

Задание:

Вариант 10:

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

а) пассивный оптимальный алгоритм;

б) метод дихотомии;

в) метод парабол.

Целевая функция: 10 * cos(x) + ex ;

Отрезок [a;b]: [0;3] ;

Точность искомого решения: = 5*10-4.

График целевой функции:

X=

Y=

0

11

0,1

11,05521

0,2

11,02207

0,3

10,90322

0,4

10,70243

0,5

10,42455

0,6

10,07547

0,7

9,662175

0,8

9,192608

0,9

8,675703

1

8,121305

1,1

7,540127

1,2

6,943694

1,3

6,344285

1,4

5,754871

1,5

5,189061

1,6

4,661037

1,7

4,185502

1,8

3,777627

1,9

3,452999

2

3,227588

2,1

3,117709

2,2

3,140002

2,3

3,311422

2,4

3,649239

2,5

4,171058

2,6

4,894851

2,7

5,83901

2,8

7,022423

2,9

8,464564

3

10,18561

Методы поиска:

1) Метод дихотомии :

Схема алгоритма:

Шаг 1. Задаются a,b, и - малое положительное число, значительно меньшее чем .

Шаг 2. Определяется середина отрезка x=(a+b)/2. Производятся эксперименты в двух точках близких середине: y1=f(x-), y2=f(x+).

Шаг 3. Определяется следующий отрезок локализации, т.е. определяется какой из отрезков [a,x+] или [x-,b] содержит точное решение x*. Если y1y2, то это отрезок [a,x+] и b=x+, иначе это отрезок [x-,b] и a=x-, т.е. выбранный отрезок локализации мы снова обозначили как [a,b].

Шаг 4.Если b-a2, то x=(a+b)/2, и поиск заканчивается. Иначе перейти к шагу 2.

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

procedure TForm1.BitBtn2Click(Sender: TObject);

var

m : integer;

a,b,d,e,x,y1,y2,X5,Y5 : real;

label giim;

begin

a := StrToCurr(form1.Edit1.Text);

b := StrToCurr(form1.Edit2.Text);

e := StrToCurr(form1.Edit3.Text);

d := e/100;

m:=0;

giim:

x := (a+b)/2;

y1 := 10*cos(x-d)+exp(x-d);

y2 := 10*cos(x+d)+exp(x+d);

if y1<y2 then b:=x+d

else a:=x-d;

m:=m+2;

if (b-a) <= 2*e then

begin

X5:=(a+b)/2;

Y5:=10*cos(x+d)+exp(x+d);

end

else goto giim;

Form1.Label1.Caption := IntToStr(m);

Form1.Label2.Caption := currToStr(X5);

Form1.Label3.Caption := currToStr(Y5);

end;

2) Метод парабол :

Схема алгоритма:

Шаг 1. Задаются a,c,b и . Вычислить ya=f(a), yc=f(c), yb=f(b).

Шаг 2. Вычислить , y=f(x), где

Шаг 3. А) При x<c.

Если y<yc, то b=c, c=x, yb=yc, yc=y.

Если y>yc, то a=x, ya=y.

Если y=yc, то a=x, b=c, c=(x+c)/2, ya=y, yb=yc, yc=f(c).

Б) При x>c.

Если y<yc, то a=c, c=x, ya=yc, yc=y.

Если y>yc, то b=x, yb=y.

Если y=yc, то a=c, b=x, c=(x+c)/2, ya=yc, yb=y, yc=f(c).

Шаг 4. Если b-a, то закончить поиск, положив , иначе перейти к шагу 2.

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

procedure TForm1.BitBtn4Click(Sender: TObject);

var

m : integer;

a,b,c,e,x,y,X5,Y5,ya,yb,yc,t,t1 : real;

label ttt,eee;

begin

a := StrToCurr(form1.Edit4.Text);

b := StrToCurr(form1.Edit5.Text);

c := StrToCurr(form1.Edit6.Text);

e := StrToCurr(form1.Edit7.Text);

m := 3;

ya := 10*cos(a)+exp(a);

yb := 10*cos(b)+exp(b);

yc := 10*cos(c)+exp(c);

ttt:

t := c+(0.5*(((sqr(b-c)*(ya-yc))-(sqr(c-a)*(yb-yc)))/(((b-c)*(ya-yc))+((c-a)*(yb-yc)))));

if t<>c then x := t

else x := (a+c)/2;

y := 10*cos(x)+exp(x);

if x<c then begin

if y<yc then begin

b := c; c := x; yb := yc; yc := y; goto eee; end;

if y>yc then begin

a := x; ya := y; goto eee; end;

if y=yc then begin

a := x; b := c; c := (x+c)/2; ya := y; yb := yc;

yc := 10*cos(c)+exp(c); goto eee; end;

end;

if x>c then begin

if y<yc then begin

a := c; c := x; ya := yc; yc := y; goto eee; end;

if y>yc then begin

b := x; yb := y; goto eee; end;

if y=yc then begin

a := c; b := x; c := (x+c)/2; ya := yc; yb := y;

yc := 10*cos(c)+exp(c); goto eee; end;

end;

eee:

m := m+1;

if (b-a) <= e then begin

X5 := x; Y5 := y; end

else goto ttt;

Form1.Label10.Caption := IntToStr(m);

Form1.Label13.Caption := CurrToStr(X5);

Form1.Label14.Caption := CurrToStr(Y5);

end;

3) Пассивный метод:

Схема алгоритма:

Шаг 1. Задаются a,c,b и . Вычислить = /100, N=((b-a) /) -1.

Шаг 2. Определяются точки, в которых необходимо провести эксперименты:

Шаг 3. Среди вычисленных значений {f(xi)} (i=1,N), ищется точка xj , в которой достигается минимум:

f(xj)= min f()

1 I N

Шаг 4. Выводим полученные значения .

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

procedure TForm1.BitBtn6Click(Sender: TObject);

var

n,r: integer;

a,b,e,X5,Y5,k,x,y,d,x1,h : currency;

label lop,loop;

begin

a := StrToCurr(form1.Edit8.Text);

b := StrToCurr(form1.Edit9.Text);

e := StrToCurr(form1.Edit10.Text);

d := e/100;

h := ((b-a)/e)-1;

Form1.Label21.Caption := CurrToStr(h);

n := StrToInt(form1.Label21.Caption);

if (n mod 2)<>0 then begin

r := 1;

lop:

x := a+(((b-a)/(n+1))*r);

y := 10*cos(x)+exp(x);

if y<Y5 then begin

Y5 := y; X5 := x; end;

r := r+1;

if n<>r then goto lop;

end

else begin

r := 1;

loop:

x := a+(((b-a)/(n+1))*r);

x1 := x-d;

y := 10*cos(x1)+exp(x1);

if y<Y5 then begin

Y5 := y; X5 := x1; end;

r := r+1;

if n<>r then goto loop;

end;

n := StrToInt(form1.Label21.Caption);

Form1.Label18.Caption := IntToStr(n);

Form1.Label19.Caption := CurrToStr(X5);

Form1.Label20.Caption := CurrToStr(Y5);

end;

Таблица сравнения результатов рассмотренных методов :

Метод

Кол-во экспериментов

Значение

Значение

Метод дихотомии

24

2,1346

3,1096

Метод парабол

27

2,1345

3,1096

Пассивный оптим. алгоритм

5999

2,1325

3,1096

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

8

Соседние файлы в папке Лабораторная работа №1