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)

関連するトピック