GAMSでゼロの値をとる要素を持つパラメータをエクセルに出力させる方法

パラメータの値を excel ファイルに出力するとき

  1. まず、gdx ファイルに出力
  2. 次に gdx ファイルから excel に出力

という手順をとる。

GAMS では 0 の値をとる要素はないものと同じとみなされるので、0 の値をとる要素は1)の段階で何も出力されない。このためエクセルに出力した際にも何も値が出力されない。

以下は、ゼロの値をとる要素には 0 が出力されるようにする方法。

手順

  1. まず、0 の値が入る要素には eps を入れておく。eps とはゼロに近いがゼロではない数値を表す特殊な記号。
  2. gdx ファイルから excel ファイルに出力する段階で eps をゼロに置き換える。

以下はサンプルのコード。

$title ゼロの値をとるパラメータをエクセルに出力させる方法
$ontext
Time-stamp: <2010-06-05 16:24:01 Shiro Takeda>
First-written: <2010/05/22>

ゼロの値をとるパラメータをエクセルに出力させる方法

パラメータの値を excel ファイルに出力するとき
1) まず,gdx ファイルに出力
2) 次に gdx ファイルから excel に出力
という手順をとる.

GAMS では 0 の値をとる要素はないものと同じとみなされるので,0 の値をとる要素は1)
の段階で何も出力されない.このためエクセルに出力した際にも何も値が出力されない.

以下は,ゼロの値をとる要素には 0 が出力されるようにする方法.

手順
1) まず,0 の値が入る要素には eps を入れておく.eps とはゼロに近いがゼロではない数値を
表す特殊な記号.
2) gdx ファイルから excel ファイルに出力する段階で eps をゼロに置き換える.

$offtext

set i Sample index / 1*100 /
j Sample index / 1*100 /
;

parameter a Sample parameter
b Sample parameter
;
a(i,j) = eps;
b(i,j) = 0;
display a, b;

* まず parameter を results_2.gdx に出力する.
execute_unload "results_eps.gdx", a, b;

* ----------------------------------------------------------------------
* GDXXRW で excel に出力.
display "com: GDXXRW で excel に出力.";
$ontext

epsout=string

で eps が string に置き換わる.

a には 0 が出力されるが,b には何も出力されないことをチェック.
$offtext
* cmd.txt に以下の内容を出力.

$onecho > cmd.txt
i=results_eps.gdx o=results_eps.xlsx epsout=0
par=a rng=a!A1 rdim=1 cdim=1
par=b rng=b!A1 rdim=1 cdim=1
$offecho

* cmd.txt の中身を引数として gdxxrw を実行.
execute '=gdxxrw @cmd.txt';

* --------------------
* Local Variables:
* mode: gams
* fill-column: 80
* End: