이 페이지의 최신 내용은 아직 번역되지 않았습니다. 최신 내용은 영문으로 볼 수 있습니다.

fmincon 솔버를 사용하는 최적화 앱

이 예제에서는 fmincon 솔버와 함께 최적화 앱을 사용하여 선형 및 비선형 제약 조건과 범위가 적용된 2차 함수를 최소화하는 방법을 보여줍니다.

참고

최적화 앱은 향후 릴리스에서 제거될 예정입니다.

다음 식의 해가 되는 [x1, x2]를 구하는 문제가 있다고 가정하겠습니다.

minxf(x)=x12+x22

여기에는 다음 제약 조건이 적용됩니다.

0.5x1(bound)x1x2+10(linear inequality)x12x22+109x12x22+90x12+x20x22+x10}(nonlinear inequality)

이 문제의 시작 추측값은 x1 = 3 및 x2 = 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. 목적 함수(Objective function) 필드에 @objecfun을 입력하여 objecfun.m 파일을 호출합니다.

  4. 시작점(Start point) 필드에 [3;1]을 입력합니다.

  5. 제약 조건을 정의합니다.

    • 하한(Lower limit) 필드에 [0.5,-Inf]를 입력하여 범위 0.5 ≤ x1을 설정합니다. -Inf 항목은 x2에 하한이 없음을 의미합니다.

    • A 필드에 [-1 -1]을 입력하여 선형 부등식 제약 조건을 설정하고 b 필드에 -1을 입력합니다.

    • 비선형 제약 조건 함수(Nonlinear constraint function) 필드에 @nonlconstr을 입력하여 비선형 제약 조건을 설정합니다.

  6. 옵션(Options) 창에서, 필요한 경우 명령 창에 표시(Display to Command Window) 옵션을 확장하고 모든 반복(Iterations)을 선택하여 각 반복에 대해 명령 창에 알고리즘 정보를 표시합니다.

  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 default value of the function tolerance,
      and constraints are satisfied to within the default 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-005       1      -2.82     0.0664  Hessian modified twice  
       6    21         2  -5.327e-009       1      -2.81   0.000522  Hessian modified twice  
    
    Local minimum found that satisfies the constraints.
    
    Optimization completed because the objective function is non-decreasing in 
    feasible directions, to within the default value of the function tolerance,
    and constraints are satisfied to within the default value of the constraint tolerance.
    
    Active inequalities (to within options.ConstraintTolerance = 1e-006):
      lower      upper     ineqlin   ineqnonlin
                                         3
                                         4

관련 항목