Main Content

OptimizationExpression

최적화 변수를 사용한 산술 표현식 또는 함수 표현식

설명

OptimizationExpression은 최적화 변수를 사용한 산술 표현식 또는 함수 표현식입니다. OptimizationExpression은 목적 함수로 사용하거나, 제약 조건 또는 방정식에서 부등식 또는 등식의 일부로 사용할 수 있습니다.

전체 워크플로는 문제 기반 최적화 워크플로 또는 방정식 풀이를 위한 문제 기반 워크플로 항목을 참조하십시오.

생성

OptimizationVariable 객체에 대해 연산을 수행하여 최적화 표현식을 만듭니다. 최적화 변수의 거듭제곱, 인덱싱 및 결합을 포함한 MATLAB® 산술 연산을 사용하여 표현식을 만듭니다. Supported Operations for Optimization Variables and Expressions 항목과 예제 항목을 참조하십시오.

또한 fcn2optimexpr을 사용하여 최적화 변수에 적용된 MATLAB 함수에서 최적화 표현식을 만들 수도 있습니다. 예제는 비선형 함수에서 표현식 만들기 항목과 문제 기반 비선형 최적화 항목을 참조하십시오.

optimexpr을 사용하여 빈 최적화 표현식을 만듭니다. 그런 다음, 일반적으로 루프에서 표현식을 채웁니다. 예제는 루프를 사용해 최적화 표현식 만들기 항목과 optimexpr 함수 도움말 페이지를 참조하십시오.

표현식을 생성했으면 목적 함수로 사용하거나 제약 조건 또는 방정식의 일부로 사용할 수 있습니다. 예제는 solve 함수 도움말 페이지를 참조하십시오.

속성

모두 확장

인덱스 이름으로, string형 또는 문자형 벡터로 구성된 셀형 배열로 지정됩니다. 인덱스 이름 사용에 관한 자세한 내용은 Named Index for Optimization Variables 항목을 참조하십시오.

데이터형: cell

읽기 전용 속성입니다.

객체의 최적화 변수로, OptimizationVariable 객체의 구조체로 지정됩니다.

데이터형: struct

객체 함수

evaluate최적화 표현식 실행
showoptimization 객체에 대한 정보 표시
writeSave optimization object description

예제

모두 축소

최적화 변수에 대한 산술 연산으로 최적화 표현식을 만듭니다.

x = optimvar('x',3,2);
expr = sum(sum(x))
expr = 
  Linear OptimizationExpression

    x(1, 1) + x(2, 1) + x(3, 1) + x(1, 2) + x(2, 2) + x(3, 2)

f = [2,10,4];
w = f*x;
show(w)
(1, 1)

  2*x(1, 1) + 10*x(2, 1) + 4*x(3, 1)

(1, 2)

  2*x(1, 2) + 10*x(2, 2) + 4*x(3, 2)

최적화 변수를 전치하여 최적화 표현식을 만듭니다.

x = optimvar('x',3,2);
y = x'
y = 
  2x3 Linear OptimizationExpression array with properties:

    IndexNames: {{}  {}}
     Variables: [1x1 struct] containing 1 OptimizationVariable

  See expression formulation with show.

최적화 배열의 요소를 참조하는 것만으로는 표현식이 생성되지 않으며, 대신 원래 변수를 참조하는 최적화 변수가 생성됩니다. 이를 확인하기 위해 x의 첫 번째 행과 세번째 행을 포함하는 변수 w를 만듭니다. 여기서 w는 최적화 표현식이 아니라 최적화 변수입니다.

w = x([1,3],:)
w = 
  2x2 OptimizationVariable array with properties:

  Read-only array-wide properties:
          Name: 'x'
          Type: 'continuous'
    IndexNames: {{}  {}}

  Elementwise properties:
    LowerBound: [2x2 double]
    UpperBound: [2x2 double]

  Reference to a subset of OptimizationVariable with Name 'x'.

  See variables with show.
  See bounds with showbounds.

최적화 변수를 결합하여 최적화 표현식을 만듭니다.

y = optimvar('y',4,3);
z = optimvar('z',4,7);
f = [y,z]
f = 
  4x10 Linear OptimizationExpression array with properties:

    IndexNames: {{}  {}}
     Variables: [1x1 struct] containing 2 OptimizationVariables

  See expression formulation with show.

optimexpr을 사용하여 빈 표현식을 만든 다음 루프에서 표현식을 채웁니다.

y = optimvar('y',6,4);
expr = optimexpr(3,2);
for i = 1:3
    for j = 1:2
        expr(i,j) = y(2*i,j) - y(i,2*j);
    end
end
show(expr)
(1, 1)

  y(2, 1) - y(1, 2)

(2, 1)

  y(4, 1) - y(2, 2)

(3, 1)

  y(6, 1) - y(3, 2)

(1, 2)

  y(2, 2) - y(1, 4)

(2, 2)

  y(4, 2) - y(2, 4)

(3, 2)

  y(6, 2) - y(3, 4)

목적 함수에 대응하는 최적화 표현식을 만듭니다.

f(x)=x2/10+exp(-exp(-x)).

x = optimvar('x');
f = x^2/10 + exp(-exp(-x))
f = 
  Nonlinear OptimizationExpression

    ((x.^2 ./ 10) + exp((-exp((-x)))))

다음과 같이 점 x0 = 0에서 시작하여 fun을 최소화하는 점을 찾습니다.

x0 = struct('x',0);
prob = optimproblem('Objective',f);
[sol,fval] = solve(prob,x0)
Solving problem using fminunc.

Local minimum found.

Optimization completed because the size of the gradient is less than
the value of the optimality tolerance.
sol = struct with fields:
    x: -0.9595

fval = 0.1656

f가 지원되는 함수가 아닌 경우 fcn2optimexpr을 사용하여 이 함수를 변환합니다. Supported Operations for Optimization Variables and Expressions 항목과 Convert Nonlinear Function to Optimization Expression 항목을 참조하십시오.

f = @(x)x^2/10 + exp(-exp(-x));
fun = fcn2optimexpr(f,x)
fun = 
  Nonlinear OptimizationExpression

    ((x.^2 ./ 10) + exp((-exp((-x)))))

prob = optimproblem('Objective',fun);
[sol,fval] = solve(prob,x0)
Solving problem using fminunc.

Local minimum found.

Optimization completed because the size of the gradient is less than
the value of the optimality tolerance.
sol = struct with fields:
    x: -0.9595

fval = 0.1656

Copyright 2018–2020 The MathWorks, Inc.

두 변수에 최적화 표현식을 만듭니다.

x = optimvar('x',3,2);
y = optimvar('y',1,2);
expr = sum(x,1) - 2*y;

점에서 표현식을 실행합니다.

xmat = [3,-1;
    0,1;
    2,6];
sol.x = xmat;
sol.y = [4,-3];
val = evaluate(expr,sol)
val = 1×2

    -3    12

세부 정보

모두 확장

버전 내역

R2017b에 개발됨