Professional Documents
Culture Documents
Gams Presentation
Gams Presentation
Industrial Engineering
Sharif University of Technology
General Algebraic
Modeling System
(GAMS)
Arman Jabbari
Presentor: S.M.Ziaee
Narges Mohammadi Hatef Zamani
Fall 2017
GAMS
ﺟﺰو ﻗﻮي ﺗﺮﯾﻦ ﻧﺮم اﻓﺰارﻫﺎي ﺗﺤﻘﯿﻖ در ﻋﻤﻠﯿﺎت
∶ 𝑖𝑖 ∀
∶ 𝑗𝑗 ∀
ﻧﮑﺘﻪ ي اﺳﺎﺳﯽ
در ﻣﺴﺌﻠﻪ ي ﻗﺒﻞ ﺗﻤﺎم ﻣﺤﺪودﯾﺖ ﻫﺎ ﺑﺼﻮرت ﮔﺮوه ﻣﺤﺪودﯾﺖ ﻧﻮﺷﺘﻪ ﺷﺪ .اﯾﻦ اﻣﺮ ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ
را ﺑﺴﯿﺎر ﺳﺎده ﺗﺮ ﻣﯿﮑﻨﺪ.
ﺑﺪون اﻧﺠﺎم اﯾﻦ ﮐﺎر ،ﻣﺪل ﺳﺎزي ﻣﺴﺎﺋﻞ ﺑﺰرگ ﻏﯿﺮ ﻣﻤﮑﻦ اﺳﺖ.
ﺗﺼﻮر ﮐﻨﯿﺪ ﺑﺠﺎي اﺳﺘﻔﺎده از ﺳﯿﮕﻤﺎ ﻣﺠﺒﻮر ﺷﻮﯾﺪ ﺻﺪﻫﺎ ﻣﺘﻐﯿﺮ را ﺑﻪ ﺻﻮرت زﯾﺮ ﺑﻨﻮﯾﺴﯿﺪ:
sets
i factories/Tehran, Hamedan/
j markets/Arak, Mashhad, Ahvaz/;
Sets
ﻧﻘﺶ ﮐﺎراﮐﺘﺮ*
}T={10,11,12,…,100
}M={m1,m2,m3,…,m10
ﺑﺮاي ﻣﻌﺮﻓﯽ اﯾﻦ دوﻣﺠﻤﻮﻋﻪ از * ﮐﻤﮏ ﻣﯽ ﮔﯿﺮﯾﻢ:
;Set t /10*100/
;Set m /m1*m10/
; ) Alias ( i , k
ﺑﻪ اﯾﻦ ﺻﻮرت kﻫﻤﺎﻧﻨﺪ iﻣﯿﺸﻮد.
Sets
اﯾﻦ ﻗﺴﻤﺖ در ﻣﺴﺌﻠﻪ ي ﺣﻤﻞ و ﻧﻘﻞ ﻣﻄﺮح ﺷﺪه ﺑﻪ ﺻﻮرت زﯾﺮ ﻧﻮﺷﺘﻪ
:ﻣﯿﺸﻮد
Set
i factories /seattle, san-diego/
j markets /new-york, chicago, topeka/ ;
Data
Scalar
Parameters
Tables
ﺗﺨﺼﯿﺺ ﻣﺴﺘﻘﯿﻢ
Scalar-data
. اﺳﮑﺎﻟﺮ ﭘﺎراﻣﺘﺮﯾﺴﺖ ﮐﻪ داﻣﻨﻪ ﻧﺪارد
parameters
a(i) capacity of plant i in cases / Tehran 350, Hamedan 600/
b(j) demand at market j in cases / Arak 325
Mashhad 300
Ahvaz 275/;
List-data
. ﺑﺮاي ﻧﺮم اﻓﺰار ﯾﮑﺴﺎن اﺳﺖParameters وParameter
ﺣﺘﯽ ﺑﻪ ﺻﻮرت زﯾﺮ ﻧﯿﺰ ﻣﯿﺘﻮان، اﺳﺖUser friendly ﻧﺮم اﻓﺰار ﺑﺴﯿﺎر
. را ﺗﻌﺮﯾﻒ ﮐﺮدParameter
parameters
b(j) demand at market j in cases / Arak 325 , Mashhad 300
Ahvaz 275/;
List-data
Parameter
D(j) demand of markets /new-york 325
chicago 300
topeka 275/
S(i) supply of factories /seattle 350
san-diego 600/ ;
Table-data
وارد ﮐﺮدن dataﺑﻪ ﺻﻮرت table
اﺳﺘﻔﺎده از دﺳﺘﻮر table
table d( i, j) distance in thounsands of miles
Arak Mashhad Ahvaz
Tehran 2.5 1.7 1.8
Hamedan 2.5 1.8 ; 1.4
ﻧﮑﺘﻪ :ﻣﻮﻗﻌﯿﺖ ﮐﺎراﮐﺘﺮي ﺟﺪول اﻋﺪاد ورودي ﺑﺎﯾﺪ ﺑﺎ ﻣﻮﻗﻌﯿﺖ ﮐﺎراﮐﺘﺮي ﻋﻨﺎوﯾﻦ ﻓﺼﻞ ﻣﺸﺘﺮك
داﺷﺘﻪ ﺑﺎﺷﺪ).اﻧﺠﺎم اﯾﻦ ﮐﺎر ﺑﻪ ﮐﻤﮏ (tab , space
Table-data
Table
C(i,j) cost of transportation between i and j
new-york chicago topeka
seattle 2.5 1.7 1.8
san-diego 2.5 1.8 1.4 ;
Multidimensional-data
Set i first index /first, second/
j second index /one, two, three/
k third index /m,n/ ;
Operator Results
0 0 0 0 0 1
0 Non-zero 0 1 1 1
Non-zero 0 0 1 1 0
Non-zero Non-zero 1 1 0 0
ﻋﻤﻠﮕﺮﻫﺎي ﻣﻨﻄﻘﯽ
ﻣﺜﺎل
; )Parameter price(i
=)’price(‘buy
; (num(‘book’) and num(‘pen’) )*30
در ﻋﺒﺎرت ﺑﺎﻻ در ﺻﻮرﺗﯽ ﮐﻪ ﺗﻌﺪاد ﮐﺘﺎب ﻫﺎ و ﺗﻌﺪاد ﺧﻮدﮐﺎرﻫﺎ ﻣﻘﺪاري ﻏﯿﺮ ﺻﻔﺮ داﺷﺘﻪ
ﺑﺎﺷﻨﺪ price(‘book’) ،ﺑﺮاﺑﺮ ﺑﺎ 30ﻣﯿﺸﻮد .در ﻏﯿﺮ اﯾﻦ ﺻﻮرت ﻣﻘﺪار آن ﺑﺮاﺑﺮ ﺻﻔﺮ
ﺧﻮاﻫﺪ ﺷﺪ.
ﻋﻤﻠﮕﺮﻫﺎي ﻣﻨﻄﻘﯽ
ﻣﺜﺎل
; Scalar price
Price = (4>2) ; Price = 1
ﻧﮑﺘﻪ :ﻧﺮم اﻓﺰار ﮔﻤﺲ ﻋﺒﺎرات ﻣﻨﻄﻘﯽ ﺻﺤﯿﺢ را » «1در ﻧﻈﺮ
ﻣﯿﮕﯿﺮد .ﻫﻤﭽﻨﯿﻦ ﻋﺒﺎرات ﻣﻨﻄﻘﯽ ﻏﻠﻂ را » «0در ﻧﻈﺮ ﻣﯿﮕﯿﺮد.
ﺟﻮاب ؟؟؟
Variable
z optimum answer;
Positive variable
x(i,j) the amount of transportation between i and j;
ﮐﺮان ﭘﺎﯾﯿﻦ و ﮐﺮان ﺑﺎﻻ
ﻧﮑﺘﻪ .fx :ﻣﺘﻐﯿﺮ ﻫﻤﭽﻨﺎن ﻣﺘﻐﯿﺮ ﺑﺎﻗﯽ ﻣﯿﻤﺎﻧﺪ ،اﻣﺎ ﻣﻘﺪار ﺛﺎﺑﺘﯽ ﻣﯿﮕﯿﺮد.
Equations
اﻧﻮاع ﻣﻌﺎدﻻت
اﺳﮑﺎﻟﺮ :ﺗﻨﻬﺎ ﯾﮏ ﻣﻌﺎدﻟﻪ را ﺑﯿﺎن ﻣﯽ ﮐﻨﺪ.
اﻧﺪﯾﺲ دار :ﺑﯿﺶ از ﯾﮏ ﻣﻌﺎدﻟﻪ را ﺑﯿﺎن ﻣﯽ ﮐﻨﺪ .در اﯾﻦ ﻣﻮارد ﻻزم اﺳﺖ
اﻧﺪﯾﺴﯽ ﮐﻪ ﻣﻌﺎدﻻت روي آن ﺗﻌﺮﯾﻒ ﺷﺪه اﻧﺪ ﻧﯿﺰ در ﻣﺪل ﺑﯿﺎﯾﺪ.
Equations
: Equation ﺗﻌﺮﯾﻒ
Equation
hadaf
demand(j) to be sure of damands satisfaction
supply(i) to be sure factories inventory is enough ;
Equations
ﺑﺮاي ﻧﻮﺷﺘﻦ ﯾﮏ ﻣﺤﺪودﯾﺖ ،اﺑﺘﺪا ﺑﺎﯾﺪ ﻧﺎم ﻣﺤﺪودﯾﺖ را ﺑﻨﻮﯾﺴﯿﻢ .ﺳﭙﺲ اﮔﺮ
ﮔﺮوه ﻣﺤﺪودﯾﺖ ﺑﻮد ،اﻧﺪﯾﺲ ﮔﺮوه را ﻧﯿﺰ ﻣﺸﺨﺺ ﮐﻨﯿﻢ .ﭘﺲ از آن از »«..
اﺳﺘﻔﺎده ﮐﺮده و ﺟﻠﻮي آن ﻣﺤﺪودﯾﺖ را ﺑﻨﻮﯾﺴﯿﻢ .در اﻧﺘﻬﺎ ﻫﻢ ﻻزم اﺳﺖ
ﺳﻤﯿﮑﺎﻟﻦ ﻗﺮار دﻫﯿﻢ.
ﻣﺜﺎل:
; )timeconstraint(i) .. sum(j,h(i,j)*x(i,j)) =l= t(i
Equations
≤ = ≥ ﺑﯿﺎن ﻣﺤﺪودﯾﺖ ﻫﺎي
= =E= equal to
≥ =L=
less than or equal
to
≤ =G=
greater than or
equal to
Equations
ﺗﻮاﺑﻊ اﻧﺪﯾﺲ دار
Sum ( i , sum ( j , x ( i , j ) ) )
Sum ( ( i , j ) , x ( i , j ) )
Sum
� 𝐶𝐶𝑖𝑖 ∗ � 𝑥𝑥𝑖𝑖𝑖𝑖
𝑖𝑖 𝑗𝑗
)𝑟𝑟(𝑋𝑋 �
𝑟𝑟=𝑛𝑛1
Ordﻧﺸﺎن دﻫﻨﺪه ي ﺷﻤﺎره ي ﺗﺮﺗﯿﺒﯽ اﺳﺖ .ﯾﻌﻨﯽ ﻣﺜﻼ n0در دراﯾﻪ ي ﺗﺮﺗﯿﺒﯽ 0ام ﺑﺮدار
اﺳﺖ و n4در دراﯾﻪ ي ﺗﺮﺗﯿﺒﯽ 4ام .ﺑﻪ ﻋﺒﺎرت دﯾﮕﺮ ) ord(n1ﺑﺮاﺑﺮ ﺑﺎ 1ﻣﯽ ﺑﺎﺷﺪ.
Equations
equations
Cost define objective functions
Supply (i) observe supply limit at plant i
Demand(j) satisfy demand at market j;
cost..z=e=sum((i,j),c(i,j)*x(i,j));
supply(i)..sum(j, x(i, j))=l=a(i);
demand(j)..sum(i, x(i, j))=g=b(j);
Equations
ﻣﺜﺎل :ﻣﺤﺪودﯾﺖ زﯾﺮ را ﮐﻪ limitﻧﺎم دارد ،ﺑﻨﻮﯾﺴﯿﺪ.
Alias (i,k);
Limit(i).. Sum( j, C(i) * X(i,j) ) =l= sum( (k,j) , X(k,j) )
Equations
در ﺻﻮرت اﺳﺘﻔﺎده از ﻧﺎم ﯾﮏ ﻋﻨﺼﺮ داﻣﻨﻪ،ﻧﻤﺎد ﻫﺎي ‘ ‘را در دو ﻃﺮف ﻧﺎم آن
ﻋﻨﺼﺮ ﻗﺮار ﻣﯽ دﻫﯿﻢ.
;limit..x('seattle',‘ chicago')=l=400
ﻧﮑﺘﻪ :اﮐﺜﺮ ﻣﻮاﻗﻊ ﻣﯿﺨﻮاﻫﯿﻢ ﻫﻤﻪ ي ﻣﺤﺪودﯾﺖ ﻫﺎ در ﻣﺪل ﺑﺎﺷﻨﺪ .در اﯾﻦ ﺻﻮرت
ﺑﺠﺎي ﻧﻮﺷﺘﻦ ﻧﺎم ﻫﻤﻪ ي آﻧﻬﺎ ،ﻣﯿﻨﻮﯾﺴﯿﻢ ». «All
در اﯾﻦ دﺳﺘﻮر solve ،و usingﻋﺒﺎراﺗﯽ ﻫﺴﺘﻨﺪ ﮐﻪ ﺑﻪ ﻫﯿﭻ ﻋﻨﻮان ﻗﺎﺑﻞ ﺗﻐﯿﯿﺮ ﻧﻤﯿﺒﺎﺷﻨﺪ.
* Lpدر اﯾﻨﺠﺎ ﻧﻮع ﻣﺪل اﺳﺖ .ﺑﺎ ﺗﻐﯿﯿﺮ ﻧﻮع ﻣﺪل ،اﯾﻦ واژه ﻧﯿﺰ ﻋﻮض ﻣﯿﺸﻮد .در اﺳﻼﯾﺪ ﺑﻌﺪ اﻧﻮاع
ﻣﺪل ﻫﺎ ﺷﺮح داده ﺷﺪه اﺳﺖ.
* minimizingﺑﻪ ﻣﻌﻨﯽ ﮐﻤﯿﻨﻪ ﮐﺮدن اﺳﺖ .در ﺻﻮرﺗﯽ ﮐﻪ ﻫﺪف از ﺣﻞ ﻣﺴﺌﻠﻪ ﺑﯿﺸﯿﻨﻪ
ﺳﺎﺧﺘﻦ ﺑﺎﺷﺪ ،ﺑﺠﺎي آن از maximizingاﺳﺘﻔﺎده ﻣﯿﮑﻨﯿﻢ.
* Zﻧﺎم ﻣﺘﻐﯿﺮي اﺳﺖ ﮐﻪ ﺑﻪ ﻋﻨﻮان ﺟﻮاب ﺗﺎﺑﻊ ﻫﺪف در ﻣﺪل ﺗﻌﺮﯾﻒ ﮐﺮده اﯾﻢ و ﻣﻮﻇﻔﯿﻢ ﻫﻤﺎن
ﻧﺎم را در اﯾﻦ ﺟﺎ ﺑﻪ ﮐﺎر ﺑﺒﺮﯾﻢ.
solver
solver
اﯾﻦ ﻗﺴﻤﺖ در ﻣﺴﺌﻠﻪ ي ﺣﻤﻞ و ﻧﻘﻞ ﻣﻄﺮح ﺷﺪه ﺑﻪ ﺻﻮرت زﯾﺮ ﻧﻮﺷﺘﻪ
ﻣﯿﺸﻮد:
اﯾﻦ ﺧﻂ ﺑﺎﻋﺚ ﻣﯽﺷﻮد در اﻧﺘﻬﺎي ﺟﻮاب ﺑﺮﻧﺎﻣﻪ ،ﻣﻘﺪار ﻣﺘﻐﯿﺮﻫﺎي ﻣﺴﺄﻟﻪ اوﻟﯿﻪ
و ﻣﺴﺄﻟﮥ دوﮔﺎن ﺑﻪ ﻃﻮر ﺧﻼﺻﻪ ﻧﻮﺷﺘﻪ ﺷﻮد.
.lﺟﻮاب و .mﺟﻮاب دوﮔﺎن را ﺑﺮاي ﻣﺎ ﺑﻪ ﻧﻤﺎﯾﺶ در ﻣﯽ آورد.
ﻧﮑﺎﺗﯽ درﺑﺎره ي ﺑﺮﻃﺮف ﮐﺮدن Errorﻫﺎي ﺑﺮﻧﺎﻣﻪ