nonlinear-optimizationパッケージのAPIがあまりイケていなかったこともあって、adパッケージによる自動微分と組み合わせて、引数の構造もTraversableに一般化したラッパーを作ってみた。 https://github.com/msakai/nonlinear-optimization-ad
今気になっている点:
* f :: forall s. Mode s => f (AD s a) -> AD s a として受け取った関数に対して、勾配とか無視して関数値だけ計算したいときにどうするのが良いのか? とりあえず、fst (grad' f x) とかして勾配と一緒に計算して、勾配の情報を捨てているけれど、無駄な計算をしてしまっている気がする。
* nonlinear-optimizationパッケージのoptimize関数、関数値と勾配を同時に計算するためのオプショナルな関数を指定すると、結果が微妙に変わってるんだけれど、これは問題ないのだろうか……