exponenta event banner

Преобразование нелинейных зависимостей между surrogateopt Формы и другие формы решателя

Зачем преобразовывать формы ограничений?

Попробовать различные решатели, включая surrogateopt для задачи, которая имеет нелинейные ограничения неравенства, необходимо преобразовать форму, требуемую surrogateopt и форму, требуемую другими решателями.

Преобразовать из surrogateopt Структурная форма для других решателей

Целевая функция objconstr(x) для surrogateopt возвращает структуру. Fval поле содержит значение целевой функции, скаляр. Ineq содержит вектор значений функции ограничения. Решатель пытается сделать все значения в Ineq поле должно быть меньше или равно нулю. Положительные значения указывают на нарушение ограничения.

Другие решатели ожидают, что целевая функция вернет скалярное значение, а не структуру. Другие решатели также ожидают, что нелинейная функция ограничения вернет два выхода, c(x) и ceq(x), не структура, содержащая c(x).

Чтобы преобразовать surrogateopt функция objconstr(x) для использования в других решателях:

  • Задайте для целевой функции значение @(x)objconstr(x).Fval.

  • Задайте для функции нелинейных ограничений значение @(x)deal(objconstr(x).Ineq,[]).

Например,

function ff = objconstr(x)
ff.Fval = norm(x)^2;
ff.Ineq = norm(x - [5,8])^2 - 25;
end

Решение проблемы минимизации с ограничением с помощью objconstr, звонок surrogateopt.

lb = [-10,-20];
ub = [20,10];
sol = surrogateopt(@objconstr,lb,ub)
Surrogateopt stopped because it exceeded the function evaluation limit set by 
'options.MaxFunctionEvaluations'.

sol =

    2.3325    3.7711

Чтобы решить эту проблему, используйте fminconразбить цель и ограничение на отдельные функции. Включить ограничение нелинейного равенства как [] с помощью deal функция.

objfcn = @(x)objconstr(x).Fval;
nlcon = @(x)deal(objconstr(x).Ineq,[]);

Звонить fmincon с целевой функцией objfcn и нелинейная функция ограничения nlcon.

[solf,fvalf,eflag,output] = ...
    fmincon(objfcn,[0,0],[],[],[],[],lb,ub,nlcon)
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.

solf =

    2.3500    3.7600


fvalf =

   19.6602


eflag =

     1


output = 

  struct with fields:

         iterations: 7
          funcCount: 24
    constrviolation: 0
           stepsize: 2.0395e-05
          algorithm: 'interior-point'
      firstorderopt: 4.9651e-06
       cgiterations: 0
            message: '↵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.↵↵<stopping criteria details>↵↵Optimization completed: The relative first-order optimality measure, 6.602486e-07,↵is less than options.OptimalityTolerance = 1.000000e-06, and the relative maximum constraint↵violation, 0.000000e+00, is less than options.ConstraintTolerance = 1.000000e-06.↵↵'

Также можно использовать patternsearch или ga для решения проблемы с помощью того же преобразования.

Преобразовать из других решателей в surrogateopt Структурная форма

Если есть проблема, написанная в форме для других решателей, используйте packfcn функция преобразования целевых и нелинейных ограничений в структурную форму для surrogateopt. Если целевая функция является дескриптором функции @obj и функция нелинейных ограничений @nlconst, затем используйте целевую функцию objconstr для surrogateopt.

objconstr = packfcn(@obj,@nlconst);

В этом примере целевой функцией является функция Розенброка.

ros = @(x)100*(x(2) - x(1)^2)^2 + (1 - x(1))^2;

Задайте функцию ограничения, чтобы ограничить размещение решения внутри диска с радиусом 1/3 по центру в точке [1/3,1/3].

function [c,ceq] = circlecon(x)
c = (x(1)-1/3)^2 + (x(2)-1/3)^2 - (1/3)^2;
ceq = [];

Задайте границы -2 и 2 для каждого компонента.

lb = [-2,-2];
ub = [2,2];

Решить проблему с помощью patternsearch начиная с [0,0].

x0 = [0,0];
x = patternsearch(ros,x0,[],[],[],[],lb,ub,@circlecon)
Optimization terminated: mesh size less than options.MeshTolerance
 and constraint violation is less than options.ConstraintTolerance.

x =

    0.6523    0.4258

Преобразовать проблему для решения с помощью surrogateopt.

objconstr = packfcn(ros,@circlecon);
xs = surrogateopt(objconstr,lb,ub)
Surrogateopt stopped because it exceeded the function evaluation limit set by 
'options.MaxFunctionEvaluations'.

xs =

    0.6543    0.4284

См. также

|

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