Main Content

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

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

이 스크립트는 다음과 같은 방식으로 비선형 제약 조건이 있는 비선형 최적화 문제를 풉니다.

rosenbrock(x,y,a)=log(1+a(y-x2)2+(1-x)2)을 최소화합니다. 여기에는 제약 조건 x2+y21이 적용됩니다. 여기서 이고 초기점 x0x=-2,y=2 값을 a=100가집니다. 또한 범위 -3x3, -2y9를 적용합니다.

목적 함수의 코드는 이 스크립트의 마지막 부분에 나와 있습니다.

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

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

최적화를 위한 초기점 구성요소 x0xx0y, 그리고 스케일 a를 설정합니다.

x0x = -2;
x0y = 2;
a = 100;

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

최적화 라이브 편집기 작업

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

optimizelet_choose.png

문제 기반 작업을 가져오려면 문제 기반(권장)을 클릭하십시오.

다음 문제 기반 작업에는 변수, 목적 함수 및 제약 조건이 채워져 있습니다. 이를 사용자의 문제에 맞게 수정하거나 있는 그대로 실행하여 작업이 어떻게 동작하는지 확인하십시오. 문제를 수정하려면 작업 맨 아래에 있는 문제 정의 버튼을 클릭하십시오. 작업을 실행하려면 작업 맨 아래에 있는 문제 풀기 버튼을 클릭하십시오.

Live Task
  OptimizationProblem : 

	Solve for:
       x, y

	minimize :
       log(((1 + (100 .* (y - x.^2).^2)) + (1 - x).^2))


	subject to :
       (x.^2 + y.^2) <= 1

	variable bounds:
       -3 <= x <= 3

       -2 <= y <= 9
Solving problem using fmincon.

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.
solution = struct with fields:
    x: 0.7864
    y: 0.6177

reasonSolverStopped = 
    OptimalSolution

objectiveValue = 0.0447

결과 해석하기

이 작업은 solve를 호출합니다. 그러면 fmincon이 호출되어 문제를 풉니다. 작업 맨 위에서는 해가 solution 구조체로 반환되었음을 보여줍니다. 보고된 해 x = 0.7864y = 0.6177은 다음 계산에서 볼 수 있듯이 제약 조건 x2+y21을 충족합니다.

solution.x^2 + solution.y^2                                     
ans = 1.0000

솔버가 중지되면 종료 상황 OptimalSolution을 보고합니다. 해당 상황을 해석하려면 fmincon 솔버의 exitflag 출력 인수 항목을 읽어 보십시오. 설명에 "1차 최적성 측정값이 options.OptimalityTolerance보다 작고 최대 제약 조건 위반 값이 options.ConstraintTolerance보다 작습니다."라고 나와 있습니다. 즉, 해가 실현 가능한 국소 최솟값입니다.

해에서 계산된 목적 함수 값은 0.0457입니다. 이는 실현가능점 중에서 가장 작은 목적 함수 값입니다.

헬퍼 함수

다음 코드는 rosenbrock 헬퍼 함수를 생성합니다.

function objective = rosenbrock(x,y,a)
% This function should return a scalar representing an optimization objective.

% Example: Concession stand profit
% revenue = 3*soda + 5*popcorn + 2*candy;
% cost = 1*soda + 2*popcorn + 0.75*candy;
% objective = revenue - cost; % profit

% Edit the lines below with your calculations.
objective = log(1 + a*(y - x^2)^2 + (1 - x)^2);
end

참고 항목