Sunum yükleniyor. Lütfen bekleyiniz

Sunum yükleniyor. Lütfen bekleyiniz

GAMS NOTLAR Yrd. Doç. Dr. Berk Ayvaz.

Benzer bir sunumlar


... konulu sunumlar: "GAMS NOTLAR Yrd. Doç. Dr. Berk Ayvaz."— Sunum transkripti:

1 GAMS NOTLAR Yrd. Doç. Dr. Berk Ayvaz

2 GAMS General Algebraic Modeling System
GAMS (The General Algebraic Modeling System) matematiksel proglamlama ve optimizasyon için tasarlanan yüksek seviyeli bir dildir. Büyük ve karmaşık Doğrusal, Doğrusal Olmayan, Karma Tamsayılı optimizasyon problemleri modelleyebilmek için kullanılan bir programdır.

3 Açıklama yazmak için $ONTEXT; This guide is for a scientist who knows the Russian language. The tutorials supplement the major Tutorials for the users, who know Russian $OFFTEXT;

4 Açıklama yazmak için Açıklama yazmanın diğer yolu ifadenin başına yıldız işaret koymaktır. *

5 GAMS Temelleri Kümeler Veri Girişi Değişkenler Denklemler Model Çözüm

6 SETS i plants / Tashkent, Almaty/ j consumers / Tokyo, London, Moscow/; SETS t year /1965, 1966, 1967, 1968, 1969, 1970, , 1999/; Ya da SETS t year /1965*1999/;

7 SETS m machine /mach1, mach 2, mach 3, mach 4, mach 5,. ,
SETS m machine /mach1, mach 2, mach 3, mach 4, mach 5, ..., … mach 24/; Or a different way: SETS m machine / mach 1* mach 24/;

8 SETS i consumers / Almaty , Tashkent, Fargana /; SETS j consumers / Almaty , Tashkent, Fergana /; İ ve j kümeleri aynı değerleri alıyorsa alias komutu ile i ‘nin elemanları j’ye altarılabilir. SETS k station / Toktogul, Uchkurgan, Charvak, Chardara /; ALIAS(k,j);

9 Alt küme tanımlama SETS nt nodes /post1*post14, nurek, vahsh, pandj, tmgu, tald, div1, aral_sea, r_1*r_6, total / ns(n) supplies / vahsh, pandj / nr(n) regions / r_1*r_4, aral_sea / nr1(n) regions / r_1*r_6 / nl(n) lakes / nurek, tald, TMGU / rlast(n) last user / aral_sea /

10 Parametreler SETS i consumers / Almaty, Tashkent, Fergana /; PARAMETERS a(i) orders / Almaty 7350 Tashkent 7250 Fergana 7170 / b(i) supplies / Almaty 7250, Tashkent 7180,Fergana 770 /; PARAMETERS c(i) price / Almaty 5, Tashkent 21.80, Fergana 1.70 /;

