GAMS是非常优秀的经济学建模软件,可以用来求解一般均衡和其他优化问题。GTAP作为一种大型多区域CGE模型,也可以使用GAMS来求解,但使用之前,必须将GTAP提供的har数据转换为GAMS所能使用的gdx数据,如果要在C#或Java等高级语言中调用该数据,则还必须将gdx数据转换成Access数据库数据,数据流为:

har--------GAMS--------> gdx---------GAMS----------->Access。

其GAMS脚本代码为:

*转换为gdx数据

execute_unload "..\data\variable\slack.gdx"
profitslack.l
cgdslack.l
endwslack.l
tradslack.l
incomeslack.l
saveslack.l
govslack.l
walraslack.l

*转换为Access数据

$call gdx2access ..\data\variable\slack.gdx

这段代码在运行时存在问题,gdx数据可以生成,但Access数据无法生成。其原因在于,转化Access的程序启动了另外一个exe进程,因此两部转换之间存在异步关系,第一步中尚未生成gdx数据,第二部就已经开始执行,而第二步必须依赖于第一步生成gdx数据。

这一问题仅靠GAMS难以解决。可以考虑使用C#与GAMS的混编。具体解决方法为:

第一,将gdx转换和Access转换的GAMS的GAMS脚本分别置于两个独立的gms文件当中,假设文件名分别为1.gms和2.gms

第二,使用C#调用1.gms,一直等到该进程结束,再调用2.gms

程序为:

//GAMS——生成变量的gdx数据 void RunGamsProduceGDX() { p = new Process(); p.StartInfo.FileName = @"F:\Program Files\GAMS23.3\gams.exe"; p.StartInfo.WorkingDirectory = @"F:\C#-GAMS\CSGAMS\CSGAMS\bin\x86\Debug\GTAPbyGAMS3-3(2)\build\"; p.StartInfo.Arguments = "\"" + @"F:\C#-GAMS\CSGAMS\CSGAMS\bin\x86\Debug\GTAPbyGAMS3-3(2)\build\VariableData.gms" + "\" LO=0 --runid=" + "0"; p.StartInfo.WindowStyle = ProcessWindowStyle.Hidden; p.StartInfo.ErrorDialog = true; p.Start(); p.WaitForExit(); } //GAMS——生成变量的MDB数据 void RunGamsGDX2MDB() { p = new Process(); p.StartInfo.FileName = @"F:\Program Files\GAMS23.3\gams.exe"; p.StartInfo.WorkingDirectory = @"F:\C#-GAMS\CSGAMS\CSGAMS\bin\x86\Debug\GTAPbyGAMS3-3(2)\build\"; p.StartInfo.Arguments = "\"" + @"F:\C#-GAMS\CSGAMS\CSGAMS\bin\x86\Debug\GTAPbyGAMS3-3(2)\build\GDX2MDB.gms" + "\" LO=0 --runid=" + "0"; p.StartInfo.WindowStyle = ProcessWindowStyle.Hidden; p.StartInfo.ErrorDialog = true; p.Start(); p.WaitForExit(); }
//调用 this.RunGamsProduceGDX(); this.RunGamsGDX2MDB();

使用这种方法,可以保证两种数据都被准确转换出来。

