------
!!笔记
学生问题:
* 1. 该提案与GAMS基础设施提案一起,旨在构建一个用于使用GAMS源代码的开源基础设施。我的职责是通过添加功能来扩展这个基础设施。就我而言
知道吗,我读过一些关于GAMS的文档,发现已经有了一个编程环境。所以我的问题是,要构建的项目是否与可以从网站下载的IDE类似?
帕特里克的回答:
(你已经开始做一些“相关的工作”研究,这很好——理科硕士论文最重要的部分之一是建立在当前的“最先进的技术”之上,而不是重新发明轮子。我还没有尝试过GAMS IDE,所以我的评论可能有点偏离主题。)
不,我不希望这个项目的结果是一个IDE,而是可以用作IDE的“插件”或独立的“批处理模式”工具的软件组件。重点应该放在GAMS语言的语法和语义结构(用GAMS语言表示的模型)上,使用抽象语法树和源到源的转换。(理想情况下,我想要一个可以在模型源代码的svn版本历史上运行并显示聚合结果的系统。)
* 2. 我应该使用哪种语言和哪个平台?
Patrik:我会说是Haskell和Linux,但最重要的部分是可移植性(如果可能的话,独立于平台)。可能使用http://www.graphviz.org/用于可视化?Haskell非常擅长处理抽象语法树(可能由BNF Converter[1]帮助),而且它是我最熟悉的语言。Linux对软件开发有很好的支持,并且有很强的开源传统。
[1] http://www.cs.chalmers.se/cs/Research/Language-technology/BNFC/
* 3. 对于编写测试框架,它像Java中的Junit吗?它还应该自动生成测试用例吗?
Patrik:这里的重要部分是支持回归测试,以帮助在重构或改进模型时检测问题(支持在特定更改前后进行测试和比较)。如果某些部分可以自动化,那就太好了,但典型GAMS模型的输入数据通常是相当大的浮点数矩阵,我预计很难自动生成。但是,“输入灵敏度”的自动测试将是很好的——用输入数据的微小变化运行模型,并测量输出的变化(以确定输入不同部分的相对重要性)。用“琐碎”(可能是“全零”)或“边界线情况”输入来测试模型以捕捉错误也是很好的。如果这种“特殊情况”可以(半)从模型源代码的分析中自动生成,那就太棒了。跟踪模型源代码不同版本的求解器的运行时间也很好。
* 4. 正如你所说,这个提议与GAMS模型重构密切相关。那么,对GAMS的重构支持是什么呢?
Patrik:重构通常是关于源代码的语义保持转换。就GAMS及其PIK用户而言,其中一个需求是更改模型的源代码以使其运行更快,但仍会产生相同的结果。另一个需要是在不改变行为的情况下重组代码以提高可读性。(它可以是变量或方程的重命名,拆分或合并文件,在s_{i+1}=sum_{j=0}^{i}(a_j)和s_{1+1}=s_i+a_i之间进行更改,等等。)
目前,GAMS支持将模型分离为多个源文件(可以被认为是子模型或子模块),但没有真正的模块系统,因此对GAMS优化器来说,这都是一个大的优化问题。当模型变得更加复杂时,这对模型开发人员来说就成了一个问题。从概念上讲,他们谈论“组合子模型”,例如经济子模型和气候子模型,但没有直接的语言支持来自行开发和测试子模型。在当前系统中,他们不愿用更好的版本替换一个子模块,因为他们不确定可能对整个系统产生的影响。对依赖关系可视化和单元测试的支持可以让他们充分相信这些更改是可控的。
----
我希望这些答案有助于您前进——如果您愿意,我们可以在下周安排一次会议,以最终确定描述。
请注意,这个项目需要与Eric Bergquist进行一些交互,他将负责[[GAMS Model Refactoring]]和优化,我希望再多一个学生同时负责[[GAMS Software Technology Infrastructure]]。(如果你有朋友在找硕士项目,你可以试着招聘他们;-)