11 Denklemlerde İndeks Sembollerinin Açıkça Kullanımı
dz.. tz =E= y('jan‘ ) + y('feb') + y('mar') +y('dec') +y('nov') +y('oct');

12

13 Örnek 1 Ürün 1 ve ürün 2 olmak üzere 2 farklı ürün imal eden bir firmanın aşağıdaki doğrusal programlama modelini ele aldığımızı varsayalım. Zmaks = 4x1 + 5 x2 x1 + x2 ≤ 60 (I. Numaralı kısıt) x1 -2 x2 ≤ 40 (II. Numaralı kısıt) x x2 ≥ 0 (III. Numaralı kısıt) x2 ≤20 (IV. Numaralı kısıt) x1 ,x2 ≥ 0 Kaynak: Berna Tektaş-Sivrikaya, Yöneylem Araştırması Gams Uygulama Dersi Notları

14 İlk olarak modeldeki amaç fonksiyonu ve karar değişkenlerinin tanımlaması gerekir.

15 Eğer karar değişkenlerimin negatif değer almasını istemiyorsam karar değişkenleri pozitif olarak tanımlanmalıdır.

16 Eğer karar değişkenlerim sadece 0 ya da 1 değerini alabilirse aşağıdaki şekilde tanımlanmalıdır.
Binary variables x1, x2;

17 İkinci adımda ise modeldeki amaç fonksiyonu ve kısıt denklemlerinin Equations başlığı altında tanımlanmasıdır.

18 Equations kısmının altına amaç foksiyonu ve denklemler şekildeki gibi yazılır.
GAMS’de eşitlik/eşitsizlik operatörleri aşağıdaki gibi yazılır. = =e= ≤  =l= ≥  =g=

19 Modelimizi GAMS’de tanımlamış olduk
Modelimizi GAMS’de tanımlamış olduk. Şimdi modeli çözebilmek için gerekli komutları vermemiz gereklidir. Bunun için öncelikle modelimize bir isim vermeliyiz. Bizim örneğimizin adı “ornek1” olursa aşağıdaki komutla modelimizin oluşturulması sağlanabilir. “/” işareti ile sınırlandırılan alana modele dahil edilmesi istenen denklem ve kısıtlar yazılarak model sınırlandırılabilir. Bu özellik, aynı zamanda her fonksiyonun önce neden tanımlanması gerektiğini açıklamaktadır. Biz modelimizde tüm kısıtları kullanmak istediğimiz için “all” (tümü) komutunu kullanacağız.

20 Son olarak modeli çözmek için “solve” komutu çalıştırılır.
Bu komutun yapısı aşağıda verilen yapıya uygun olarak oluşturulmalıdır. “Solve” komutu Çözülmek istenen modelin adı “using” komutu, bu komut kullanmak istediğimiz yöntemi seçim şansı sunar. Çözüm yöntemi; çözüm yönteminin model yapısına uygun seçilmesi gerekmektedir. GAMS içinde bulunan bazı yöntemler şunlardır. “lp” doğrusal programlama “nlp” doğrusal olmayan programlama “mip” tamsayılı programlama “rmip” genişletilmiş tamsayılı programlama “minlp” tamsayılı, doğrusal olmayan programlama “rminlp” genişletilmiş tamsayılı, doğrusal olmayan programlama “mpec” denge kısıtlı matematiksel modeller “cns” kısıtlanmış nonlinear sistemler 5. Amacınıza göre “minimizing” veya “maximizing” komutu 6. Optimize edilmek değişkenin adı (bu örnekte “z”)

21 ATK- Beyaz dört müşterisinin taleplerini karşılamak için üç potansiyel fabrikayı değerlendirmektedir. Her hangi bir fabrikayı açarsa firma 200,000TL’lik yatırım yapması gerekmektedir. Bir fabrikada üretilip, bir müşteriye gönderme birim maliyetleri tabloda verilmiştir. Firmanın talepleri en düşük maliyetle karşılaması için gerekli TP modelini kurunuz.

22

23 Kümelerin tanımlanması
SET kümeadı açıklayıcı yazı(isteğe bağlı) / kümenin_ilk_öğesinin_adı açıklayıcı yazı(isteğe bağlı) kümenin_ikinci_öğesinin_adı açıklayıcı yazı(isteğe bağlı) /;

24 Kümelerin tanımlanması
alias komutu ise bir kümenin elemanlarını farklı bir isimdeki başka bir kümeye kopyalamak için kullanılır

25 Veri Girişi GAMS çeşitli yöntemlerle veri girişine olanak sağlar.
scalar, parametre, tablo Scalar(Sabit) scalar ifadesi sıfır boyutlu bir katsayı tanımlamak için kullanılır. SCALAR ilköğeadı açıklayıcı yazı(isteğe bağlı) /sayısal değer/ ikinciöğeadı açıklayıcı yazı(isteğe bağlı) /sayısal değer/ ;

26 Parameterler Parametre formatı bir kümenin elemanlarına ilişkin
değerler atamak için kullanılır PARAMETER öğeadı(bağlıolduğuküme) açıklayıcı yazı(isteğe bağlı) /kümenin 1. elemanın adı ilgili değer, kümenin 2. elemanın adı ilgili değer,

27 Tablolar Tablo formatı veri değerleri iki veya daha fazla kümeye dayanan bilgileri girmek için kullanılır

28 Değişkenler GAMS içindeki bir değişken optimize edilecek modelde veya çözümü aranan denklemlerde üzerinde oynanabilen sayısal bir büyüklük olarak tanımlanır.

29 Denklemler

30 Denklemler

31 Model&Çözüm

32

33

34 ÖRNEK 3 Bu problemde, İstanbul ve Ankara’da bulunan iki üretim merkezinden, Sakarya, Bolu ve Eskişehir’de bulunan üç pazarın gereksinimlerine göre bilgisayar sunucusu gönderilmesi gereklidir. Her bir sunucunun ulaştırma fiyatı gönderim yapılan uzaklığa bağlı olarak km başına 90 TL olarak verilmiştir. Problemin amacı her bir üretim merkezinin kapasitelerini aşmadan her pazarın gereksinimini en düşük maliyetle karşılayacak çözümün bulunmasıdır. Pazarlar Sakarya Bolu Eskişehir Kapasite İstanbul 150 km 250 km 400 km 350 adet Ankara 300 km 200 km 600 adet Talep miktarı 325 adet 300 adet 275 adet

35 Bu problemde her fabrika ve pazar endeks olarak tanımlanabilir.
Sets i fabrikalar /ist, ank/ j pazarlar /sak, bol, esk/; Artık tüm değişkenler bu endekslere bağlı olarak tanımlanacaktır. Parameters K(i) her fabrikanın kapasitesi /ist 350, ank 600/ T(i) her pazarın talebi /sak 325, bol 300, esk 275/; Km başına taşıma maliyeti 90 TL olarak verilmiştir. Bu durumda sabit birim km taşıma maliyeti Scalar m km başına taşıma maliyeti /90/; uij: i fabrikasından j pazarına olan uzaklık olmak üzere çift indisli “uij” değişkenini tanımlamak içinse tablo tanımını kullanmalıyız. Table u(i,j) sak bol esk ist ank ; Bu durumda birim taşıma maliyeti aşağıdaki şekilde tanımlanır. Parameter c(i,j) her bir durum için taşıma maliyeti ; c(i,j) = m*u(i,j); olur.

36 Değişken olarak her fabrikadan her pazara gönderilen sunucu miktarını alabiliriz.
Variables x(i,j) z; Positive variables x; Equations maliyet kapasite(i) talep(j); maliyet z=e=sum((i,j), x(i,j)*c(i,j)); kapasite(i).. sum(j, x(i,j))=l= K(i); talep(j) sum(i, x(i,j))=g= T(j); Son olarak modelin çözümü için aşağıda verilen komutları yazmalıyız. Model ornek3 /all/ ; Solve ornek3 using lp minimizing z ; İlgilendiğimiz değişkeni aşağıda verilen komutu kullanarak görüntüleyebiliriz. Display x.l;

37

38 ÖRNEK 3.

39

40 Veri Alma (Küme&Tablo)
Problemin çözümü için gerekli tüm verileri GAMS’in içine yazmak yerine, bu verileri saklayan başka bir dosya(excel, notepad) kullanılabilir. Bu sayade hem kod basitleşir hem de var olan verileri tekrar yazmaya gerek kalmaz Importing sets&table from an excel file

41

42

43

44 Şartlı ifadeler ve alt kümeler
GAMS de şart ifadesi $ ile gösterilir. Eğer diye okunur.

45 Eğer y 2.5 den büyükse x=2 olur.

46 Sameas ifadesi Bir işlemi yalnızca, bir küme metni tam olarak başka bir küme metniyle eşleştirilirse gerçekleştir. $ komutu i ve j aynı değilse toplamı çalıştırmayı söyler.

47 Sameas ifadesi

48 Subset 𝑥= 𝑖=1 20 𝑧 𝑖

49 Diğer koşul ifadeleri İf if (x ne 0, DATA(i)=12 ; ); While
while(x<10, x=x+0.01; ); Repeat repeat( x=x+0.01; until x>=10) ; Other Conditional Alternatives 17

50 Ek programlama operatörleri
1) LOOP - cycle operator. 2) IF-ELSE - conditional operator. 3) FOR - cycle operator. 4) WHILE - conditional cycle operator.

