詳細
Note that arguments after …
must be matches exactly.
By default optim
perform minimization, but it will maximize if control$fnscale
is negative.これは、デフォルトでは最小化を行う。 optimHess
は hessian = 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
は現在の反復ステップ、 temp
と tmax
は control
を介して指定可能、以下を参照されたい。 "SANN"
メソッドは、制御パラメータの設定に大きく依存することに注意。 これは汎用的な方法ではないが、非常に荒い表面で良い値を得るには非常に有効である。
方法 "Brent"
は一次元問題のみで、optimize()
を使用する。 パッケージ stats4 の mle
のように method
しか指定できない他の関数の中で optim()
が使われている場合に有効です。
関数 fn
は与えられた値で評価できない場合に NA
または Inf
を返すことができますが、初期値は fn
の計算できる有限値を持っていなければなりません。 (値が常に有限であるべきメソッド "L-BFGS-B"
を除く)
optim
は再帰的に使うことができ、多数のパラメータだけでなく単一のパラメータに対しても使うことができる。
control
引数はリストで、以下の要素のいずれかを指定することができます:
trace
負でない整数。 正数なら、最適化の進行に関するトレース情報が生成される。 メソッド "L-BFGS-B"
の場合、6段階のトレース情報があります。 (これらが何をするのか正確に理解するには、ソースコードを参照してください。)
fnscale
最適化中に fn
と gr
の値に適用される全体のスケーリングです。 負の場合は、問題を最大化問題に変える。 最適化は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
に与えられた名前は fn
と gr
に渡されるベクトルにコピーされます。
fn
に渡されるパラメータベクタは特別なセマンティクスを持っており、呼び出し間で共有されることがあります。