Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

optimoptions

最適化オプションの作成

説明

options = optimoptions(SolverName)SolverName ソルバーの一連の既定オプションを返します。

options = optimoptions(SolverName,Name,Value) は、1 つ以上の名前と値のペアの引数を使用して設定したパラメーターが指定された options を返します。

options = optimoptions(oldoptions,Name,Value) は、名前付きパラメーターを指定値で変更して oldoptions のコピーを返します。

options = optimoptions(SolverName,oldoptions)SolverName ソルバーの既定オプションを返し、oldoptions の該当するオプションを options にコピーします。

options = optimoptions(prob) は、最適化問題または方程式問題 prob について一連の既定オプションを返します。

options = optimoptions(prob,Name,Value) は、1 つ以上の名前と値のペアの引数を使用して設定したパラメーターが指定されたオプションを返します。

すべて折りたたむ

fmincon ソルバーの既定のオプションを作成します。

options = optimoptions('fmincon')
options = 
  fmincon options:

   Options used by current Algorithm ('interior-point'):
   (Other available algorithms: 'active-set', 'sqp', 'sqp-legacy', 'trust-region-reflective')

   Set properties:
     No options set.

   Default properties:
                    Algorithm: 'interior-point'
           BarrierParamUpdate: 'monotone'
          ConstraintTolerance: 1.0000e-06
                      Display: 'final'
        EnableFeasibilityMode: 0
     FiniteDifferenceStepSize: 'sqrt(eps)'
         FiniteDifferenceType: 'forward'
         HessianApproximation: 'bfgs'
                   HessianFcn: []
           HessianMultiplyFcn: []
                  HonorBounds: 1
       MaxFunctionEvaluations: 3000
                MaxIterations: 1000
               ObjectiveLimit: -1.0000e+20
          OptimalityTolerance: 1.0000e-06
                    OutputFcn: []
                      PlotFcn: []
                 ScaleProblem: 0
    SpecifyConstraintGradient: 0
     SpecifyObjectiveGradient: 0
                StepTolerance: 1.0000e-10
          SubproblemAlgorithm: 'factorization'
                     TypicalX: 'ones(numberOfVariables,1)'
                  UseParallel: 0

   Options not used by current Algorithm ('interior-point')
   Default properties:
    FunctionTolerance: 1.0000e-06


fmincon のオプションを、使用するアルゴリズムが sqp、反復回数が 1,500 回以下になるように設定します。

options = optimoptions(@fmincon,'Algorithm','sqp','MaxIterations',1500)
options = 
  fmincon options:

   Options used by current Algorithm ('sqp'):
   (Other available algorithms: 'active-set', 'interior-point', 'sqp-legacy', 'trust-region-reflective')

   Set properties:
                    Algorithm: 'sqp'
                MaxIterations: 1500

   Default properties:
          ConstraintTolerance: 1.0000e-06
                      Display: 'final'
     FiniteDifferenceStepSize: 'sqrt(eps)'
         FiniteDifferenceType: 'forward'
       MaxFunctionEvaluations: '100*numberOfVariables'
               ObjectiveLimit: -1.0000e+20
          OptimalityTolerance: 1.0000e-06
                    OutputFcn: []
                      PlotFcn: []
                 ScaleProblem: 0
    SpecifyConstraintGradient: 0
     SpecifyObjectiveGradient: 0
                StepTolerance: 1.0000e-06
                     TypicalX: 'ones(numberOfVariables,1)'
                  UseParallel: 0

   Options not used by current Algorithm ('sqp')
   Default properties:
       BarrierParamUpdate: 'monotone'
    EnableFeasibilityMode: 0
        FunctionTolerance: 1.0000e-06
     HessianApproximation: 'not applicable'
               HessianFcn: []
       HessianMultiplyFcn: []
              HonorBounds: 1
      SubproblemAlgorithm: 'factorization'


既存のオプションを新しい値で更新します。

lsqnonlin ソルバーのオプションを、使用するアルゴリズムが levenberg-marquardt、関数評価回数が 1,500 回以下になるように設定します。

