2. 自由変数#

2.1. 説明#

自由変数とは「上下限値を持たない変数」である.

(2.1)#\[x \in \mathbb{R}\]

上記は自由変数が連続変数の場合であるが, 整数変数の場合も同様に自由変数とは次の変数のことである.

(2.2)#\[x \in \mathbb{Z}\]

注釈

一般には順序構造はあるが最大および最小元が存在しない非有界な集合に属する変数をすべて自由変数という. しかしながら数理最適化モデルの定式化で考える集合は, その中でも実数集合 \(\mathbb{R}\) または整数集合 \(\mathbb{Z}\) に限ることが標準的である.

2.1.1. Big M#

自由変数は上下限値がないものだが,これを理想的な設定と捉えることもできる. 例えば上限値がないということは上限値が無限大であることを意味する. しかし実際には Big M とみなすところの「あるとても大きな数 \(M\)」が上限値であるものの, 「たくさん」や「いっぱい」といったように形容もしくは無限大と考えることがある.

しかし実際にはどれだけ大きくとも無限大よりは小さく, 上限に関して次式のように Big M で書くこともある.

(2.3)#\[x \leq M\]

Tip

Big M はしばしば「とても大きな数」とだけ説明されることがあるが, 具体的にどれだけ大きいかを見積もるのは個別の事例に依存することになる. その数がどんなに大きくとも有限であるという認識から,Big M を不用意に大きく設定しないよう, 数え上げておくというプロセスが定式化では必要になる. 古くは Archimedes による『砂粒を数えるもの』で宇宙を埋め尽くすのに必要な砂粒の数を見積もった話がある.

一見,Big M の見積もりは困難を伴うような印象があるが, 一方で Big M が変数の上限下限としての役割を果たすため, 予め上下限制約の記述に必要な値としてわかっていることも多い.

下限についても同様である.このように考えると,上下限値が存在することになるが, 考える問題の中では実質的にはとりえるすべての範囲を考慮しているため,「自由」な変数だとみなせる. 自由変数を非有界な集合に属する変数としたが,より正確には有界な集合についても, とりえるすべての範囲を表す集合に属した変数でありさえすれば,自由変数だと定義付けることは不自然ではない.

自由変数をこのように捉えることで,Big M を用いた様々な LP の定式化が可能となる.

2.1.2. 暗黙の非負条件#

自由変数として非負実数集合 \(\mathbb{R}_{\geq 0}\) や非負整数集合 \(\mathbb{Z}_{\geq 0}\) を暗黙の了解として課しているソフトウェアもある. モデリング言語 SIMPLE の場合はそのようなことはなく,非負性は明示的に記述する必要がある.

このため非負性の記述が自動的になされているという前提で,SIMPLE を記述してしまうと, 思わぬエラーが生じ,原因究明に時間をかけてしまうことがある.

特に SIMPLE では変数の探索のための初期値として \(0\) が採用されやすく, 対数関数 \(\log\) が定式化に含まれている場合には \(\log 0\) という特異な値が参照され, エラーとなることが起こりえる.

本項の意味での自由変数ではなくなるが,こういった意図しない数値的エラーを未然に防げるよう, SIMPLE を使用する場合は,非負条件を明示的に書いておく必要がある.

2.2. 関連#