Saturday, October 11, 2014

Hakkımda

Ben de sizin gibi öğrenciydim Bu sene mezun oldum. Bu nedenle bana bey diye hitap etmenize gerek yok.

GAMS kullanımı

Merhaba bu zamana kadar hep hatalardan bahsettik GAMS için bir kullanım klavuzu buldum internet üzerinde google drive linkini paylaşıyorum buradan indirebilirsiniz. İçinde örnek sorular da var.

GAMS eğitim sunusu

Örnek bir GAMS sorusu

Buradaki soru Winston kitabındandır.
Soru :
Sailco şirketi gelecek dört mevsimde kaç adet yelkenli üreteceğine karar verecektir. Talep sırasıyla 40, 60, 75 ve 25 yelkenlidir. Sailco tüm talepleri zamanında karşılamalıdır. Başlangıçta Sailco'nun envanterinde 10 yelkenli vardır. Normal mesai ile bir mevsimde 40 yelkenli üretebilen şirket yelkenli başına $400 işçilik maliyetine maruz kalmaktadır. Fazla mesai ile yapılan her ek yelkenli için ise işçilik maliyeti $450'dır. Herhangi bir mevsimde yapılan yelkenli ya talebi karşılamak için kullanılıp satılır ya da envantere konulur. Bir yelkenlinin bir mevsim envanterde tutulması durumunda ise $20 envanter taşıma maliyeti oluşmaktadır.

Yanıt
t = 1,2,3,4 için karar değişkenleri
xt = t. mevsimde normal mesai ile üretilen yelkenli sayısı
yt = t. mevsimde fazla mesai ile üretilen yelkenli sayısı
Envanter hesaplarının yapılabilmesi için kullanılacak değişkenler:
it = t. mevsimin sonunda envanterdeki yelkenli sayısı
dt = t. dönem için yelkenli talebi
Veri xt ≤ 40, ∀t

Mantıksal olarak it = it-1+ xt + yt - dt, ∀t.
Talep karşılanmalı it ≥ 0, ∀t
(İşaret sınırlamaları xt,yt≥0, ∀t)
Bu kısıt kümelerini kullanarak toplam maliyet z’yi enküçüklemeliyiz:

Modelde şöyle bir durum var ilk başta envanter olduğu için onu direk kullanıyoruz. İlk dönem 40 talep var elimde de 10 tane vardı zaten bu nedenle 10 tane daha az üretsem bir şey olmaz. Ama bu 10 taneyi elimde tutmanın maliyetini modele yansıtmadım çünkü zaten kesinlikle olacak bir şey ve optimizasyona girmiyor.

GAMS koud şu şekilde
sets
t zaman /1,2,3,4/
;
parameters
aylik aylik üretim miktarı /40/
d(t) t. dönem için yelkenli talebi /1 30,2 60,3 75,4 25/
*dönem başı envanter talepten düşüldü  dönem başı envanter = 10
normalMesai yelkenli başına normal mesai maliyeti/400/
fazlaMesai  yelkenli başına fazla mesai maliyeti/450/
eldeTutma Bir yelkenlinin bir mevsim envanterde tutulmasının maliyeti /20/
;
positive variables
x(t) t. mevsimde normal mesai ile üretilen yelkenli sayısı
y(t) t. mevsimde fazla mesai ile üretilen yelkenli sayısı
i(t) t. mevsimin sonunda envanterdeki yelkenli sayısı
;

variables
z amaç
;

equations
objective
aylikUretim (t)
envanter (t)
;
objective.. z =e= normalMesai*sum(t,x(t)) + fazlaMesai*sum(t,y(t)) + eldeTutma*sum(t,i(t));
aylikUretim (t) .. x(t) =l= aylik;
envanter (t) .. i(t) =e= i(t-1) + x(t) + y(t) - d(t);
model arp /all/  ;
solve arp using MIP minimizing z;


GAMS örnek soru

Merhaba bu gün basit bir modeli GAMS kodunu göreceğiz. Daha sonra daha zor modeller gelecek. Şimdilik basit bir model nasıl GAMS e geçiliyor onu görelim.

Modelimiz şöyle olsun

Maks z = 3x1 + 2x2 (Amaç fonksiyonu)
s.t.

2x1 + x2 ≤ 100 (Montaj kısıdı)
x1 + x2 ≤ 80 (Marangozluk kısıdı) x1 ≤ 40 (Talep kısıdı)
x1, x2 ≥ 0 (İşaret sınırlamaları)

Bunun GAMS kodu şu şekilde oluyor
sets
x üretim emri /1,2/
s kısıtlar /1,2,3/;
parameters
sag(s) kısıtların sag taraf degerleri /1 100,2 80,3 40/
amacf(x) amaç fonksyonu katsaıyları /1 3,2 2/  ;
table tablo(s,x) kısıtlardaki sayılar
         1          2
1        2          1
2        1          1
3        1          0
;
positive variables
uret(x) x. ürünün üretim miktarı;
;
variables
z amaç;
equations
objective
kisitlar (s)
;
objective.. z =e= sum(x,amacf(x)*uret(x)) ;
kisitlar (s)..sum (x,tablo(s,x)*uret(x)) =l=sag(s) ;
model arp /all/  ;
solve arp using MIP maximizing z;

 Ama farklı bir biçimde de yazılabilir. Bu şekilde girmek baya bi parametrik oldu. Aslında böyle girmek lazım. Çünkü daha kolay değiştirilir. Büyük modellerde karışıklığı önler. Aşağıda parametrik olmayan şekli var. İkisi de aynı sonucu verir. Hangisini seçeceğiniz size kalmış. Kafanıza göre takılın.

sets
x üretim emri /1,2/

positive variables
uret(x) x. ürünün üretim miktarı;
;

variables
z amaç;

equations
objective
k1
k2
k3
;
objective.. z =e= 3*uret('1')+2*uret('2');
k1 .. 2*uret('1') + uret('2') =l= 100;
k2 .. uret('1') + uret('2') =l= 80;
k3 .. uret('1') =l= 40;

model arp /all/  ;
solve arp using MIP maximizing z;