exponenta event banner

Использование всех типов ограничений

Этот пример представляет собой проблему нелинейной минимизации со всеми возможными типами ограничений. В примере градиенты не используются.

Проблема имеет пять переменных, x(1) через x(5). Целевая функция является многочленом в переменных.

f (x) = 6x2x5 + 7x1x3 + 3x22.

Целевая функция находится в локальной функции. myobj(x), которая вложена в функцию fullexample. Код для fullexample появляется в конце этого примера.

Нелинейные ограничения также являются полиномиальными выражениями.

x1-0.2x2x5≤71

0.9x3-x42≤67

3x22x5+3x12x3=20.875.

Нелинейные ограничения находятся в локальной функции myconstr(x), которая вложена в функцию fullexample.

Проблема имеет ограничения на x3 и x5.

0≤x3≤20, x5≥1.

Задача имеет линейное ограничение равенства x1 = 0 .3x2, которое можно записать как x1-0.3x2 = 0.

Проблема также имеет три линейных ограничения неравенства:

0.1x5≤x4x4≤0.5x50.9x5≤x3.

Представляют границы и линейные ограничения как матрицы и векторы. Код, который создает эти массивы, находится в fullexample функция. Как описано в fmincon Раздел «Входные аргументы», lb и ub векторы представляют зависимости

lb ≤x≤ ub.

Матрица A и вектор b представляют линейные ограничения неравенства

A*x b,

и матрица Aeq и вектор beq представляют линейные ограничения равенства

Aeq*x = b.

Звонить fullexample для решения задачи минимизации с учетом всех типов ограничений.

[x,fval,exitflag] = fullexample
Local minimum found that satisfies the constraints.

Optimization completed because the objective function is non-decreasing in 
feasible directions, to within the value of the optimality tolerance,
and constraints are satisfied to within the value of the constraint tolerance.
x = 5×1

    0.6114
    2.0380
    1.3948
    0.1572
    1.5498

fval = 37.3806
exitflag = 1

Значение флага выхода 1 указывает, что fmincon сходится к локальному минимуму, удовлетворяющему всем ограничениям.

Этот код создает fullexample функция, которая содержит вложенные функции myobj и myconstr.

function [x,fval,exitflag] = fullexample
x0 = [1; 4; 5; 2; 5];
lb = [-Inf; -Inf;  0; -Inf;   1];
ub = [ Inf;  Inf; 20; Inf; Inf];
Aeq = [1 -0.3 0 0 0];
beq = 0;
A = [0 0  0 -1  0.1
     0 0  0  1 -0.5
     0 0 -1  0  0.9];
b = [0; 0; 0];
opts = optimoptions(@fmincon,'Algorithm','sqp');
     
[x,fval,exitflag] = fmincon(@myobj,x0,A,b,Aeq,beq,lb,ub,...
                                  @myconstr,opts);

%---------------------------------------------------------
function f = myobj(x)

f = 6*x(2)*x(5) + 7*x(1)*x(3) + 3*x(2)^2;
end

%---------------------------------------------------------
function [c, ceq] = myconstr(x)

c = [x(1) - 0.2*x(2)*x(5) - 71
     0.9*x(3) - x(4)^2 - 67];
ceq = 3*x(2)^2*x(5) + 3*x(1)^2*x(3) - 20.875;
end
end

Связанные темы