关于GAMS
GAMS是优化行业领先的工具提供商之一,也是首先将数学代数语言与传统编程概念相结合的软件系统,以便有效地描述和解决优化问题。
GAMS为“General Algebraic Modeling Systems”的缩写,透过简单的操作模式,GAMS排除了许多技术性问题,让用户能专心于模块的建立。其语言编辑器近似于其他常用的程序语言,让更多的使用者能受惠于GAMS。在使用过程中,运算数据可以经由常用的表格加载、清晰的模块架构让用户可以随时重复利用之前撰写的模块,进行代数符号的修改。GAMS亦可以对包含时间序列的动态模块进行运算。通用代数建模系统(GAMS)是特别为建模线性,非线性和混合整数优化问题而设计的。本系统对于大型的,复杂的问题特别有帮助.GAMS可以运行在个人计算机、工作站、大型机和超级计算机上。
扫码获取软件报价
背景
专业软件开发在很大程度上依赖于测试自动化和持续集成 (CI),以确保在开发过程的早期发现错误。Jenkins 是首先被大量采用的开源自动化服务器,并且是 GAMS 每天使用的工具之一。借助 GitLab CI/CD 和 GitHub Actions,两大存储库平台近年来也纷纷加入了自己的持续集成产品。对于 GAMS 模型的开发人员来说,Jenkins、GitHub 和 GitLab 的 CI 功能并不容易使用,因为构建过程很难与可用于运行测试代码的 GAMS 安装进行通信。
我们全新的产品GAMS Engine已经改变了这一点。GAMS Engine 提供了一个 REST API,可用于将 GAMS 任务提交和运行到一个中心位置。
下面我们概述了 GitHub 上的任何 GAMS 模型开发人员如何轻松使用 Engine 为其模型运行自动化测试。相同的原则适用于 GitLab 和 Jenkins。
GitHub 示例
Prerequisites
包含您的 GAMS 模型代码的 GitHub 存储库。
访问 GAMS 引擎实例的凭据。
它是如何完成的
“GitHub Actions”背后的概念很简单。简而言之:
代码存储库中发生的任何事件(例如推送新提交)都可以触发工作流
一个工作流包含一个或多个作业,这些作业在称为runners 的计算资源上执行。作业中发生的一切都在同一个运行器上顺序运行,默认情况下,多个作业在多个运行器上同时运行。您可以选择基于 Linux、Windows 或 macOS 的运行程序。GitHub 提供了相当慷慨的免费 runner时间配额,这对于大多数项目来说应该足够了 。
每个作业包含一个或多个步骤。典型的步骤可以是“将新版本从存储库签出到运行器”、“编译源代码”、“将某些内容部署到服务器”等等。
每个步骤都调用操作或执行 shell 命令。行动是实际做某事的事情。
为了演示如何使用 Engine 为 GAMS 模型运行自动化测试,我们开发团队的 Freddy 在https://github.com/GAMS-dev/actions创建了两个 GitHub 操作。
“run-job”操作允许您在 GAMS 引擎实例上运行模型。
“更新模型”操作允许您在 GAMS 引擎实例上注册或更新 GAMS 模型。这与自动化测试无关,但可用于控制 GAMS 引擎上的模型部署,不在本文讨论范围之内。我们将在另一篇文章中介绍模型部署。
如何使用 GitHub 操作?
要定义工作流,您必须在.github/workflows/源存储库中创建一个 YAML 文件。将新提交推送到存储库时,将运行以下工作流。它检查对新运行器的新提交,准备模型以提交给 GAMS 引擎,然后在引擎上以仅编译模式运行模型:
关于可以传递给‘run-job’
操作的参数,一些相关的解释如下:
你可以看到我们使用了一些形式的变量${{ secrets.xyz }}
。这些变量可以以加密形式存储在模型存储库 ( https://docs.github.com/en/actions/security-guides/encrypted-secrets)
中。您需要将这些秘密设置为指向URL
您选择的 Engine
实例的 ,并提供USER
和PASSWORD
。
${{ github.workspace }}
末行中使用的变量包含运行程序内的路径,您的代码在任务的首步中由“checkout”
操作检出。
该参数a=c
导致模型仅由 GAMS 工作人员编译,但不会执行。这足以捕获语法错误,并确保工作流快速完成。
将此工作流文件添加到您的存储库并对其进行修改以适合您的模型后,每次推送到存储库都会触发该模型在Engine
上运行。如果模型编译失败,运行将失败。
如何运作?
当我们的 GitHub 操作运行时会发生什么呢?解释如下:
我们的
GAMS-dev/actions
存储库包含每个动作的单独元数据YAML
文件,这些文件配置动作的输入和输出(例如https://github.com/GAMS-dev/actions/blob/main/run-job/action。yml
)。元数据定义由
GitHub ( https://docs.github.com/en/actions/creating-actions/creating-a-javascript-action )
提供的“操作工具包”读取,它创建了一个‘index.js’ 文件。这个‘index.js’ 必须完成才能实现实际的逻辑,即使用Engine REST API
来提交和调度模型,并接收结果。您可以在我们的存储库中看到的 JavaScript 代码使用
ncc ( https://github.com/vercel/ncc )
编译成一个独立的文件,包括所有依赖项。
软件订购
订购热线: 010-56548231, 18610597626
软件咨询: crystal@uone-tech.cn
北京友万信息科技有限公司,英文全称:Beijing UoneInfo&Tech Co.,Ltd (Uone-Tech),作为GAMS软件在中国大陆的授权经销商及合作伙伴,希望能给GAMS软件的中国用户提供更多服务与支持,并帮助中国用户建立完善的软件售后服务体系。如需申请新版本软件试用、新版本采购及老版本更新升级请联系我们,感谢您的支持与关注。
专注分享商业数据分析、金融数据分析、应用统计分析、知识图谱、机器学习、计量经济、人工智能、网络爬虫、自动化报告与可重复研究等热门技术内容。定向培养Stata、Python、R语言数据人才,助力产学研政企商协同发展,为中国大数据产业蓄能。合作热线:010-56548231 邮箱:info@uone-tech.cn。