日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

GAMS学习笔记02——GAMS读取Excel的数据

發布時間:2024/3/26 编程问答 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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的数据的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。