Автор: Пользователь скрыл имя, 09 Сентября 2011 в 23:15, курсовая работа
Оптимізація як розділ математики існує досить давно. Оптимізація - це вибір, тобто те, чим постійно доводиться займатися в повсякденному житті. Терміном "оптимізація" в літературі позначають процес або послідовність операцій, що дозволяють отримати поліпшене рішення. Хоч кінцевою метою оптимізації є відшукання найкращого або "оптимального" рішення, звичайно доводиться задовольнятися поліпшенням відомих рішень, а не доведенням їх до досконалості
Зміст 3
Вступ 4
Змістовна постановка задачі 5
Формальна постановка задачі 9
Опис методів розв’язку задачі 10
Метод дихотомії. 10
Методи золотоЗміст 3
Вступ 4
Змістовна постановка задачі 5
Формальна постановка задачі 9
Опис методів розв’язку задачі 10
Метод дихотомії. 10
Методи золотого перетину і Фібоначчі. 10
Опис програми 13
Аналіз контрольного прикладу 17
Висновки 18
Список літературних джерел 19
Додатки 20
Програма написана на мові Паскаль процедурним методом програмування.
Алгоритм методу золотого січення показано нижче.
Рис. 2. Метод золотого січення
Це один з найпростіших з методів пошуку мінімуму і він володіє гарантованою лінійною швидкістю збіжності, що не залежить від функції, мінімум якої шукається. Відрізок поділяється на частині, і на кожнім кроці приймається рішення: "ліворуч" чи "праворуч", без обліку особливостей поводження функції. Поза залежністю від того, яке значення функції ми одержали, вибравши лівий відрізок, що випливає значення функції ми будемо вважати в точці A, а вибравши правий, наступною точкою буде точка B.
Разом з тим, можна враховувати те, що в околицях мінімуму функція звичайно добре описується параболою. Перший прихожий у голову варіант: побудувати по трьох відомих значеннях функції параболу, і знайти її мінімум. Потім вибрати поруч зі знайденим наближенням до мінімуму ще три точки, і знову побудувати параболу, одержавши наступне наближення.
Швидкість збіжності такого методу квадратична, однак, такий метод на практиці незастосовний. По-перше, поблизу мінімуму гладка функція поводиться, як парабола, але на негладкій функції метод може дати збій. По-друге, до мінімуму треба ще підібратися досить близько, а удалині від мінімуму функція поводиться, як хоче, і можна запросто зійтися до максимуму замість мінімуму, чи ж виявитися "викинутим" за межі області пошуку при визначенні мінімуму чергової параболи.
Інший метод прямого пошуку - метод Брента сполучив у собі риси методу золотого перетину і методу параболічної інтерполяції. Він характеризується квадратичною швидкістю збіжності в околицях мінімуму гладких функцій і гарантованою лінійною швидкістю збіжності у випадку, якщо потрапиться негладка чи функція функція з дуже складним рельєфом. [1,4]
Небагато про принципи роботи. Алгоритм зберігає в пам'яті п'ять точок: точки a і b обмежують відрізок [a, b], у якому локалізований мінімум, у точках x, w, v зберігаються три точки з найкращими значеннями f(x), отримані алгоритмом за час роботи. По цим трьох точках будується парабола, у мінімумі якої обчислюється наступне значення функції. У випадку, якщо передбачуваний мінімум розташований за межами відрізка [a, b] чи якщо виконуються деякі умови, що говорять про негладкість чи функції про те, що ми ще не виявилися в околиці экстремума з квадратичної скосростью збіжності, те наступний крок робиться не на основі параболічної інтерполяції, а на основі методу золотого перетину.
Алгоритм
шукає локальний мінімум
Вхідні параметри:
Вихідні параметри:
Результат:
значення функції в знайденому мінімумі
Алгоритм методу Брента показано нижче.
Рис. 3. Метод Брента
На початку роботи програми користувачеві пропонується вибрати метод пошуку:
Продемонструємо результат методу золотого січення:
Дослідимо залежність інтервалу, у який потрапляє точка, від кількості розбиттів.
К-сть розбиттів | Нижня межа | Верхня межа |
2 | 4 | 5.15 |
5 | 4 | 4.25 |
10 | 4 | 4.02 |
15 | 4 | 4 |
Тепер оберемо метод Брента.
Результат роботи методу Брента показано нижче.
Залежність результуючої точки від точності показано на наступному рисунку:
При визначенні швидкодії двох методів експериментальним шляхом було встановлено, що незважаючи на довший програмний код, метод Брента при тих самих вхідних даних працює на 0.003 с швидше, ніж метод золотого січення.
У
ході роботи над курсовою роботою
було вивчено методи прямого пошуку
для оптимізації унімодальних функцій
якости без обмежень. Серед методів пошуку
бул розглянуто методи золотого січення,
Фібоначчі та Брента. Перший та останній
з них реалізовані у програмі на мові Паскаль.
Виконання курсової роботи дозволило поглибити мої теоретичні та практичні зання.
uses crt;
label beg,et,nt;
var a,b,e,x:real;
n,c,typ:integer;
procedure GoldenSectionOptimize(var A : real; var B : real; N,typ : Integer);
var
i : Integer;
S1 : real;
S2 : real;
U1 : real;
U2 : real;
FU1 : real;
FU2 : real;
begin
S1 := (3-Sqrt(5))/2;
S2 := (Sqrt(5)-1)/2;
U1 := A+S1*(B-A);
U2 := A+S2*(B-A);
case typ of
1:begin FU1 := sin(U1); FU2 := sin(U2); end;
2:begin FU1 := cos(U1); FU2 := cos(U2); end;
3:begin FU1 := ln(U1); FU2 := ln(U2); end;
end;
i:=1;
while i<=N do
begin
if FU1<=FU2 then
begin
B := U2;
U2 := U1;
FU2 := FU1;
U1 := A+S1*(B-A);
case typ of
1:begin FU1 := sin(U1); end;
2:begin FU1 := cos(U1); end;
3:begin FU1 := ln(U1); end;
end;
end
else
begin
A := U1;
U1 := U2;
FU1 := FU2;
U2 := A+S2*(B-A);
case typ of
1:begin FU2 := sin(U2); end;
2:begin FU2 := cos(U2); end;
3:begin FU2 := ln(U2); end;
end;
end;
Inc(i);
end;
end;
Function MySign(a, b : real) : real;
var Result : real;
begin
If b>0 then
Result := Abs(a)
Else
Result := -Abs(a);
MySign := Result;
End ;
function BrentOptimize(a,b,Epsilom: real;typ:integer; var Xmin:real): real;
var
Result,ia,ib,bx,d,e,etemp,e2,
iter:integer;
b1,b2,b3:boolean;
begin
cgold := 0.3819660;
bx := 0.5*(a+b);
e2:=Epsilom*2;
If a<b then
ia := a
Else
ia := b;
If a>b then
ib := a
Else
ib := b;
v :=bx;
w :=v;
x :=v;
e :=0.0;
case typ of
1: fx := sin(x);
2: fx := cos(x);
3: fx := ln(x);
end;
fv := fx;
fw := fx;
For iter:=1 To 100 do begin
xm := 0.5*(ia+ib);
If Abs(x-xm)<=e2-0.5*(ib-ia) then
break;
If Abs(e)>Epsilom then begin
r := (x-w)*(fx-fv);
q := (x-v)*(fx-fw);
p := (x-v)*q-(x-w)*r;
q := 2*(q-r);
If q>0 then
p := -p;
q := Abs(q);
etemp := e;
e := d;
if not (Abs(p)>=Abs(0.5*q*etemp)) then b1:=true else b1:=false;
if not (p<=q*(ia-x)) then b2:=true else b2:=false;
if not (p>=q*(ib-x)) then b3:=true else b3:=false;
If b1 Or b2 Or b3 then begin
d := p/q;
u := x+d;
if u-ia<e2 then b1:=true else b1:=false;
if ib-u<e2 then b2:=true else b2:=false;
If b1 Or b2 then
d := MySign(Epsilom, xm-x);
End
Else begin
If x>=xm then
e := ia-x
Else
e := ib-x;
d := cgold*e;
end end
Else begin
If x>=xm then
e := ia-x
Else
Информация о работе Методи прямого пошуку для оптимізації унімодальних функцій якості без обмежень