(Windows上の)GAMS では Excel とデータをやりとりする際に gdxxrw というプログラムを使います。
具体的には、以下のように間にGDXファイルをというものをはさんでやりとりします。
- ExcelのデータをGAMSで利用するとき:Excel のデータを gdxxrw を用いて GDX 形式に変換 ⇒ GDXファイルをGAMSで読み込む
- GAMSのデータをExcelに出力するとき:GAMS から GDX ファイルにデータを出力 ⇒ gdxxrw で GDXファイルの中身をExcelファイルに出力。
私も計算結果は結局、Excelファイルに出力してグラフなどにして見ることが多いので、このgdxxrwというプログラムをよく利用します。
以下は、gdxxrw を利用する際に一度に複数のパラメータの値を Excel に出力するためのコードの例です。
$title 多数のパラメータを一気に excel に出力するコード. $ontext Time-stamp: <2022-09-24 14:23:52 st> First-written: <2010/05/22> 多数のパラメータを excel に出力する二つの方法. アプローチ2のが速い.特に出力するパラメータの数が多くなると実行速度が大幅に違っ てくる. $offtext set i Sample index / 1*100 / j Sample index / 1*100 / ; parameter a Sample parameter b Sample parameter c Sample parameter d Sample parameter e Sample parameter f Sample parameter g Sample parameter h Sample parameter l Sample parameter ; a(i,j) = uniform(0,100); b(i,j) = uniform(0,100); c(i,j) = uniform(0,100); d(i,j) = uniform(0,100); e(i,j) = uniform(0,100); f(i,j) = uniform(0,100); g(i,j) = uniform(0,100); h(i,j) = uniform(0,100); l(i,j) = uniform(0,100); display a, b, c, d, e, f, g, h, l; * まず parameter を results_2.gdx に出力する. execute_unload "results_2.gdx", a, b, c, d, e, f, g, h, l; * ---------------------------------------------------------------------- * アプローチ1 display "com: アプローチ1"; $ontext こちらは一度の gdxxrw の実行で一つのパラメータを gdx → excel に出力する. $offtext execute '=gdxxrw i=results_2.gdx o=results_2_.xlsx par=a rng=sheet_a!A1 rdim=1 cdim=1' execute '=gdxxrw i=results_2.gdx o=results_2_.xlsx par=b rng=sheet_b!A1 rdim=1 cdim=1' execute '=gdxxrw i=results_2.gdx o=results_2_.xlsx par=c rng=sheet_c!A1 rdim=1 cdim=1' execute '=gdxxrw i=results_2.gdx o=results_2_.xlsx par=d rng=sheet_d!A1 rdim=1 cdim=1' execute '=gdxxrw i=results_2.gdx o=results_2_.xlsx par=e rng=sheet_e!A1 rdim=1 cdim=1' execute '=gdxxrw i=results_2.gdx o=results_2_.xlsx par=f rng=sheet_f!A1 rdim=1 cdim=1' execute '=gdxxrw i=results_2.gdx o=results_2_.xlsx par=g rng=sheet_g!A1 rdim=1 cdim=1' execute '=gdxxrw i=results_2.gdx o=results_2_.xlsx par=h rng=sheet_h!A1 rdim=1 cdim=1' execute '=gdxxrw i=results_2.gdx o=results_2_.xlsx par=l rng=sheet_l!A1 rdim=1 cdim=1' * ---------------------------------------------------------------------- * アプローチ2 display "com: アプローチ2"; $ontext こちらは一度の gdxxrw の実行で複数のパラメータを出力する. それにはパラメータファイルを利用する. $offtext * cmd.txt に以下の内容を出力. $onecho > cmd.txt i=results_2.gdx o=results_2.xlsx par=a rng=sheet_a!A1 rdim=1 cdim=1 par=b rng=sheet_b!A1 rdim=1 cdim=1 par=c rng=sheet_c!A1 rdim=1 cdim=1 par=d rng=sheet_d!A1 rdim=1 cdim=1 par=e rng=sheet_e!A1 rdim=1 cdim=1 par=f rng=sheet_f!A1 rdim=1 cdim=1 par=g rng=sheet_g!A1 rdim=1 cdim=1 par=h rng=sheet_h!A1 rdim=1 cdim=1 par=l rng=sheet_l!A1 rdim=1 cdim=1 $offecho * cmd.txt の中身を引数として gdxxrw を実行. execute '=gdxxrw @cmd.txt'; * Excel ファイルを開く. * execute 'shellexecute "results_2.xlsx"'; * execute 'shellexecute "results_2_.xlsx"'; * -------------------- * Local Variables: * mode: gams * fill-column: 80 * End: