最適化セミナーのご案内

5.4.1 Parameterに対する漸化式による値定義

 Parameterに対して漸化式により値を定義する事ができます.Parameter以外に対しては,漸化式による定義はできません.下記は漸化式によるParameterの値定義記述の一例です.

 

 モデルファイルに記述する方法

Set I(name="I"); Element i(set=I);
I = "1 .. 10";
Parameter P(name="P", index=I);

// 漸化式記述
startRecurrenceRelation();
P[1] = 1; P[2] = 1;
P[i+2] = P[i] + P[i+1], i+2 < I;
endRecurrenceRelation();

 上記の例のように漸化式部分は漸化式開始指示関数startRecurrenceRelation()と漸化式終了指示関数endRecurrenceRelation()とで囲む必要があります.上記の例のi+2<IのようにParameterの定義中の添字が添字集合を超えないように,条件式で添字範囲を指定するのを忘れないでください.単一のParameterに対してだけではなく,下記のように複数のParameterが複合した複雑な漸化式も定義する事もできます.

 

 複雑な漸化式記述

Set I(name="I");
Element i(set=I);
I = "1 .. 10";
Parameter P(name="P", index=I);
Parameter Q(name="Q", index=I);

// 漸化式記述
startRecurrenceRelation();
P[1] = 1; Q[1] = 2;
P[i+1] = 2*P[i] - 5*Q[i], P[i] >= 0, i+1 < I;
P[i+1] = -3*P[i] + Q[i], P[i] < 0, i+1 < I;
Q[i+1] = -P[i] - 2*Q[i], Q[i] >= 0, i+1 < I;
Q[i+1] = P[i] - 3*Q[i], Q[i] < 0, i+1 < I;
endRecurrenceRelation();

 漸化式で定義したParameterendRecurrenceRelation()以降普通のParameterと同様に扱うことができます.なお漸化式定義中で下記に挙げる記述を行うことはできませんのでご注意ください.

  • 定義が循環する記述(a[i] = a[i]のような記述やa[i] = b[i]かつb[i] = a[i]のような記述)
  • 漸化式定義対象のパラメータの値取得が必要な記述(例えば,パラメータaが漸化式で定義されている最中のa.val.print()など)
  • setOf関数の使用
  • 制約式の記述
  • 目的関数の記述
  • 漸化式の評価時に添字が添字集合を超えてしまうような記述(例えばa[i]=a[i+1]では評価時にiの値が上昇し続けiの添字集合の範囲を超えてしまいます)

 上記に該当するような記述を行った場合実行時エラーとなります.


 

 

上に戻る