Main Content

OptimizationExpression

最適化変数に関する算術式または関数式

説明

OptimizationExpression は、最適化変数に関する算術式または関数式です。OptimizationExpression は、目的関数として使用するか、制約または方程式における不等式または等式の一部として使用します。

ヒント

完全なワークフローについては、問題ベースの最適化ワークフローまたは方程式を解くための問題ベースのワークフローを参照してください。

作成

OptimizationVariable オブジェクトに対して演算を実行することで、最適化式を作成します。標準の MATLAB® 演算 (べき乗を含む)、インデックス付け、および最適化変数の連結を使用して、式を作成します。詳細については、最適化変数および式でサポートされる演算を参照してください。

fcn2optimexpr を使用して、最適化変数に適用された MATLAB 関数から最適化式を作成することもできます。例については、非線形関数からの式の作成問題ベースの非線形最適化を参照してください。

optimexpr を使用して空の最適化式を作成します。通常は、その後、ループでその式に入力します。例については、ループによる最適化式の作成および optimexpr の関数リファレンス ページを参照してください。

式を作成してから、その式を目的関数として使用するか、制約または方程式の一部として使用します。例については、solve の関数リファレンス ページを参照してください。

プロパティ

すべて展開する

インデックスの名前。string の cell 配列または文字ベクトルを指定します。インデックス名の使用法の詳細については、最適化変数の名前付きインデックスを参照してください。

データ型: cell

この プロパティ は読み取り専用です。

オブジェクトの最適化変数。OptimizationVariable オブジェクトの構造体として指定します。

データ型: struct

オブジェクト関数

evaluate最適化式または問題に含まれる目的関数と制約の評価
show最適化オブジェクトの情報表示
write最適化オブジェクトの説明の保存

すべて折りたたむ

最適化変数に対する算術演算によって最適化式を作成します。

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 の 1 行目と 3 行目で変数 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 を使用してその関数を変換します。詳細については、最適化変数および式でサポートされる演算非線形関数から最適化式への変換を参照してください。

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.

2 変数の最適化式を作成します。

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 で導入

すべて展開する