optim: 汎用最適化

詳細

Note that arguments after must be matches exactly.

By default optim perform minimization, but it will maximize if control$fnscale is negative.これは、デフォルトでは最小化を行う。 optimHesshessian = TRUE を忘れたときに後でヘシアンを計算するための補助関数です。

デフォルトの方法は Nelder and Mead (1965) の実装で、関数値のみを使用し、堅牢ですが比較的遅いものです。

方法 "BFGS" は準ニュートン法(可変メトリックアルゴリズムとしても知られている)、特に1970年にBroyden, Fletcher, Goldfarb and Shannoによって同時に発表されたものである。 これは最適化される表面のイメージを構築するために関数値と勾配を使用します。

方法 "CG" は Fletcher and Reeves (1964) によるものに基づいた共役勾配法(ただし Polak–Ribiere または Beale–Sorenson 更新のオプション付き)です。 共役勾配法は一般にBFGS法よりも壊れやすいが、行列を保存しないので、はるかに大きな最適化問題で成功する可能性がある。 (1995)の方法であり、ボックス制約、つまり各変数に下限と上限のどちらかを与えることができる。 初期値は制約を満たさなければならない。 これはBFGS準ニュートン法のリミテッド・メモリ・モディフィケーションを使用している。

Nocedal and Wright (1999) は、以前の3つの方法に関する包括的な参考文献である。

方法 "SANN" はデフォルトで Belisle (1992) で与えられたシミュレーテッド・アニーリングの変種である。 シミュレーテッド・アニーリングは確率的大域的最適化手法のクラスに属する。 関数値のみを使用しますが、比較的時間がかかります。 また、微分不可能な関数に対しても有効です。 この実装では、受理確率にメトロポリス関数を用いています。 デフォルトでは、次の候補点は実際の温度に比例したスケールを持つガウス型マルコフカーネルから生成されます。 新しい候補点を生成する関数が与えられると、方法 "SANN" は組合せ最適化問題を解くためにも使用できる。 温度は Belisle (1992, p.890) で示された対数冷却スケジュールに従って低下する。具体的には、温度は temp / log(((t-1) %/% tmax)*tmax + exp(1)) に設定され、 t は現在の反復ステップ、 temptmaxcontrol を介して指定可能、以下を参照されたい。 "SANN"メソッドは、制御パラメータの設定に大きく依存することに注意。 これは汎用的な方法ではないが、非常に荒い表面で良い値を得るには非常に有効である。

方法 "Brent" は一次元問題のみで、optimize()を使用する。 パッケージ stats4 の mle のように method しか指定できない他の関数の中で optim() が使われている場合に有効です。

関数 fn は与えられた値で評価できない場合に NA または Inf を返すことができますが、初期値は fn の計算できる有限値を持っていなければなりません。 (値が常に有限であるべきメソッド "L-BFGS-B" を除く)

optim は再帰的に使うことができ、多数のパラメータだけでなく単一のパラメータに対しても使うことができる。

control 引数はリストで、以下の要素のいずれかを指定することができます:

trace

負でない整数。 正数なら、最適化の進行に関するトレース情報が生成される。 メソッド "L-BFGS-B" の場合、6段階のトレース情報があります。 (これらが何をするのか正確に理解するには、ソースコードを参照してください。)

fnscale

最適化中に fngr の値に適用される全体のスケーリングです。 負の場合は、問題を最大化問題に変える。 最適化はfn(par)/fnscale.

parscale

パラメータに対するスケーリング値のベクトル。 最適化は par/parscale で行われ、これらは、任意の要素で単位を変更すると、スケーリングされた値で約単位の変更を生成するという意味で比較可能であるべきである。 method = "Brent" では使用されない (必要ない)。

ndeps

勾配に対する有限差分近似のステップサイズのベクトルで、 par/parscale スケールで指定される。 デフォルトは 1e-3.

maxit

最大反復回数. デフォルトは微分ベースのメソッドでは100"Nelder-Mead".

"SANN"ではmaxitが関数評価の総数を与え、それ以外に停止基準はありません。 デフォルトは 10000.

abstol

絶対収束許容値。 ゼロに到達するための許容値として、非負関数にのみ有用。

reltol

相対的収束許容値。 ステップでreltol * (abs(val) + reltol)のファクターで値を減らすことができない場合、アルゴリズムは停止する。 デフォルトはsqrt(.Machine$double.eps)で、通常は1e-8程度。

alpha, beta, gamma

"Nelder-Mead"メソッドのスケーリングパラメータ。 alphaは反射係数(デフォルト1.0)、betaは収縮係数(0.5)、gammaは拡大係数(2.0)。

REPORT

control$traceが正なら"BFGS", "L-BFGS-B"そして"SANN"メソッドのレポート頻度を指定します。 デフォルトでは "BFGS""L-BFGS-B" は 10 回、"SANN" は 100 回です。

warn.1d.NelderMead

a logical 一次元最小化において、"Nelder-Mean" が警告を表示するかどうかを指定します。 警告は時に不適切であるため、このオプションを false にすることで警告を抑制することができます。 Fletcher–Reeves更新では1、Polak–Ribiereでは2、Beale–Sorensonでは3となります。

lmm

"L-BFGS-B"法で保持するBFGS更新数を示す整数で、デフォルトは5となります。 収束は、目的値の減少が機械公差のこのファクター以内に収まるときに起こります。 デフォルトは1e7で、これは約1e-8の公差です。

pgtol

"L-BFGS-B"メソッドの収束を制御します。 これは現在の探索方向における投影勾配に対する公差です。

temp

は、"SANN"メソッドをコントロールします。 冷却スケジュールの開始温度です。 デフォルトは10です。

tmax

"SANN"方式の各温度での関数評価数です。 デフォルトは 10.

par に与えられた名前は fngr に渡されるベクトルにコピーされます。

fnに渡されるパラメータベクタは特別なセマンティクスを持っており、呼び出し間で共有されることがあります。