最近的更改- 搜索以下为:

GAMSD开发工具重构分析可视化

GAMS开发工具:重构、分析、可视化

(添加081109)

(本提案取决于GAMS软件技术基础设施提案,与GAMS模型重构

GAMS游戏是一个DSL公司用于(经济)优化问题。

  • 方程/文件之间依赖关系的可视化
  • 支持重构
  • 测试框架
    • 系统的夜间运行
    • 连接到SVN存储库(跟踪最新的工作版本等)
背景
FP(Haskell),“测试、调试和验证”,数学建模,敏捷软件开发(应包含单元测试和重构),软件架构
联系人
Patrik Jansson(Chalmers)、Cezar Ionescu(研究。PIK公司)

笔记

学生问题:

  • 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模型重构和优化,我希望再多一个学生GAMS软件技术基础设施也是平行的。(如果你有朋友在找硕士项目,你可以尝试招募他们;-)