- •Лабораторний практикум
- •Краматорськ 2009
- •Загальні вказівки
- •Методи одновимірної оптимізації. Знаходження глобального екстремуму функції методом послідовного рівномірного перебору (сканування)
- •Знаходження екстремуму унімодальної функції
- •Знаходження екстремуму функції методом послідовного рівномірного перебору з уточненням
- •Пошук всіх екстремумів функції
- •Завдання до лабораторної роботи
- •Метод дихотомії
- •Метод золотого перетину
- •Завдання до лабораторної роботи
- •Методика оптимізації функції методом найшвидшого спуску
- •Приклад мінімізації функції методом найшвидшого спуску
- •Завдання до лабораторної роботи
- •Загальні вказівки
- •Обчислення градієнту функції на еом
- •Алгоритм оптимізації методом найшвидшого спуску
- •Програмна реалізація методу найшвидшого спуску
- •Завдання до лабораторної роботи
- •Лабораторна робота 5
- •Багатовимірних задач оптимізації
- •Порядок виконання роботи
- •Загальні вказівки
- •Алгоритм методу прямого пошуку
- •Програмна реалізація методу прямого пошуку
- •Завдання до лабораторної роботи
- •Лабораторна робота 6
- •Багатовимірних задач оптимізації
- •Порядок виконання роботи
- •Загальні вказівки
- •Алгоритм методу випадкового пошуку з перерахунком
- •Програмна реалізації методу випадкового пошуку
- •Завдання до лабораторної роботи
- •Лабораторна робота 7
- •Програмування графічним методом
- •Порядок виконання роботи
- •Загальні вказівки
- •Методика розв’язання задачі лінійного програмування графічним методом
- •Приклади розв’язання задач лінійного програмування графічним методом
- •Завдання до лабораторної роботи
- •Продовження таблиці 15
- •Лабораторна робота 8
- •З використанням симплексних таблиць
- •Порядок виконання роботи
- •Загальні вказівки
- •Алгоритм симплексного методу
- •Приклад розв’язання лп-задачі симплексним методом
- •Завдання до лабораторної роботи
- •Лабораторна робота 9
- •Порядок виконання роботи
- •Загальні вказівки
- •Опис роботи програми simc (intsim)
- •Приклад моделювання та розв’язку лп-задачі за допомогою програми simc
- •Індивідуальні завдання до лабораторної роботи
- •Лабораторна робота 10 моделювання транспортних задач та їх
- •Порядок виконання роботи
- •Загальні вказівки
- •Побудова початкового(вихідного) опорного плану
- •Алгоритм методу потенціалів
- •Приклад моделювання та розв’язку т-задачі методом потенціалів
- •Завдання до лабораторної роботи
- •Лабораторна робота 11
- •Лабораторна робота 12
- •Загальні вказівки
- •Загальна методика розв’язання задачі методом динамічного програмування
- •Методика розв’язання задачі оптимального розподілу коштів на розширення виробництва методом динамічного програмування
- •Приклад розв’язання задачі оптимального розподілу коштів методом динамічного програмування
- •Завдання до лабораторної роботи
- •Продовження таблиці 36
- •Список рекомендованої літератури
- •Додаток а завдання до лабораторної роботи 9 Задача 1
- •Задача 2
- •Задача 3
- •Задача 4
- •Задача 5
- •Задача 6
- •Задача 7
- •Задача 8
- •Задача 9
- •Задача 10
- •Задача 11
- •Задача 12
- •Задача 13
- •Задача 14
- •Задача 15
- •Задача 16
- •Задача 17
- •Задача 18
- •Задача 19
- •Задача 20
- •Задача 21
- •Задача 22
- •Задача 23
- •Задача 24
- •Задача 25
- •84313, М. Краматорськ, вул. Шкадінова, 72.
Програмна реалізація методу прямого пошуку
Процедура ОРТ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 ітерації.
