10.5 モデルの内容の表示(showSystem関数)
モデルファイルとデータファイルを分離して記述した場合,目的関数や制約式の具体的な情報が記述されないため,記述の誤りをそのまま見過ごしてしまう事があります.showSystem
関数は,分離されたモデルファイルとデータファイルから最終的に構成される目的関数Objective
,制約式Constraint
,対称行列SymmetricMatrix
の具体的情報を出力します.showSystem
関数は以下の書式で記述されます.
showSystem();
次のようなモデルを考えます.
Set S; Element i(set = S); Parameter c(index = i); Parameter a(index = i); Variable x(index = i); Objective f(type = maximize); f = sum(c[i] * x[i], i); x[i] <= a[i]; showSystem();
データファイルはdat形式で次のように与えられています.
c = [1] 13 [2] 7 [3] 201 [4] 14 [5] 23; a = [1] 23 [2] 5 [3] 4 [4] 12 [5] 1;
この場合,次のような出力がなされます.
1-1 (a.smp:8): x[1] <= 23 1-2 (a.smp:8): x[2] <= 5 1-3 (a.smp:8): x[3] <= 4 1-4 (a.smp:8): x[4] <= 12 1-5 (a.smp:8): x[5] <= 1 objective (a.smp:7 name="f"): 13*x[1]+7*x[2]+201*x[3]+14*x[4]+23*x[5] (maximize)
オブジェクトにname =
で名前を与えてからshowSystem
でモデル情報を出力すると,表示に指定した名前が使われますのでわかりやすくなります.上記の例にname
を付与した次のモデルに対しては,以下のように出力されます.
Set S(name = "S"); Element i(set = S); Parameter c(name = "c", index = i); Parameter a(name = "a", index = i); Variable x(name = "valx", index = i); Objective f(name = "obj",type = maximize); f = sum(c[i] * x[i], i); Constraint co(name = "co", index = i); co[i] = x[i] <= a[i]; showSystem();
出力
1-1 (a.smp:9 name="co[1]"): valx[1] <= 23 1-2 (a.smp:9 name="co[2]"): valx[2] <= 5 1-3 (a.smp:9 name="co[3]"): valx[3] <= 4 1-4 (a.smp:9 name="co[4]"): valx[4] <= 12 1-5 (a.smp:9 name="co[5]"): valx[5] <= 1 objective (a.smp:7 name="obj"): 13*valx[1]+7*valx[2]+201*valx[3]+14*valx[4]+23*valx[5] (maximize)
showSystem
関数は,引数に制約式を与えることで,その制約式のみを出力できます.name
を付与したモデルに関して,次のようにshowSystem
関数の引数を変更した場合,以下が出力されます.
showSystem(co[1]);
出力
1-1 (a.smp:9 name="co[1]"): valx[1] <= 23
引数に条件式を与える事で,出力させる制約式の範囲を制限させることもできます.次の例では,co[1]
, co[2]
の情報のみを出力させています.
showSystem(co[i], i < 3);
出力
1-1 (a.smp:9 name="co[1]"): valx[1] <= 23 1-2 (a.smp:9 name="co[2]"): valx[2] <= 5
半正定値制約に対してshowSystem
関数を用いた場合,以下が出力されます.
SymmetricMatrix X((i, j)); X["1, 1"] = 2 * x[1]; X["1, 2"] = 1; X["2, 2"] = x[2]; X >= 0; showSystem();
出力
1-1 (a.smp:8): 2*(x[1]) (sdpconselem) 1-2 (a.smp:8): 1 (sdpconselem) 1-3 (a.smp:8): x[2] (sdpconselem)
上に戻る