LoginSignup
0
1

More than 1 year has passed since last update.

データセクションの書き方【GLPK】

Last updated at Posted at 2018-03-21

<--目次へ

既存のGLPKプログラムを使う時には、自分でデータセクションを書く必要がありますが、知っておけば便利な書き方を紹介します。詳しいことはGLPKに同梱されているgmpl.pdfに書かれていますのでそちらも見てください。

data文より後の書き方です。data文より前の、モデル定義部分では違った書き方をしますので注意してください。

データが文字列の場合は、クオーテーションマーク"で囲んでください(日本語の場合は必ず囲う必要があります)
ただし、英数字の場合は囲む必要が無いようです。

Set

一次元集合を読み込む場合

data01.mod
set Set1;
display Set1; # 表示
data;
set Set1 := 1 2 3;

一次元の集合を読み込みます。データは途中に改行があっても構いませんし、カンマで区切っても構いません。セミコロン;までが意味のあるデータです。

多次元集合を読み込む場合

3次元の場合を例にします。

data02.mod
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

単純なパラメータの場合です。

data11.mod
param param1;
param param2 symbolic;
display param1;
display param2;
data;
param param1:=5;
param param2:="abc";

値が文字列の場合はsymbolicに指定しておくことが必要です。

添字を持った配列の例です。添字(Set3)はSetで予め設定しておくか

data12.mod
set Set3;
param param3{Set3};
display param3; # 表示
data;
set Set3 := "A" "B" "C";
param param3 :=
"A" 1
"B" 2
"C" 3;

param3が同じ数値が多い時にはdefaultを使うと楽に書けます。

data12a.mod
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 追記)

data12b.mod
省略
data;
set Set3 := "A" "B" "C";
param param3 default 1 :=
["B"] 2
;

のように[]で囲っても構いません。
また英文字で始まり日本語を含まないときは
set Set3 := A B C;
クオーテーションマークで囲む必要もありません。

次の書き方では、添字(Set3)はparamの中で同時に読み込めます。

data13.mod
set Set3;
param param3{Set3};
display param3; # 表示
data;
param : Set3 : param3 :=
"A" 1
"B" 2
"C" 3;

表のような形式で、同時に2つのパラメータを読み込むことができます。

data14.mod
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;

コメント

#より行末まで
/* から */ の間はコメントになります。
メモや書いたデータを一時的にはずすのに使えます。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1