PythonでNelder-Mead法
名前の通り。だが実際は
- Qiitaを使ってみたかった
- GitHubを使ってみたかった
- 他人のコードを見て勉強したかった
などの背景があるので結構雑。
- Nelder-Mead法について
最初は改訂シンプレックス法だとか滑降シンプレックス法だとか呼ばれていた(原著論文にも書いてあるし…)が、wikiにも書かれているとおり、基本的にはシンプレックスとは無関係。
論文: Nelder, John A.; R. Mead (1965). “A simplex method for function minimization”. Computer Journal 7: 308–313
詳しいことは(英語だが)こちらに分かりやすくまとめてある。
ざっくり言うと、n次元の最適化したい関数にn+1次元の点の単体(simplex)をコロコロと変形させて最小値を探し出す。というもの。
例えば二次元空間を探索するならば、三角形を形成して探索をする。
参考サイトでは分かりやすく動画でその例を説明しているのでそこだけ見ても何となく分かる。
実はScipyに標準機能としてあったりもする
https://docs.scipy.org/doc/scipy/reference/optimize.minimize-neldermead.html
が、検索をしていてPythonで実際に書いている人を見つけたので、ついでに他人のコードを見てPythonの勉強をする。
探索する様子を可視化出来たら面白いなと思ってちょっとだけコードを改変させてもらった。
Jupyter notebookで書いたものを貼り付けた程度なので動かなかったらごめんなさい。
https://github.com/ftamon/nelder_mead_method.git
以上。