主要内容

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

coneprog

2次錐計画法ソルバー

説明

coneprog関数は,以下で指定された問題の最小値を見つける2次錐計画法ソルバーです。

最小值 x f T x

以下の制约にます。

一个 sc x b sc d sc T x γ. 一个 x b Aeq x 说真的 x 乌兰巴托

f, x, b,说真的,磅,乌兰巴托はベクトル,一个とAeqは行列です。我ごとに,行列sc(我),ベクトルのdsc(i)とbsc(i),およびスカラーγ(i)が,secondorderconeを使使た2次锥制约に含まれていますますますますます。

錐制約の詳細については,2 次錐制約を参照してください。

x= coneprog (fsocConstraintsは,次のようにエンコードされたsocConstraints内の制約を使用して2次錐計画問題を解きます。

  • 一个sc(i)=socConstraints.A(我)

  • bsc(i)=socConstraints.b(我)

  • dsc(i)=socConstraints.d(我)

  • γ(i)=socConstraints.gamma(我)

x= coneprog (fsocConstraints一个bAeq说真的は,不等式制約* xbと等式制約Aeq * x =说真的が課された問題を解きます。不等式が存在しない場合は一个= []およびb = []と設定してください。

x= coneprog (fsocConstraints一个bAeq说真的乌兰巴托は,解が常にLb≤x≤ubの範囲に入るように,設計変数xの上限と下限のセットを定義します。等式が存在しない場合にはAeq = []およびBEQ = []と設定してください。

x= coneprog (fsocConstraints一个bAeq说真的乌兰巴托选项は,选项で指定された最適化オプションを使用して最小化します。optimoptionsを使用してこれらのオプションを設定してください。

x= coneprog (问题は,问题で説明されている構造体问题の最小値を求めます。

また,xfval) = coneprog (___は,前の構文の入力引数の組み合わせのいずれかを使用して,解fvalf ' * xにおける目的関数値を返します。

xfvalexitflag输出) = coneprog (___は上記に加え,終了条件を記述する値exitflag,および最適化プロセスに関する情報を含む構造体输出を返します。

加えて,xfvalexitflag输出λ) = coneprog (___は,解xでフィールドに双対変数が含まれている構造体λを返します。

すべて折りたたむ

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

一个=诊断接头([1,1/2,0]);b = 0 (3,1);d = [0, 0, 1];γ= 0;socConstraints = secondordercone (A, b, d,γ);

目的关键词作物

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

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

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

x (3)の上限と设定します。

磅=(负负0);乌兰巴托=(正,正无穷,2);

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

[x,fval] = coneprog(f,socconstraints,aineq,bineq,aeq,beq,lb,Ub)
找到最优解。
x =3×10.4851 3.8806 2.0000
fval = -8.2462

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

常态(a * x-b) -  d'* x%在约束激活时接近0
ans = -2.5677 e-08

复数の2次锥制约を含む问题设定するには,制约オブジェクトの配列を作用成し。时间とメモリを节约ために,最初に,最もインデックスの高度制约を作物。

一个=诊断接头([1 2 0]);b = 0 (3,1);d = [0, 0, 1];γ= 1;socConstraints (3) = secondordercone (A, b, d,γ);一个=诊断接头([0,1]);d = (0, 1, 0);socConstraints (2) = secondordercone (A, b, d,γ);一个=诊断接头([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)
找到最优解。
x =3×10.4238 1.6477 2.3225
fval = -13.0089

目的関数ベクトルと単一の2次錐制約を指定します。

f =(4、9;2);Asc =诊断接头((1,4,0));b = (0, 0, 0);d = [0, 0, 1];γ= 0;socConstraints = secondordercone (Asc, b, d,γ);

線形不等式制約を指定します。

一个=[1/4、1/9 1];b = 5;

问题を解きます。

[x, fval] = coneprog (f, socConstraints, A, b)
找到最优解。
x =3×13.2304 0.6398 4.1213
fval = -26.9225

coneprogソルバーの反復を観察するには,显示オプションを“通路”に設定します。

选项= Optimoptions('coneprog''展示'“通路”);

2次錐計画問題を作成し,それを选项を使用して解きます。

Asc =诊断接头([1,1/2,0]);b = 0 (3,1);d = [0, 0, 1];γ= 0;socConstraints = secondordercone (Asc, b, d,γ);f = (1 2 0);Aineq = [];bineq = [];Aeq = [];说真的= []; lb = [-Inf,-Inf,0]; ub = [Inf,Inf,2]; [x,fval] = coneprog(f,socConstraints,Aineq,bineq,Aeq,beq,lb,ub,options)
Iter Iter Fval Primal infas Dual infas Dual Gap Time 1 0.000000e+00 0.000000e+00 5.714286e-01 1.250000e-01 0.06 2 -7.558066e+00 0.000000e+00 7.151114e-02 1.64306e -02 0.14 3 -7.366973e+00 0.000000e+00 1.075440e-02 2.352525e-03 0.14 4 -8.243432e+00 0.000000e+00 5.191888e -05 1.135724e-05 0.15 5 -8.246067e+00 1.387779e +00 5.714286e-01 5.317403e-07找到了最优解。
x =3×10.4851 3.8806 2.0000
fval = -8.2462

2次錐計画問題の要素を作成します。時間とメモリを節約するために,最初に,最もインデックスの高い制約を作成します。

一个=诊断接头([1 2 0]);b = 0 (3,1);d = [0, 0, 1];γ= 1;socConstraints (3) = secondordercone (A, b, d,γ);一个=诊断接头([0,1]);d = (0, 1, 0);socConstraints (2) = secondordercone (A, b, d,γ);一个=诊断接头([0;1/2;1/2]);d = (1, 0, 0); socConstraints(1) = secondordercone(A,b,d,gamma); f = [-1;-2;-4]; options = optimoptions('coneprog''展示'“通路”);

问题で説明されているように,必須フィールドを含む問題構造体を作成します。

问题=结构(“f”f...'socconstraints'socConstraints,...“Aineq”[],“bineq”[],...'AEQ'[],“说真的”[],...'磅'[],乌兰巴托的[],...“规划求解”'coneprog'...'选项',选项);

coneprogを呼び出して问题を解きます。

[x, fval] = coneprog(问题)
ITER FVAL PRIMAL INFEAS双INFEA二元间隙时间1 0.000000E + 00 0.000000E + 00 5.333333E-01 5.555556E-02 0.25 2 -9.696012E + 00 1.850372E-17 7.631901C-02 7.949897E-03 0.28 3 -1.178942E+01 9.251859E-18 1.261803E-02 1.314378E-03 0.28 4 -1.294426E + 01 1.850372C-17 1.683078C-03 1.753206C-04 0.29 5 -1295217E + 01 1.850372C-17 8.994595E-04 9.369370E-05 0.29 6 -1.295331C + 01 1.850372E-17 4.748841C-04 4.748841C-04 4.948841C-05 0.29 7 -1300753E + 01 9.251859E-18 2.799942C-05 2.916606C-05 2.916606E-06 2.916606E-06 0.29 8 -1300671E + 01 9.251859E-18 2.366136e-05 2.464725e-06 0.29 9 -1.300850e+01 1.850372e-17 8.187205e-06 8.528338e-07 0.30 10 -1.300843e+01 4.625929e-18 7.326330e-06 7.631594e-07 0.30 11 -1.300862e+01 9.251859e-18 2.707005e-06 2.819797e-07 0.30 12 -1.300892e+01 0.000000e+00 9.204457e-08 9.587976e-09 0.30 Optimal solution found.
x =3×10.4238 1.6477 2.3225
fval = -13.0089

2次錐計画問題を作成します。時間とメモリを節約するために,最初に,最もインデックスの高い制約を作成します。

一个=诊断接头([1 2 0]);b = 0 (3,1);d = [0, 0, 1];γ= 1;socConstraints (3) = secondordercone (A, b, d,γ);一个=诊断接头([0,1]);d = (0, 1, 0);socConstraints (2) = secondordercone (A, b, d,γ);一个=诊断接头([0;1/2;1/2]);d = (1, 0, 0); socConstraints(1) = secondordercone(A,b,d,gamma); f = [-1;-2;-4]; options = optimoptions('coneprog''展示'“通路”);a = [];b = [];Aeq = [];说真的= [];lb = [];UB = [];

解法プロセスに関する情報を要求する問題を解きます。

[x,fval,出口,输出] = coneprog(f,socconstraints,a,b,aeq,beq,lb,Ub,选项)
Iter Fval Primal infas Dual infas Dual Gap Time 1 0.000000e+00 0.000000e+00 5.333333e-01 5.555556e-02 0.07 2 -9.696012e+00 1.850372e-17 7.631901e-02 7.949897e-03 0.07 3 -1.178942e+01 9.251859e-18 1.261803e- 03 1.753206e-04 0.07 5 -1.294426e+01 1.850372e-17 1.994595e -04 9.369370e-050.08 7 -1.300753e+01 9.251859e-18 2.799942e-05 2.916606e-06 0.08 9 -1.300850e+01 1.850372e-17 8.187205e-06 8.528338e-07 0.08 11 - 1.300852 e+01 9.251859e-18 2.79994e -05找到最优解。
x =3×10.4238 1.6477 2.3225
fval = -13.0089
exitflag = 1
输出=结构体字段:迭代:12 primalfeasibility: 0 dualfeasibility: 9.2045e-08 dualitygap: 9.5880e-09 algorithm: 'interior-point' linearsolver: 'augmented' message: 'Optimal solution found.'
  • 反復表示と出力構造体の両方に,coneprogが12回の反復を使用して解に到達したことが示されます。

  • 終了フラグ値1output.message找到最优解。は,解が信息できること示します。

  • 输出構造体には,双対性ギャップと同様に,解法プロセスを通して実行不可能性が減少する傾向にあることが示されます。

  • fval出力は,f ' * xを乗算することによって再現できます。

f ' * x
ans = -13.0089

2次錐計画問題を作成します。時間とメモリを節約するために,最初に,最もインデックスの高い制約を作成します。

一个=诊断接头([1 2 0]);b = 0 (3,1);d = [0, 0, 1];γ= 1;socConstraints (3) = secondordercone (A, b, d,γ);一个=诊断接头([0,1]);d = (0, 1, 0);socConstraints (2) = secondordercone (A, b, d,γ);一个=诊断接头([0;1/2;1/2]);d = (1, 0, 0); socConstraints(1) = secondordercone(A,b,d,gamma); f = [-1;-2;-4];

他のすべてのconeprog出力とともに解における双対変数を要求する问题を解きます。

[x, fval exitflag、输出λ)= coneprog (f, socConstraints);
找到最优解。

返されたλ構造体を調査します。唯一の問題制約が錐制約のため,λ构造体内socフィールドだけを調査します。

disp (lambda.soc)
1.0E-05 * 0.0570 0.1946 0.0618

制约には,解において制约が有效であることを示す非ゼロの双対値が含まれています。

入力引数

すべて折りたたむ

係数ベクトル。実数ベクトルまたは実数配列として指定されます。係数ベクトルは、目的関数f ' * xを表します。表記では,fが列ベクトルになってますがが,行ベクトルや配列も使でき。coneprogは配列fを列ベクトルf (:)に内部的に変換します。

例:f =(1、3、5、6)

データ型:

SecondOrderConeConstraintオブジェクトのベクトルとして指定された,2次錐制約secondordercone関数を使用してこれらのオブジェクトを作成します。

socConstraintsが次の制約をエンコードします。

一个 sc x b sc d sc T x γ.

ここで,配列と方程式の対応付けを以下に示します。

  • 一个sc(i)=socConstraints.A(我)

  • bsc(i)=socConstraints.b(我)

  • dsc(i)=socConstraints.d(我)

  • γ(i)=socConstraints.gamma(我)

例:asc = diag([1 1/2 0]);BSC =零(3,1);dsc = [0; 0; 1];γ= 1;socconstraints = termindordercone(ASC,BSC,DSC,伽玛);

データ型:结构体

実数行列として指定される線形不等式制約です。一个N列の行列で,は不等式の数,Nは変数の数(fの长さ)です。大规模な问题ののは,一个をスパース行列として渡します。

一个個の線形不等式を符号化します。

a * x <= b

ここで,xN个の数x (:)の列ベクトル,b個の要素をもつ列ベクトルです。

たとえば,次の不等式を考えてみましょう。

x1+ 2倍2≤10
3 x1+ 4 x2≤20
5倍1+ 6 x2≤30。

次の制約を入力することによって,不等式を指定します。

= [1, 2, 3, 4, 5, 6);b =(10、20、30);

例:x成分の和が1以下になるように指定するために,一个= 1 (1,N)b = 1をとります。

データ型:

実数ベクトルで指定される線形不等式制約です。bは,行列一个に関連する要素ベクトルです。bを行ベクトルとして渡す場合,ソルバーはbを列ベクトルb (:)に内部的に変換します。大規模な問題の場合は,bをスパースベクトルとして渡します。

b個の線形不等式を符号化します。

a * x <= b

ここで,xN个の数x (:)の列ベクトル,一个N列の行列です。

たとえば,次の不等式を考えてみましょう。

x1+ 2倍2≤10
3 x1+ 4 x2≤20
5倍1+ 6 x2≤30。

次の制約を入力することによって,不等式を指定します。

= [1, 2, 3, 4, 5, 6);b =(10、20、30);

例:xの成分の和が1以下であることを指定するには,一个= 1 (1,N)b = 1を使使し。

データ型:

実数行列として指定される線形等式制約です。AeqN列の行列で,は等式の数,Nは変数の数(fの长さ)です。大规模な问题ののは,Aeqをスパース行列として渡します。

Aeq個の線形等式を符号化します。

Aeq * x =说真的

ここで,xN个の数x (:)の列ベクトル,说真的個の要素をもつ列ベクトルです。

たとえば,次次の等式式考えてみましょましょ

x1+ 2倍2+ 3 x3.= 10
2 x1+ 4 x2+ x3.= 20。

次の制約を入力することによって,等式を指定します。

Aeq =[1、2、3、2、4、1];说真的=(10、20);

例:1 x成分の和がになるように指定するために,AEQ =α(1,n)说真的= 1をとります。

データ型:

実数ベクトルで指定される线形等式制约です。说真的は,行列Aeqに関連する要素ベクトルです。说真的を行ベクトルとして渡す場合,ソルバーは说真的を列ベクトル说真的(:)に内部的に変換します。大規模な問題の場合は,说真的をスパースベクトルとして渡します。

说真的個の線形等式を符号化します。

Aeq * x =说真的

ここで,xN个の数x (:)の列ベクトル,AeqN列の行列です。

たとえば,次次の等式式考えてみましょましょ

x1+ 2倍2+ 3 x3.= 10
2 x1+ 4 x2+ x3.= 20。

次の制約を入力することによって,等式を指定します。

Aeq =[1、2、3、2、4、1];说真的=(10、20);

例:xの成分の和1であるがことことを指定するにはにににAEQ =α(1,n)说真的= 1を使使し。

データ型:

单位ベクトルベクトルまたは配列指定されれ。fの長さがの长さと等しい等しい合,は次を指定します。

x(i)> = lb(i)(すべてのについて)

元素个数(磅)<元素个数(f)のの合,は次を指定します。

x(i)> = lb(i)1 <= I <= numel(lb)

この場合,ソルバーによって警告が発行されます。

例:すべてのx成分が正になるように指定するには,磅= 0(大小(f))を使使し。

データ型:

実数ベクトルまたは実数配列として指定される上限です。fの長さが乌兰巴托の长さと等しい等しい合,乌兰巴托は次を指定します。

x (i) < =乌兰巴托(我)(すべてのについて)

元素个数(乌兰巴托)<元素个数(f)のの合,乌兰巴托は次を指定します。

x (i) < =乌兰巴托(我)1 <= i <= numel(UB)

この場合,ソルバーによって警告が発行されます。

例:すべてのx成分1未満になるように指定するには,乌兰巴托= 1(大小(f))を使使し。

データ型:

最適化オプション。optimoptionsの出力として指定されます。

オプション 説明
ConstraintTolerance

制約の実行可能性の許容誤差で0から1のスカラー。ConstraintToleranceは,主実行可能性の許容誤差を測定します。既定値は1 e-6です。

显示

表示レベル(反复表示を参照):

  • '最终的'(既定)——最終出力のみを表示する。

  • “通路”- 各反复のの力を表示する。

  • '离开'または“没有”——出力を表示しない。

LinearSolver

反復における1ステップを解くためのアルゴリズム:

  • “汽车”(既定)coneprogがステップソルバーを選択する。

    • スパースな問題の場合は“prodchol”をステップソルバーとする。

    • それ以外の場合は“增强”をステップソルバーとする。

  • “增强”- 拡张形式のステップソルバー。详细详细,[1]を参照してください。

  • “正常”——標準形式のステップソルバー。詳細は,[1]を参照してください。

  • “prodchol”——積形式のコレスキーステップソルバー。詳細は,[4][5]を参照してください。

  • “舒尔”——シューア補行列法ステップソルバー。詳細は,[2]を参照してください。

“汽车”がうまく動作しなかった場合は,LinearSolverで次の方法を試してみてください。

  • スパースな問題の場合は,“正常”を試してみます。

  • スパースな問題で,なおかつ密な列がいくつかある場合や大きな円錐がある場合は,“prodchol”または“舒尔”を試してみます。

  • 密な問題の場合は,“增强”を使使し。

スパースの例については,Coneprogアルゴリズムアルゴリズムの速度のを参照してください。

MaxIterations

可以な反复の最大数(正の整数)。既定値200です。

詳細は,許容誤差と停止条件反復と関数計算回数を参照してください。

MaxTime

アルゴリズムを実行する秒単位の最長時間。正の数値またはinf。既定値はinfで,この停止条件を無効にします。

OptimalityTolerance

双対実行可能性に関する終了許容誤差(正のスカラー)。既定値は1 e-6です。

例:optimoptions(‘coneprog’,‘显示’,‘iter’,‘MaxIterations’,100)

次のフィールドをもつ構造体として指定される問題構造体です。

フィールド名 エントリ

f

線形目的関数ベクトルf

socConstraints

2次錐制約の構造体配列

Aineq.

線形不等式制約の行列

bineq

线形不成语制约のベクトル

Aeq

線形等式制約の行列

说真的

線形等式制約のベクトル
下限のベクトル
乌兰巴托 上限のベクトル

解算器

'coneprog'

选项

optimoptionsで作成されたオプション

データ型:结构体

出力引数

すべて折りたたむ

実数ベクトルまたは実数配列として返される解です。xのサイズは,fのサイズと同じです。xの出力は,exitflagの値が -2、-3.,または-10の结合にに空になりなりなり

解での目的関数値。実数として返されます。一般的に、fvalf ' * xになります。fvalの出力は,exitflagの値が -2、-3.,または-10の结合にに空になりなりなり

coneprogの停止理由。整数として返されます。

説明

1

関数が解xに収束したことを示します。

0

反復回数が选项。米axIterationsを超過したか,秒単位の求解時間が选项。MaxTimeを超過しました。

-2

実行可能な点が見つかりません。

-3

问题が非有界。

-7

探索方向が小さくなりすぎ,これ以上進むことができないことを示します。

-10

問題が数値的に不安定です。

ヒント

終了フラグ値として0-7,または-10を取得した場合は,LinearSolverオプションの値を変えてみてください。

最適化プロセスに関する情報。次のフィールドをもつ構造体として返されます。

フィールド 説明
算法

使用される最适化

dualfeasibility

双対制約違反の最大値

dualitygap

双対性ギャップ

迭代

反复数

消息

終了メッセージ

primalfeasibility

制約違反の最大値

linearsolver 使用される内部ステップソルバーアルゴリズム

输出のフィールドのdualfeasibilitydualitygap,およびprimalfeasibilityは,exitflagの値が2 3または-10の場合に空になります。

解における双対変数。次のフィールドをもつ構造体として返されます。

フィールド 説明
较低的

に対応する下限

乌兰巴托に対応する上限

ineqlin

一个およびbに対応する線形不等式

eqlin.

Aeqおよび说真的に対応する線形等式

soc socConstraintsに対応する2次錐制約

λは,exitflagの値が -2、-3.,または-10の場合に空([])になります。

ラグランジュ乗数(双対変数)は,解において一定(ゼロ勾配)の次のラグランジュ関数の一部です。

f T x + λ. soc d soc T x γ 一个 soc x b soc + λ. ineqlin T b 一个 x + λ. eqlin. T Aeq x 说真的 + λ. T 乌兰巴托 x + λ. 较低的 T x

λフィールドを乗算する不等式項は非負です。

詳細

すべて折りたたむ

2 次錐制約

制約の

一个 x b d T x γ.

が2次錐制約と呼ばれる理由3次元空間でx - y平面が楕円形の断面で,直径がz座標に直交している円錐を考えます。y座標のスケールは½で,x座標のスケールは1です。[0,0,0] にある点でこの円錐の内部を定義する不等式は次のとおりです。

x 2 + y 2 4 z

coneprog構文では,この円錐は次の引数をとります。

A = diag([1 1/2 0]);b = (0, 0, 0);d = [0, 0, 1];γ= 0;

円錐の境界をプロットします。

(X, Y) = meshgrid (2:0.1:2);Z =√X。^ 2 + y ^ 2/4);冲浪(X, Y, Z)视图(8,2)包含“x”ylabel“y”zlabel“z”

圆锥的点在零,在垂直方向变宽。

b引数とγ引数によって,円錐が移動します。一个引数とd引数によって,円錐が回転し,その形状が変化します。

アルゴリズム

アルゴリズムは内点法を使用します。詳細は,2次錐計画法アルゴリズムを参照してください。

代替機能

アプリ

最最化ライブエディタータスクがconeprogにビジュアルインターフェイスを提供します。

互換性の考慮事項

开する

R2021aでの動作変更

R2020bで導入