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