Main Content

OptimizationEquality

等式と等式制約

R2019b 以降

説明

OptimizationEquality オブジェクトには、OptimizationVariable オブジェクトまたは OptimizationExpression オブジェクトに関する等式および等式制約が含まれます。各等式では比較演算子 == を使用します。

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

constrsum = sum(x,2) == 1

OptimizationEquality オブジェクトは、制約として OptimizationProblem で使用するか、方程式として EquationProblem で使用します。

ヒント

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

作成

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

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

prob = optimproblem;
x = optimvar('x',4,6);
SumToOne = sum(x,2) == 1;
prob.Constraints.SumToOne = SumToOne;
% Or for an equation problem:
eqprob = eqnproblem;
eqprob.Equations.SumToOne = SumToOne;

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

プロパティ

すべて展開する

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

データ型: cell

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

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

データ型: struct

オブジェクト関数

infeasibility点における制約違反
show最適化オブジェクトの情報表示
write最適化オブジェクトの説明の保存

すべて折りたたむ

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

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

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

constrsum = sum(x,2) == 1
constrsum = 
  4x1 Linear OptimizationEquality array with properties:

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

  See equality 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: [1x1 struct] containing 1 OptimizationVariable
         Objective: [0x0 OptimizationExpression]
       Constraints: [1x1 struct] containing 1 OptimizationConstraint

  See problem formulation with show.

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

eqnprob = eqnproblem;
eqnprob.Equations.constrsum = constrsum
eqnprob = 
  EquationProblem with properties:

    Description: ''
      Variables: [1x1 struct] containing 1 OptimizationVariable
      Equations: [1x1 struct] containing 1 OptimizationEquality

  See problem formulation with show.

空の OptimizationEquality オブジェクトを作成します。

eq1 = optimeq;

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

x = optimvar('x',5,5);

x の行 i の和を i2 とする等式を作成します。

for i = 1:size(x,1)
    eq1(i) = sum(x(i,:)) == i^2;
end

得られた等式を表示します。

show(eq1)
(1, 1)

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

(1, 2)

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

(1, 3)

  x(3, 1) + x(3, 2) + x(3, 3) + x(3, 4) + x(3, 5) == 9

(1, 4)

  x(4, 1) + x(4, 2) + x(4, 3) + x(4, 4) + x(4, 5) == 16

(1, 5)

  x(5, 1) + x(5, 2) + x(5, 3) + x(5, 4) + x(5, 5) == 25

最適化問題で eq1 を制約として使用するには、ドット表記を使用して、eq1Constraints プロパティとして設定します。

prob = optimproblem;
prob.Constraints.eq1 = eq1;

同様に、方程式問題で eq1 を一連の方程式として使用するには、ドット表記を使用して、eq1Equations プロパティとして設定します。

eqprob = eqnproblem;
eqprob.Equations.eq1 = eq1;

バージョン履歴

R2019b で導入