Optimization Toolbox での並列計算とは
並列最適化機能
並列計算は 1 つの問題に対して複数のプロセッサを使用する手法です。並列計算を使用する利点は計算速度にあります。
以下に挙げる Optimization Toolbox™ のソルバーは、目的関数と非線形制約関数の数値的な勾配推定を複数のプロセッサへ自動的に分配します。
fmincon
fminunc
fgoalattain
fminimax
fsolve
lsqcurvefit
lsqnonlin
これらのソルバーは以下の条件の下で並列の勾配推定を行います。
Parallel Computing Toolbox™ のライセンスを所有している
オプション
SpecifyObjectiveGradient
がfalse
に設定されている、または非線形制約関数がある場合に、オプションSpecifyConstraintGradient
がfalse
に設定されている場合。false
はこれらのオプションの既定値であるため、設定する必要はありません。ただし、両方をtrue
には設定しないでください。並列計算が Parallel Computing Toolbox の関数
parpool
により有効化されているオプション
UseParallel
がtrue
に設定されている場合。このオプションの既定値はfalse
です。
これらの条件を満たすとき、ソルバーは並列処理で推定勾配を計算します。
メモ
並列で実行する場合でも、ソルバーはホスト マシンで目的関数と非線形制約関数を逐次的に呼び出すことがあります。このため、関数が逐次的または並列のいずれで評価されるのかについて、仮定がなされていないことを確認してください。
勾配の並列推定
1 つのソルバー サブルーチンは自動的に並列計算されます。このサブルーチンは、目的関数と制約関数の勾配を推定します。この計算は現在位置 x のまわりの点の関数値計算も行います。基本的に計算は以下になります。
ここで、
f は目的関数または制約関数
ei は単位方向ベクトル
Δi は ei 方向のステップ サイズ
並列で ∇f(x) を推定するために、Optimization Toolbox のソルバーは (f(x + Δiei) – f(x))/Δi の評価計算を追加のプロセッサへ分配します。
並列の中心差分
既定の前方有限差分の代わりに、中心有限差分によって勾配を推定することもできます。基本的な中心有限差分式は以下になります。
中心有限差分は前方有限差分の 2 倍の回数の関数評価を必要としますが、一般に精度がよくなります。中心有限差分は前方有限差分とまったく同じ様に並列処理されます。
optimoptions
を使用して FiniteDifferenceType
オプションを 'central'
に設定し、中心有限差分法を有効にします。前進有限差分法を使用するには、FiniteDifferenceType
オプションを 'forward'
に設定します。
入れ子形式の並列関数
ソルバーは Parallel Computing Toolbox の関数 parfor
(Parallel Computing Toolbox) を使用して勾配の並列推定を実行します。parfor
は他の parfor
ループから呼び出されると並列に処理されません。そのため目的関数と制約関数内で並列勾配推定と並列機能を同時に使用することはできません。
メモ
ドキュメンテーションでは、Simulink® を呼び出す場合は parfor
または parfeval
を使用しないように推奨されています。parfor 内での関数 sim の使用 (Simulink)を参照してください。そのため、ソルバーの組み込み並列機能を使用して Simulink シミュレーションを並列で最適化すると問題が発生する可能性があります。複数の Global Optimization Toolbox ソルバーで Simulink モデルを最適化する方法を示す例については、カスタム並列シミュレーションのためのベクトル化サロゲート最適化 (Global Optimization Toolbox)を参照してください。
たとえば、目的関数 userfcn
が parfor
を呼び出し、ループ内で fmincon
を呼び出す場合を考えてみましょう。また、並列最適化機能で示されている fmincon
の並列勾配推定の条件が満たされているものとします。parfor を並列で実行した場合は 3 つのケースを示します。
最も外側のループは
parfor
です。そのループのみを並列に実行します。最も外側の
parfor
ループはfmincon
内にあります。fmincon
のみを並列に実行します。最も外側の
parfor
ループはuserfcn
内にあります。userfcn
は並列にparfor
を使用することができます。
parfor を並列で実行した場合
参考
Optimization Toolbox での並列計算の使用 | 並列計算によるパフォーマンスの向上 | Parallel Computing Toolbox を使用した、時間のかかる最適化問題の最小化