GAMS模型编写与求解(入门)
GAMS模型編寫與求解(入門)
- 背景
- 1 編寫流程
- 1.1 集合聲明
- 1.2 參數賦值
- 1.2.1 標量聲明
- 1.2.2 一維向量聲明
- 1.2.3 二維向量聲明
- 1.3 變量聲明
- 1.3.1 變量關鍵字
- 1.3.2 舉例
- 1.4 約束
- 1.4.1 約束聲明
- 1.4.2 約束編寫
- 1.5 模型建立及求解說明
- 1.6 模型代碼
- 2 特別注意點
- 2.1 *和$的使用
- 2.1.1 *的使用
- 2.1.2 $的使用
- 2.2 下標有限制范圍的約束表達
- 2.2.1 舉例1
- 2.2.2 舉例2
- 2.2.3 舉例3
- 3 模型求解
- 3.1 解決方案
- 3.2 求解結果
- 4 總結
背景
完成軟件的安裝后,需要進行模型的編寫。本篇將結合自己的學習心得,介紹一個簡單模型的編寫。
1 編寫流程
參考材料鏈接link,材料里面包括“軟件介紹、基本語法及案例分析”,提供的幫助很大;此處提出一個百度云鏈接link,提取碼:b8wg。
下面將結合材料中提供的“案例二”,進行簡明扼要地講述,具體語法細節可參考上述材料。
1.1 集合聲明
結構注意點:Sets是關鍵字,引領集合的聲明;最后一個集合聲明過后需要有分號結束,但集合之間不要分號。
語法注意點:i是集合名;goods是對集合的一個解釋,可有可無;/ /之間內容是屬性,其中BRD和MIL是屬性名,中間以“,”隔開,;bread和milk是對屬性的一個解釋,可有可無。
1.2 參數賦值
1.2.1 標量聲明
結構注意點:Scalars是關鍵字,引領標量的賦值;最后一個標量賦值過后需要有分號結束,但標量之間不要分號。
語法注意點:M1是標量名;maximum value是對標量的一個解釋,可有可無;/ /之間內容是標量的數值。
PS:代碼僅是舉例方便理解,非本模型內容。
1.2.2 一維向量聲明
結構注意點:Parameters是關鍵字,引領一維向量的賦值;最后一個一維向量賦值過后需要有分號結束,但一維向量之間不要分號。
語法注意點:alpha是一維向量名;(i)是一維向量的下標;xxx是對一維向量的一個解釋,可有可無;/ /之間內容是向量值,中間以“,”隔開,其中BRD和MIL是屬性名,對應著此前聲明的 i 集合。
1.2.3 二維向量聲明
結構注意點:Table是關鍵字,引領二維向量的賦值;二維向量暫時知道的是僅能一個一個聲明;聲明完后,需要以分號結尾。
語法注意點:A是二維向量名;xxx是對二維向量的一個解釋,可有可無;G1 F1等是向量的下標,需要有相應的集合聲明以對應。
PS:代碼僅是舉例方便理解,非本模型內容。
1.3 變量聲明
注意:目標值只能設置成Free類型。
1.3.1 變量關鍵字
1.3.2 舉例
聲明的是變量UU和正變量X(i)。
Variable UUPositive Variable X(i)1.4 約束
1.4.1 約束聲明
在編寫約束之前,需要聲明約束。
Equations是關鍵字,引領約束的聲明;eqt是約束名稱,ffggf是對eqt的描述,可有可無。
1.4.2 約束編寫
約束編寫時,格式如下。編寫中所需要的函數以及符號如下圖所示。注:每個約束編寫完成后均需要以分號結尾。
eqt.. sum(i, px(i)*X(i)) =e= sum(h, pz(h)*z(h)); obj.. UU =e= prod(i, X(i)**alpha(i));
1.5 模型建立及求解說明
分別通過如下兩句語言實現。分別表示“將所建立的模型命名為HHmax”、“通過使用NLP模型求解器求解HHmax模型以得到UU的最大值”。
*Defining the model Model HHmax /all/;*Sloving the model Solve HHmax maximazing UU using NLP;1.6 模型代碼
* 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/ px(i) /BRD 1, MLK 2/ pz(h) /CAP 2, LAB 1/ z(h) /CAP 10, LAB 20/ ;* Definition of variables Positive Variables X(i) ;Variable UU ;Equations 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;2 特別注意點
2.1 *和$的使用
2.1.1 *的使用
(1)以下兩段代碼等價,大家可以看到使用*的方便之處,具體可參考上面提供的文檔。
PS:代碼僅是舉例方便理解,非本模型內容。
(2)星號還有注釋作用,可以看到1.6部分中以 ‘*’開頭的語句,均為備注語句。
2.1.2 $的使用
$用于條件語句的表達。如下的語句表示“a在b大于1.5條件成立的情況下等于2”,如果條件不滿足,則不賦值。
PS:代碼僅是舉例方便理解,非本模型內容。
2.2 下標有限制范圍的約束表達
2.2.1 舉例1
注意:若約束表示多個式子,比如下圖,其實這個約束表示K*I個式子,所以在聲明時需要附上(K,I)。
2.2.2 舉例2
注意:若有加和符號,則用sum語句,格式為sum((下標),變量)。
2.2.3 舉例3
特別注意:對于這種有多個下標,但是只有一個下標有范圍的,有三個注意事項。
第一個注意事項:類似于2.2.1,在聲明時需要附上(K,I);
第二個注意事項:由于i和i1共用同一個集合I,因此需要加上ALIAS,相當于復制I;
第三個注意事項:sum((下標),變量)加和時,需要在下標后附上對i1的限制。
具體見代碼。
此處引出兩個額外符號,ord()和ge,其中ord(I)的意思“得到此時的I在集合中的排序”,ge的意思是“大于等于”,因此“ord(IL) ge ord(I)”的意思就是“在集合中,排序大于I的IL”。
3 模型求解
3.1 解決方案
模型的求解當然要利用求解器了(需要購買)。首先通過“File——Options——Slovers”,可以看到自己可使用求解器情況,如下圖。“Demo”表示可以使用,“Full”則表示能夠完全使用。
對于沒有許可證的同學,此處提供一個貼吧里的解決方法,鏈接link,通過下載鏈接中的文檔,獲得許可證,并且在修改完自己系統時間后,通過“File——Options——Licenses”選擇許可證,即可使用。(PS:本人未嘗試,僅貼出來一種可能的解決方案)。
3.2 求解結果
本文算例求解結果如圖所示,x(1)=8,x(2)=16,目標值UU=13.929。
4 總結
至此,利用GAMS進行模型的編寫及求解已完成。
【整理不易,轉載請注明出處和相關鏈接,否則必究!】
總結
以上是生活随笔為你收集整理的GAMS模型编写与求解(入门)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 互联网早报:抖音上线外放音量过高提醒功能
- 下一篇: ios11手机屏幕投屏到电脑,利用苹果镜