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;

Sunday, March 30, 2014

Örnek bir araç rotalama problemi gams modeli

sets
i cikilan sehir /1,2,3,4,5,6/
k arac sayisi /1*120/
Alias (i,j);

parameters
bigm buyuk sayı /1000000000/
q(k) arac kapasitesi
a(i) dagıtim musterilerinin talebi /1 0, 2 80, 3 10, 4 30, 5 40, 6 30/
b(i) toplama musterilerinin arzı /1 0,2 30, 3 0, 4 20, 5 50, 6 0/
 ;

scalar m km basina tasima maliyeti /90/;

table t(i,j)
         1          2          3          4          5          6
1        0          232        446        363        441        548
2        232        0          224        131        364        316
3        446        224        0          355        212        171
4        363        131        355        0          495        352
5        441        364        212        495        0          316
6        548        316        171        352        316        0
;

parameter

c(i,j) sehirlerarasi tasima maliyeti ;
c(i,j)=m*t(i,j);
q(k)=66;

variables
z amaç;

binary variable
x(i,j,k)
u(i,k)
u(j,k)
v(j,k)
v(i,k);

equations
objective
k1(k)
k2(i)
k3(i)
k4(k)
k5(j,k)
k6(j,k)
k7(i,k)
k8(i,k)
;

objective.. z =e= 1 ;
k1(k)..sum (i, a(i)*u(i,k))=l= 66;
k2(i)$(ord(i) ge 2)..sum (k, u(i,k))=g= 1;
k3(i)$(ord(i) ge 6)..sum (k, v(i,k))=g=1;
k4(k)..sum (i$(ord(i) ge 6), b(i)*v(i,k))=l=66;
k5(j,k)$(ord(j) ge 2)..sum (i$(ord(i) ge 1), x(i,j,k))=e=u(j,k);
k6(j,k)$((ord(j) ge 6)and(ord(j) eq 1))..sum (i$(ord(i) ge 1), x(i,j,k))=e=v(j,k);
k7(i,k)..sum (j, x(i,j,k))=e=u(i,k);
k8(i,k)$(ord(i) ge 6)..sum(j, x(i,j,k))=e=v(i,k);


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

Burada

x(i,j,k) k. aracın i. şehirden j. şehire gidip gitmeyeceğini belirtiyor.


Wednesday, January 22, 2014

Örnek bir GAMS hatası ve çözümü

Merhaba uzuuuuun zamandır burada yazmıyordum. Fakat aldığım mailler sebebiyle buraya yazma ihtiyacı hissettim. Çünkü elime çok gams dosyası geçti bunları sizlerle paylaşmak istedim.

Şimdi sorunun hatalı halini alalım.
--------------------------------------------------------------------------------------------------------
Set
I /Ocak, Subat, Mart, Nisan/
J /Year1, Year2/
Table NIW(I,J) Flow values
        Year1   Year2
Ocak     50      10
Subat    40      20
Mart     35      50
Nisan    45      25
;
Parameters
S_min     Minimum reservoir volume  /0.01/
S_max     Maximum reservoir volume  /3.42/
S_int     Initial reservoir volume  /3.00/
RW        Residual water amount for the downstream /2.00/
O_max     Maximum outflow that can be used for energy generation /72.32/

Variables
TE    Total Energy Generation
R(I, J) Residual water amount
Sp(I, J) Spilling water amount
O(I, J)  Outflow water amount for energy generation
S(I, J) Reservoir storage volume
H(I, J) Head value
E(I, J) Energy generation
Srule(I) The desired reservoir storage volume for the months;




Equations
Residual 
Spilling 
Outflow 
Storage 
Head 
Energy 
toplam hukjyuk;

Residual .. R(I, J) =E= min(S_int $(ord(I) eq 1 and ord(J) eq 1)+S(I-1, J)$(ord(I) gt 1)+S('Nisan', J-1)$(ord(I) eq 1 and ord(J) gt 1)+ NIW(I, J) - S_min, RW);

Spilling .. Sp(I, J) =E= max(S_int $(ord(I) eq 1 and ord(J) eq 1)+S(I-1, J)$(ord(I) gt 1)+S('Nisan', J-1)$(ord(I) eq 1 and ord(J) gt 1)+ NIW(I, J) - O_max- R(I, J)-S_max, 0) ;

