
GAMS (General Algebraic Modeling System)
Matematiksel programlama ve optimizasyon için gelistirilmis üst seviye bir dildir. Bu sistem ile ; dogrusal, dogrusal olmayan, karma tamsayili optimizasyon problemleri modellenebilir.

Gams Temelleri;
• Kümeler
• Veri Girisi
• Degiskenler
• Denklemler
• Model
• Çözüm
Olarak siralanabilir.
Dilin ve sistemin özelliklerini daha iyi anlayabilmek adina örnek problemler üzerinden anlatmaya devam edecegiz.
Örnek Sabit Maliyetli Ulastirma Modeli;
• ENM Beyaz A.S. dört müsterisinin taleplerini karsilamak adina üç potansiyel fabrikayi degerlendirmektedir. Her hangi bir fabrikayi açarsa firma 200,000.-TL’lik bir yatirim yapmasi gerekmektedir.
• Bir fabrikada üretilip, bir müsteriye gönderme birim maliyetleri tabloda verilmistir.
• Firmanin talepleri en düsük maliyetle karsilamasi için gerekli modeli kurunuz.

Çözüm;
Karar Degiskenleri;
• xij : i fabrikasindan j müsterisine gönderilen miktar (i = 1,2,3; j =1,2,3,4)
• yi : i fabrikasinin açilmasi (i = 1,2,3)
yi ; 1 i fabrikasi açilirsa ; 0 açilmazsa
Model;

