10.2 print関数
print
関数は,変数Variable
,目的関数Objective
,制約式Constraint
,定数Parameter
,整数変数IntegerVariable
,式Expression
,対称行列SymmetricMatrix
,集合Set
,順序集合OrderedSet
に関する情報を,決まったフォーマットで出力させる機能を有しています.
print
関数の書式は,以下のように定められています.
構成要素.情報.print();
変数の現在値を出力するには,次のように記述する必要があります.
Variable x; x.val.print();
目的関数の初期値を出力するには,次のように記述する必要があります.
Objective f; f.init.print();
制約式の双対変数値を出力するには,次のように記述する必要があります.
Constraint Co; Co.dual.print();
定数の現在値を出力するには,次のように記述する必要があります.
Parameter a; a.val.print();
整数変数の下限値を出力するには,次のように記述する必要があります.
IntegerVariable z; z.lb.print();
対称行列の現在値を出力するには,次のように記述する必要があります.
SymmetricMatrix X((i, j)); X.val.print();
式の初期値を出力するには,次のように記述する必要があります.
Expression g; g.init.print();
集合の現在値を出力するには,次のように記述する必要があります.
Set S; S.val.print();
順序集合の現在値を出力するには,次のように記述する必要があります.
OrderedSet O; O.val.print();
求解関数solve
の前にprint
関数を記述すると,求解前の初期状態の情報が記述されます.求解関数solve
は,明示的に記述されない場合,モデルの最後尾にあるものと認識されます.例えば,次のモデルに対する出力は以下のようになります.
モデルファイル
Variable x; Objective f(type = minimize); f = 2 * x; x >= 5; //制約 x = 10; //初期値設定 x.val.print();
出力
x=10
solve
関数の後にprint
関数を用意した場合,出力は以下のようになります.
モデルファイル
Variable x; Objective f(type = minimize); f = 2 * x; x >= 5; //制約 x = 10; //初期値設定 solve(); x.val.print();
出力
x=5
solve
関数の前後にprint
関数を用意した場合,出力は以下のようになります.
モデルファイル
Variable x; Objective f(type = minimize); f = 2 * x; x >= 5; //制約 x = 10; //初期値設定 x.val.print(); solve(); x.val.print();
出力
x=10 x=5
添字が付いている場合は,全体を出力します.例えば,次のモデルに対する出力は,以下のようになります.変数x[1]
, x[2]
, x[3]
の現在値が全て出力されます.
モデルファイル
Set S = "1 2 3"; Element i(set = S); Variable x(index = i); Objective f(type = minimize); f = 2 * sum(x[i], i); x[i] >= 5; //制約 x[i] = 10; //初期値設定 solve(); x.val.print();
出力
x[1]=5 x[2]=5 x[3]=5
出力範囲を,条件式で制限する事も可能です.以下のようにした場合,変数x[1]
, x[2]
の現在値のみが出力されます.
(x[i].val, i < 3).print();
出力
x[1]=5 x[2]=5
次の例では,添字付きの対称行列を出力させています.
モデルファイル
Set S = "1 2"; Element i(set = S), j(set = S); Set N = "1 2 3"; Element n(set = N); Variable x, y; x = 10; y = 2; SymmetricMatrix X(index = n, (i, j)); X[n, i, j] = 100 * n + x * i + y * j, i <= j; // 上三角部分のみ定義 X.val.print();
出力
X[1,1,1]=112 X[1,1,2]=114 X[1,2,2]=124 X[2,1,1]=212 X[2,1,2]=214 X[2,2,2]=224 X[3,1,1]=312 X[3,1,2]=314 X[3,2,2]=324
上に戻る