Outflow  .. O(I, J) =E= max(min(S_int $(ord(I) eq 1 and ord(J) eq 1)+S(I-1, J)$(ord(I) gt 1)+S('Nisan', J-1)$(ord(I) eq 1 and ord(J) gt 1)+ NIW(I, J) - Sp(I, J)- R(I, J)-Srule(I),O_max),0) ;

Storage  .. S(I, J) =E= S_int $(ord(I) eq 1 and ord(J) eq 1)+S(I-1, J)$(ord(I) gt 1)+S('Nisan', J-1)$(ord(I) eq 1 and ord(J) gt 1)+ NIW(I, J) - Sp(I, J)- R(I, J) - O(I, J) ;

Head     .. H(I, J) =E=  -0.5783*S(I, J)**2 + 11.581*S(I, J) + 330.227;

Energy   .. E(I, J) =E= H(I, J) * O(I, J) * 0.89* 9.81;

toplam .. TE =E= Sum((I,J), E(I,J));

MODEL TRANSPORT /ALL/ ;
SOLVE TRANSPORT USING NLP MAXIMIZING TE ;


bu  hatalı hali şimdi hatalarını alalım
--------------------------------------------------------------------------------------------------------

--- Job Untitled_7.gms Start 01/22/14 19:32:40 24.2.1 r43572 WEX-WEI x86_64/MS Windows
GAMS 24.2.1   Copyright (C) 1987-2013 GAMS Development. All rights reserved
Licensee: GAMS Development Corporation, Washington, DC   G871201/0000CA-ANY
          Free Demo,  202-342-0180,  sales@gams.com,  www.gams.com   DC0000
--- Starting compilation
--- Untitled_7.gms(46) 3 Mb 13 Errors
*** Error 149 in C:\Users\Furkan\Downloads\Untitled_7.gms
    Uncontrolled set entered as constant
*** Error 149 in C:\Users\Furkan\Downloads\Untitled_7.gms
    Uncontrolled set entered as constant
*** Error 154 in C:\Users\Furkan\Downloads\Untitled_7.gms
    Set for 'ord' is not controlled
*** Error 154 in C:\Users\Furkan\Downloads\Untitled_7.gms
    Set for 'ord' is not controlled
*** Error 149 in C:\Users\Furkan\Downloads\Untitled_7.gms
    Uncontrolled set entered as constant
*** Error 149 in C:\Users\Furkan\Downloads\Untitled_7.gms
    Uncontrolled set entered as constant
*** Error 154 in C:\Users\Furkan\Downloads\Untitled_7.gms
    Set for 'ord' is not controlled
*** Error 149 in C:\Users\Furkan\Downloads\Untitled_7.gms
    Uncontrolled set entered as constant
*** Error 154 in C:\Users\Furkan\Downloads\Untitled_7.gms
    Set for 'ord' is not controlled
*** Error 300 in C:\Users\Furkan\Downloads\Untitled_7.gms
    Remaining errors not printed for this line
--- Untitled_7.gms(47) 3 Mb 28 Errors
*** Error 149 in C:\Users\Furkan\Downloads\Untitled_7.gms
    Uncontrolled set entered as constant
*** Error 149 in C:\Users\Furkan\Downloads\Untitled_7.gms
    Uncontrolled set entered as constant
*** Error 154 in C:\Users\Furkan\Downloads\Untitled_7.gms
    Set for 'ord' is not controlled
*** Error 154 in C:\Users\Furkan\Downloads\Untitled_7.gms
    Set for 'ord' is not controlled
*** Error 149 in C:\Users\Furkan\Downloads\Untitled_7.gms
    Uncontrolled set entered as constant
*** Error 149 in C:\Users\Furkan\Downloads\Untitled_7.gms
    Uncontrolled set entered as constant
*** Error 154 in C:\Users\Furkan\Downloads\Untitled_7.gms
    Set for 'ord' is not controlled
*** Error 149 in C:\Users\Furkan\Downloads\Untitled_7.gms
    Uncontrolled set entered as constant
