
今回からnmplot‗で始まるデモに入ります。ここでもテーマはNelder Mead法です。前回は次元を上げるとイマイチになる様子ですが、今回は「収束に失敗する」反例です。2次元空間なんだけれども失敗。この反例はHan先生?がご提案されたもんなんだとか。ますます深みにハマっている。老人はついていけんぞなもし。
※「手習ひデジタル信号処理」投稿順 Indexはこちら
※Windows11上の Scilab2024.0.0を使用させていただいております。(Scilabについては御本家 Scilab 様へ)
nmplot_han1.sce
今回から使用の「関数群」はnmplot_を頭に掲げるものどもですが、直前まで練習していた neldermead_関数群と似た感じじゃないかと思います(素人老人の意見っす。)「よりわかりやすい」のは結果をプロット化してくれることかと。
今回は、シンプレックスがうまく収束しない例をプロットしてくれるみたいです。目的関数はHan先生という人(知らんけど)が御発案のものらしいです。最適化のアルゴリズムは「いつもの」Nelder Mead法ですが、初期値と反復回数、許容誤差は失敗が見えるような値に設定されているみたいです。
最適化の結果
下に出力をキャプチャしましたが、設定の繰り返し回数50回を行っても終息しないということで打ち切られてます。
nmplot_関数群はこのようなときに、シンプレックスが動いて(小さくなって)行く様子をプロットすることができるみたい。今回はこんな感じ。
上のように設定された、赤の直線の三角形(シンプレックス)は右端の頂点が急速に左に移動してくるのだけれど、そこで行き詰ってしまうみたい。曲線で「等高線」を引いてあるので、ちょっと下にズラしてくれたら下の方の谷間に落ちていくような気もするのだけれども、どうも左端で「ハマって」しまうみたいです。
シンプレックス法の弱点、らしいデス。そんなものにハマったら素人老人は運が悪かったな、と言うしかないが。。。
