
Лабораторная работа №1 / Отчет / Остальное
.docЦель работы: знакомство с оптимизационными задачами, изучение различных методов одномерной оптимизации и сравнение эффективности их применения для конкретных целевых функций.
Задание:
Минимизировать функцию f(x)=
Отрезок неопределенности [-1,0], число точность =10-3
Методы:
б) пассивный поиск минимума
г) метод дихотомии
ж) метод касательных
Метод дихотомии
Это
алгоритм блочного поиска для ni=n=2,
т.е. когда в блоке два эксперимента. Так
как пассивная составляющая алгоритма,
т.е. блок, содержит четное число
экспериментов, то оптимальный выбор
точек
,
в которых необходимо провести эксперименты,
будет неравномерным, в отличие от
предыдущих алгоритмов, где число
экспериментов в блоке было нечетным и,
соответственно, расположение точек
равномерным. Если блок содержит два
эксперимента, то оптимальное (дельта
оптимальное) расположение точек, в
которых будут проводится эксперименты,
это как можно ближе к середине отрезка.
Такое расположение точек позволяет
получить наименьший отрезок
неопределенностей после экспериментов
в блоке.
Схема алгоритма.
Шаг 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-a2,
то x=(a+b)/2,
и поиск заканчивается. Иначе перейти к
шагу 2.
После
к
итераций общее число экспериментов
будет N=2к,
а длина получившегося отрезка
неопределенности
.
Следовательно,
.
Метод касательных
Пусть
функция
выпукла и дифференцируема на
.
Идея метода состоит в следующем. Пусть
- отрезок неопределённости и
- результаты вычислений в точках
и
.
По этой информации строится аппроксимирующая
функция, представляющую из себя
кусочно-линейную функцию, состоящую из
касательной
к
в точке
и касательной
к
в точке
.
Полученная
аппроксимирующая функция есть ломанная
состоящая из прямой
на
и
на
,
где с
– точка пересечения касательных. Легко
заметить, что при
и
минимум аппроксимирующей функции
достигается в точке с.
Значение точки пересечения с
можно определить по формуле
В
точке с
производятся вычисления
и
.
Если
,
то решением задачи будет
.
Если же
,
то в качестве следующего отрезка
неопределённости будет
.
Если же
,
то – отрезок
.
Процесс повторяется до тех пор, пока
или отрезок неопределённости не достигнет
заданной точности.
Схема алгоритма
Шаг
1. Заданы
.
Вычислить
.
Шаг
2. Если
,
то полагаем
.
Поиск окончен. Если
,
то вычислить
.
Если z=0,
то полагаем
и поиск окончен. Если
,
то
.
Если
,
то
.
Повторить шаг 2.
Пассивный поиск минимума
Отрезок [a,b] исходный отрезок неопределенности. Пусть N - число точек, в которых необходимо провести вычисления целевой функции f(x), т.е. N экспериментов. Точки, в которых необходимо провести эксперименты, определяются следующим образом:
Среди вычисленных значений {f(xi)} (i=1,N), ищется точка xj , в которой достигается минимум:
f(xj)=
min
f()
1iN
Найденная
точка принимается за приближенное
решение задачи
.
Исходный отрезок неопределенности
[a,b]
после экспериментов в N
точках сужается до [xj-1,xj+1],
длина которого равна:
Точность
найденного решения
равна
половине отрезка неопределенности,
т.е.
,
где
и x*
- точное решение.
Процедуры методов
------------- Метод дихотомии ----------------
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 := abs(x-d)+exp(10*(x-d));
y2 := abs(x+d)+exp(10*(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:=abs(x5)+exp(10*(x5));
end
else goto giim;
Form1.Label1.Caption := IntToStr(m);
Form1.Label2.Caption := currToStr(X5);
Form1.Label3.Caption := currToStr(Y5);
end;
------------- Пассивный метод -----------------
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 := abs(x)+exp(10*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 := abs(x1)+exp(10*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;
-------- Метод касательных -------------
procedure TForm1.BitBtn8Click(Sender: TObject);
var
a : real;
m : integer;
d,b,e,c,y1,y2,z1,z2,y,z,Y5,X5 : currency;
label looop, lop, loop;
begin
a := StrToCurr(form1.Edit11.Text);
b := StrToCurr(form1.Edit12.Text);
e := StrToCurr(form1.Edit13.Text);
d := e/100;
y1 := abs(a)+exp(10*a);
y2 := abs(b)+exp(10*b);
if (a>0)and(b=0) then z1 :=1+10*exp(10*a);
if (a<0)and(b=0) then z1 :=-1+10*exp(10*a);
if (b>0)and(a=0) then z2 :=1+10*exp(10*b);
if (b<0)and(a=0) then z2 :=-1+10*exp(10*b);
m := 2;
while (b-a)>(2*e) do begin
c := ((b*z2 - a*z1)-(y2 - y1))/(z2 - z1);
y := abs(c)+exp(10*c);
if c>0 then z :=1+10*exp(10*c);
if c<0 then z :=-1+10*exp(10*c);
if z = 0 then begin
X5 := c; Y5 := y;
goto looop; end;
if z < 0 then begin
a := c; y1 := y; z1 := z;
end;
if z > 0 then begin
b := c; y2 := y; z2 := z;
end;
m:=m+1;
end;
looop:
X5 := (a+b)/2;
Y5 := abs(X5)+exp(10*X5);
Form1.Label25.Caption := IntToStr(m);
Form1.Label26.Caption := currToStr(X5);
Form1.Label27.Caption := currToStr(Y5);
end;
end.
Сравнение результатов:
x |
y |
Количество экспериментов |
Пассивный поиск минимума |
||
-0,23 |
0,3303 |
99 |
Метод дихотомии |
||
-0,2266 |
0,3303 |
12 |
Метод касательных |
||
-0,2299 |
0,3302 |
6 |
Вывод: Метод касательных показывает лучшие результаты, чем метод дихотомии и пассивный поиск минимума, т.к. количество экспериментов, получаемых этим методом, меньше. В свою очередь – метод дихотомии показывает лучшие результаты по сравнению с пассивным поиском минимума