思っちゃったんだからしょうがない

統計学を学ぶ傍でひっそりとやっていきます。 #statistics #R

R で Nelder and Mead 法を実装してみる(勉強のため)

久しぶりの更新です。事情によりNelder and Mead法を実装する必要が出たのでやってみました。参考文献はNelder and Mead(1965)と

ネルダー–ミード法 - Wikipediaです。お世話になりました。

ネルダーミード法はRのoptim関数で使われていたり、調べたらRのパッケージとしても公開されていたり、別に自分で実装しなくてもいい人はたくさんいると思いますが、私はそういうわけにも行かなかったのでやりました。そしてついでにブログに書きます。

 

この方法の一番の特徴は導関数を求めなくてもいいという点ですね。実行するために必要なのは

  • 関数形: y=f(x)
  • 初期値: x_{init}
  • パラメータ  \alpha, \gamma, \rho, \sigma
  • 定量 criterion

になります。今回のシミュレーションでは論文のResultの1個目としました。(下記)

  •  f(x) = 100(x_2 - x_1^2)^2 + (1 - x_1)^2
  •  x_{init} = (-1.2, 1)
  •  \alpha = 1, \gamma=2, \rho = 0.5, \sigma=0.5
  •  criterion = \sqrt( \sum_{i=1}^{n+1} ( f(x_i) - \bar{ f(x_i) } )^2 )  

関数定義とサンプルコードも載せておきます。でも初期値依存するので場合によっては正解に収束していないケースも・・・。

 

Nelder and Mead 1965 for R

 

Sample Nelder and Mead 1965 1 for R