fminuncのIt​erationを横軸​に変数を縦軸にしてグ​ラフを作りたい

fminuncにおいて,Iterationを横軸,変数を縦軸のグラフを作る方法について教えていただきたいです.

5 commentaires

michio
michio le 13 Fév 2018
こちらではうまくいきませんでしたか?
Tsuyoshi Yasuda
Tsuyoshi Yasuda le 13 Fév 2018
それだと,関数の評価回数(func-count)が横軸になってしまっているんです.一応,Iterationとfunc-countを照らし合わせればグラフを作ることはできるのですが,手作業になるので時間がかかっていしまいます.なので,プログラムでそれをできるようにしたいのですが,自分ではわからなっかたので質問しました.
michio
michio le 13 Fév 2018
Modifié(e) : michio le 13 Fév 2018
そういうことでしたか。コメントありがとうございました。 Iteration毎の最適化されるパラメータ変数の推移をプロットされたいんですね。 ここで変数はいくつありますか?1つ以上ですか?
プロットするだけでよいですか?それとも
で紹介されたようにグローバル変数などで、iteration毎の値を確保しておきたいですか?
Tsuyoshi Yasuda
Tsuyoshi Yasuda le 13 Fév 2018
変数は2つです. できるのであればiteration毎の値を確保しておきたいです.
michio
michio le 13 Fév 2018
Modifié(e) : michio le 13 Fév 2018
分かりました。すでに試されてご存じの通り、目的関数にそのまま変数確保のコードを書いてしまうと関数の評価回数分の値が確保されてしまうので、Iteration毎に確保する(もしくは後ほど削除する)ような仕組みが必要ですね。少し考えてみます。
他の閲覧者の方もよいアイデアがあればぜひ書き込んでください。

Connectez-vous pour commenter.

 Réponse acceptée

michio
michio le 13 Fév 2018

2 votes

で紹介されている出力関数を設定するのがよさそうです。実際には
options = optimoptions(@solvername,'OutputFcn', @outfun);
などと 'OutputFcn' を設定します。outfun 関数を作る必要がありますが、上記URL先にも紹介がありますが
function stop = outfun(x,optimValues,state)
switch state
case 'init'
case 'iter'
case 'done'
otherwise
end
end
といった形で、各"状態"に応じで処理内容を記載します。詳細: アルゴリズムの状態
冒頭で紹介したURL先にあるサンプルコードで、history.x = []; として確保しているのが、各Iterationでの変数x の値です。サンプルコードのように、outfun を入れ込関数の形にすることで history 変数を共有するか、global 変数を用いてもよいと思います。取り急ぎ最小限のご紹介まで。実装する際に困ったことがあれば相談してください。

1 commentaire

Tsuyoshi Yasuda
Tsuyoshi Yasuda le 14 Fév 2018
できました.ありがとうございました!

Connectez-vous pour commenter.

Plus de réponses (0)

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!