Kümeler
• GAMS kapsaminda kümeler, cebirdeki alt indislere veya belirli ögeleri içeren dizilere denk gelirler.(örnek: fabrikalar, müsteriler…)
Kümelerin tanimlanmasi
SET komutu ile kümeler,endeksler tanimlanir…
SET kümeadi açiklayici yazi(istege bagli)
/ kümenin_ilk_ögesinin_adi açiklayici yazi(istege bagli)
kümenin_ikinci_ögesinin_adi açiklayici yazi(istege bagli) /;
sets i fabrikalar /1,2,3/
j müsteriler /1*4/ ;
“/” isareti ile sinirlandirilan alana modele dahil edilmesi istenen denklem ve kisitlar yazilarak model sinirlandirilabilir. Bu özellik ayni zamanda her fonksiyonun önce neden tanimlanmasi gerektigini açiklamaktadir.
set i /1,2,3,4/ ile set i /1*4/ yazilis olarak farkli anlam olarak aynidir. Yildiz imi ‘*’, eger bir küme sira halinde elemanlar içeriyorsa yazimi kolaylastirmak için kullanilir.
Alias komutu ise bir kümenin elemanlarini farkli bir isimdeki baska bir kümeye kopyalamak için kullanilir.
Set
i /1*5/
alias (i,j); Her iki kümede (1,2,3,4,5) elemanlarina sahiptir.
VERI GIRISI
GAMS çesitli yöntemlerle veri girisine olanak saglar,bunlardan bazilar; scalar, parametre, tablodur.
SCALAR
Scalar ifadesi sifir boyutlu bir katsayi tanimlamak için kullanilir.
Örnek;
SCALARS
Ilkögeadi açiklayici yazi(istege bagli) /sayisal deger/
Ikinciögeadi açiklayici yazi(istege bagli) /sayisal deger/;
Scalars
Indo “indirim orani” /0.15/
Ivo “iç verim orani” /0.07/;
Scalar fa /200000/;
PARAMETRELER
Parametre formati bir kümenin elemanlarina iliskin deger atamak için kullanilir.
Örnek;
Parameter
Ögeadi(bagliolduguküme) açiklayici yazi(istegebagli)
/kümenin 1. Elemaninin adi ilgili deger,
kümenin 2. Elemaninin adi ilgili deger,
…………………… /;
parameter talep(j) /1 40000,2 30000,3 25000,4 15000 /;
parameter kapasite(i) /1 60000, 2 55000, 3 45000 /;
TABLOLAR
Tablo formati veri degerleri iki veya daha fazla kümeye dayanan bilgileri girmek için kullanilir.
TABLE ögeadi(1.küme,2.küme) açiklayici yazi(istegebagli)
Küme2eleman1 küme2eleman2
Küme1eleman1 deger_11 deger_12
Küme1eleman2 deger_21 deger_22 ;
Örnek;
Table(i,j)
1 2 3 4
1 8 6 10 9
2 9 12 13 7
3 14 9 16 5 ;
DEGISKENLER
GAMS içindeki bir degisken optimize edilecek modelde veya çözümü aranan denklemlerde üzerinde oynanabilen sayisal bir büyüklük olarak tanimlanir.
Degisken Tanimlanmasi
Degiskentürü
Birincidegiskeninadi(iliskili küme) açiklayici yazi (istege bagli)
Ikincidegiskeninadi(iliskili küme) açiklayici yazi (istege bagli);
Örnek;
Positive variables x(i,j);
Binary variables y(i);
Variable z;
VARIABLES
X(i) tamsayi karar degiskeni
Y(m) ikili karar degiskeni
Z amaç fonksiyonu;
BINARY VARIABLE y;
INTEGER VARIABLE x;
Tahmin edebileceginiz üzere optimizasyon problemlerinde sadece amaç fonksiyonuna dair çözüm denklemi degil; kisitlari da aktaran kisit denklemleri bulunuyor. Bu kisitlar bir yada birden çok olabilir. Hepsi denklem degil, sadece pozitif ;negatif yada sayi serisi yönünden kisitlanmis olabilir. Bu problemlerin çözümleri modellenirken (GAMS içinde) ne istedigimizi aktarabilmek adina bazi kalip terimler var. Ingilizce bilenlerin çok rahat bir sekilde anlayabilecegini belirtmekte fayda var.Asagida bu terimler ve açiklamalari bulunuyor.
Variable; Kisit yoktur. Degisken eksi sonsuzdan arti sonsuza kadar bütün degerleri alabilir.
Positive Variable; Negatif olmayan sayilar demektir. 0 dan arti sonsiza kadar bütün degerleri alabilir.
Nonnegative variable; Sadece pozitif degerler.(sifir dahil olmadan)
Negative variable; Eksi sonsuzdan sifira kadar tüm degerleri alabilir.
Binary Variable; Degisken sadece 0 ve 1 degerlerini alabilir.
Integer Variable; Degisken sadece tamsayi degerler alabilir.
DENKLEMLER
Denklemler çözülecek veya optimize edilecek modeldeki iliskileri tanimlar ve anlatir.
Denklemlerin tanimlanmasi;
EQUATION
Birincidenlemadi(iliskili küme) açiklayici yazi(istege bagli)
Ikincidenklemadi(iliskili küme) açiklayici yazi(istege bagli);
ÖRNEK;
Equations amaç, kapasitekisiti, talepkisiti;
-------
EQUATIONS
TopZaman islerin toplam gerçeklestirilme süresi
Makinekisiti(m) her makinaya sadece bir is atanmalidir
Iskisiti(i) bir is sadece bir makinaya atanmalidir;
Mantiksal operatörler sirasi ile;
= ==> =e=
<= ==> =l=
>= ==> =g=
Örnek Denklemler;
Amac.. z =e= sum ( (i , j) , x (i , j ) * c ( i , j ) ) + fa * sum ( i , y ( i ) ) ;
Kapasitekisiti ( i ) .. sum (j , x ( i , j ) ) =l= kapasite( i ) * y ( i );
Talepkesiti ( j ) .. sum ( i , x ( i , j ) ) =g= talep ( j ) ;
<font face="Courier New, Courier, mono">NOT: Kurdugumuz denklemler ve tanimladigimiz kisitlar doküman basindan sonuna kadar ayni örnek için çözümdür.
MODEL VE ÇÖZÜM
Modeller GAMS’in çözüm için kullanacagi nesnerlerdir.
MODEL modeladi açiklayici yazi(istege bagli) / model içerigi / ;
Model ulastirma /all/;
Modeller, model komutu araciligiyla bir araya getirildikten sonra, solve komutu kullanilarak çözümü istenilen model burada belirtilir.
SOLVE modeladi USING modeltipi MAXIMAZING degiskenadi;
SOLVE modeladi USING modeltipi MINIMIZING degiskenadi;
Solve ulastirma using MTP minimizing z;
Bu noktada bilmemiz gereken program içi birkaç model tipi açiklamasi var. Bunlar asagida verilmistir.
LP(Dogrusal Model); Dogrusal Olmayan terim ve ayrik degisken içermeyen optimizasyon problemleri için kullanilir.
NLP(Dogrusal Olmayan Model); Problem dogrusal olmayan terimler içerebilir ama degisken sürekli olmalidir.
MIP(Karisik tamsayili model); Problem ayrik degiskenler içerebilir ama dogrusal olmayan terim içermemelidir.
RMIP; Genisletilmis tamsayili programlama
MINLP; Tamsayili, dogrusal olmayan programlama
RMINLP; Genisletilmis tamsayili, dogrusas olamayn programlama
MPEC; Denge kisitli matematiksel modeller
CNS ; Kisitlanmis nonlinear sistemler
Yukarida açiklamis oldugumuz model tipleri; temel modellerdir, problem türüne göre bunlarin disinda da modeller kullanilabilir. Yine ihtiyaca göre minimize ve maksimize olarak kullanilabilir. Internette ve diger kaynaklarda bunlara kolayca ulasilabilir.
Ilgilendigimiz sonuç degiskenlerini display komutu ile görüntüleyebiliriz. Bu komutun kullaniminda bilinmesi gerekenler;
.l ; level yada primal degerdir.
.lo ; altsinir
.up; üst sinir
.m ;marjinal ya da dual deger
Kullanimi;
Display x.l, y.l, z.l;
Makalemizin basinda sormus oldugumuz örnek problemin tam çözüm modelinin GAMS içine kodlanmis halini simdi asagida inceleyelim.
sets i santraller /1,2,3(
j sehirler /1*4/ ;
table c(i,j)
1 2 3 4
1 8 6 10 9
2 9 12 13 7
3 14 9 16 5 ;
Scalar fa fabrika acma maliyeti /200000/;
parameter talep(j) /1 40000, 2 30000, 3 25000, 4 15000/;
parameter kapasite(i) /1 60000, 2 55000, 3 45000 /;
positive variables x(i,j);
binary variables y(i);
variable z;
equations amac, kapasitekisiti, talepkisiti;
Amac.. z =e= sum ( (i , j) , x (i , j ) * c ( i , j ) ) + fa * sum ( i , y ( i ) ) ;
Kapasitekisiti ( i ) .. sum (j , x ( i , j ) ) =l= kapasite( i ) * y ( i );
Talepkesiti ( j ) .. sum ( i , x ( i , j ) ) =g= talep ( j ) ;
model ulastirma /all/;
solve ulastirma using MIP minimizing z;
display x.l, y.l;
Son olarak GAMS ücretli bir IDE dir. Tam erisim için satin almaniz gerekir. Tecrübelerimde Sebeke modelleme konularinda muntazam bir islevsellik sunmaktadir.