ドキュメンテーション センター

  • 評価版
  • 製品アップデート

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

Optimization Toolbox 関数の並列計算

並列最適化機能

並列計算は 1 つの問題に対して複数のプロセッサを使用する手法です。並列計算を使用する利点は計算速度にあります。

Optimization Toolbox™ のソルバー fminconfgoalattainfminimax は自動的に目的関数と非線形制約関数の数値推定を複数のプロセッサへ分配します。これらのソルバーは以下の条件の下で並列の勾配推定を行います。

  • Parallel Computing Toolbox™ のライセンスを所有している

  • オプション GradObj'off' に設定されている、または非線形制約関数がある場合に、オプション GradConstr'off' に設定されている場合。'off' はこれらのオプションの既定値であるため、設定する必要はありません。ただし、両方を 'on' には設定しないでください。

  • 並列計算が Parallel Computing Toolbox の関数 parpool を使う

  • オプション UseParallel'always' に設定されている場合。このオプションの既定値は 'never' です。

これらの条件を満たすとき、ソルバーは並列処理で推定勾配を計算します。

    メモ:   並列で実行する場合でも、ソルバーはホスト マシンで目的関数と非線形制約関数を逐次的に呼び出すことがあります。このため、関数が逐次的または並列のいずれで評価されるのかについて、仮定がなされていないことを確認してください。

勾配の並列推定

関数 fminconfgoalattainfminimax では、1 つのサブルーチンが並列化されています。このサブルーチンは、目的関数と制約関数の勾配を推定します。この計算は現在位置 x のまわりの点の関数値計算も行います。基本的に計算は以下になります。

ここで以下のようになります。

  • f は目的関数または制約関数

  • ei は単位方向ベクトル

  • Δi は ei 方向のステップ サイズ

並列で ∇f(x) を推定するために、Optimization Toolbox のソルバーは (f(x + Δiei) – f(x))/Δi の評価計算を余分なプロセッサへ分配します。

並列の中央差分

既定の前方有限差分の代わりに、中央有限差分によって勾配を推定することもできます。基本的な中央有限差分式は以下になります。

中央有限差分は前方有限差分の 2 倍の関数評価を行いますが、一般に精度がよくなります。中央有限差分は前方有限差分と厳密に同じ計算時間で並列処理されます。

optimoptions を使用して FinDiffType オプションを 'central' に設定し、中央有限差分を有効にします。前方有限差分を使用するには、FinDiffType オプションを 'forward' に設定します。

入れ子形式の並列関数

ソルバーは Parallel Computing Toolbox の関数 parfor を使用して勾配の並列推定を実行します。parfor は他の parfor ループから呼び出されると並列に処理されません。そのため目的関数と制約関数内で並列勾配推定と並列機能を同時に使用することはできません。

たとえば、目的関数 userfcnparfor を呼び出し、ループ内で fmincon を呼び出す場合を考えてみましょう。また、「並列最適化機能」で示されている fmincon の並列勾配推定の条件が満たされているものとします。「parfor を並列で実行した場合」は 3 つのケースを示します。

  1. 最も外側のループは parfor です。そのループのみを並列に実行します。

  2. 最も外側の parfor ループは fmincon 内にあります。fmincon のみを並列に実行します。

  3. 最も外側の parfor ループは userfcn 内にあります。userfcn は並列に parfor を使用することができます。

parfor を並列で実行した場合

この情報は役に立ちましたか?