数理最適化セミナーのご案内

4.2.4 変数の上下限

  • 「変数の上下限」は,変数の上限および下限を表します.
  • C++SIMPLE においては,「変数と定数の比較式」は「変数の上下限」として扱われます.注意すべき点は,これは制約式としては扱われない,という点です.
  • 変数の上下限値は,下限であればx.lb.val.print(),上限であればx.ub.val.print()で確認できます.

 例えばx,yを変数,Aを定数とします.以下は「変数の上下限」となります.

x >= 0;
x >= a;
x[i] >= a[i];

 以下は「変数の上下限」ではなく,制約式になります.

sum(x[i],i) >= a;
x >= y;
x + y >= a;
2*x >= a;

 変数の上下限と制約式の違い

  • 矛盾する「変数の上下限」が与えられた場合,求解前の段階でエラー検出がされます.
  • 制約式については,矛盾していたとしても,求解は行われます.

 例えば以下のようなモデルを記述します.

Variable x;
x >= 1;
x <= 0;
solve();

 上記の場合,以下のようなエラー出力がされ求解は行われません.

(SIMPLE 1) 変数 x について矛盾した上下限が与えられました( 上下限 [-inf <= * <= 0] と [1,inf] の共通部分を取ったとき )

 もし求解まで行いたい場合は,「変数の上下限」を制約式に書き換えるなどの方策があります.たとえば先のモデルは以下のように書き換えます.

Variable x;
Variable dummy;
x + dummy >= 1;
x + dummy <= 0;
dummy == 0;
solve();

 

 

上に戻る