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 ;
   


Wednesday, June 5, 2013

Duyuru

    Uzun zamandır buraya yazmıyorum. Paylaşmak istediğiniz bir proje falan olursa bana mail atabilirsiniz ben de onu buraya yazarım.

    Bu blogun bir GAMS forumu gibi olmasını isterim çünkü bu program hakkında çok az bilgi var ve endüstri mühendislerinin belası olmuş bir program.

    Bu belayı gördüğüm için bende bir programcı olarak. Kendi programımı yazıyorum. Belkide Türkiye'nin ilk yerli yöneylem programı olacak. Bu projede bana yardım etmek isteyen olursa benimle iletişime geçebilir.

    Programı c# diliyle yazıyorum şu an 9000 satır civarındadır. Benim yazacağım program öğrencilere yönelik olacak mesela içinde tüm sezgisel yöntemler olacak. Mesela dicez ki bunu şu sezgiselle çöz o da çözüp söyleyecek. Şu an dinamik programlama , M yöntemi , dual alma ,dual çözme ve düzeltilmiş simpleks var. Şu an tamsayılı programlama için çalışıyorum.

Düzenleme :

Programı artık java dilinde yazıyorum şu an M yöntemi , dual alma ,dual çözme ve düzeltilmiş simpleks var. İsteyen olursa programa katkıda bulunabilir.


    iletişim adresi

katifurkan@gmail.com

faceboook

https://www.facebook.com/furkan.kati

Wednesday, November 14, 2012

Başlıca GAMS hataları

Domain list redefined hatası

Bu ne demek ? Bu şu demek aynı isimle başka bir şey yapmışın ve aynı zamanda da farklı parametre kullanmışın gülüm demek.

Mesela
U(m,k) dedin m elemanın k. ya uzaklığı bir de aşağıda

U(m) demişsin m. elemanın bir şeyi atıyorum o zaman bu hata çıkar işte

Symbol redefined  with a different type hatası

Bu şu demek

F(a,b) demişsin bu bu tablo diyelim

bir de F diye bir küme tanımlamışsın o yüzden de different type diyor.

Set expected Hatası
Bu da toplam sembolü kullanırken hata yaptın demek. Neye göre toplayacağını söylemedin demek.

sum(F(a,b)) demişsin ama neye toplican a ya göre mi b ye göre mi ?

Uncontrolled set entered as constant hatası 

Burda da şu durum var.

kısıt.. sum(a,F(a,b)) yaptın diyelim.

Burda kısıt adlı eşitlik b yi kontrol etmiyor yani her "b" için ayrı bir eşitlik yok. 1 tane eşitlik var o yüzden b ye göre de toplaman lazım. Demek istiyor tüm elemanları kullan diyor. Eğer her b için varsa bu eşitlik zaten b ye göre toplayamazsın. Ama yoksa ona göre toplaman lazım.

Bu hata bir de şöyle çıkar

sum((a,b), T(a,b)) * U(a,b) dedin demek işte onu da toplamın içine yaz bu yanlış olanı

sum( (a,b), T(a,b) * U(a,b)   ) böyle yap


Unknown symbol hatası 

Bu ne zaman olur? Bir değişkeninin ismini değiştirirsin ama onu aşağıda yazmasın mesela Ab(a,b) vardır bunu A yaparsın sonra da adam Ab yi görünce "bu ne" der.

')' expected 

parantez hatası yaptın demek

Dimension different hatası 

M(a,b) diye bir şey tanımlamışsın

sonra da aşağıda

M(a,b,c) demişsin boyutu farklı olmuş

Domain violation for set hatası 

M(a) diye bir şey tanımlamışın bu a kümesi için dimi heh sonra da demişin ki

M(b)  o zaman GAMS de diyor ki "hani  a içindi niye "b" yazıyosun ?

Objective Variable is not a free variable hatası

diyelim ki amaç değişkeni z olsun

z yi positive variable olarak tanımlanmışın demektir ama variable olarak tanımlaman gerekiyor.

 Unknown identifier entered as set hatası

küme olmayan bir şeyi küme olarak belirtmişin demek

sets
a
b
;
paramater A(ali,veli)

ali ve veli diye küme yok o zamanbu hata çıkar

