2.2.2. 定数

現在は,モデル中に油田運転コストの値を直接記述しています. これを変更し,外部から任意の値を与えてみましょう.まず,定式化を以下のように変更します.


\[\begin{split}\begin{array}{ll} \bf{目的関数} \\ \hline costX \cdot x + costY \cdot y & 運転コスト/週 \\ \hline \\ \bf{定数} \\ \hline costX & 油田Xの運転コスト/日 \\ \hline costY & 油田Yの運転コスト/日 \\ \hline \end{array}\end{split}\]

\(costX\), \(costY\) はそれぞれ油田 X, Y の運転コスト/日を表す定数です. PySIMPLE では,このような定数を使用した記述が可能です.

ここでは,定数を用いて,運転コストを以下のように変更します.:

from pysimple import Problem, Variable

from pysimple import Problem, Variable, Parameter
problem += 180*x + 160*y, '全運転コスト'

costX = Parameter(value=180, name='油田Xの運転コスト')
costY = Parameter(value=160, name='油田Yの運転コスト')
problem += costX*x + costY*y, '全運転コスト'

まず,Parameter で定数を宣言します.モデル中で使用する定数は,使用する前に宣言する必要があります. value=.. には定数の値を指定します. name='..' には定数の名前を指定しますが省略可能です.

今回のモデルでは添字がないので Parameter を用いずに記述しても構いません.:

costX = 180
costY = 160
problem += costX*x + costY*y, '全運転コスト'

では,実行してみます(実行方法については 数理計画問題を解く を参照してください).

最適化経過の出力の後,次のような実行結果が得られます.:

油田Xの運転日数.val=1.500000000256067
油田Yの運転日数.val=2.9999999999710107
全運転コスト.val=750.0000000414537

前回と同じ結果が得られています. Parameter を使用することで,データの変更のみで違う問題を解くことができます.

では,データを変更して実行してみましょう.以下のようにデータを変更します.:

costX = Parameter(value=100, name='油田Xの運転コスト')
costY = Parameter(value=170, name='油田Yの運転コスト')

実行すると,以下の結果が得られます.:

油田Xの運転日数.val=4.99999999387777
油田Yの運転日数.val=0.6666666712283269
全運転コスト.val=613.3333334965926

また,このモデルは PySIMPLE のサンプルとして同梱されています. このサンプルを実行するには次のようにします.:

$ python -m pysimple.sample.tutorial oil2