GAMS与MATLAB的数据交互
GAMS與MATLAB的數據交互
- 背景
- 1 學習材料準備
- 2 添加路徑
- 3 數據交互
- 3.1 GAMS數據寫入與讀取
- 3.1.1 將GAMS數據寫到gdx文件中
- 3.1.2 GAMS讀取gdx文件中的數據
- 3.1.3 本文模型GAMS代碼
- 3.2 Matlab數據寫入和讀取
- 3.2.1 Matlab將數據寫入gdx文件中
- 3.2.2 Matlab讀取gdx文件中的數據
- 3.2.3 本文模型MATLAB代碼
- 4 總結
背景
在利用GAMS編寫并求解完模型后,無法利用GAMS實現結果的可視化,因此需要進行數據交互,利用MATLAB強大的圖形處理能力進行結果的展示。
本文將介紹GAMS與MATLAB的數據交互方法。仍舊用上篇博文中模型為例,博文鏈接link。
1 學習材料準備
官網給出的相關說明(英文),參考鏈接link;
教學視頻(英文),鏈接link。
總結:兩個軟件間的交互主要是利用“.gdx”文件作為中轉站實現的。
2 添加路徑
在安裝完GAMS和MATLAB兩款軟件后,需要將GAMS的安裝路徑添加到MATLAB的path中去:
第一步,“File——Options——Execute”,可以獲得GAMS的安裝路徑
第二步,打開MATLAB,“HOME——set path——Add Folder——Save”。
第三步,為了驗證是否成功,可以在MATLAB命令行窗口中寫入“help wgdx”,若可以看到函數解釋則說明添加成功。
3 數據交互
3.1 GAMS數據寫入與讀取
3.1.1 將GAMS數據寫到gdx文件中
想要利用gams函數進行模型結果的傳出,首先需要在用GAMS編寫模型時,寫上存儲結果的語句,如下所示(第一句寫在模型開頭,第二句寫在模型結尾)。
第一句表示的意思是“將變量X和UU存儲到GtoM.gdx文件中去”,第二句的意思是“執行數據存儲語句”。
3.1.2 GAMS讀取gdx文件中的數據
模型中參數px是需要從“MtoG.gdx”文件中讀取的數據(關于MtoG.gdx會在3.2.1中講),語句如下所示。
第一句表示的意思是“從MtoG.gdx文件中讀取數據”,第三句表示的意思是“加載參數px”。
3.1.3 本文模型GAMS代碼
$set matout "'GtoM.gdx', X, UU ";* Definition of the Index Sets Sets i goods /BRD bread, MLK milk/ h factors /CAP capital, LAB labor/ ;* Definition of Parameters Parameters alpha(i) /BRD 0.2, MLK 0.8/ pz(h) /CAP 2, LAB 1/ z(h) /CAP 10, LAB 20/ ; Parameter px(i); $if not set gdxin $set gdxin MtoG $GDXIN %gdxin% $LOAD px $GDXIN* Definition of variables Positive Variable X(i)Variable UUEquationS eqt ffggf obj fgjg ;*Specification of equations eqt.. sum(i, px(i)*X(i)) =e= sum(h, pz(h)*z(h)); obj.. UU =e= prod(i, X(i)**alpha(i));*Defining the model Model HHmax /all/;*Sloving the model Solve HHmax maximazing UU using NLP;execute_unload %matout%;3.2 Matlab數據寫入和讀取
寫入函數wgdx;讀取函數rgdx。
3.2.1 Matlab將數據寫入gdx文件中
在matlab中將想要傳入的參數寫到相應的文件中去:name表示要寫入參數的名稱,type表示要寫入參數的名稱,uels表示要寫入參數的下標屬性,val表示要寫入參數的數值,form表示要寫入參數的類型(full和sparse類型)。
a.name='px'; a.type='parameter'; a.uels={'BRD','MLK'}; a.val=[1 2]; a.form='full'; wgdx('MtoG',a)3.2.2 Matlab讀取gdx文件中的數據
通過rgdx函數讀取gdx文件中的數據。
x.name='X'; x=rgdx('MtoG',x);數據展示如下,將x的數值賦給另一個向量:
b=x.val;3.2.3 本文模型MATLAB代碼
clc,clear a.name='px'; a.type='parameter'; a.uels={'BRD','MLK'}; a.val=[1 2]; a.form='full'; wgdx('MtoG',a); system 'gams HHmax' x.name='X'; x=rgdx('GtoM',x); x.val4 總結
至此,GAMS與MATLAB的數據交互就已經能夠實現。
【整理不易,轉載請注明出處和相關鏈接,否則必究!】
總結
以上是生活随笔為你收集整理的GAMS与MATLAB的数据交互的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 树莓派2B 3B安装USB无线网卡 ED
- 下一篇: ArcGIS API For JS之空间