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

2.2 定数

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

目的関数
${\rm costX} \cdot {\rm x} + {\rm costY} \cdot {\rm y}$ 運転コスト/週
 
定数
${\rm costX}$ 油田Xの運転コスト/日
${\rm costY}$ 油田Yの運転コスト/日

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

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

cost = 180 * x + 160 * y;

      ↓

Parameter costX(name="油田Xの運転コスト");
Parameter costY(name="油田Yの運転コスト");
cost = costX * x + costY * y;

 まず,Parameterで定数を宣言します.モデル中で使用する定数は,使用する前に宣言する必要があります.定数の値は,モデル中で定義せず外部からデータファイルで与えます.変数,目的関数の宣言と同様に,name = "..."には,定数名を指定します.定数名は,データファイル中のデータとの対応付けに使用されます.

 次にモデルに定数を与えるために,以下のデータファイルを作成します.以下のデータファイルの拡張子は.datとなります.

"油田Xの運転コスト" = 180;
"油田Yの運転コスト" = 160;

 =の左辺には,宣言時のname = "..."で与えたパラメータ名を記述します.右辺には,定数値を記述します.セミコロン;が定数データの区切りになります.データファイル中の"..."内にないスペース,改行,タブは無視されます.

 では,上記データファイルを入力として,実行してみます(実行方法については「3.1利用方法」を参照してください).

 

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

油田Xの運転日数=1.5
油田Yの運転日数=3
全運転コスト=750

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

 

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

"油田Xの運転コスト" = 100;
"油田Yの運転コスト" = 170;

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

油田Xの運転日数=5
油田Yの運転日数=0.666667
全運転コスト=613.333

 

 

上に戻る