Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
MMIO Laboratornye_Raboty.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
1.54 Mб
Скачать

Програмна реалізація методу прямого пошуку

Процедура ОРТPOISK, складена відповідно до описаного алгоритму на мові Паскаль, має вигляд

PROCEDURE OPtpoisk(n,m,kod:integer;

delta,eps:real; xo:artype; VAR xb:artype;

var yopt:real; var ip:integer; f:funop);

LABEL 6,7,10;

VAR x1,x2,x3 : artype;

d,wo,y1,y2,y3 : real; i,l : integer;

procedure out(x:artype; y:real);

var i:integer; c:char;

begin

for i:=1 to n do

write(' x',i,'=',x[i]:8:5,' ');

writeln(' f=',y:9:6);

c:=readkey;

end;

begin

d:=delta; wo:=f(xo); ip:=0;

if kod in [0,1] then out(xo,wo);

xb:=xo;

10: poisk(n,xb,d,x1,y1,l,f);

ip:=ip+1;

if l=0 then goto 6;

7: for i:=1 to n do

x2[i]:=2*x1[i]-xb[i];

y2:=f(x2);

poisk(n,x2,d,x3,y3,l,f); ip:=ip+1;

if ip>m then begin

WRITELN('ЧИСЛО ІТЕРАЦІЙ > ',M,' МІНІМУМ НЕ ЗНАЙДЕНИЙ !!!');

xb:=x3; yopt:=f(xb);

exit end;

if y3<y1 then begin

xb:=x1; wo:=f(xb);

if kod=1 then out(xb,wo);

x1:=x3; y1:=y3;

goto 7 end

else begin

xb:=x1; wo:=f(xb);

if kod=1 then

out(xb,wo);

goto 10 end;

6: if d>=eps then

begin d:=d/5;

goto 10 end

else yopt:=f(xb);

end;

Формальні параметри процедури мають наступні значення:

N - розмірність вектора параметрів що оптимізуються X=(x1,...,xn);

M - максимальна кількість ітерацій;

KOD - код друку проміжних результатів обчислень, приймає наступні значення:

0 - друкуються координати початкової точки Х0 і f(X0);

1 - друкуються координати точок ХБ [формула (17)] і f(XБ) у цих точках, інші значення - друку немає;

DELTA - початковий крок зміни координат точки Х;

EPS - задана додатна константа, що визначає кінець пошуку і точність оптимізації;

XO - вхідний масив розмірності N типу ARTYPE, що містить координати початкової точки X0=(x10,...,xn0);

XB - вихідний масив розмірності N типу ARTYPE, що містить координати оптимальної точки X*;

YOPT - оптимальне значення функції що мінімізується;

IP - отримана кількість ітерацій;

F - цільова функція що оптимізується типу FUNOP у програмі представлена так

FUNCTION F(X:artype):REAL;

BEGIN

F:=f(x[1],...,x[n]);

END;

У головній програмі необхідно описати типи:

ARTYPE = ARRAY[1..N] OF REAL;

FUNOP = FUNCTION(XI:artype):REAL;

У процедурі ОРТPOISK для пошуку напрямку зменшення функції що мінімізується, згідно п.п. 3 і 5 алгоритму, використовується процедура POISK в такому виді

PROCEDURE POISK(n:integer; zb:artype; delta:real;

var z1:artype; var w:real; var l:integer; f:funop);

VAR z:artype; i:integer; y : real;

BEGIN

w:=f(zb); z:=zb;

z1:=zb; l:=0;

FOR I:=1 TO N DO

BEGIN

z[i]:=zb[i]+delta;

y:=f(z);

if y<w then

begin

z1[i]:=z[i];

l:=l+1; w:=y

end

else begin

z[i]:=zb[i]-delta;

y:=f(z);

if y<w then

begin

z1[i]:=z[i];

l:=l+1; w:=y

end

end; end;

w:=f(z1);

END;

Формальні параметри процедури POISK:

N - розмірність вектора параметрів Z що оптимізуються;

ZB - вхідний масив розмірності N типу ARTYPE, що містить значення координат базисної точки;

DELTA - крок зміни координат точки Z;

Z1 - вихідний масив розмірності N типу ARTYPE, що містить значення координат точки Z1, відповідно до етапу 3 алгоритму;

W - значення функції в точці Z1;

L - кількість значень функції f(Z), таких, що f(Z)<f(ZB), відповідно до етапу 3 алгоритму;

F - цільова функція типу FUNOP що оптимізується.

У підпрограмі ОРТPOISK передбачений підрахунок кількості звертань до процедури POISK (кількість ітерацій IP). Якщо IP>M, то відбувається вихід із програми і друкується повідомлення

Кількість ітерацій > М Мінімум не знайдений !!!

Для проведення обчислень по підпрограмі ОРТPOISK раціонально вибирати початковий крок зміни координат точки DELTA у межах 0,5-2, константу EPS, що визначає точність оптимізації, рівну 10-4 - 10-5, максимальна кількість ітерацій M  100.

Приклад. Знайти мінімум функції

f(x1,x2,x3)=3(x1-4)2 +50(x2-3)2 +16(x1-x3)2 +12 (19)

методом прямого пошуку, вибравши початкову точку X0=(1;1;1).

Оптимізація функції (19) була проведена при наступних вихідних даних:

M=100, DELTA=1, EPS=10-5, KOD=1.

В результаті мінімізації отримано такі оптимальні значення:

x =4,0; x =3,0; x =4,0; f*=12,0.

Оптимізація виконана за 62 ітерації.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]