GAMS学习笔记02——GAMS读取Excel的数据
生活随笔
收集整理的這篇文章主要介紹了
GAMS学习笔记02——GAMS读取Excel的数据
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
初學GAMS,記錄一下GAMS從Excel中讀取數據的過程,有很多細節需要嘗試才能發現問題,希望以通俗的文字記錄一下我遇到的問題。
基本概念
GAMS從Excel中提取數據的基本邏輯是通過Gdxxrw的內置命令,將.xlxs文件轉換成.gdx文件,再用GAMS讀取.gdx文件,根據所設定的參數名和提取區域獲得所需數據。
一維&二維矩陣讀取步驟
假設我需要讀取三個參數line,ebus和Pload,各自的索引集合定義如下:
setsi 電網節點 /1*24/eline 電網支路 /1*25/line_index /from,to,x/t /1*24/ebus_index /if_tra,if_gfu1,if_gfu2,if_ptg,ra_pload/z Pload /PL/;在導入數據前先定義參數:
Parametersline(eline,line_index),ebus(i,ebus_index),Pload(t,z);注意GAMS中定義最后要加分號!
接著進行讀取,這里data文件地址需要寫完整,路徑里面不要中文,否則無法識別。
$call gdxxrw ..\data.xlsx output=..\data.gdx par=line rng=sheet1!A1:D26 Rdim=1 Cdim=1 par=ebus rng=sheet1!F1:K25 par=Pload rng=sheet1!A28:B52 $gdxin ..\data.gdx $load line ebus Pload $gdxin代碼解釋:
- gdxxrw :GAMS內置的命令,用來讀寫數據;
- data.xlsx output= data.gdx:表示將你的xlsx文件先轉成gdx文件;
- par=line rng=A1:D26 :對象是參數line,元素范圍是Excel中的A1:D24;
- rdim=1 cdim=1:rdim規定了某一行是索引,cdim規定了某一列是索引。這里我們存儲的excel是有行列表頭的(如下圖),所以都規定為1。因此在上面規定讀取元素范圍的時候需要把表頭也包括進去,行數要往前一行。
- $ gdxin data.gdx:$gdxin + 文件名表示指定要讀取的gdx文件;
- $load line ebus Pload:從gdx文件中讀取所需的參數;
- $gdxin:后面沒有文件名,表示關閉當前gdx文件
?注意:由于本程序的索引使用了字符集合(例如line的索引有from to x),經過實驗,excel表的表頭也必須和索引完全一致否則無法成功讀取。
最后,成功運行完之后,生成的.dgx文件可以通過gams打開,出現以下表格。同時右側可以看到表格形式的所讀取數據。Entry表示讀取的順序,Dim表示維數,Nr Elem表示元素的行數。
基本上到這里我就成功讀取了所需要的數據。
?
總結
以上是生活随笔為你收集整理的GAMS学习笔记02——GAMS读取Excel的数据的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 多线程有几种实现方法,都是什么?同步有几
- 下一篇: golang proto3的messag