既存のGLPKプログラムを使う時には、自分でデータセクションを書く必要がありますが、知っておけば便利な書き方を紹介します。詳しいことはGLPKに同梱されているgmpl.pdfに書かれていますのでそちらも見てください。
data文より後の書き方です。data文より前の、モデル定義部分では違った書き方をしますので注意してください。
データが文字列の場合は、クオーテーションマーク"で囲んでください(日本語の場合は必ず囲う必要があります)
ただし、英数字の場合は囲む必要が無いようです。
Set
一次元集合を読み込む場合
set Set1;
display Set1; # 表示
data;
set Set1 := 1 2 3;
一次元の集合を読み込みます。データは途中に改行があっても構いませんし、カンマで区切っても構いません。セミコロン;までが意味のあるデータです。
多次元集合を読み込む場合
3次元の場合を例にします。
set Set2 dimen 3;
display Set2; # 表示
data;
set Set2 :=
1 2 3
1 2 4
1 3 5
1 3 6;
dimen 3 のように必ず次元を宣言します。(dimenがない場合は1次元)
その場合は3つ単位に順番に読み込みます。
set Set2 :=
(1, 2, *) 3 4
(1, 3, *) 5 6;
のように*を後ろのデータで置き換えることができますので効率的な書き方ができます。
*が2つで
set Set2 := (1, *, *) 2 3, 2 4, 3 5, 3 6;
のような書き方もできます。
Parameter
単純なパラメータの場合です。
param param1;
param param2 symbolic;
display param1;
display param2;
data;
param param1:=5;
param param2:="abc";
値が文字列の場合はsymbolicに指定しておくことが必要です。
添字を持った配列の例です。添字(Set3)はSetで予め設定しておくか
set Set3;
param param3{Set3};
display param3; # 表示
data;
set Set3 := "A" "B" "C";
param param3 :=
"A" 1
"B" 2
"C" 3;
param3が同じ数値が多い時にはdefaultを使うと楽に書けます。
set Set3;
param param3{Set3};
display param3; # 表示
data;
set Set3 := "A" "B" "C";
param param3 default 1 :=
"B" 2
;
表示ではparam3[B] = 2
しか出ませんが、param3[A]=1, param3[C]=1
として機能します。
(2022.1.17 追記)
省略
data;
set Set3 := "A" "B" "C";
param param3 default 1 :=
["B"] 2
;
のように[]で囲っても構いません。
また英文字で始まり日本語を含まないときは
set Set3 := A B C;
クオーテーションマークで囲む必要もありません。
次の書き方では、添字(Set3)はparamの中で同時に読み込めます。
set Set3;
param param3{Set3};
display param3; # 表示
data;
param : Set3 : param3 :=
"A" 1
"B" 2
"C" 3;
表のような形式で、同時に2つのパラメータを読み込むことができます。
set Set3;
param param3{Set3};
param param4{Set3};
display param3; # 表示
display param4;
data;
param : Set3 : param3 param4 :=
"A" 1 1.1
"B" 2 2.2
"C" 3 3.3;
##コメント
#より行末まで
/* から */ の間はコメントになります。
メモや書いたデータを一時的にはずすのに使えます。