Как использовать все типы ограничений

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

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

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

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

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

x1-0.2x2x571

0.9x3-x4267

3x22x5+3x12x3=20.875.

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

Существуют границы на x3 и x5.

0x320, x51.

Существует линейное ограничение равенства x1=0.3x2, который можно записать как x1-0.3x2=0.

Существует три линейных ограничения неравенства:

0.1x5x4

x40.5x5

0.9x5x3.

Представляйте границы и линейные ограничения как матрицы и векторы. Код, который создает эти массивы, находится в fullexample функция. Как описано в fmincon Раздел Input Arguments, 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

Похожие темы