Main Content

fmincon 솔버로 최적화 라이브 편집기 작업 사용

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

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

minxf(x)=x12+x22

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

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

이 문제의 시작점 x0은 x1 = 3 및 x2 = 1입니다.

최적화 라이브 편집기 작업 시작하기

탭의 파일 섹션에서 새 라이브 스크립트 버튼을 클릭하여 새 라이브 스크립트를 만듭니다.

New Live Script button

최적화 라이브 편집기 작업을 삽입합니다. 삽입 탭을 클릭한 다음 코드 섹션에서 작업 > 최적화를 선택합니다.

Insert Optimize Live Editor task

Optimize task in Live Editor: Choose between problem-based (recommended) and solver-based

이 예제에서는 솔버 기반 작업을 선택합니다.

View of the Optimize Live Task

이후에 문제 데이터 입력 시 사용하기 위해, 삽입 > 섹션 나누기를 선택합니다. 작업 위와 아래에 새 섹션이 나타납니다.

문제 데이터 입력하기

  1. 작업 맨 위에서부터 시작해 문제 유형과 제약 조건 유형을 입력합니다. 목적 함수 > 2차 버튼과 제약 조건 > 하한, 선형 부등식, 비선형 버튼을 클릭합니다. 작업에 표시되는 권장 솔버는 fmincon입니다.

  2. 목적 함수

    목적 함수가 단순해 익명 함수로 표현하기 좋습니다. 작업 위 섹션에 커서를 놓고 아래 코드를 입력합니다.

    fun = @(x)sum(x.^2);
  3. 하한

    이 문제에는 하한 x1 ≥ 0.5가 포함됩니다. 이 범위를 변수 lb로 표현합니다. 목적 함수를 정의하는 라인의 끝에 커서를 둔 상태에서 Enter 키를 누르고 하한을 지정하는 다음 코드를 입력합니다.

    lb = [0.5 -Inf];
  4. 초기점

    하한을 정의하는 라인의 끝에 커서를 둔 상태에서 Enter 키를 누르고 초기점을 설정하는 다음 코드를 입력합니다.

    x0 = [3,1];
  5. 선형 제약 조건

    초기점을 정의하는 라인의 끝에 커서를 둔 상태에서 Enter 키를 누르고 선형 제약 조건을 설정하는 다음 코드를 입력합니다.

    A = [-1,-1];
    b = -1;
  6. 섹션 실행하기

    맨 위 섹션에는 이제 5개의 파라미터가 포함되어 있습니다.

    Five lines of code defining initial parameters

    다음으로, 작업 공간에 파라미터를 변수로 배치하기 위해 섹션을 실행해야 합니다. 그렇게 하려면 대각선 줄무늬 표시줄이 있는 섹션의 맨 왼쪽 영역을 클릭하십시오. 이 영역을 클릭하면 줄무늬 표시줄이 실선 표시줄로 바뀌어 변수가 이제 작업 공간에 있음을 나타냅니다. (참고: Ctrl+Enter를 눌러 섹션을 실행할 수도 있습니다.)

  7. 문제 데이터 설정하기

    작업의 문제 데이터 선택 섹션에 변수를 입력합니다. 목적 함수를 지정하기 위해 목적 함수 > 함수 핸들을 선택하고 fun을 선택합니다.

  8. 초기점 x0을 설정합니다.

  9. 하한 > 작업 공간에서lb를 차례로 선택합니다.

  10. 선형 부등식 영역에서 선형 부등식 제약 조건 변수 Ab를 설정합니다.

  11. 이제 비선형 부등식 제약 조건을 지정합니다. 문제 데이터 선택 섹션에서 비선형 > 로컬 함수를 선택한 후 새로 만들기 버튼을 클릭합니다. 함수가 작업 아래의 새 섹션에 나타납니다. 나타나는 코드를 편집하여 다음 코드 라인이 포함되도록 합니다.

    function [c,ceq] = constraintFcn(x)
    % You can include commented code lines or not.
    % Be sure that just these uncommented lines remain:
    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 = [];
    end
  12. 문제 데이터 선택 섹션에서 constraintFcn 함수를 선택합니다.

  13. 진행률 모니터링하기

    작업의 진행률 표시 섹션에서 텍스트 표시 > 각 반복 시를 선택하면 솔버 진행률을 모니터링할 수 있습니다. 플롯에 대해 목적 함수 값을 선택합니다.

    다음과 같이 설정했습니다.

    fmincon solver, objective function handle fun, initial point x0, lower bounds lb, linear inequality constraints A and b, nonlinear local function constraintFcn, display each iteration, plot objective value

솔버 실행 및 결과 검토하기

솔버를 실행하려면 작업 창 오른쪽 상단에 있는 옵션 버튼을 클릭하고 섹션 실행을 선택합니다.

Run solver; keyboard equivalent is ctrl+enter

플롯은 별개의 Figure 창과 작업 출력 영역에 표시됩니다.

Plot showing 12 iterations and a final function value 2

해 변수가 반환되는 위치를 확인하려면 작업의 맨 위를 보십시오.

solution, objectiveValue = minimize fun using fmincon solver

최종점과 최종점에 연결된 목적 함수 값은 작업 공간의 solutionobjectiveValue 변수에 나타납니다. 작업 아래의 라이브 편집기 섹션에 다음 코드를 입력하여 이들 값을 확인합니다.

solution, objectiveValue

Ctrl+Enter를 눌러 섹션을 실행합니다.

solution = [1 1], objectiveValue = 2

참고 항목

|

관련 항목