来自cse

FP:GAMSDevelopment Tools重构分析可视化

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

(添加081109)

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

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

背景
FP(Haskell),“测试、调试和验证”,数学建模,敏捷软件开发(应包含单元测试和重构),软件架构
联系人
帕特里克·詹森(查尔默斯),塞扎尔·艾奥内斯库(研究。PIK公司)

笔记

学生问题:

帕特里克的回答:

(你已经开始做一些“相关的工作”研究,这很好——理科硕士论文最重要的部分之一是建立在当前的“最先进的技术”之上,而不是重新发明轮子。我还没有尝试过GAMS IDE,所以我的评论可能有点偏离主题。)

不,我不希望这个项目的结果是一个IDE,而是可以用作IDE的“插件”或独立的“批处理模式”工具的软件组件。重点应该放在GAMS语言的语法和语义结构(用GAMS语言表示的模型)上,使用抽象语法树和源到源的转换。(理想情况下,我想要一个可以在模型源代码的svn版本历史上运行并显示聚合结果的系统。)

Patrik:我会说是Haskell和Linux,但最重要的部分是可移植性(如果可能的话,独立于平台)。可能使用http://www.graphviz.org/用于可视化?Haskell非常擅长处理抽象语法树(可能由BNF Converter[1]帮助),而且它是我最熟悉的语言。Linux对软件开发有很好的支持,并且有很强的开源传统。

[1]http://www.cs.chalmers.se/cs/Research/Language-technology/BNFC/

Patrik:这里的重要部分是支持回归测试,以帮助在重构或改进模型时检测问题(支持在特定更改前后进行测试和比较)。如果某些部分可以自动化,那就太好了,但典型的GAMS模型的输入数据通常是相当大的浮点数矩阵,我预计很难自动生成。但是,“输入灵敏度”的自动测试将是很好的——用输入数据的微小变化运行模型,并测量输出的变化(以确定输入不同部分的相对重要性)。用“琐碎”(可能是“全零”)或“边界线大小写”输入来测试模型以捕获错误也很好。如果这种“特殊情况”可以(半)从模型源代码的分析中自动生成,那就太棒了。跟踪模型源代码不同版本的求解器的运行时间也很好。

Patrik:重构通常是关于源代码的语义保持转换。就GAMS及其PIK用户而言,其中一个需求是更改模型的源代码以使其运行更快,但仍会产生相同的结果。另一个需要是在不改变行为的情况下重组代码以提高可读性。(可能是重命名变量或方程,拆分或连接文件,在s_{i+1}=sum_{j=0}^{i}(a_j)和s_{i+1}=s_i+a_i之间更改,等等)

目前,GAMS支持将一个模型拆分为多个源文件(可以认为是子模型或子模块),但没有真正的模块系统,因此对于GAMS优化程序来说,这是一个很大的优化问题。当模型变得更加复杂时,这对模型开发人员来说就成了一个问题。从概念上讲,他们谈论“组合子模型”,例如经济子模型和气候子模型,但没有直接的语言支持来自行开发和测试子模型。在当前系统中,他们不愿用更好的版本替换一个子模块,因为他们不确定可能对整个系统产生的影响。对依赖关系可视化和单元测试的支持可以让他们充分相信这些更改是可控的。


我希望这些答案有助于您前进——如果您愿意,我们可以在下周安排一次会议,以最终确定描述。

请注意,此项目需要与Eric Bergquist进行一些交互,后者将致力于GAMS模型重构和优化,我希望再有一名学生在GAMS软件技术基础设施也是平行的。(如果你有朋友在找硕士项目,你可以尝试招募他们;-)

检索自https://wiki.portal.chalmers.se/cse/pmwiki.php/FP/GAMSDevelopment Tools重构分析可视化
页面上次修改时间:2008年12月12日上午10:04