Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

ウォーム スタートのベスト プラクティス

MATLABでのウォーム スタートの使用

lsqlinソルバーとquadprogソルバーは、強化された初期点としてウォーム スタート オブジェクトの使用をサポートしています。ウォーム スタート オブジェクトは、前回の求解によるアルゴリズム固有のデータを保存して、求解ごとに行われる高コストな初期化の回避に役立ちます。ウォーム スタートを使用すると、複数のソルバー呼び出しにおけるパフォーマンスが大幅に向上する可能性があります。ソルバーでウォーム スタートを使用するには、まずoptimwarmstartを使用してウォーム スタート オブジェクトを作成します。初期点x0と、optimoptionsで作成したオプション (Algorithmオプションを'active-set'に設定するなど) を指定します。基本的な例については、quadprogウォーム スタート オブジェクトを返すおよびlsqlinウォーム スタート オブジェクトを返すを参照してください。より広範囲な例は、quadprog のウォーム スタートを参照してください。

ウォーム スタート オブジェクトは、似た問題のシーケンスを解く場合に使用します。最良のパフォーマンスを得るには、次のガイドラインに従います。

  • 変数の数を同じにする。変数の数を次の問題と同じにしなければなりません。変数の数が変わると、ソルバーでエラーが発生します。

  • 等式制約を変更しない。等式制約の行列Aeqまたはbeqを変更すると、ソルバーでウォーム スタートを使用できなくなります。

  • 行列Aの一部の行を変更する。ウォーム スタートが最も効率的に機能するのは、問題で制約A*x <= bを表す行列Aの一部の行と、対応するベクトルbのみを変更した場合です。この変更には、1 つ以上の制約の追加や削除を含みます。

  • ベクトルbの一部の要素を変更する。ウォーム スタートが最も効率的に機能するのは、問題でベクトルbの一部の要素のみを変更した場合です。

  • 一部の範囲制約を変更する。ウォーム スタートが最も効率的に機能するのは、問題で一部の範囲制約のみを変更 (上限または下限のエントリを追加、削除、または変更) した場合です。この変更には、Infまたは –Infの範囲設定を含みます。

  • 目的関数を変更する。ウォーム スタートが効果を発揮できるのは、目的関数を表す行列またはベクトル (quadprogH配列とf配列またはlsqlinC配列とd配列) を変更した場合です。しかし、これらの配列を大きく変更すると、前回の求解と新しい求解がかけ離れて、効率性が損なわれる可能性があります。

ウォーム スタートによるパフォーマンス改善は、結局のところ問題の幾何形状に依存します。多くの問題では、問題間でごくわずかな変更があった場合にパフォーマンス改善が大きくなります。

静的メモリ管理を行うコード生成でのウォーム スタートの使用

静的メモリ管理を行うコード生成では,MATLAB®のウォーム スタートに関するガイドラインに加えて、次のガイドラインにも従います。

  • optimwarmstartで、名前と値の引数'MaxLinearEqualities'および'MaxLinearInequalities'を設定する。

  • 行列のソルバー入力 (lbAeqなど) すべてにcoder.varsize(MATLAB Coder)マクロを使用する。

参考

|||(MATLAB Coder)

関連するトピック