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

初学GAMS,记录一下GAMS从Excel中读取数据的过程,有很多细节需要尝试才能发现问题,希望以通俗的文字记录一下我遇到的问题。

基本概念

GAMS从Excel中提取数据的基本逻辑是通过Gdxxrw的内置命令,将.xlxs文件转换成.gdx文件,再用GAMS读取.gdx文件,根据所设定的参数名和提取区域获得所需数据。

一维&二维矩阵读取步骤

假设我需要读取三个参数line,ebus和Pload,各自的索引集合定义如下:

sets
         i 电网节点 /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/;

在导入数据前先定义参数:

Parameters
    line(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表示元素的行数。

基本上到这里我就成功读取了所需要的数据。

 

  • 5
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值