GAMS将har数据转换为gdx数据和Access数据过程中的异步问题相关推荐

  1. php音频转换接口,PHP实现chrome表单请求数据转换为接口使用的json数据

    为什么要写转换程序 最近在做旧版程序迁移,旧的架构为常规的MVC模式,新版架构全部改成restful架构. 由于改版数据是一致的,但是请求结构不一致,新版的请求全部以json形式提交,为了方便测试,之 ...

  2. EXCEL 怎么把一列数据转换为多行多列数据

    目的:将一列120个数据转换为12行10列. 1,首先,在B1格输入"A1",B2格输入"A13",然后选中B1.B2,将鼠标移到选中框的右下角(此时鼠标变为& ...

  3. 资深数据科学家教你如何在求职过程中找到心仪工作

    目前进入七月份,算是又一年秋招的开始,实习的中期阶段.很有必要给大家分享一下这篇来自数据科学家Kelly Peng的求职心路历程,她应聘于她所喜爱的Airbnb公司的数据科学岗位,即使你想应聘的不是数 ...

  4. 如何将CAD数据转换为ArcGIS可使用的数据?

    将CAD数据转为矢量数据方法众多,此处将提供三种方法: 方法一:CAD转地理数据库注记 在[ArcToolBox]窗口中,双击[转换工具]→[转出至地理数据库]→[CAD至地理数据库],在[CAD至地 ...

  5. 将查询出来的数据按照一个字段分组且排序过程中,遇到的一些有关group的问题(分组排序应该使用partition by)

    目录 我想要的效果 Group By Group By 语法 Group By 错误示例 重点提醒 功能实现(partition by 分区函数) 以往查询出来的数据想要按照某一个字段分组展示,直接按 ...

  6. oracle二进制转换字母,如何将oracle二进制数据转换为word文本

    现在很多项目和技术支持在线编辑word文档.有控件的和javascript操作的.这里简单的推荐一个在线编辑word文档的控件. 地址:http://www.dianju.cn/p/weboffice ...

  7. Numpy中使用astype函数将字符串格式数据转换为数值数据类型

    Numpy中使用astype函数将字符串格式数据转换为数值数据类型 目录 Numpy中使用astype函数将字符串格式数据转换为数值数据类型 numpy是什么?numpy和list有哪些区别? Num ...

  8. Matlab有符号十六进制数据转换为有符号十进制数据并存储到txt文件

    代码功能实现将有符号的十六进制数据转换为有符号的十进制数据并存储到txt文件 clear all clc %% 读入十六进制数据 fid = fopen('C:\Users\Administrator ...

  9. EXCEL中多行多列数据与一行或一列数据的互相转换

    在平常所用数据中,会出现多行多列数据,但是实际又需要一行或一列形式的数据,或者相反者,那么这篇文章将教会你如何在excel中对多行多列数据与一行一列数据的相互转换.或者将行数据变为列数据.列数据变为行 ...

最新文章

  1. 基于Confluent.Kafka实现的KafkaConsumer消费者类和KafkaProducer消息生产者类型
  2. layer output 激活函数_一文彻底搞懂BP算法:原理推导+数据演示+项目实战(下篇)...
  3. python序列化详细教程
  4. 从已有安装包(vendor)恢复 composer.json
  5. 苹果关掉200m限制_苹果下载大于200M限制
  6. 一周文章导读:架构图;服务器;CPU
  7. docker容器不支持中文编码
  8. 结对编程——paperOne基于java的四则运算 功能改进
  9. 手机电子词典_【摘要】陈玉珍:词典使用对搭配产出与记忆保持的效能研究—— 以手机在线词典为例...
  10. c语言脱验证,CCAR.适航符合性验证思路简述
  11. io-nio-socket步步为营(七) IO模型-心得体会
  12. 【算法题】1927. 求和游戏
  13. PTA——递归法求最大公约数
  14. Revit建模:使用技巧【软件操作类】希望能帮大家提高效率(上)
  15. Windows11镜像下载及安装
  16. 她姓敖 是计算机系的,姓敖的名人
  17. RT5350使用uboot从U盘启动linux成功
  18. 数字文旅解决方案 数字文旅
  19. 战网服务器修改,怎么修改战网客户端?修改战网客户端的方法
  20. 经典管理学书籍推荐:《经理人参阅:企业管理实务》

热门文章

  1. 软件测试周刊(第56期):新年的目的并非是拥有新的一年,而是拥有一个新的灵魂。 ​​​
  2. mysql配置域名_bind+mysql域名解析的简单配置
  3. vue从后端获取数据绑定复选框
  4. Biome-BGC在模拟过程中,如何使用Linux、Python等,完成前处理和后处理工作???
  5. 8.14 猪王争霸 2693
  6. 2.CCNA第二天-主机到主机通讯模型
  7. powerbi判断父级是否有子集_powerbi可以进行判断吗?
  8. echarts笔记-2,嵌套饼图
  9. 高数——微分中值定理之罗尔定理
  10. 梦想是什么,梦想在哪里,IT梦!