51 LOOP The LOOP operator is very frequently used with the PUT operator for printing out and displaying the information on the screen. The LOOP operator has the following syntax: LOOP (control_ area [$(condition)] operator {; operator});

52 LOOP Consider the following hypothetical case of the integration model: SET x / d15*d25 / PARAMETER nachalo(x) / d / differ(x) / d , d , d d , d , d d , d , d d , d /; The LOOP operator can be used for computing increasing sums: LOOP(x, nachalo(x+1) = nachalo(x) + differ(x)); Only one operator and one control set - x is presented here within the cycle operation area nachalo(x+1) = nachalo(x) + differ(x)

53 IF-ELSE Operator The IF-ELSE operator is useful for transferring from one operator to another. In some cases, it can be written down as a set of dollar conditions. The IF operator can be used for making the GAMS code more understandable. The optional part of "ELSE" allows formulating the traditional construction "IF-THEN-ELSE". The following syntax is for the "IF-THEN-ELSE" operator: if (condition, operators; {condition ELSEIF, operators} [operators ELSE;] );

54 IF (f <= 0, p(i) = -1; q(j) = -1; ELSEIF ((f > 0) AND (f < 1)), p(i) = p(i)**2; q(j) = q(j)**2; ELSE p(i) = p(i)**3; q(j) = q(j)**3; );

55 WHILE Operator WHILE operator is used for cycling the process of calculation before the execution of some logical condition. The syntax of the WHILE operator is the following: while (operator, operators; );

56 FOR Operator Operator FOR is used for cycling the bloc of operators. It has the following syntax: FOR (i = initial value, TO finite value [BY step] operators; );

57 SCALAR i; SCALAR globmin; globmin = inf; OPTION BRATIO = 1; FOR (i = 1 TO 1000, x.l(j) = UNIFORM(0,1); SOLVE ml USING NLP MINIMIZING obj ; IF (obj.l LE globmin, globmin = obj.L ; globinit(j) = x.L(j); );


"GAMS NOTLAR Yrd. Doç. Dr. Berk Ayvaz." indir ppt

Benzer bir sunumlar


Google Reklamları