Чисельне рішення оптимізаційних задач

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

Accessibility

Шрифти

Розмір шрифта

1

Колір тексту

Колір тла