GAMS Nedir?
Herkese merhaba! Sizler için çok faydalı olacağını düşündüğüm bir yazı dizisi hazırlıyorum. Her hafta yayınlayacağım yazılarımda GAMS kullanımına dair örnekler paylaşacağım. Umarım faydalı olur. Keyifli okumalar diliyorum.
GAMS (The General Algebraic Modeling System) matematiksel programlama ve optimizasyon için tasarlanmış yüksek seviyeli bir dildir.
Karmaşık problemlerin çözümünde bize oldukça kolaylık sağlayan GAMS programı sayesinde farklı tarzlardaki problemleri modelleyebiliyoruz. Doğrusal programlama, doğrusal olmayan programlama, karma tam sayılı programlama ise bunlardan sadece birkaçıdır.
GAMS’de Modelleme
GAMS ile ilgili basit bir örnek ile başlangıç yapabiliriz.
Aşağıdaki doğrusal programlama modelini ele aldığımızı varsayalım.
Amaç fonksiyonu:
Maks Z= 5x1+4x2
Kısıtlarımız
6x1+4x2 ≤ 24 (1)
x1+2x2 ≤ 6 (2)
-x1+x2 ≤ 1 (3)
x2 ≤ 2 (4)
x1,x2 ≥ 0 (5)
Bu modeli GAMS’de modelleyelim.
Öncelikle değişkenlerimizi tanımlamamız gerekiyor. Modelimize baktığımızda değişkenlerimizin x1, x2 ve z olduğunu görüyoruz. Aynı zamanda x1 ve x2 değişkenleri için pozitiflik kısıtının olduğunu görüyoruz. Yani problem çözülürken x1 ve x2 değerlerinin negatif değer almaması gerekmektedir.
GAMS’de değişkenleri “variables” yazarak tanımlarız. Variables, değişkenleri eksi sonsuzdan artı sonsuz aralığında tanımlamaktadır. Eğer değişkenlerinizin sadece pozitif değerleri almasını istiyorsanız, “positive variables” olarak tanımlamanız gerekmektedir. Örneğimizde de x1 ve x2 değişkenlerimizi pozitif olarak tanımlayacağız.

Yukarıdaki ekran görüntüsünde de görüldüğü üzere, değişkenlerimizi tanımlıyoruz. Z değişkenimiz için (yani amaç fonksiyonu) herhangi bir kısıtlama bulunmadığından ötürü “variables” olarak tanımlamasını yaptık.
Değişkenleri tanımladıktan sonra eşitliklerimizi belirtmemiz gerekiyor. Değişkenlerimiz bu eşitliklere göre değerler alacağı için doğru bir şekilde belirtmemiz önemlidir. Modelimizdeki eşitliklerimiz sırasıyla amaç fonksiyonumuz, kısıt1, kısıt2, kısıt3 ve kısıt4’tür. Ayrıca, pozitiflik kısıtını zaten değişken tanımlarken belirtmiştik.
Eşitliklerimizi “equations” yazarak tanımlıyoruz. Burada önemli nokta, kullanılacak tüm denklem ve eşitsizlikleri önceden tanımlamamız gerekmektedir. Daha sonrasında da bu eşitliklerin neler olduğunu yazıyoruz.

Kırmızı çerçeve ile gösterdiğimiz yerde, equations ile tanımladığımız eşitliklerimizi yazdık. Eşitliklere verdiğimiz isimleri yazarken Türkçe karakter kullanmamaya dikkat etmemiz gerekmektedir. Eşitliğin ismini yazdıktan sonra iki nokta eklememiz gerekiyor. Daha sonrasında eşitliklerimizi yazıyoruz. Çarpım işareti yerine (*) sembolünü kullanmamız gerekiyor.
Yine görüldüğü üzere eşitliklerden bahsederken =e=, =l= gibi ifadeler kullandık. GAMS’de bu ifadeler eşitlik durumunu göstermektedir. Bu ifadelerin ne anlama geldiğini aşağıdaki tabloda görebiliriz.
Kullanılan Sembol | Ne Anlama Geliyor ? |
=e= | = |
=l= | ≤ |
=g= | ≥ |
Eşitliklerimizi de tanımladıktan sonra artık problemimizi çözdürebiliriz.

“Model” yazdıktan sonra modelin adını yazıyoruz. Burada kendi isminizi bile yazabilirsiniz ya da soru türünü yazabilirsiniz. Bu tamamiyle size kalmış bir durumdur. Fakat sadece Türkçe karakter kullanmamaya dikkat etmeniz gerekmektedir. Daha sonrasında “ /all/ “ yazarak problemde tanımladığımız her şeyin kullanılmasını istediğimizi belirtiyoruz.
Kırmızı kutu içerisinde görülen kısım oldukça önemli. Çünkü problemimizin hangi tür olduğunu ve ne istediğimizi belirttiğimiz kısım burası. “solve” yazdıktan sonra problemimizin adını daha sonrasında bu problemi çözerken hangi çözücü türünü kullanmasını istiyorsak onu yazıyoruz. Bu örnek Doğrusal Programlama örneği olduğu için LP kullandık. Daha sonrasında ise amacımızın ne olduğunu (bu problem maksimizasyon problemi mi yoksa minimizasyon problemi mi) belirtiyoruz.
GAMS Çözüm Çıktısı
Display ile istediğiniz değişkenin hangi değer aldığını görebilirsiniz. Bu problem için x1, x2 ve z değerlerinin kaç alacağını görelim.
Problemi modelledikten sonra artık çözdürebiliriz. Bunun için sayfanın üst tarafındaki “RUN” tuşunu kullanıyoruz (kırmızı kutucuk ile gösterilen yer) ya da F9 tuşuna basabilirsiniz.

Problemi çözdürdükten sonra GAMS yeni bir sayfada çözüm raporu açılıyor ve karşımıza aşağıdaki şekilde görüldüğü gibi bir liste geliyor. “Solution Report”a tıklayarak çözümün sonuçlarını incelemeye başlayabilirsiniz. “Display” kısmına tıklayarak her bir değişkenimizin değerini görebilirsiniz.

Solution Report kısmında göreceğimiz tablo ise aşağıdaki gibidir:

Burada problemimizin çözülüp çözülmediğini görebiliriz. “Model Status” kısmında çözümümüzün optimal olduğunu görüyoruz. Display kısmına geldiğimizde çözümümüzü optimal yapan x değerlerini görebiliriz.

Modelimizi optimum çözüme ulaştıran değerlerin x1 için 3, x2 için 1,5 olduğunu görüyoruz. Aynı zamanda amaç fonksiyonumuzun da 21 olduğunu görebiliriz.
Kaynakça
- Hamdy A. Taha, Yöneylem Araştırması.
- https://www.gams.com/latest/docs
- https://web.itu.edu.tr/kabak/dersler/EM302/pdf/YAII_h03_gams.pdf