メインコンテンツ

OptimizationInequality

説明

OptimizationInequality オブジェクトには、OptimizationVariable オブジェクトまたは OptimizationExpression オブジェクトに関する不等式制約が含まれます。不等式制約では比較演算子 <= または >= を使用します。

1 つのステートメントによって 1 つの不等式配列を表すことができます。たとえば、行列変数 x の各行の和を 1 以下とする不等式を、この 1 つのステートメントで表すことができます。

constrsum = sum(x,2) <= 1

OptimizationInequality オブジェクトは、制約として OptimizationProblem で使用します。

ヒント

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

作成

比較演算子 <= または >= のある最適化式を使用して、不等式を作成します。

ドット表記を使用して、最適化問題の Constraints プロパティに不等式を含めます。

prob = optimproblem;
x = optimvar('x',4,6);
SumLessThanOne = sum(x,2) <= 1;
prob.Constraints.SumLessThanOne = SumLessThanOne;

optimineq または optimconstr を使用して、空の最適化不等式を作成することもできます。通常は、その後、ループで不等式を設定します。例については、ループでの不等式の作成を参照してください。ただし、問題の定式化の効率を重視する場合は、ループで不等式を設定しないでください。効率的な最適化問題の作成を参照してください。

プロパティ

すべて展開する

インデックスの名前。string の cell 配列または文字ベクトルを指定します。インデックス名の使用法の詳細については、最適化変数の名前付きインデックスを参照してください。

データ型: cell

この プロパティ は読み取り専用です。

オブジェクトの最適化変数。OptimizationVariable オブジェクトの構造体として指定します。

データ型: struct

オブジェクト関数

evaluate最適化式または問題に含まれる目的関数と制約の評価
infeasibility点における制約違反
issatisfied最適化問題の一連の点における制約満足度
show最適化オブジェクトの情報表示
write最適化オブジェクトの説明の保存

すべて折りたたむ

x という名前の 4 行 6 列の最適化変数行列を作成します。

x = optimvar('x',4,6);

x の各行の和を 1 以下とする不等式を作成します。

constrsum = sum(x,2) <= 1
constrsum = 
  4×1 Linear OptimizationInequality array with properties:

    IndexNames: {{}  {}}
     Variables: [1×1 struct] containing 1 OptimizationVariable

  See inequality formulation with show.

不等式を表示します。

show(constrsum)
(1, 1)

  x(1, 1) + x(1, 2) + x(1, 3) + x(1, 4) + x(1, 5) + x(1, 6) <= 1

(2, 1)

  x(2, 1) + x(2, 2) + x(2, 3) + x(2, 4) + x(2, 5) + x(2, 6) <= 1

(3, 1)

  x(3, 1) + x(3, 2) + x(3, 3) + x(3, 4) + x(3, 5) + x(3, 6) <= 1

(4, 1)

  x(4, 1) + x(4, 2) + x(4, 3) + x(4, 4) + x(4, 5) + x(4, 6) <= 1

最適化問題に不等式を含めるには、ドット表記を使用して、Constraints プロパティを constrsum に設定します。

prob = optimproblem;
prob.Constraints.constrsum = constrsum
prob = 
  OptimizationProblem with properties:

       Description: ''
    ObjectiveSense: 'minimize'
         Variables: [1×1 struct] containing 1 OptimizationVariable
         Objective: [0×0 OptimizationExpression]
       Constraints: [1×1 struct] containing 1 OptimizationConstraint

  See problem formulation with show.

2 要素変数 x が多数の円板の交差部分になければならないという制約を作成します。円板の中心と半径は、配列 centers および radii に格納されています。

x = optimvar('x',1,2);
centers = [1 -2;3 -4;-2 3];
radii = [6 7 8];
constr = optimineq(length(radii));
for i = 1:length(constr)
    constr(i) = sum((x - centers(i,:)).^2) <= radii(i)^2;
end

不等式を表示します。

show(constr)
  arg_LHS <= arg_RHS

  where:

        arg1 = zeros(3, 1);
        arg1(1) = sum((x - extraParams{1}).^2);
        arg1(2) = sum((x - extraParams{2}).^2);
        arg1(3) = sum((x - extraParams{3}).^2);
        arg_LHS = arg1(:);
        arg1 = zeros(3, 1);
        arg1(1) = 36;
        arg1(2) = 49;
        arg1(3) = 64;
        arg_RHS = arg1(:);

  extraParams

ループを使用する代わりに、変数に対する行列演算を使用して、同じ制約を作成できます。

constr2 = sum(([x;x;x] - centers).^2,2) <= radii'.^2;

ループでの不等式の作成は、行列演算による不等式の作成より多くの時間を要することがあります。

構造体で指定された点における不等式制約の値と等式制約の満足度を確認します。

x = optimvar("x");
y = optimvar("y");
ineq = x^2 + y^2/4 <= 2;
eq = 4*x^2 + y^2 == 5;
x0.x = 1;
x0.y = 1;
evaluate(ineq,x0) % Value = L - R, where L =  x^2 + y^2/4 and R = 2
ans = 
-0.7500
issatisfied(eq,x0) % Checks whether 4*x^2 + y^2 = 5
ans = logical
   1

バージョン履歴

R2019b で導入

すべて展開する