メインコンテンツ

infeasibility

点における制約違反

説明

infeasibility を使用して、ある点における制約違反の数値を求めます。

ヒント

完全なワークフローについては、問題ベースの最適化ワークフローまたは方程式を解くための問題ベースのワークフローを参照してください。

infeas = infeasibility(constr,pt) は、点 pt における制約 constr の違反の数を返します。

infeas = infeasibility(var,pt) は、点 pt における範囲制約と整数制約の違反を返します。

すべて折りたたむ

点が制約を満たしているかどうかを確認します。

最適化変数と 2 つの制約を設定します。

x = optimvar("x");
y = optimvar("y");
cons = x + y <= 2;
cons2 = x + y/4 <= 1;

x = 0, y = 4cons という名前の制約を満たしているかどうかを確認します。実行不可能性がゼロの場合に、点は実行可能です。

pt.x = 0;
pt.y = 4;
infeas = infeasibility(cons,pt)
infeas = 
2

点は、この制約に関して実行不可能です。

その他の制約に関する実行可能性を確認します。

infeas = infeasibility(cons2,pt)
infeas = 
0

点は、この制約に関して実行可能です。

点が複数の条件をもつ制約を満たしているかどうかを確認します。

最適化変数と制約のベクトルを設定します。

x = optimvar("x",3,2);
cons = sum(x,2) <= [1;3;2];

pt.x = [1,-1;2,3;3,-1] がこれらの制約を満たしているかどうかを確認します。

pt.x = [1,-1;2,3;3,-1];
infeas = infeasibility(cons,pt)
infeas = 3×1

     0
     2
     0

点は、2 番目の制約に関して実行不可能です。

範囲制約、整数制約、半連続制約をもつ最適化変数を作成します。

x = optimvar("x",LowerBound=-2,UpperBound=2,Type="integer");
y = optimvar("y",LowerBound=1/2,Type="semi-continuous");

いくつかの点の実行可能性を確認します。

pt.x = 1;
pt.y = 1;
infeasibility(x,pt)
ans = 
0
infeasibility(y,pt)
ans = 
0

x 変数と y 変数は、どちらも点 x = 1y = 1 において実行可能です。

pt.x = 1.5;
infeasibility(x,pt)
ans = 
0.5000

x は整数変数であるため、x 変数の x = 1.5 における実行不可能性は 1/2 です。

pt.y = 0;
infeasibility(y,pt)
ans = 
0

y は半連続変数であるため、y の下限が 1/2 であっても、y 変数の y = 0 における実行不可能性は 0 です。

pt.y = -2;
infeasibility(y,pt)
ans = 
2

y は下半連続であり、y = 0 において実行可能であるため、y 変数の y = -2 における実行不可能性は 2 です。

pt.x = -4;
infeasibility(x,pt)
ans = 
2

x は下限が -2 であるため、x 変数の x = -4 における実行不可能性は 2 です。

pt.y = 1/4;
infeasibility(y,pt)
ans = 
0.2500

y は下限が 1/2 であるため、y 変数の y = 1/4 における実行不可能性は 1/4 です。

入力引数

すべて折りたたむ

最適化制約。OptimizationEquality オブジェクト、OptimizationInequality オブジェクト、または OptimizationConstraint オブジェクトとして指定します。constr は単一の制約または制約の配列を表すことができます。

例: constr = x + y <= 1 は、xy がスカラー変数の場合は単一の制約です。

例: constr = sum(x) == 1 は、x が 2 次元以上の配列の場合は制約の配列です。

最適化変数。OptimizationVariable オブジェクトとして指定します。infeasibility は範囲制約と整数制約の違反を次のように計算します。

変数の型範囲と型の実行不可能性
連続max(0,lb - x,x - ub)
整数max(0,lb - x,x - ub,abs(x - round(x)))
半連続min(max(0,lb - x,x - ub),abs(x))
半整数min(max(0,lb - x,x - ub,abs(x - round(x))),abs(x))

例: var = optimvar("var",LowerBound=0,UpperBound=10.5)

評価する点。制約の最適化変数に対して、最適化変数名に一致するフィールド名をもつ構造体として指定します。pt 内の各フィールドのサイズは、対応する最適化変数のサイズと一致していなければなりません。

例: pt.x = 5*eye(3)

データ型: struct

出力引数

すべて折りたたむ

制約または変数の実行不可能性。実数配列として返されます。制約の場合、ゼロである各エントリは実行可能な制約を表し、正の各エントリは実行不可能な制約を表します。infeas のサイズは、制約 constr のサイズと同じです。非スカラー infeas の例については、複数の制約違反の計算を参照してください。

R2026a 以降では、変数の型に応じて、infeasibility で範囲制約および整数制約に対する最適化変数の実行不可能性も計算されます。

変数の型範囲と型の実行不可能性
連続max(0,lb - x,x - ub)
整数max(0,lb - x,x - ub,abs(x - round(x)))
半連続min(max(0,lb - x,x - ub),abs(x))
半整数min(max(0,lb - x,x - ub,abs(x - round(x))),abs(x))

以下に例を示します。

x = optimvar("x",Type="integer",LowerBound=6.5,UpperBound=10);
pt.x = 5;
infeasibility(x,pt)
ans =

    1.5000

警告

問題ベースのアプローチでは、目的関数、非線形等式、および非線形不等式における複素数値はサポートされていません。関数の計算に複素数値が含まれていると、それが中間値としてであっても、最終結果が不正確になる場合があります。

詳細

すべて折りたたむ

ヒント

ツールボックスには点の実行可能性を計算するための関数が 3 つあります。

バージョン履歴

R2017b で導入

すべて展開する