最適化で収束が遅い時​、後続コード実行を自​動ストップする方法と​は?

5 次查看(过去 30 天)
tanaka kosho
tanaka kosho 2021-11-6
困っている状況は以下のようなものです。
1. 目的関数を最小にするような変数値を求めようとしている(global optimization toolboxのpattrensearchというsolverを使っていますが、他の最適化のsolverでも類似の話になると思います)
2. 反復計算回数が上限に達しても、許容誤差に収まらない
3. そうした場合でも、不完全な結果のまま変数値が格納されてしまう(この不完全な変数値を利用した後続の計算も実行できてしまい、一見問題なく計算できてるように思えてしまう)
このようなことを避けるため、2.の時に後続のコード実行をストップさせるようにしたいのですが、良い方法はないでしょうか。
--- 私なりに考えていること▼
• 2.の時は「許容誤差に収まらなかった」というメッセージが出ますが、エラー表示というより普通の黒いメッセージで流れてしまいます。単体の最適化なら、そうしたメッセージになっているか都度確認をすればいいのですが、複数の最適化問題を何度も実行しているので個々の追跡が大変です。そのため、自動で判別ができるようにと考えています
• 他の方法としては、反復計算の上限回数を十分大きく設定し、全体のコード実行時間を測って、明らかに時間がかかり過ぎていたら2.の状況を疑うというのも考えています。ただ直接的な解決という感じではないです

采纳的回答

Toru Ikegami
Toru Ikegami 2021-11-8
こんにちは,
patternsearch をはじめ,最適化ソルバーの多くは exitflag というオプショナルな返り値をもちますので,これを利用すればソルバーが終了した原因を知ることができます.
使い方は [x,~,exitflag] = patternsearch(___) と,返値に3番目の引数を設定すればOKです.
ご質問にあります「計算回数が上限に達したため終了」の場合には exitflag = 0となりますね.
  1 个评论
tanaka kosho
tanaka kosho 2021-11-8
ありがとうございます。このexiflagとifとreturnを使い、実行をストップさせることができました。

请先登录,再进行评论。

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 ソルバー出力と反復表示 的更多信息

产品


版本

R2021b

Community Treasure Hunt

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

Start Hunting!