Main Content

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

이 예제 스크립트는 최적화 또는 방정식 풀이에 솔버 기반 최적화 라이브 편집기 작업을 사용할 수 있도록 도와줍니다. 사용자의 고유 문제에 맞게 스크립트를 수정합니다.

이 스크립트는 비선형 제약 조건이 있는 비선형 최적화 문제를 풉니다.

파라미터 또는 데이터 포함하기

대개는 솔버에 전달할 데이터나 값이 있습니다. 입력 섹션(x0이 있는 위치)에 이러한 값을 놓고, 섹션 > 섹션 실행을 선택하거나 Control+Enter를 눌러 섹션을 실행합니다.

최적화를 위한 초기점 x0과 스케일 a를 설정합니다.

x0 = [2;1];
a = 100;

계속 진행하기 전에 이 섹션을 실행하여 x0 값과 문제 데이터들을 작업 공간에 배치합니다.

최적화 라이브 편집기 작업

일반적으로 라이브 편집기 탭에서 작업 > 최적화를 선택하거나 삽입 탭에서 작업 > 최적화를 선택하여 스크립트에 최적화 라이브 편집기 작업을 만듭니다. 그러면 다음과 같은 선택 옵션이 표시됩니다. (이는 그림일 뿐이며 실제 작업이 아닙니다.)

optimizelet_choose.png

솔버 기반 작업을 가져오려면 솔버 기반을 클릭하십시오.

다음 솔버 기반 작업에는 목적 함수와 비선형 제약 조건 함수가 포함되어 있습니다. 이러한 함수를 변경하려면 작업 아래에 있는 함수 목록을 편집하십시오.

제약 조건을 변경하려면 적절한 제약 조건 유형을 선택하고 입력 상자에 값을 입력하십시오. 위의 x0이 포함된 섹션에 값을 입력하고 섹션을 실행하여 값을 작업 공간에 넣어야 할 수도 있습니다.

왼쪽에 있는 세로 줄무늬 막대를 클릭하거나, 실행 또는 섹션 > 섹션 실행을 선택하거나, Control+Enter를 눌러서 작업을 실행합니다.

Live Task

{"String":"Figure Optimization Plot Function contains an axes object. The axes object with title Best Function Value: 0.019972 contains 2 objects of type line. These objects represent Best function value, Best function value (infeasible).","Tex":[],"LaTex":[]}

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.

결과

Optimize는 작업 공간 변수 solution에 해를 저장하고, 해에서 계산된 목적 함수 값을 작업 공간 변수 objectiveValue에 저장합니다. Optimize 작업의 맨 위에서 이러한 변수 이름을 확인하고 수정할 수 있습니다.

이러한 변수를 확인합니다.

solution
solution = 2×1

    1.1413
    1.3029

objectiveValue
objectiveValue = 0.0200

해에서의 비선형 제약 조건 함수 값을 확인합니다.

[ccons,ceqcons] = constraintFcn(solution)
ccons = 1×2

   -2.0000   -0.0000

ceqcons =

     []

헬퍼 함수 — 로컬 함수

다음 코드는 목적 함수를 생성합니다. 사용자의 문제에 맞게 이 코드를 수정합니다.

function f = objectiveFcn(x,a)
f = a*(x(2) - x(1)^2)^2 + (1 - x(1))^2;
end

다음 코드는 제약 조건 함수를 생성합니다. 사용자의 문제에 맞게 이 코드를 수정합니다.

function [c,ceq] = constraintFcn(x)
c(1) = x(1)^2 + x(2)^2 - 5;
c(2) = 3 - x(1)^2 - x(2)^2;
ceq = [];  % No equality constraints
end

참고 항목

관련 항목