日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

GAMS模型编写与求解(入门)

發(fā)布時(shí)間:2024/3/26 编程问答 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 GAMS模型编写与求解(入门) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

GAMS模型編寫與求解(入門)

  • 背景
  • 1 編寫流程
    • 1.1 集合聲明
    • 1.2 參數(shù)賦值
      • 1.2.1 標(biāo)量聲明
      • 1.2.2 一維向量聲明
      • 1.2.3 二維向量聲明
    • 1.3 變量聲明
      • 1.3.1 變量關(guān)鍵字
      • 1.3.2 舉例
    • 1.4 約束
      • 1.4.1 約束聲明
      • 1.4.2 約束編寫
    • 1.5 模型建立及求解說明
    • 1.6 模型代碼
  • 2 特別注意點(diǎn)
    • 2.1 *和$的使用
      • 2.1.1 *的使用
      • 2.1.2 $的使用
    • 2.2 下標(biāo)有限制范圍的約束表達(dá)
      • 2.2.1 舉例1
      • 2.2.2 舉例2
      • 2.2.3 舉例3
  • 3 模型求解
    • 3.1 解決方案
    • 3.2 求解結(jié)果
  • 4 總結(jié)

背景

完成軟件的安裝后,需要進(jìn)行模型的編寫。本篇將結(jié)合自己的學(xué)習(xí)心得,介紹一個(gè)簡(jiǎn)單模型的編寫。

1 編寫流程

參考材料鏈接link,材料里面包括“軟件介紹、基本語法及案例分析”,提供的幫助很大;此處提出一個(gè)百度云鏈接link,提取碼:b8wg。
下面將結(jié)合材料中提供的“案例二”,進(jìn)行簡(jiǎn)明扼要地講述,具體語法細(xì)節(jié)可參考上述材料。

1.1 集合聲明

結(jié)構(gòu)注意點(diǎn):Sets是關(guān)鍵字,引領(lǐng)集合的聲明;最后一個(gè)集合聲明過后需要有分號(hào)結(jié)束,但集合之間不要分號(hào)。
語法注意點(diǎn):i是集合名;goods是對(duì)集合的一個(gè)解釋,可有可無;/ /之間內(nèi)容是屬性,其中BRD和MIL是屬性名,中間以“,”隔開,;bread和milk是對(duì)屬性的一個(gè)解釋,可有可無。

Sets i goods /BRD bread, MLK milk/ h factors /CAP capital, LAB labor/ ;

1.2 參數(shù)賦值

1.2.1 標(biāo)量聲明

結(jié)構(gòu)注意點(diǎn):Scalars是關(guān)鍵字,引領(lǐng)標(biāo)量的賦值;最后一個(gè)標(biāo)量賦值過后需要有分號(hào)結(jié)束,但標(biāo)量之間不要分號(hào)。
語法注意點(diǎn):M1是標(biāo)量名;maximum value是對(duì)標(biāo)量的一個(gè)解釋,可有可無;/ /之間內(nèi)容是標(biāo)量的數(shù)值。
PS:代碼僅是舉例方便理解,非本模型內(nèi)容。

Scalars M1 maximum value /1E8/ M2 minimum value /1/ ;

1.2.2 一維向量聲明

結(jié)構(gòu)注意點(diǎn):Parameters是關(guān)鍵字,引領(lǐng)一維向量的賦值;最后一個(gè)一維向量賦值過后需要有分號(hào)結(jié)束,但一維向量之間不要分號(hào)。
語法注意點(diǎn):alpha是一維向量名;(i)是一維向量的下標(biāo);xxx是對(duì)一維向量的一個(gè)解釋,可有可無;/ /之間內(nèi)容是向量值,中間以“,”隔開,其中BRD和MIL是屬性名,對(duì)應(yīng)著此前聲明的 i 集合。

Parameters alpha(i) xxx /BRD 0.2, MLK 0.8/ px(i) xxx /BRD 1, MLK 2/ pz(h) /CAP 2, LAB 1/ z(h) /CAP 10, LAB 20/ ;

1.2.3 二維向量聲明

結(jié)構(gòu)注意點(diǎn):Table是關(guān)鍵字,引領(lǐng)二維向量的賦值;二維向量暫時(shí)知道的是僅能一個(gè)一個(gè)聲明;聲明完后,需要以分號(hào)結(jié)尾。
語法注意點(diǎn):A是二維向量名;xxx是對(duì)二維向量的一個(gè)解釋,可有可無;G1 F1等是向量的下標(biāo),需要有相應(yīng)的集合聲明以對(duì)應(yīng)。
PS:代碼僅是舉例方便理解,非本模型內(nèi)容。

