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

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

Проблема имеет пять переменных, 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.1x5x4x40.5x50.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

Похожие темы