oldoptions = optimoptions(@lsqnonlin,'Algorithm','levenberg-marquardt',...
    'MaxFunctionEvaluations',1500)
oldoptions = 
  lsqnonlin options:

   Options used by current Algorithm ('levenberg-marquardt'):
   (Other available algorithms: 'interior-point', 'trust-region-reflective')

   Set properties:
                   Algorithm: 'levenberg-marquardt'
      MaxFunctionEvaluations: 1500

   Default properties:
                     Display: 'final'
    FiniteDifferenceStepSize: 'sqrt(eps)'
        FiniteDifferenceType: 'forward'
           FunctionTolerance: 1.0000e-06
               MaxIterations: 400
                   OutputFcn: []
                     PlotFcn: []
    SpecifyObjectiveGradient: 0
               StepTolerance: 1.0000e-06
                    TypicalX: 'ones(numberOfVariables,1)'
                 UseParallel: 0

   Options not used by current Algorithm ('levenberg-marquardt')
   Default properties:
           BarrierParamUpdate: 'monotone'
          ConstraintTolerance: 1.0000e-06
          JacobianMultiplyFcn: []
          OptimalityTolerance: 1.0000e-06
    SpecifyConstraintGradient: 0
          SubproblemAlgorithm: 'factorization'


MaxFunctionEvaluations を 2000 に増やします。

options = optimoptions(oldoptions,'MaxFunctionEvaluations',2000)
options = 
  lsqnonlin options:

   Options used by current Algorithm ('levenberg-marquardt'):
   (Other available algorithms: 'interior-point', 'trust-region-reflective')

   Set properties:
                   Algorithm: 'levenberg-marquardt'
      MaxFunctionEvaluations: 2000

   Default properties:
                     Display: 'final'
    FiniteDifferenceStepSize: 'sqrt(eps)'
        FiniteDifferenceType: 'forward'
           FunctionTolerance: 1.0000e-06
               MaxIterations: 400
                   OutputFcn: []
                     PlotFcn: []
    SpecifyObjectiveGradient: 0
               StepTolerance: 1.0000e-06
                    TypicalX: 'ones(numberOfVariables,1)'
                 UseParallel: 0

   Options not used by current Algorithm ('levenberg-marquardt')
   Default properties:
           BarrierParamUpdate: 'monotone'
          ConstraintTolerance: 1.0000e-06
          JacobianMultiplyFcn: []
          OptimalityTolerance: 1.0000e-06
    SpecifyConstraintGradient: 0
          SubproblemAlgorithm: 'factorization'


ドット表記を使用して既存のオプションを新しい値に更新します。

lsqnonlin ソルバーのオプションを、使用するアルゴリズムが levenberg-marquardt、関数評価回数が 1,500 回以下になるように設定します。

options = optimoptions(@lsqnonlin,'Algorithm','levenberg-marquardt',...
    'MaxFunctionEvaluations',1500)
options = 
  lsqnonlin options:

   Options used by current Algorithm ('levenberg-marquardt'):
   (Other available algorithms: 'interior-point', 'trust-region-reflective')

   Set properties:
                   Algorithm: 'levenberg-marquardt'
      MaxFunctionEvaluations: 1500

   Default properties:
                     Display: 'final'
    FiniteDifferenceStepSize: 'sqrt(eps)'
        FiniteDifferenceType: 'forward'
           FunctionTolerance: 1.0000e-06
               MaxIterations: 400
                   OutputFcn: []
                     PlotFcn: []
    SpecifyObjectiveGradient: 0
               StepTolerance: 1.0000e-06
                    TypicalX: 'ones(numberOfVariables,1)'
                 UseParallel: 0

   Options not used by current Algorithm ('levenberg-marquardt')
   Default properties:
           BarrierParamUpdate: 'monotone'
          ConstraintTolerance: 1.0000e-06
          JacobianMultiplyFcn: []
          OptimalityTolerance: 1.0000e-06
    SpecifyConstraintGradient: 0
          SubproblemAlgorithm: 'factorization'


