Main Content

secondordercone

2 次錐制約の作成

R2020b 以降

説明

secondordercone 関数は、不等式

AxbdTxγ

を表す 2 次錐制約を入力行列の Abd、および gamma から作成します。

socConstraint = secondordercone(A,b,d,gamma) は、2 次錐制約オブジェクト socConstraint を作成します。

coneprog 関数を使用して、2 次錐制約を含む問題を解きます。複数の錐制約を表すには、例 複数の錐制約 で示すように coneprog に制約の配列を渡します。

すべて折りたたむ

1 つの 2 次錐制約を含む問題を設定するには、2 次錐制約オブジェクトを作成します。

A = diag([1,1/2,0]);
b = zeros(3,1);
d = [0;0;1];
gamma = 0;
socConstraints = secondordercone(A,b,d,gamma);

目的関数ベクトルを作成します。

f = [-1,-2,0];

この問題には、線形制約がありません。これらの制約用の空行列を作成します。

Aineq = [];
bineq = [];
Aeq = [];
beq = [];

x(3) の上限と下限を設定します。

lb = [-Inf,-Inf,0];
ub = [Inf,Inf,2];

coneprog 関数を使用して問題を解きます。

[x,fval] = coneprog(f,socConstraints,Aineq,bineq,Aeq,beq,lb,ub)
Optimal solution found.
x = 3×1

    0.4851
    3.8806
    2.0000

fval = -8.2462

解の要素 x(3) は上限値です。錐制約は次の解においてアクティブです。

norm(A*x-b) - d'*x % Near 0 when the constraint is active
ans = -2.5677e-08

複数の 2 次錐制約を含む問題を設定するには、制約オブジェクトの配列を作成します。時間とメモリを節約するために、最初に、最もインデックスの高い制約を作成します。

A = diag([1,2,0]);
b = zeros(3,1);
d = [0;0;1];
gamma = -1;
socConstraints(3) = secondordercone(A,b,d,gamma);

A = diag([3,0,1]);
d = [0;1;0];
socConstraints(2) = secondordercone(A,b,d,gamma);

A = diag([0;1/2;1/2]);
d = [1;0;0];
socConstraints(1) = secondordercone(A,b,d,gamma);

線形目的関数ベクトルを作成します。

f = [-1;-2;-4];

coneprog 関数を使用して問題を解きます。

[x,fval] = coneprog(f,socConstraints)
Optimal solution found.
x = 3×1

    0.4238
    1.6477
    2.3225

fval = -13.0089

入力引数

すべて折りたたむ

円錐の線形因子。実数行列として指定されます。A 内の列数は d 内の要素数と一致しなければなりません。A 内の行数は b 内の要素数と一致しなければなりません。

例: diag([1,1/2,0])

データ型: double

円錐の中心。実数ベクトルとして指定されます。b 内の要素数は A 内の行数と一致しなければなりません。

例: zeros(3,1)

データ型: double

線形範囲。実数ベクトルとして指定されます。d 内の要素数は A 内の列数と一致しなければなりません。

例: [0;0;1]

データ型: double

範囲。実数スカラーとして指定されます。gamma の値が小さいほど、制約は緩くなります。

例: -1

データ型: double

出力引数

すべて折りたたむ

2 次錐制約。SecondOrderConeConstraint オブジェクトとして返されます。このオブジェクトを coneprog ソルバーの制約として使用します。錐制約が複数存在する場合は、制約のベクトルを coneprog に渡します。複数の錐制約を参照してください。

バージョン履歴

R2020b で導入