Нелинейные ограничения

Несколько решателей оптимизации принимают нелинейные ограничения, включая fmincon, fseminf, fgoalattain, fminimax, и решатели Global Optimization Toolbox ga (Global Optimization Toolbox), gamultiobj (Global Optimization Toolbox), patternsearch (Global Optimization Toolbox), paretosearch (Global Optimization Toolbox), GlobalSearch (Global Optimization Toolbox), и MultiStart (Global Optimization Toolbox). Нелинейные ограничения позволяют вам ограничить решение любой областью, которая может быть описана в терминах сглаженных функций.

Нелинейные ограничения неравенства имеют вид c (x ) ≤ 0, где c является вектором ограничений, по одному компоненту для каждого ограничения. Точно так же нелинейные ограничения равенства имеют форму ceq ( x) = 0.

Примечание

Нелинейные функции ограничения должны вернуть обе c и ceq, функции неравенства и ограничения равенства, даже если они обе не существуют. Возврат пустой записи [] для несуществующего ограничения.

Например, предположим, что у вас есть следующие неравенства как ограничения:

x129+x2241,x2x121.

Запишите эти ограничения в файл функции следующим образом:

function [c,ceq] = ellipseparabola(x)
c(1) = (x(1)^2)/9 + (x(2)^2)/4 - 1;
c(2) = x(1)^2 - x(2) - 1;
ceq = [];
end
ellipseparabola возвращает пустую запись [] для ceq, нелинейная функция ограничения равенства. Кроме того, второе неравенство переписывается на ≤ 0 форму.

Минимизируйте функцию exp(x(1) + 2*x(2)) удовлетворяющее ellipseparabola ограничения.

fun = @(x)exp(x(1) + 2*x(2));
nonlcon = @ellipseparabola;
x0 = [0 0];
A = []; % No other constraints
b = [];
Aeq = [];
beq = [];
lb = [];
ub = [];
x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon)
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 =

   -0.2500   -0.9375

Включение градиентов в функции ограничений

Если вы предоставляете градиенты для c и ceq, решатель может запускаться быстрее и давать более надежные результаты.

Обеспечение градиента имеет другое преимущество. Решатель может достичь точки x таким образом x допустимо, но конечные различия вокруг x всегда приводят к недопустимой точке. В этом случае решатель может ошибиться или остановиться преждевременно. Предоставление градиента позволяет решателю продолжить.

Чтобы включить информацию о градиенте, запишите обусловленную функцию следующим образом:

function [c,ceq,gradc,gradceq] = ellipseparabola(x)
c(1) = x(1)^2/9 + x(2)^2/4 - 1;
c(2) = x(1)^2 - x(2) - 1;
ceq = [];

if nargout > 2
    gradc = [2*x(1)/9, 2*x(1); ...
             x(2)/2, -1];
    gradceq = [];
end

Смотрите Запись Скалярных Целевых Функций для получения информации об обусловленных функциях. Градиентная матрица имеет вид

gradci, j = [ <reservedrangesplaceholder0>(<reservedrangesplaceholder1>) /  <reservedrangesplaceholder0>].

Первый столбец градиентной матрицы связан с c(1), и второй столбец связан с c(2). Эта производная форма является транспонированием формы якобийцев.

Чтобы иметь решатель, использующий градиенты нелинейных ограничений, укажите, что они существуют при помощи optimoptions:

options = optimoptions(@fmincon,'SpecifyConstraintGradient',true);

Обязательно передайте структуру опций решателю:

[x,fval] = fmincon(@myobj,x0,A,b,Aeq,beq,lb,ub, ...
           @ellipseparabola,options)

Если у вас есть лицензия Symbolic Math Toolbox™, можно вычислить градиенты и Гессианы автоматически, как описано в разделе Вычислить градиенты и Гессианы Используя Symbolic Math Toolbox™.

Анонимные нелинейные функции ограничения

Нелинейные функции ограничения должны возвращать два выхода. Первый выход соответствует нелинейным неравенствам, а второй - нелинейным равенствам.

Анонимные функции возвращают всего один выход. Так как можно записать анонимную функцию как нелинейное ограничение?

The deal функция распределяет несколько выходов. Например, предположим, что у вас нелинейные неравенства

x129+x2241,x2x12-1.

Предположим, что у вас нелинейное равенство

x2=tanh(x1).

Напишите нелинейную функцию ограничения следующим образом.

c = @(x)[x(1)^2/9 + x(2)^2/4 - 1;
        x(1)^2 - x(2) - 1];
ceq = @(x)tanh(x(1)) - x(2);
nonlinfcn = @(x)deal(c(x),ceq(x));

Чтобы минимизировать функцию cosh(x1) + sinh(x2) удовлетворяющее ограничениям в nonlinfcn, использовать fmincon.

obj = @(x)cosh(x(1))+sinh(x(2));
opts = optimoptions(@fmincon,'Algorithm','sqp');
z = fmincon(obj,[0;0],[],[],[],[],[],[],nonlinfcn,opts)
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.
z = 2×1

   -0.6530
   -0.5737

Чтобы проверить, насколько хорошо полученная точка z удовлетворяет ограничениям, используйте nonlinfcn.

[cout,ceqout] = nonlinfcn(z)
cout = 2×1

   -0.8704
         0

ceqout = 0

z удовлетворяет всем ограничениям в пределах значения по умолчанию допуска ограничений ConstraintTolerance, 1e-6.

Для получения информации об анонимных целевых функциях см. «Цели анонимных функций».

См. также

| | (Global Optimization Toolbox) | (Global Optimization Toolbox) | (Global Optimization Toolbox) | (Global Optimization Toolbox)

Похожие темы