GAMS与MATLAB的数据交互

背景

在利用GAMS编写并求解完模型后,无法利用GAMS实现结果的可视化,因此需要进行数据交互,利用MATLAB强大的图形处理能力进行结果的展示。
本文将介绍GAMS与MATLAB的数据交互方法。仍旧用上篇博文中模型为例,博文链接link

1 学习材料准备

官网给出的相关说明(英文),参考链接link
教学视频(英文),链接link
总结:两个软件间的交互主要是利用“.gdx”文件作为中转站实现的。

2 添加路径

在安装完GAMS和MATLAB两款软件后,需要将GAMS的安装路径添加到MATLAB的path中去:
第一步,“File——Options——Execute”,可以获得GAMS的安装路径
在这里插入图片描述
第二步,打开MATLAB,“HOME——set path——Add Folder——Save”。
在这里插入图片描述
第三步,为了验证是否成功,可以在MATLAB命令行窗口中写入“help wgdx”,若可以看到函数解释则说明添加成功。

3 数据交互

3.1 GAMS数据写入与读取

3.1.1 将GAMS数据写到gdx文件中

想要利用gams函数进行模型结果的传出,首先需要在用GAMS编写模型时,写上存储结果的语句,如下所示(第一句写在模型开头,第二句写在模型结尾)。
第一句表示的意思是“将变量X和UU存储到GtoM.gdx文件中去”,第二句的意思是“执行数据存储语句”。

$set matout "'GtoM.gdx', X, UU ";  
execute_unload %matout%; 

3.1.2 GAMS读取gdx文件中的数据

模型中参数px是需要从“MtoG.gdx”文件中读取的数据(关于MtoG.gdx会在3.2.1中讲),语句如下所示。
第一句表示的意思是“从MtoG.gdx文件中读取数据”,第三句表示的意思是“加载参数px”。

Parameter px(i);
$if not set gdxin $set gdxin MtoG
$GDXIN %gdxin%
$LOAD px
$GDXIN

3.1.3 本文模型GAMS代码

$set matout "'GtoM.gdx', X, UU ";

* Definition of the Index Sets
Sets
i goods  /BRD bread, MLK milk/
h factors  /CAP capital, LAB labor/
;

* Definition of Parameters
Parameters
alpha(i)  /BRD 0.2, MLK 0.8/
pz(h)  /CAP 2, LAB 1/
z(h)  /CAP 10, LAB 20/
;
Parameter px(i);
$if not set gdxin $set gdxin MtoG
$GDXIN %gdxin%
$LOAD px
$GDXIN

* Definition of variables
Positive Variable
X(i)

Variable
UU

EquationS
eqt   ffggf
obj   fgjg
;

*Specification of equations
eqt..  sum(i, px(i)*X(i)) =e= sum(h, pz(h)*z(h));
obj..  UU =e= prod(i, X(i)**alpha(i));

*Defining the model
Model HHmax /all/;

*Sloving the model
Solve HHmax maximazing UU using NLP;

execute_unload %matout%;

3.2 Matlab数据写入和读取

写入函数wgdx;读取函数rgdx。

3.2.1 Matlab将数据写入gdx文件中

在matlab中将想要传入的参数写到相应的文件中去:name表示要写入参数的名称,type表示要写入参数的名称,uels表示要写入参数的下标属性,val表示要写入参数的数值,form表示要写入参数的类型(full和sparse类型)。

a.name='px';
a.type='parameter';
a.uels={'BRD','MLK'};
a.val=[1 2];
a.form='full';
wgdx('MtoG',a)

3.2.2 Matlab读取gdx文件中的数据

通过rgdx函数读取gdx文件中的数据。

x.name='X';
x=rgdx('MtoG',x);

数据展示如下,将x的数值赋给另一个向量:

b=x.val;

3.2.3 本文模型MATLAB代码

clc,clear
a.name='px';
a.type='parameter';
a.uels={'BRD','MLK'};
a.val=[1 2];
a.form='full';
wgdx('MtoG',a);
system 'gams HHmax'
x.name='X';
x=rgdx('GtoM',x);
x.val

4 总结

至此,GAMS与MATLAB的数据交互就已经能够实现。

【整理不易,转载请注明出处和相关链接,否则必究!】

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值