ドット表記を使用して MaxFunctionEvaluations を 2000 に増加させます。

options.MaxFunctionEvaluations = 2000
options = 
  lsqnonlin options:

   Options used by current Algorithm ('levenberg-marquardt'):
   (Other available algorithms: 'interior-point', 'trust-region-reflective')

   Set properties:
                   Algorithm: 'levenberg-marquardt'
      MaxFunctionEvaluations: 2000

   Default properties:
                     Display: 'final'
    FiniteDifferenceStepSize: 'sqrt(eps)'
        FiniteDifferenceType: 'forward'
           FunctionTolerance: 1.0000e-06
               MaxIterations: 400
                   OutputFcn: []
                     PlotFcn: []
    SpecifyObjectiveGradient: 0
               StepTolerance: 1.0000e-06
                    TypicalX: 'ones(numberOfVariables,1)'
                 UseParallel: 0

   Options not used by current Algorithm ('levenberg-marquardt')
   Default properties:
           BarrierParamUpdate: 'monotone'
          ConstraintTolerance: 1.0000e-06
          JacobianMultiplyFcn: []
          OptimalityTolerance: 1.0000e-06
    SpecifyConstraintGradient: 0
          SubproblemAlgorithm: 'factorization'


fmincon ソルバーの既定外のオプションを、fminunc ソルバーのオプションに転送します。

fmincon のオプションを、使用するアルゴリズムが sqp、反復回数が 1,500 回以下になるように設定します。

oldoptions = optimoptions(@fmincon,'Algorithm','sqp','MaxIterations',1500)
oldoptions = 
  fmincon options:

   Options used by current Algorithm ('sqp'):
   (Other available algorithms: 'active-set', 'interior-point', 'sqp-legacy', 'trust-region-reflective')

   Set properties:
                    Algorithm: 'sqp'
                MaxIterations: 1500

   Default properties:
          ConstraintTolerance: 1.0000e-06
                      Display: 'final'
     FiniteDifferenceStepSize: 'sqrt(eps)'
         FiniteDifferenceType: 'forward'
       MaxFunctionEvaluations: '100*numberOfVariables'
               ObjectiveLimit: -1.0000e+20
          OptimalityTolerance: 1.0000e-06
                    OutputFcn: []
                      PlotFcn: []
                 ScaleProblem: 0
    SpecifyConstraintGradient: 0
     SpecifyObjectiveGradient: 0
                StepTolerance: 1.0000e-06
                     TypicalX: 'ones(numberOfVariables,1)'
                  UseParallel: 0

   Options not used by current Algorithm ('sqp')
   Default properties:
       BarrierParamUpdate: 'monotone'
    EnableFeasibilityMode: 0
        FunctionTolerance: 1.0000e-06
     HessianApproximation: 'not applicable'
               HessianFcn: []
       HessianMultiplyFcn: []
              HonorBounds: 1
      SubproblemAlgorithm: 'factorization'


該当するオプションを fminunc ソルバーに転送します。

options = optimoptions(@fminunc,oldoptions)
options = 
  fminunc options:

   Options used by current Algorithm ('quasi-newton'):
   (Other available algorithms: 'trust-region')

   Set properties:
        FiniteDifferenceType: 'forward'
               MaxIterations: 1500
         OptimalityTolerance: 1.0000e-06
                     PlotFcn: []
    SpecifyObjectiveGradient: 0
               StepTolerance: 1.0000e-06

   Default properties:
                   Algorithm: 'quasi-newton'
                     Display: 'final'
    FiniteDifferenceStepSize: 'sqrt(eps)'
        HessianApproximation: 'bfgs'
      MaxFunctionEvaluations: '100*numberOfVariables'
              ObjectiveLimit: -1.0000e+20
                   OutputFcn: []
                    TypicalX: 'ones(numberOfVariables,1)'
                 UseParallel: 0

   Options not used by current Algorithm ('quasi-newton')
   Set properties:
      FunctionTolerance: 1.0000e-06
             HessianFcn: []
     HessianMultiplyFcn: []
    SubproblemAlgorithm: 'factorization'


