最適化で収束が遅い時、後続コード実行を自動ストップする方法とは?
4 views (last 30 days)
Show older comments
困っている状況は以下のようなものです。
1. 目的関数を最小にするような変数値を求めようとしている(global optimization toolboxのpattrensearchというsolverを使っていますが、他の最適化のsolverでも類似の話になると思います)
2. 反復計算回数が上限に達しても、許容誤差に収まらない
3. そうした場合でも、不完全な結果のまま変数値が格納されてしまう(この不完全な変数値を利用した後続の計算も実行できてしまい、一見問題なく計算できてるように思えてしまう)
このようなことを避けるため、2.の時に後続のコード実行をストップさせるようにしたいのですが、良い方法はないでしょうか。
--- 私なりに考えていること▼
• 2.の時は「許容誤差に収まらなかった」というメッセージが出ますが、エラー表示というより普通の黒いメッセージで流れてしまいます。単体の最適化なら、そうしたメッセージになっているか都度確認をすればいいのですが、複数の最適化問題を何度も実行しているので個々の追跡が大変です。そのため、自動で判別ができるようにと考えています
• 他の方法としては、反復計算の上限回数を十分大きく設定し、全体のコード実行時間を測って、明らかに時間がかかり過ぎていたら2.の状況を疑うというのも考えています。ただ直接的な解決という感じではないです
0 Comments
Accepted Answer
Toru Ikegami
on 8 Nov 2021
こんにちは,
patternsearch をはじめ,最適化ソルバーの多くは exitflag というオプショナルな返り値をもちますので,これを利用すればソルバーが終了した原因を知ることができます.
使い方は [x,~,exitflag] = patternsearch(___) と,返値に3番目の引数を設定すればOKです.
ご質問にあります「計算回数が上限に達したため終了」の場合には exitflag = 0となりますね.
More Answers (0)
See Also
Categories
Find more on ソルバー出力と反復表示 in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!