關于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。