şimdilik bu kadar bunlar benim bulduğum hatalar isterseniz siz de hatalarınızı bana söyleyin beraber burda bu işi halledelim

Örnek bir soru

Evet başlayalım bu sorumuz kitaptan 21. soru konular bitince gelen sorular var ya heh ordan işte. Hikayemiz şöyle

Bir şirket 4 yeni,ürünü 3 farklı atölyede üretmek istiyor ama 2. atölyede 3. ürün üretilemiyor. Bunun dışında her ürün her atölyede üretilebiliyor. Aşağıdaki tabloda da maliyetler kapasiteler ve  talepler verilmiş. İstenen şey ise şu bu ürünleri farklı atölyelerde üretelim mi yoksa üretmeyelim mi ? Yani hangisinin en iyi çözümü daha iyi bunu soruyor adam.

Şimdi tabloya gelelim.

1. ürün 2. ürün 3. ürün 4. ürün kapasite
1. atölye 41 27 28 24 75
2. atölye 40 29 23 75
3. atölye 37 30 27 21 45
talep 20 30 30 40


durum böyle şimdi GAMS kodunu veriyorum ama bu aynı ürünü farklı yerde üretebilirim içindir

_______________________________________________________________________________
sets
a  atölyeler /A1*A3/
u  ürünler /U1*U4/;

table M(a,u) maliyetler
   U1 U2 U4
A1 41 27 24
A2 40 29 23
A3 37 30 21;

parameters
Mal(u)
/
 U1 28
 U2 27
 U4 30/
Kap(a)    kapasite
/
A1 75
A2 75
A3 45/
Tal(u) talep
/
U1 20
U2 30
U3 30
U4 40
/;

positive variables
uret(a,u) a. atölyede üretilen b. mal miktarı;

variables
z amaç fonksiyonu;
equations
amacf amaç f
K(a) kapasite kısıtı
T(u) talep kısıtı  ;

amacf .. z =e= sum((a,u), M(a,u)) + sum(u,Mal(u));
K(a)  .. sum(u,uret(a,u)) =l= Kap(a);
T(u) ..  sum(a,uret(a,u))  =g= Tal(u);

model uretim /all/ ;
solve uretim using lp minimizing z ;
display uret.l, uret.m ;

_______________________________________________________________________________

Soru zaten basit bir soru en azından sürekli olarak karşılaştığımız bir soru tipi . Üretim planlama sorusu. Modeli de yazarım ama şimdilik GAMS üzerine durcam. Şimdi bu kod çalışıyor tamam orda sorun yok ama hatalar var GAMS de dimi şimdi bu hatalar üzerinde duracaz.


Takıldığım bir konu var sorunun ikinci kısmında şöyle bir sorun var. Burada indis belli değil. Yani hangi ürünün nerede üretileceği belli değil. O yüzden şöyle bir karar değişkeni var.

U(u) u. malın  üretildiğ atölye   demeliyiz çünkü u. mal  zaten 1 tek atölyede üretilebilir. bu yüzden bu bir karar değişkeni oldu ama bunu GAMS e yansıtamadım .Bakalım bir yolunu bulacaz şimdlik beklemedeyim.

Sunday, November 11, 2012

İlk adım ve merhaba

Merhaba arkadaşlar. Size daha önce GAMS hakkında bilgi vermiştim. Olasılık blogundan olanlar bilirler. Şimdi de yeni bir olay olan GAMS e başlicaz. Buna başlama sebeplerim.

-GAMS in forumu olmaması
- Gerçek hayatta da endüstri mühendislerinin karşısına çıkabilecek bir program olması
- Hatalara karşı GAMS in verdiği saçma ve kısa cevaplar
- Hataların çözümünün herhangi bir yerde olmaması
 - Soru soracak birini bulamamak

Değineceğim şeyler
 -Öncelikle hatalar
- Örnek sorular ve çözümler.
- Aynı soru için farklı çözüm önerileri
- Toplu soru ve cevap ortamı hazırlamak


-Örnek GAMS kodlarınızı burada özgürce paylaşabilirsiniz ben öyle yapacağım çünkü.

Şimdilik bu kadar ilk bir giriş yaptım ileride görüşürüz.