Приложение оптимизации с решателем fmincon

В этом примере показано, как использовать приложение Оптимизации с fmincon решатель, чтобы минимизировать уравнение второй степени к линейным и нелинейным ограничениям и границам.

Примечание

Приложение Оптимизации предупреждает, что будет удалено в будущем релизе.

Считайте задачу нахождения [x 1, x 2], который решает

minxf(x)=x12+x22

удовлетворяющее ограничениям

0.5x1(связанный)x1x2+10(линейное неравенство)x12x22+109x12x22+90x12+x20x22+x10}(нелинейное неравенство)

Начальным приближением для этой проблемы является x 1 = 3 и x 2 = 1.

Шаг 1: Запишите файл objecfun.m для целевой функции.

function f = objecfun(x)
f = x(1)^2 + x(2)^2;

Шаг 2: Запишите файл nonlconstr.m для нелинейных ограничений.

function [c,ceq] = nonlconstr(x)
c = [-x(1)^2 - x(2)^2 + 1;
     -9*x(1)^2 - x(2)^2 + 9;
     -x(1)^2 + x(2);
     -x(2)^2 + x(1)];
ceq = [];

Шаг 3: Настройте и запустите проблему с приложением Оптимизации.

  1. Введите optimtool в Командном окне, чтобы открыть приложение Оптимизации.

  2. Выберите fmincon от выбора решателей и изменения поле Algorithm к Active set.

  3. Введите @objecfun в поле Objective function, чтобы вызвать objecfun.m файл.

  4. Введите [3;1] в поле Start point.

  5. Задайте ограничения.

    • Установите связанный 0.5x 1 путем ввода [0.5,-Inf] в поле Lower. -Inf запись означает, что нет никакой нижней границы на x 2.

    • Установите линейное ограничение неравенства путем ввода [-1 -1] в поле A и вводят -1 в поле b.

    • Установите нелинейные ограничения путем ввода @nonlconstr в поле Nonlinear constraint function.

  6. В панели Options расширьте опцию Display to command window при необходимости и выберите Iterative показать информацию об алгоритме в Командном окне для каждой итерации.

  7. Нажмите кнопку Start как показано в следующем рисунке.

  8. Когда алгоритм останавливается под Run solver and view results, следующая информация отображена:

    • Значение Current iteration, когда отключенный алгоритм, который для этого примера является 7.

    • Окончательное значение целевой функции, когда алгоритм остановился:

      Objective function value: 2.0000000268595803
    • Сообщение завершения алгоритма:

      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.
    • Конечная точка для этого примера является

          1
          1	
  9. В Командном окне информация об алгоритме отображена для каждой итерации:

                                    Max     Line search  Directional  First-order 
     Iter F-count        f(x)   constraint   steplength   derivative   optimality Procedure 
        0      3           10            2                                         Infeasible start point
        1      6      4.84298      -0.1322            1        -5.22         1.74   
        2      9       4.0251     -0.01168            1        -4.39         4.08  Hessian modified twice  
        3     12      2.42704     -0.03214            1        -3.85         1.09   
        4     15      2.03615    -0.004728            1        -3.04        0.995  Hessian modified twice  
        5     18      2.00033   -5.596e-05            1        -2.82       0.0664  Hessian modified twice  
        6     21            2   -5.326e-09            1        -2.81     0.000522  Hessian modified twice  
    Active inequalities (to within options.ConstraintTolerance = 1e-06):
      lower      upper     ineqlin   ineqnonlin
                                         3
                                         4
    
    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.

Похожие темы