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();
上に戻る