Main Content

optimwarmstart

ウォーム スタート オブジェクトの作成

R2021a 以降

説明

ws = optimwarmstart(x0,options) は、options で示したソルバーで使用するウォーム スタート オブジェクト ws を作成します。ウォーム スタート オブジェクトを使用する例は、ウォーム スタート オブジェクトを返すを参照してください。

ws = optimwarmstart(x0,options,Name,Value) は、名前と値の引数を使用して、ws にメモリ範囲を組み込みます。メモリ範囲はコードを生成する場合にのみ使用します。

すべて折りたたむ

quadprog の既定のウォーム スタート オブジェクトを作成します。

x0 = [1 3 5];
options = optimoptions('quadprog','Algorithm','active-set');
ws = optimwarmstart(x0,options)
ws = 

  QuadprogWarmStart with properties:

          X: [3×1 double]
    Options: [1×1 optim.options.Quadprog]

    Code generation limitations

コード生成のためにメモリ制限をもつ lsqlin ウォーム スタート オブジェクトを作成します。

x0 = [1 3 5];
options = optimoptions('lsqlin','Algorithm','active-set');
ws = optimwarmstart(x0,options,...
    'MaxLinearEqualities',30,...
    'MaxLinearInequalities',5)

ws = LsqlinWarmStart with properties X and Options and a link "Code generation limitations"

Code generation limitations リンクをクリックして、メモリ設定を確認します。

  MaxLinearEqualities: 30 
MaxLinearInequalities: 5 

この後の quadprog の呼び出しを高速化するために、ウォーム スタート オブジェクトを作成します。

options = optimoptions('quadprog','Algorithm','active-set');
x0 = [1 2 3];
ws = optimwarmstart(x0,options);

ws を使用して二次計画法を解きます。

H = [1,-1,1
    -1,2,-2
    1,-2,4];
f = [-7;-12;-15];
A = [1,1,1];
b = 3;
lb = zeros(3,1);
tic
[ws,fval,exitflag,output,lambda] = quadprog(H,f,A,b,[],[],lb,[],ws);
Minimum found that satisfies the constraints.

Optimization completed because the objective function is non-decreasing in 
feasible directions, to within the value of the optimality tolerance,
and constraints are satisfied to within the value of the constraint tolerance.

<stopping criteria details>
toc
Elapsed time is 0.060411 seconds.

目的関数を変更し、再び問題を解きます。

f = [-10;-15;-20];

tic
[ws,fval,exitflag,output,lambda] = quadprog(H,f,A,b,[],[],lb,[],ws);
Minimum found that satisfies the constraints.

Optimization completed because the objective function is non-decreasing in 
feasible directions, to within the value of the optimality tolerance,
and constraints are satisfied to within the value of the constraint tolerance.

<stopping criteria details>
toc
Elapsed time is 0.010756 seconds.

入力引数

すべて折りたたむ

初期点。実数配列として指定します。この点は ws.X に保存されます。

例: 10*rand(5,1)

データ型: double

最適化オプション。optimoptions の出力として指定されます。少なくとも、サポートされているソルバー (lsqlin または quadprog) と、Algorithm'active-set' を指定しなければなりません。たとえば、quadprog ソルバーを指定する場合は次のコードを入力します。

options = optimoptions('quadprog','Algorithm','active-set');

これらのオプションは ws.Options に保存されます。

名前と値の引数

引数の任意のペアを Name1=Value1,...,NameN=ValueN のように指定します。Name は引数名、Value は対応する値です。名前と値の引数は、他の引数より後に指定されている必要があります。ただし、各ペアの順序は任意です。

R2021a 以前では、それぞれの名前と値をコンマで区切り、Name を引用符で囲みます。

例: ws = optimwarmstart(x0,options,'MaxLinearEqualities',30,'MaxLinearInequalities',5) は、線形等式の最大数として 30 を、線形不等式の最大数として 5 を指定します。

線形等式制約の最大数。正の整数として指定します。等式制約に十分なメモリを割り当てるには、コードの実行全体における等式制約の最大数を指定します。

この引数は、動的メモリ割り当てを行わないコード生成にのみ使用します。この引数と 'MaxLinearInequalities' を両方とも使用しなければなりません。

この引数の値は ws.MaxLinearEqualities に保存されます。

例: 25

データ型: double

線形不等式制約の最大数。正の整数として指定します。不等式制約に十分なメモリを割り当てるには、コードの実行全体における不等式制約の最大数を指定します。

この引数は、動的メモリ割り当てを行わないコード生成にのみ使用します。この引数と 'MaxLinearEqualities' を両方とも使用しなければなりません。

この引数の値は ws.MaxLinearInequalities に保存されます。

例: 25

データ型: double

出力引数

すべて折りたたむ

ウォーム スタート オブジェクト。LsqlinWarmStart オブジェクトまたは QuadprogWarmStart オブジェクトとして返されます。ウォーム スタート オブジェクトを使用する例は、quadprog のウォーム スタートを参照してください。

ws には次の読み取り専用プロパティがあります。

  • X — 初期点

  • Options — 最適化オプション

  • MaxLinearEqualities — コード生成における線形等式の最大数

  • MaxLinearInequalities — コード生成における線形不等式の最大数

ws のプロパティを変更するには、optimwarmstart を呼び出してオブジェクトを再作成します。

アルゴリズム

ウォーム スタート オブジェクトは、前回解いた問題のアクティブな制約のリストを維持します。ソルバーは、アクティブな制約情報を可能な限り多く引き継いで、現在の問題を解きます。前回の問題と現在の問題が違いすぎる場合、アクティブ セットの情報は再利用されません。この場合、ソルバーは効率的にコールド スタートを実行して、アクティブな制約のリストを再構築します。

拡張機能

バージョン履歴

R2021a で導入