最適化パッケージの効率的な計算
|
最適化パッケージの計算法について詳しく解説します。もっとも有効なパフォーマンスを提供します。
|
|
Specifying the Optimization Problem最適化問題の決定
|
|
|
代数式およびオペレータの形は使うのが簡単であるが、行列の形はソルバで使われる内部の表現に似ています。代数式およびオペレータの形で問題を入力すると自動的に行列およびベクトルに変換します。行列の形で入力すると、適切でないデータの型および入力を持つベクトルおよび行列は必要な性質を持つ入力に変換されます。不必要な変換を避けるために、 datatype=float を使って行列およびベクトルを構成することを推奨します。いくつかのコマンドは入力データにさらに要求をつけるものもありますが、それに関するヘルプページで詳しく述べられています。
|
|
|
浮動小数
|
|
|
最適化パッケージは、 Numerical Algorithms Group (NAG) により提供されたライブラリを利用しています。ライブラリは浮動小数上で計算を行います。
|
|
最適化パッケージの計算は、ハードウェアやソフトウェア上の任意の浮動小数環境で行うことができます。有効な値を得るために、パッケージではハードウェアで可能な任意精度で計算を行います。ソフトウェア浮動小数は USeHardwareFloats が 'false' か 'deduced' を表示する時と、精度 Digits が evalhf(Digits) より大きい場合に使います。
|
|
|
evalhf コマンドの働き
|
|
|
非線形およびはハードウェア浮動小数上で計算することを確実にするためには、さらに注意する必要があります ( 前の章、浮動小数を参照ください) 。これらの関数は Optimization/MatrixForm に似た入力を持つ手続きとして内部に記憶されます。この手続きはベクトルパラメータの入力とし、ベクトルまたは行列を用いて計算および出力をします。非線形目的関数および制約条件が代数式またはオペレータの形で入力されたときは、内部で扱う形に変換をします。
はじめ、evalhf を用いて手続きを評価します。evalhf でサポートされていない手続きは少し遅い evalf を用いて評価を行います。evalhf のサポートについて詳しくは evalhf および evalhf/function を参照ください。 evalhf または evalf のどちらを使っているのかメッセージを見るためには、infolevel[Optimization] を 2 以上に指定します。
オペレータの形の手続きは evalhf で評価できません。オペレータの形の入力は使わないことを推奨します。
|
|
|
微分の入力
|
|
|
非線形計画問題を解く内部のソルバの多くは、目的関数および制約条件の微分が利用できるときに効率的に計算を行います。微分の情報の不足によって解を見つけないことがあります。微分を必要とする算法について詳しくは Optimization/Methods を参照ください。
問題が代数式またはオペレータの形で与えられたとき、ソルバは自動で、代数式の時は diff を、オペレータの形の時は codegen[GRADIENT] および codegen[JACOBIAN] を使っておよびを計算することを試みます。
問題が行列の形で与えられたとき、微分の情報を自動で計算をしません。オプションを使ってこれらの情報を入力することを強く推奨します (オプションについて詳しくは Optimization/Options を参照ください) 。自動で微分を計算した代数式による計算は何も微分の情報を与えない行列の形より効率よく計算をします。しかしながら、微分の情報を与えた行列の形による計算は常に最も効率的な計算を行います。
|
|
|
参照
|
|
codegen[GRADIENT], codegen[JACOBIAN], diff, Digits, evalhf, evalhf/function, Optimization, Optimization/InputForms, Optimization/MatrixForm, Optimization/Methods, UseHardwareFloats
|
|
Download Help Document
Was this information helpful?