Table A xxxF1 F2 F3 F4 F5 G1 1 2 3 4 5 G2 6 7 8 9 10 G3 11 12 13 14 15 G4 16 17 18 19 20 ;

1.3 變量聲明

注意:目標(biāo)值只能設(shè)置成Free類型。

1.3.1 變量關(guān)鍵字

1.3.2 舉例

聲明的是變量UU和正變量X(i)。

Variable UUPositive Variable X(i)

1.4 約束

1.4.1 約束聲明

在編寫約束之前,需要聲明約束。
Equations是關(guān)鍵字,引領(lǐng)約束的聲明;eqt是約束名稱,ffggf是對(duì)eqt的描述,可有可無。

Equations eqt ffggf obj fgjg ;

1.4.2 約束編寫

約束編寫時(shí),格式如下。編寫中所需要的函數(shù)以及符號(hào)如下圖所示。注:每個(gè)約束編寫完成后均需要以分號(hào)結(jié)尾。

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 模型建立及求解說明

分別通過如下兩句語言實(shí)現(xiàn)。分別表示“將所建立的模型命名為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 特別注意點(diǎn)

2.1 *和$的使用

2.1.1 *的使用

(1)以下兩段代碼等價(jià),大家可以看到使用*的方便之處,具體可參考上面提供的文檔。
PS:代碼僅是舉例方便理解,非本模型內(nèi)容。

I GG /I1,I2,I3,I4,I5/ I GG /I1*I5/

(2)星號(hào)還有注釋作用,可以看到1.6部分中以 ‘*’開頭的語句,均為備注語句。

2.1.2 $的使用

$用于條件語句的表達(dá)。如下的語句表示“a在b大于1.5條件成立的情況下等于2”,如果條件不滿足,則不賦值。
PS:代碼僅是舉例方便理解,非本模型內(nèi)容。

a$(b>1.5)=2;

2.2 下標(biāo)有限制范圍的約束表達(dá)

2.2.1 舉例1

注意:若約束表示多個(gè)式子,比如下圖,其實(shí)這個(gè)約束表示K*I個(gè)式子,所以在聲明時(shí)需要附上(K,I)。

* Definition of variables Equations Con1(K,I) for example ; *Specification of equations Con1(K,I).. S(K,I)=e=W(K,I);

2.2.2 舉例2

注意:若有加和符號(hào),則用sum語句,格式為sum((下標(biāo)),變量)。

* Definition of variables Equations Con1 for example ; *Specification of equations Con1.. S=e=sum((K,I),W(K,I));

2.2.3 舉例3

特別注意:對(duì)于這種有多個(gè)下標(biāo),但是只有一個(gè)下標(biāo)有范圍的,有三個(gè)注意事項(xiàng)。
第一個(gè)注意事項(xiàng):類似于2.2.1,在聲明時(shí)需要附上(K,I);
第二個(gè)注意事項(xiàng):由于i和i1共用同一個(gè)集合I,因此需要加上ALIAS,相當(dāng)于復(fù)制I;
第三個(gè)注意事項(xiàng):sum((下標(biāo)),變量)加和時(shí),需要在下標(biāo)后附上對(duì)i1的限制。
具體見代碼。

Set I; ALIAS(I,IL); * Definition of variables Equations Con1(K,I) for example ; *Specification of equations Con1(K,I).. S(K,I)=e=sum((K,IL)$(ord(IL) ge ord(I)),W(K,IL));

此處引出兩個(gè)額外符號(hào),ord()和ge,其中ord(I)的意思“得到此時(shí)的I在集合中的排序”,ge的意思是“大于等于”,因此“ord(IL) ge ord(I)”的意思就是“在集合中,排序大于I的IL”。

3 模型求解

3.1 解決方案

模型的求解當(dāng)然要利用求解器了(需要購買)。首先通過“File——Options——Slovers”,可以看到自己可使用求解器情況,如下圖。“Demo”表示可以使用,“Full”則表示能夠完全使用。

對(duì)于沒有許可證的同學(xué),此處提供一個(gè)貼吧里的解決方法,鏈接link,通過下載鏈接中的文檔,獲得許可證,并且在修改完自己系統(tǒng)時(shí)間后,通過“File——Options——Licenses”選擇許可證,即可使用。(PS:本人未嘗試,僅貼出來一種可能的解決方案)。

3.2 求解結(jié)果

本文算例求解結(jié)果如圖所示,x(1)=8,x(2)=16,目標(biāo)值UU=13.929。

4 總結(jié)

至此,利用GAMS進(jìn)行模型的編寫及求解已完成。

【整理不易,轉(zhuǎn)載請(qǐng)注明出處和相關(guān)鏈接,否則必究!】

總結(jié)

以上是生活随笔為你收集整理的GAMS模型编写与求解(入门)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。