'sqp'fminunc の有効なアルゴリズム オプションではないため、このアルゴリズム オプションは fminunc に引き継がれません。

最適化問題を作成し、既定のソルバーおよびオプションを特定します。

rng default
x = optimvar('x',3,'LowerBound',0);
expr = x'*(eye(3) + randn(3))*x - randn(1,3)*x;
prob = optimproblem('Objective',expr);
options = optimoptions(prob)
options = 
  quadprog options:

   Options used by current Algorithm ('interior-point-convex'):
   (Other available algorithms: 'active-set', 'trust-region-reflective')

   Set properties:
     No options set.

   Default properties:
              Algorithm: 'interior-point-convex'
    ConstraintTolerance: 1.0000e-08
                Display: 'final'
           LinearSolver: 'auto'
          MaxIterations: 200
    OptimalityTolerance: 1.0000e-08
          StepTolerance: 1.0000e-12

   Options not used by current Algorithm ('interior-point-convex')
   Default properties:
      FunctionTolerance: 'default dependent on problem'
     HessianMultiplyFcn: []
         ObjectiveLimit: -1.0000e+20
    SubproblemAlgorithm: 'cg'
               TypicalX: 'ones(numberOfVariables,1)'


既定のソルバーは quadprog です。

反復表示を使用するオプションを設定します。解を求めます。

options.Display = 'iter';
sol = solve(prob,'Options',options);
Solving problem using quadprog.
Your Hessian is not symmetric. Resetting H=(H+H')/2.

 Iter            Fval  Primal Infeas    Dual Infeas  Complementarity  
    0    2.018911e+00   0.000000e+00   2.757660e+00     6.535839e-01  
    1   -2.170204e+00   0.000000e+00   8.881784e-16     2.586177e-01  
    2   -3.405808e+00   0.000000e+00   8.881784e-16     2.244054e-03  
    3   -3.438788e+00   0.000000e+00   3.356690e-16     7.261144e-09  

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.
sol.x
ans = 3×1

    1.6035
    0.0000
    0.8029

入力引数

すべて折りたたむ

文字ベクトル、stringまたは関数ハンドルとして指定されるソルバー名です。

例: 'fmincon'

例: @fmincon

データ型: char | function_handle | string

関数 optimoptions で作成した、options オブジェクトとして指定されるオプションです。

例: oldoptions = optimoptions(@fminunc)

問題オブジェクト。OptimizationProblem オブジェクトまたは EquationProblem オブジェクトとして指定します。問題ベースの最適化ワークフローまたは方程式を解くための問題ベースのワークフローを使用して、prob を作成します。

prob を使用する構文では、問題に対する既定ソルバーが何であるかを判断でき、アルゴリズムなどのオプションを変更できます。

例: prob = optimproblem('Objective',myobj)myobj は最適化式です。

名前と値の引数

引数の任意のペアを Name1=Value1,...,NameN=ValueN のように指定します。Name は引数名、Value は対応する値です。名前と値の引数は、他の引数より後に指定されている必要があります。ただし、各ペアの順序は任意です。

R2021a 以前では、それぞれの名前と値をコンマで区切り、Name を引用符で囲みます。

例: optimoptions(@fmincon,'Display','iter','FunctionTolerance',1e-10)fmincon オプションを、反復表示をもち 1e-10FunctionTolerance をもつように設定します。

関連する名前と値のペアの引数については、ソルバーのオプション表を参照してください。

出力引数

すべて折りたたむ

SolverName ソルバーの最適化オプション。options オブジェクトとして返されます。

代替機能

ライブ エディター タスク

[最適化] ライブ エディター タスクを使用すれば、オプションを視覚的に設定できます。例については、fmincon ソルバーを使用した最適化ライブ エディター タスクを参照してください。

拡張機能

バージョン履歴

R2013a で導入