*** Error 154 in C:\Users\Furkan\Downloads\Untitled_7.gms
    Set for 'ord' is not controlled
*** Error 300 in C:\Users\Furkan\Downloads\Untitled_7.gms
    Remaining errors not printed for this line
--- Untitled_7.gms(48) 3 Mb 46 Errors
*** Error 149 in C:\Users\Furkan\Downloads\Untitled_7.gms
    Uncontrolled set entered as constant
*** Error 149 in C:\Users\Furkan\Downloads\Untitled_7.gms
    Uncontrolled set entered as constant
*** Error 154 in C:\Users\Furkan\Downloads\Untitled_7.gms
    Set for 'ord' is not controlled
*** Error 154 in C:\Users\Furkan\Downloads\Untitled_7.gms
    Set for 'ord' is not controlled
*** Error 149 in C:\Users\Furkan\Downloads\Untitled_7.gms
    Uncontrolled set entered as constant
*** Error 149 in C:\Users\Furkan\Downloads\Untitled_7.gms
    Uncontrolled set entered as constant
*** Error 154 in C:\Users\Furkan\Downloads\Untitled_7.gms
    Set for 'ord' is not controlled
*** Error 149 in C:\Users\Furkan\Downloads\Untitled_7.gms
    Uncontrolled set entered as constant
*** Error 154 in C:\Users\Furkan\Downloads\Untitled_7.gms
    Set for 'ord' is not controlled
*** Error 300 in C:\Users\Furkan\Downloads\Untitled_7.gms
    Remaining errors not printed for this line
--- Untitled_7.gms(49) 3 Mb 65 Errors
*** Error 149 in C:\Users\Furkan\Downloads\Untitled_7.gms
    Uncontrolled set entered as constant
*** Error 149 in C:\Users\Furkan\Downloads\Untitled_7.gms
    Uncontrolled set entered as constant
*** Error 154 in C:\Users\Furkan\Downloads\Untitled_7.gms
    Set for 'ord' is not controlled
*** Error 154 in C:\Users\Furkan\Downloads\Untitled_7.gms
    Set for 'ord' is not controlled
*** Error 149 in C:\Users\Furkan\Downloads\Untitled_7.gms
    Uncontrolled set entered as constant
*** Error 149 in C:\Users\Furkan\Downloads\Untitled_7.gms
    Uncontrolled set entered as constant
*** Error 154 in C:\Users\Furkan\Downloads\Untitled_7.gms
    Set for 'ord' is not controlled
*** Error 149 in C:\Users\Furkan\Downloads\Untitled_7.gms
    Uncontrolled set entered as constant
*** Error 154 in C:\Users\Furkan\Downloads\Untitled_7.gms
    Set for 'ord' is not controlled
*** Error 300 in C:\Users\Furkan\Downloads\Untitled_7.gms
    Remaining errors not printed for this line
--- Untitled_7.gms(50) 3 Mb 71 Errors
*** Error 149 in C:\Users\Furkan\Downloads\Untitled_7.gms
    Uncontrolled set entered as constant
*** Error 149 in C:\Users\Furkan\Downloads\Untitled_7.gms
    Uncontrolled set entered as constant
*** Error 149 in C:\Users\Furkan\Downloads\Untitled_7.gms
    Uncontrolled set entered as constant
*** Error 149 in C:\Users\Furkan\Downloads\Untitled_7.gms
    Uncontrolled set entered as constant
*** Error 149 in C:\Users\Furkan\Downloads\Untitled_7.gms
    Uncontrolled set entered as constant
*** Error 149 in C:\Users\Furkan\Downloads\Untitled_7.gms
    Uncontrolled set entered as constant
--- Untitled_7.gms(51) 3 Mb 77 Errors
*** Error 149 in C:\Users\Furkan\Downloads\Untitled_7.gms
    Uncontrolled set entered as constant
*** Error 149 in C:\Users\Furkan\Downloads\Untitled_7.gms
    Uncontrolled set entered as constant
*** Error 149 in C:\Users\Furkan\Downloads\Untitled_7.gms
    Uncontrolled set entered as constant
