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

8.2 dat形式データファイル

 dat形式データファイルでは,定数Parameterの値,集合Sの要素,変数Variableの初期値が設定できます.拡張子が.datであるデータファイルはdat形式データファイルと解釈されます.

 定数の値や変数の初期値を設定する場合は,name引数によって定数や変数の名前を定めることができます.特にname引数を付けない場合には,モデルファイルで定義された名称そのものがnameだと認識されます.つまり,以下の二つの例は同等です.

Parameter a;
Parameter a(name = "a");

 dat形式データファイルの行末には半角セミコロン;を付ける必要があります.

 次の例では,dat形式データファイルに定数a(name = "aa")の値10を設定しています.

 モデルファイル内

Parameter a(name = "aa");

 データファイル内(dat形式)

aa = 10;

 次の例では,dat形式データファイルに変数x(name = "xx")の初期値4を設定しています.

 モデルファイル内

Variable x(name = "xx");

 データファイル内(dat形式)

xx = 4;

 次の例では,dat形式データファイルで集合Sの要素1 2 3を設定しています.データファイル内で定義する場合は,モデルファイル内で定義する場合と異なり,ダブルクォート"で囲ってはいけません.

 モデルファイル内

Set S;

 データファイル内(dat形式)

S = 1 2 3;

 一つのdat形式データファイルには,まとめて複数の設定を記述することができます.以下の例では,定数a(name = aa)の値10,変数x(name = xx)の初期値4,集合Sの要素1 2 3を全て設定しています.

 モデルファイル内

Parameter a(name = "aa");
Variable x(name = "xx");
Set S;

 データファイル内(dat形式)

aa = 10;
xx = 4;
S = 1 2 3;

 dat形式データファイル内では,任意に改行を挟むことができます.

aa = 10;
xx = 4;

S = 1 2 3;

 //はじまりのコメント文を付与することもできます.

// 定数の設定
aa = 10;

// 初期値設定
xx = 4;

// 集合の定義
S = 1 2 3;

 添字を持つ定数Parameterの値や,変数Variableの初期値を設定するには,以下のように[]を用います.次の例では,定数a[1], a[2], a[3]に対して,初期値1, 0.5, -1を与えています.

 モデルファイル内

Set S = "1 2 3";
Element i(set = S);
Parameter a(name = "aa", index = i);

 データファイル内(dat形式)

aa = [1] 1 [2] 0.5 [3] -1;

 行末の半角セミコロン;は,一つの設定データの最後に記述します.改行は自由なので,データファイル部分は,以下のように記述する事もできます.

aa = [1] 1
     [2] 0.5
     [3] -1;

 これは,モデルファイル内で以下のように記述する場合と同じ意味です.

a[1] = 1;
a[2] = 0.5;
a[3] = -1;

 データファイル内で値を設定する場合は,添字部分にダブルクォート"は付けません.

 次は,変数x["1, p"], x["1, q"], x["2, p"], x["2, q"]に初期値1, 3, 5, 7を与える例です.

 モデルファイル内

Set S = "1 2";
Set T = "p q";
Element i(set = S);
Element j(set = T);
Variable x(name = "xx", index = (i, j));

 データファイル内(dat形式)

xx = [1, p] 1 [1, q] 3
     [2, p] 5 [2, q] 7;

 これは,モデルファイル内で以下のように記述する場合と同じ意味です.

xx["1, p"] = 1;
xx["1, q"] = 3;
xx["2, p"] = 5;
xx["2, q"] = 7;

 集合クラスの構成要素は,明示的に定義しなくとも,モデルファイルやデータファイルの情報から自動的に定義されます.これをSIMPLEの自動代入機能と呼びます.以下の例では,自動代入機能により,集合Sの要素は1, 2, 3であると判断されます.

 モデルファイル内

Set S;
Element i(set = S);
Parameter a(index = i);

 データファイル内(dat形式)

a = [1] -1 [2] -1 [3] 1;

 以下のように,csv形式データファイルでa[1], a[2], a[3]の値を定めた場合も同様です.

i, a
1, -1
2, -1
3, 1

 以下のように,モデルファイル内でa[1], a[2], a[3]の値を定めた場合も同様です.

Set S;
Element i(set = S);
Parameter a(index = i);
a[1] = -1;
a[2] = -1;
a[3] = 1;

 

 

上に戻る