【GAMS与C++的交互】
生活随笔
收集整理的這篇文章主要介紹了
【GAMS与C++的交互】
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
GAMS與C++的交互(版本要求:GAMS25.1最多支持VS2017,GAMS38可以支持VS2019)
若有侵權或者不恰當?shù)氖褂?#xff0c;請及時聯(lián)系作者
若起到了作用請一鍵三聯(lián)
參考源代碼(官方代碼):
Tutorial (gams.com)
我的理解是,想要在C++里面運行GAMS程序,只需要把GAMS里面的數(shù)據(jù)和模型分別輸入到函數(shù)中進行運行即可
-
C++輸出到.gdx
- 第一種方案:按照不同的分類格式一步一步地進行輸出,這是官方的例程,使用的是string
- 嘗試了一下使用數(shù)組設置set,發(fā)現(xiàn)并不可行,查了一下函數(shù)定義,發(fā)現(xiàn)成員為string,gams里面這個問題同樣存在
解決方案,直接強制類型轉(zhuǎn)換直接使用to_string()將int轉(zhuǎn)化成string,如果嫌麻煩的話,可以對函數(shù)進行重載,就在頭文件里復制一下加一行就可以了
//寫的部分 //我來試試用數(shù)組的形式行不行,隨便定義一組數(shù)據(jù)double load[24] = { 0.0196,0.0186,0.0189,0.0202,0.0170,0.0767,0.0773,0.0889,0.2141,0.1255,0.0822,0.0558,0.340,0.0311,0.0266,0.0757,0.1181,0.1306,0.0639,0.0767,0.0735,0.0414,0.0286,0.0552 };// 先來定義一個集合setGAMSSet hour = db.addSet("hour", 1, "time scalar");for (int o = 1; o < 25; o++)hour.addRecord(to_string(o));GAMSParameter load_gams = db.addParameter("load", "load of system", hour);for (int o = 1; o < 25; o++)load_gams.addRecord(to_string(o)).setValue(load[o-1]); //讀的部分vector<string> read_hour;for (GAMSSetRecord rec : db2.getSet("hour"))read_hour.push_back(rec.key(0));map<string, double> load_new;for (GAMSParameterRecord rec : db2.getParameter("load"))load_new[rec.key(0)] = rec.value();- 第二種方案,使用string一口氣進行傳輸:使用GAMSJob這個類
-
寫入.gdx文件
// 輸入數(shù)據(jù)的格式 string getDataText() {return "Sets \n"" i canning plants / seattle, san-diego / \n"" j markets / new-york, chicago, topeka / ; \n""Parameters \n"" \n"" a(i) capacity of plant i in cases \n"" / seattle 350 \n"" san-diego 600 / \n"" \n"" b(j) demand at market j in cases \n"" / new-york 325 \n"" chicago 300 \n"" topeka 275 / ; \n"" \n""Table d(i,j) distance in thousands of miles \n"" new-york chicago topeka \n"" seattle 2.5 1.7 1.8 \n"" san-diego 2.5 1.8 1.4 ; \n"" \n""Scalar f freight in dollars per case per thousand miles /90/;\n"; } //如果需要用C++寫入GAMS的東西,直接將GAMS里面的內(nèi)容用string按GAMS的格式寫出來輸入就可以GAMSJob t3 = ws.addJobFromString(getDataText());t3.run();//TODO: change doExport to export?t3.outDB().doExport("C:\\Users\\henry\\Desktop\\tdata.gdx"); -
讀取我還沒搞明白,后續(xù)可能會更新
(但是我覺得用不上,因為讀取完全可以通過gams讀取gdx文件在gams里面計算,沒必要使用C++調(diào)庫求解)
總結
以上是生活随笔為你收集整理的【GAMS与C++的交互】的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何用uni-app做一个领优惠券H5、
- 下一篇: 网站开发规范及流程v1.0