*** Error 149 in C:\Users\Furkan\Downloads\Untitled_7.gms
    Uncontrolled set entered as constant
*** Error 149 in C:\Users\Furkan\Downloads\Untitled_7.gms
    Uncontrolled set entered as constant
*** Error 149 in C:\Users\Furkan\Downloads\Untitled_7.gms
    Uncontrolled set entered as constant
--- Untitled_7.gms(57) 3 Mb 78 Errors
*** Error 257 in C:\Users\Furkan\Downloads\Untitled_7.gms
    Solve statement not checked because of previous errors
--- Untitled_7.gms(60) 3 Mb 78 Errors
*** Status: Compilation error(s)
--- Job Untitled_7.gms Stop 01/22/14 19:32:40 elapsed 0:00:00.191
Exit code = 2
--------------------------------------------------------------------------------------------------------
Açıklamalar 

-Görüldüğü gibi bir çok uncontrooled set zımbırtısı var bunun çözümü için kısıtları değiştirmek yeterli olacak
 - Bir başk hata ise çözüm tipinin yanlış girilmesi o hata konusunda bir bilgim yok ama DNLP yapınca geçti.
düzgün kod aşağıdaki gibidir.

NOT : DEĞİŞTİRDİĞİM KISIMLARI KIRMIZI İLE BELİRTTİM 



Set
I /Ocak, Subat, Mart, Nisan/
J /Year1, Year2/
 Table NIW(I,J) Flow values
        Year1   Year2
Ocak     50      10
Subat    40      20
Mart     35      50
Nisan    45      25
;
 Parameters
 S_min     Minimum reservoir volume  /0.01/
S_max     Maximum reservoir volume  /3.42/
S_int     Initial reservoir volume  /3.00/
RW        Residual water amount for the downstream /2.00/
O_max     Maximum outflow that can be used for energy generation /72.32/
  Variables
 TE    Total Energy Generation
R(I, J) Residual water amount
Sp(I, J) Spilling water amount
O(I, J)  Outflow water amount for energy generation
S(I, J) Reservoir storage volume
H(I, J) Head value
E(I, J) Energy generation
Srule(I) The desired reservoir storage volume for the months;
     Equations
Residual (I, J)
Spilling    (I, J)
          Outflow   (I, J)
Storage  (I, J) 
Head     (I, J) 
Energy    (I, J) 
toplam hukjyuk;
 Residual (I, J) .. R(I, J) =E= min(S_int $(ord(I) eq 1 and ord(J) eq 1)+S(I-1, J)$(ord(I) gt 1)+S('Nisan', J-1)$(ord(I) eq 1 and ord(J) gt 1)+ NIW(I, J) - S_min, RW);

Spilling(I, J) .. Sp(I, J) =E= max(S_int $(ord(I) eq 1 and ord(J) eq 1)+S(I-1, J)$(ord(I) gt 1)+S('Nisan', J-1)$(ord(I) eq 1 and ord(J) gt 1)+ NIW(I, J) - O_max- R(I, J)-S_max, 0) ;

Outflow (I, J) .. O(I, J) =E= max(min(S_int $(ord(I) eq 1 and ord(J) eq 1)+S(I-1, J)$(ord(I) gt 1)+S('Nisan', J-1)$(ord(I) eq 1 and ord(J) gt 1)+ NIW(I, J) - Sp(I, J)- R(I, J)-

Srule(I),O_max),0) ;

Storage (I, J) .. S(I, J) =E= S_int $(ord(I) eq 1 and ord(J) eq 1)+S(I-1, J)$(ord(I) gt 1)+S('Nisan', J-1)$(ord(I) eq 1 and ord(J) gt 1)+ NIW(I, J) - Sp(I, J)- R(I, J) - O(I, J) ;

Head  (I, J)   .. H(I, J) =E=  -0.5783*S(I, J)**2 + 11.581*S(I, J) + 330.227;

Energy (I, J)  .. E(I, J) =E= H(I, J) * O(I, J) * 0.89* 9.81;
 toplam .. TE =E= Sum((I,J), E(I,J));
  MODEL TRANSPORT /ALL/ ;
SOLVE TRANSPORT USING DNLP MAXIMIZING TE ;