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

조회 수: 4 (최근 30일)
tanaka kosho
tanaka kosho 2021년 11월 6일
댓글: tanaka kosho 2021년 11월 8일
困っている状況は以下のようなものです。
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!