Чисельне рішення оптимізаційних задач
2. Пакет оптимізації Optimization Toolbox
2.1. Функція fmincon
furincon — функція пошуку мінімуму скалярної функції багатьох змінних при наявності обмежень виду:
с(х) ≤0, ceq(x) = 0 ,
А х ≤ b, Aeq x = beq,
lb < х < ub
Функція записується у виглядах:
х = fmincon( fun, x0, A, b),
х = fmincon( fun, x0, A, b, Aeq, beq),
х = fmincon( fun, x0, А, b, Aeq, beq, lb, ub),
х = fmincon( fun, x0, A, b, Aeq, beq, lb, ub, nonlcon),
х = fmincon( fun, x0, A, b, Aeq, beq, lb, ub, nonlcon, options),
х = fmincon( fun, x0, A, b, Aeq, beq, lb, ub, nonlcon, opt1ons, Pl, P2, ...).
[x, fval] = fmincon(...) – повертається не тільки оптимальне значення векторного аргументу, але і значення цільової функції в точці мінімуму fval;
[x, fval, exitflag] = fmincon(…) – те ж, що і попередня функція, але повертається ще інформація про характер завершення обчислення exitflag;
[x, fval, exitflag, output] = fmincon(…) – те ж, що і попередня функція, але додатково повертається інформація про результати оптимізації (вихідна структура) output;
[x, fval, exitflag, output, lambda] = fmincon(...) – те ж, що і попередня функція, але повертаються ще множники Лагранжа lambda;
[x, fval, exitflag, output, lambda, grad] = fmincon(…) – те ж, що і попередня функція, але повертається ще й величина градієнта функції в точці мінімуму grad;
[x, fval, exitflag, output, lambda, grad, hessian] = fmincon(…) – те ж, що і попередня функція, але повертається ще й величина гессіана H функції в точці мінімуму.
Приклад.
Нехай потрібно знайти мінімум функції f(х) = - x1×x2×x3, при початковому значенні х = [10; 10; 10] і наявності обмежень:
0 ≤ x1 + 2 x2 + 2 x3 ≤ 72.
Розв’язок. Спочатку створимо М-файл, що визначає цільову функцію:
function f = myfun(x)
f =- x(1)*x(2)*x(3) ;
Потім запишемо обмеження у виді нерівностей:
- x1 - 2 x2 - 2 x3 ≤ 0
x1 + 2 x2+ 2 x3 ≤ 72,
або в матричній формі:
А ≤ b,
де: .
Тепер розв’язок представляється у такий спосіб:
» А = [-1 -2 -2; 1 2 2];
» b = [0; 72];
» x0 = [10; 10; 10]; % Початкові значення
» [x, fval] = fmincon('myfun', x0, A, b)
x =
24.0000
12.0000
12.0000
fval =
-3.4560e+003
Шрифти
Розмір шрифта
Колір тексту
Колір тла