GAMS GAMS de karakterlerin byk ya da kk
GAMS • GAMS de karakterlerin büyük, ya da küçük olması önemli değildir; • Her komut «; » ile bitmelidir; • Her komut kullanılırken, o komuta verilen değerler (elemanlar) önceden tanımlanmalıdır; • GAMS, diğer programlama dilleri gibi bir takım ayrılmış sözleri kullanmaya özen gösteriyor. Böyle ki, GAMS metini satır -satır okur, bu sözleri arar ve onlara göre hareket eder;
GAMS • Bazı komutlar ilk satırlarda tanımlanır ve sonunda “s” olup olmaması komutun anlamını değiştirmez. Örneğin, “SET” veya “sets”. Bu komut kümeyi tanımlar ve “set”, “SET”, “sets”, “SETS” gibi yazılmasından etkilenmez; • Komutlar her biçimde yazılabilir. Yani, her satırda birkaç komut veya her komut bir satıra yazılabilir; • Boşluk veya alanların numaralanması GAMS de önemli değildir;
GAMS • Tek bir komut aynı tip bir veya daha fazla elemanları belirlemek ve tanımlamak için geçerlidir. Komutların isimlerini tekrarlamağa ihtiyaç yoktur; • Dokümantasyon bilgileri GAMS koduna dâhil edilir. Bu her satırın başına “*” işareti yazarak gerçekleşe bilir. • Baştaki “*” işareti o satırdaki yazıları veya komutu ignore ediyor, yani aktif olmayacak şekle getiriyor. “*” işareti kaldırılarak komut aktif hale getirile bilir. Diğer komutlar da tanımlanan komutların içine gömülebilir. Örneğin: set, scalar, parameter, table, equation, model;
GAMS • Elemanlar komutlarla tanımlanır. Bu tanımlama (scalar, papameter, matrix, . . ) onların GAMS de kullanılması için geçerli bir dönüşüme uğraması anlamına gelir; • GAMS elemanları için geçerli adlar harfle başlamalı ve 9 harf veya rakamdan oluşmalıdır.
SET (SETS) •
SETS •
SETS •
SETS Burada düğümleri “N” ve “N” olarak tanımladık. Başka şekilde, ALIAS (N, NP) ; veya IF (NP $ MAP (N, NP), …, ); gibi de göstere biliriz. Bunu “IF” operatörünü anlatınca daha net göreceyiz. “ALIAS” komutu da aynı kümedeki elemanların, farklı adlandırılsa bile aynı anlama geldiğini, aynı işlemi ifade ettiğini gösteren komuttur.
GAMS • GAMS de kümeleri düzenlemek için 4 geçerli operatör vardır: card, ord, +, -, Örnek üzerinde bu operatörleri açıklayalım: A 1 / Salı, Çarşamba, Cuma, Perşembe / A 2 / Pazar, Perşembe, Cumartesi, Cuma / A 3 / Çarşamba, Cumartesi, Pazartesi /; olsun. A 1 kümesi için operatörler aşağıdaki gibi kullanılır:
GAMS
GAMS Bu örnekte A 1 kümesi sıralanmış kümedir, çünkü onun elemanları daha önceden tanımlanmıştır. A 2 kümesi sıralanmış küme değil, çünkü “Perşembe” ve “Cuma” arasındaki durum, A 1 de tanımlanmış durumdan farklıdır. Burada card (A 1) – A 1 kümesinin eleman sayısını gösteriyor, Ord - elemanın kümedeki yerini gösteriyor, +1 veya -1 kümenin her hangi bir elemanını ele aldığımızda ondan önceki veya sonraki elemanı kullanmak gerektiğini gösteriyor,
SKALARLAR GAMS’de skalarlar kesin olarak belirlenir. Scalar veya scalars adı altında kullanmak üzere seçilmiş bir değerin atanmasında kullanılır. • scalar f nakliye (her ton ve km. başına) / 0. 09 /; Burada her ton, km. başına düşen nakliye fiyatının 0. 09 dolar olduğu belirtilir. Bu değer / / işaretleri arasında gösterilir ve sonuna ; işareti konur.
PARAMETRELER ve TABLOLAR. • GAMS’de parametreler ve tablolar, 2 veya daha büyük boyutlarda verilen verilerin tanımlanması için kullanılır. Parametreler ve tablolar, bir boyutlu dizilerin tanımlanması hariç, birbirinin aynısıdır. Bu durumda tek parametrenin yapılanmasına izin veriliyor. Bunları araştıralım: • Parameter veya parameters vektörlerin veya verilerin tanımlanması için kullanılır. Genellikle, vektör veya verilere değer atanması için kullanılır.
PARAMETRELER ve TABLOLAR Parameter a(i) i. Fabrikanın kapasitesi (tonla) /p 1 300 p 2 500 / ; Bu örnekte a(İ) parametresi i kümesinin elemanlarını tanımlıyor. P 1 ve p 2 küme elemanlarına 300 ve 500 değerlerini atıyor. Bu atamalar da / işaretleri arasında gösterilir ve sonuna ; işareti konulur.
PARAMETRELER ve TABLOLAR 1. Mümkün indislerin seçilmiş sıralaması ve onlara ilişkin değerler (parametre değerleri) / işaretleri arasında yazılır ve , ile birinden ayrılır. 2. İndis değeri, her hangi sıra ile verile bilir. 3. Parametreler için varsayılan değer “ 0” r. Bu nedenle 0’dan farklı değerler de ala bilir. 4. GAMS otomatik olarak verilen indis değerleri ile küme değerlerini denetler. Başka değimle, GAMS ilgili yanlışları ortaya çıkarıyor (denetliyor).
PARAMETRELER ve TABLOLAR • Önceden tanımlanmış fonksiyonu matris olarak tanımlamak için de parameter komutunu kullana biliriz. Örneğin: Parameter c(i, j) (ton başına taşıma ücreti, dolarak) / p 1. m 1 0. 180 P 2. m 1 0. 225 P 1. m 2 0. 144 P 2. m 2 0. 108 P 1. m 3 0. 162 P 2. m 3 0. 126 /;
Tables Veri matrisi GAMS’te tablo veya ikiboyutlu parametre şeklinde tanımlana bilir. Tablo şeklinde tanımlanma table veya tables komutu ile gerçekleşiyor. Tables iki veya daha fazla indis kullanılırken tanımlana bilir. Komut, tablonun isminden sonra yazılır:
Tables Table d(i, j) (mesafe km. )
Tables • Bu örnekteki matris, d(i, j) i ve j indislerinin kullanımı ile tanımlanır. Elemanlar kümesinin her kesişimi ve tabloda değerleri sırası ile verilir: p 1. m 1, p 1. m 2 , p 1. m 3, p 2. m 3 ve 2. 0, 1. 6, 1. 8, 2. 5, 1. 2, 1. 4 Verilerin tablo, matris veya parametre olarak tanımlanması eşdeğerdir. Başka örneğe bakalım: iki veya daha fazla kümenin içerdiği tabloya bakalım. Varsayalım ki, farklı özelliklere sahip insanlardan oluşan tabloya ihtiyacımız var (din, ırk ve eğitim).
Tables Sets re din çeşitleri / re 1*re 3 / sl eğitim seviyesi /sl 1*sl 2 / ra ırk çeşidi / ra 1*ra 4 / ; table c (re, sl, ra) bu özelliklere sahip insan sayısı
Tables
Tables Display c; Tabloyu açık şekilde yazarsak, ra 1 ra 2 ra 3 ra 4 re 1. sl 1 2. 000 4. 000 10. 000 2. 000 re 1. sl 2 3. 000 9. 000 7. 000 8. 000 re 2. sl 1 2. 000 4. 000 10. 000 2. 000 re 2. sl 2 3. 000 9. 000 7. 000 8. 000 re 3. sl 1 6. 000 2. 000 5. 000 7. 000 re 3. sl 2 3. 000 9. 000 7. 000 8. 000
GAMS’de atama kuralları •
ATAMALARDA MATEMATİKSEL KURALLARIN İFADESİ. • Belirli indislere belirli değerlerin atanması için ‘ ‘ işareti kullanılır. C(‘P 1’, ‘m 1’)=0, 180; Skalar, parametre ve tablolara birden fazla değer atana bilir. Yeni değer eski değeri geçersiz yapar. • Matematiksel ifadelere standart matematiksel fonksiyonlar ve işlemler dahil edile bilir. Aşağıdaki tabloda mevcut matematiksel fonksiyonlar yer alıyor.
ATAMALARDA MATEMATİKSEL KURALLARIN İFADESİ. •
ATAMALARDA MATEMATİKSEL KURALLARIN İFADESİ. abs (x) Arctan (x) fonksiyonu Cos(x) cos (x) fonksiyonu sin(x) sin (x) fonksiyonu Sqrt (x) Sqr (x) Sign (x)
ATAMALARDA MATEMATİKSEL KURALLARIN İFADESİ. Log (x) X’in doğal (naturel) logarirması Log 10 (x) X’in onluk logaritması Exp (x) Power (x, y) Floor (x) X’ ten büyük eşit en büyük tam sayı Ceil (x) X’ ten büyük eşit en küçük tam sayı Mapval (x) Eşleştirme fonksiyonu Normal (x, y) Ortalaması x, standart sapması y olan rassal değer Uniform (x, y) U(x, y) dağılımındaki rassal sayı
ATAMALARDA MATEMATİKSEL KURALLARIN İFADESİ. Errorf (x) N(0, 1) normal dağılımı için birikimli dağılım fonksiyonu Sıralı değerlerin en büyüğü Sıralı değerlerin en küçüğü Mod (x) x/y den elde edilen kalık (kalan) X**y Round (x) X’in tam sayıya yuvarlanması Round (x, y) X’in y’nin ondalık basamağına göre yuvarlanması
DEĞİŞKENLER. GAMS’de değişkenler aşağıdaki gibi tanımlanır: Variables X(i, j) i. Fabrikadan j. Markete taşınacak ürün miktarı Z toplam taşıma ücreti • Variable veya variables ile tanımlanan komut, optimizasyon değişkenlerini göstermek için kullanılır.
DEĞİŞKENLER. GAMS’de x(i, j) değişkenlerinin alt sınırı xij >= 0 gibi tanımlanır. Bu durumda değişkenin boyutunu belirtmeğe gerek kalmıyor, çünkü daha önce bu işlem yapılmış oluyor. Değişkenler aynı zamanda free (sınırsız), binary, integer , negative gibi de gösterile bilir. Amaç fonksiyonunu temsil eden değişken her zaman “free” olarak tanımlanmalıdır. Değişkenler için geçerli olan çeşitler aşağıdakilerdir:
DEĞİŞKENLER.
DEĞİŞKENLER. •
DEĞİŞKENLER. İnteger variable i; I. Up = 1000 ; Alt ve üst sınır değerleri aynı (benzer) olan değişkenler için fx komutu kullanılır. Örneğin, Yi = 3. 0 her i için ifadesi GAMS’de y. fx(i)=3. 0; gibi gösterilir.
DEĞİŞKENLER. Belirtelim ki, GAMS’de vektörlerin (matrisin)tüm bileşenleri için aynı değerin atanması, aşağıdaki şekilde gerçekleşe bilir: Sij matrisi için Sij ---- 3. 0 ( her i ve her j için) işlemi GAMS’de s. l (i, j)=3. 0; şekilde yapılıyor. Buradaki l komutu, başlangıç nokta için belirtilen değerin kullanılmasını temin eder. Burada başlangıç değer 3 ‘r.
DEKLEMLER. Equations komutu GAMS’de geniş anlamda kullanılıyor. Denklemlerden başka, tanım ve kısıtlamalar da bu komutla tanımlanır. Equation ve equations komutu ele alınan problemin kısıtlarını ifade etmek için kullanılır. =e= “ eşittir” anlamına gelir, =l= “küçük eşit” anlamına gelir, =g= “büyük eşit” anlamına gelir.
DEKLEMLER. EQUATIONS Cost amaç fonksiyonu Supply (i) i. Fabrikanın kapasitesi Demand (j) j. Marketin talebi ; Cost. . z =e= sum((i, j), c(i, j)*x(i, j)) ; Supply. . sum (j, x(i, j) ) =l= a(i); Demand. . sum (i, x(i, j)) =g= b(j);
DEKLEMLER. •
MODEL • MODEL komutu model ve çözümleri kapsayan denklemleri (ifadeleri) içeriyor. Model komutu problemin önceden tanımlanmış tüm denklemlerini içeriyor. Model transport /all/; Açık şekilde Model transport /cost, supply, demand/;
MODEL Eğer modelde problemi içeren tüm denklemlerin yer almasını istemiyorsak, bunu aşağıdaki şekilde göstere biliriz: Model transport 1 “ demand constraint not included “ /cost, supply/;
ÇÖZÜCÜLER GAMS’de Solve (çözücü) komutu problemi formüle eden çözücüleri düzenlemek için kullanılır. Solve transport using lp minimizing z ; Bu bir taşıma probleminin çözümlenmesinde z değişkenini minimize etmek için lineer programlama çözücüsü kullanılsın anlamına geliyor.
ÇÖZÜCÜLER GAMS de çeşitli problemlerin çözülmesi için aşağıdaki çözücüler kullanılır: • Lp - doğrusal programlama • Nlp – doğrusal olmayan programlama • Dnlp – kesikli türevli doğrusal olmayan programlama • Mip – karma tam sayılı programlama • Rmip- genişletilmiş (relax)karma tam sayılı programlama
ÇÖZÜCÜLER • Minlp - karma tam sayılı doğrusal olmayan programlama • Rminlp- genişletilmiş karma tam sayılı doğrusal olmayan programlama • Mcp – karışık tamamlayıcı problemler • Mpec – denge sabitleri ile matematiksel problemler • Cns – kısıtlı doğrusal olmayan sistemler.
ÇÖZÜCÜLER GAMS’de bazı eklerin modelleme ekleri ile birleşimi, problem ve çözümü için yararlı bilgiler sağlamaktadır. Kayda değer birkaç eklenti gösterelim: • Modelstat - modelin statüsünü, • Solvestat – çözücünün statüsünü, • Resusd – çözücünün harcadığı zamanı gösteriyor.
KOŞULLU İFADELER ($ ; IF) Koşullu ifadeler “$” işareti verilen kümenin uygun alt kümelerini üretmek için kullanılır. Demand (j) $ ( ord (j )) gt 1. . sum (i, x(i, j)) =g= b (j); $ (ord (j) gt 1 ) ifadesi, sıra numarası 1’den büyük olan elemanların gruba dahil edilmesinin gerektiğini belirtir. Aşağıdaki komutu inceleyelim: Supply (i). . sum (j $ (ord (j) lt card (j)), x(i, j)) =l= a(i) $ (ord (i) eq 1); Bu komut, i=1 ‘den sonraki i’leri yok say demektir.
KOŞULLU İFADELER ($ ; IF) • Bu arada • lt - < • le - <= • eq - = • ne - >< • ge - >= • gt - > işaretlerini ifade eder.
IF komutu “If” komutunu da $ gibi ifade ede biliriz. Örneğin, C(‘p 2’ , ‘m 1’) $ (z. 1 ge 70) = 0. 01; bu If (z. 1 ge 70, c (‘p 2’ , ‘m 1’)= 0. 01); şeklinde de gösterile bilir. Yani, eğer z(1)>= 70 ise, c (i=2, j=1) = 0. 01 demektir.
DİNAMİK KÜMELER GAMS’in güçlü özelliklerinden biri de dinamik kümelerin tanımlanmasıdır. Dinamik kümeler önceden tanımlanmış statik kümelerin alt kümelerini tanımlamak için kullanılır. Bu değişkenin değerini, parametreler, tablolar ve denklemler belirler, her zaman güncelleşir ve değişebilirler.
Matematikte GAMS’de Set k / a, b, c / S(k); S(k) = yes ; S(k) = no S(k) $ (ord(k) eq card(k))= yes; S(k) = no S(k) $ (ord(k) gt 1)= yes ;
Set A static set /a 1*a 5/; Set B(A) subset /a 1, a 2, a 5/; Set C(A) subset / a 2, a 3, a 5/; Set UN(A) dynamic subset; UN (A)= B(A)+C(A); Set IN(A) dynamic subset; IN (A)=B(A)*C(A);
DÖNGÜLER GAMS de döngüleri ifade eden komutlar aşağıdakilerdir: - LOOPS - WHILE Bu komutu örnek üzerinde açıklayalım:
SET K /1*3/ DYN (K); PARAMETER m(K) the slope of C 2 ; m(‘ 1’)=1; POSITIVE VARIABLES X 1, X 2 ; FREE VARIABLE Z; X 1. up=3; EQUATIONS COST C 1 C 2(K) C 4 C 6;
COST. . Z=3*X 1+X 2; C 1. . -X 1+X 2 =L= 2; C 2(DYN). . X 1+m(DYN)*X 2 =L=6; C 4 . . 2*X 1 -X 2 =L=4; C 6. . –X 1 -X 2 =L= -1; Model exchap 4 /all /; Loop (K, DYN (K) = yes; Solve exchap 4 using lp maximizing Z; m(K+1)=m(K)+1; ); Açıklaması: C 1. . –X 1+X 2 =L= 2; C 4. . 2*X 1 -X 2 =L= 4; C 6. . -X 1 -X 2 =L= -1;
K=1 için C 2 (1). . X 1+X 2 =L= 6; K=2 için C 2 (1). . X 1+X 2 =L= 6; C 2 (2). . X 1+2*X 2 =L=6; K=3 için C 2 (1). . X 1+X 2 =L= 6; C 2 (2). . X 1+2*X 2 =L=6; C 2 (3). . X 1+3*X 2 =L= 6;
TAŞIMA PROBLEMİ Taşıma problemi, verilen koşullar altında yüklerin başlangıç noktalardan varış noktalarına en kısa zamanda taşınması şeklindeki problemleri kapsar. Problemin genel şekildeki matematiksel modeli aşağıdaki şekilde verilir:
TAŞIMA PROBLEMİ Veriler: • m : başlangıç noktalar sayısı, • n: varış noktalar sayısı • ui : i. Başlangıç noktasındaki yükleme miktarı • vj : j. Varış noktasındaki alım miktarı • cij : i. Başlangıçtan j. Varış noktasına gönderilen ürünün birim maliyeti
DEĞİŞKENLER: (karar değişkeni) •
KISITLAR: •
AMAÇ FONKSİYONU •
ÖRNEK: •
SET I / I 1*I 3/ J / J 1*J 3/ ; PARAMETERS U(I) / I 1 2 I 2 3 I 3 4/ V(J) / J 1 5 J 2 2 J 3 2/ ; TABLE C(I, J) J 1 J 2 J 3 I 1 1 2 3 I 2 2 1 2 I 3 3 2 1 ; VARIABLES Z X(I, J) ; POSITIVE VARIABLE X(I, J) ;
EQUATIONS COST SHIP (I) RECEIVE (J ) ; COST. . Z =e= SUM( (I, J), C(I, J)*X(I, J)) ; SHIP(I). . SUM(J, X(I, J) = e = U(I) ; RECEIVE (J). . SUM(I, X(I, J) = e = V(J) ; MODEL transport /ALL/; SOLVE transport USING LP MINIMIZING Z ;
Diyet problemini bir örnek üzerinde açıklayalım: Bir anne çocuklarının kahvaltısı için besin seçmelidir. Kahvaltıda çocuklara süt veya yumurta vermek istiyor. 1 gr. Yumurta 0, 10 mg. Yağ, 1, 0 mg. Kalsiyum ve 110 kalori 1 gr. Süt 0, 25 mg. , Yağ 0, 25 gr. Kalsiyum ve 120 kalori içeriyor. Bunun dışında, çocukların sağlıklı büyümesi için her sabah 1 mg. Yağ, 5 mg. Kalsiyum ve 400 kalori almaları gerekiyor. 1 gr. Yumurtanın fiyatı 3, 8 kuruş, 1 gr. Sütün fiyatı da 4, 2 kuruştur.
Diyet problemi Anne çocuklarının her sabah yeteri kadar yağ, kalsiyum, kalori almasını ve bunu nasıl ucuza getireceğinin yollarını arıyor. Bu işi dengeli çözmek için lineer programlamaya ihtiyaç duyulur. Problemin modelini oluşturmaya çalışalım ve bunu matematiksel şekilde gösterelim:
1 gr. süt yumurta Talep 0, 10 mg 0, 25 mg 1 mg kalsiyum 1, 00 mg 0, 25 mg kalori 110 120 400 1 gr. maliyeti 3, 8 kuruş 4, 2 kuruş yağ
Karar değişkenleri: •
Kısıtlar •
Amaç fonksiyonu •
Diyet problemi Bu problemin optimal çözümü: «Anne çocuklarına 60/9 gr. yumurta, 20/9 gr. süt vermekle kahvaltıyı 26, 2 kuruşa getirebilir» şeklindedir. Fakat, bu durumda çocuklar gereken besinleri almakla beraber 755, 5 kalori de almış oluyorlar (yani gerekenden 355, 5 kalori fazla). Problem maliyeti en küçüklemek olduğu için bunu göze alabiliriz
Genel Şekilde DIYET PROBLEMİ (Diet): Veriler: m : besin sayısı, n: farklı gıda sayısı, aij : j. Gıdadaki i. besin miktarı, bi : i. besinin min. Kullanım miktarı, cj : j. Gıdanın birim maliyeti.
Karar değişkeni ve Kısıtlar •
AMAÇ FONKSİYONU •
ÖRNEK: Bu diyet probleminde verilen parametreler:
ÖRNEK •
ÖRNEK •
Problemin GAMS kodu • $ title DIET problem • ** I besin indisi • ** J Gıda indisidir • SET • I / I 1*I 4/ • J / J 1*J 5/ ; • PARAMETERS • B(I) • / I 1 74. 2 • I 2 14. 4 • I 3 0. 14 • I 4 0. 55/ • C(J) J. Gıdanın birim maliyeti • / J 1 1 • J 2 0. 5 • J 3 2 • J 4 1. 2 • J 5 3/ ;
ÖRNEK •
Ağ problemi Veriler • G : G=(N, A) ağ taşımasını tanımlayan graftır. Burada N düğüm kümesi, A ise bağlantı kümesidir. • n: ağdaki düğüm sayısı • fi : i. Düğümden geçen akışlar (+ ise düğüme gelen, - ise düğümden çıkan) • mij : i. Düğümden j. Düğüme akış kapasitesi • cij : i. Düğümden j. Düğüme gönderim maliyeti
DEĞİŞKENLER: (karar değişkeni) ve Kısıtlar •
AMAÇ FONKSİYONU •
ÖRNEK: Aşağıdaki şekilde bir ağ akış problemi verilmiştir. 2 1 4 f 2 x 12 x 24 f 1 x 14 f 4 x 13 x 34 3 f 3
Kısıtlar •
Amaç fonksiyonu •
Problemin GAMS kodu • SET • I set of nodes in the network / I 1*I 4/ • CONEX (I, I) set of node connections /I 1. I 2, I 1. I 3, I 1. I 4, I 2. I 4, I 3. I 4/; • ALIAS (I, J) • PARAMETERS • F(I) the input or output flow at node I • / I 1 7 • I 2 -4 • I 3 -1 • I 4 -2/ • FMAX (I, J) maximum flow capacity of conduction going from I to J ; • FMAX (I, J)=4 • VARIABLES • Z objective function variable • X(I, J) the flow going from node I to node J; • X. lo(I, J) : = - FMAX(I, J); • X. up(I, J) : = FMAX(I, J);
ÖRNEK •
Portföy problemi •
Veriler: •
DEĞİŞKENLER: (karar değişkeni) ve Kısıtlar •
DEVAMI •
Amaç Fonksiyonu •
ÖRNEK: •
Kısıtlar: •
ÖRNEK •
ÖRNEK •
Problemin GAMS Kodu $title the portfolio problem SET I set of stocks /A 1, A 2, A 3/; ALIAS(I, J); SCALARS r percentage /0. 25/ s percentage /0. 03/;
GAMS Kodu TABLE data(I, *) B V D W * $ $ $ A 1 75 20 0 18 A 2 100 20 3 23 A 3 35 100 5 102; Variables z objective function variable x(I) number of shares of stock I; POSITIVE VARIABLE x(I); x. lo(I)= - data(I, 'B');
GAMS Kodu EQUATIONS COST objective function NOCHANGE no change in the current value INFLATION future value must be 3% greater than the current value BALANCE(I) to avoid excessive reliance on a single stock; COST. . z =E= SUM(I, data(I, 'D')*(x(I)+data(I, 'B'))); NOCHANGE. . SUM(I, data(I, 'V')*x(I))=E= 0; INFLATION. . SUM(I, data(I, 'W')*(x(I)+data(I, 'B')))=G= (1+s)*SUM(I, data(I, 'V')*data(I, 'B')); BALANCE(I). . r*SUM(J, data(I, 'V')*(x(J)+data(I, 'B'))) =L= data(I, 'V')*(x(I)+data(I, 'B')); MODEL portfolio /ALL/; SOLVE portfolio USING lp MAXIMIZING z;
Sonuç •
0 -1 problemler •
SIRT ÇANTASI PROBLEMİ (KNAPSACK) •
DEĞİŞKENLER: (karar değişkeni) •
KISITLAR ve AMAÇ FONKSİYONU •
ÖRNEK: Bir şirket, kapasitesi 700 ton olan bir yük gemisine sahiptir. Bu şirket belli bir rota ile farklı ağırlıklara sahip konteynerler taşımaktadır. Belli bir seyahat esnasında bu şirket aşağıdaki konteynerlerin bazılarını taşımalıdır:
Şirket, taşınacak yükü maksimize edecek yükleme şeklini belirlemelidir. Bu problem 0 -1 sırt çantası problemi olarak formüle edile bilir.
DEĞİŞKENLER ve KISITLAR: •
AMAÇ FONKSİYONU: •
Problemin GAMS Kodu $title The 0 -1 Knapsack Problem OPTION OPTCR=1 e-10; SET J set of containers /c 1*c 10/; PARAMETERS C(J) benefit of container J /c 1 100 c 2 155 c 3 50 c 4 112 c 5 70 c 6 80 c 7 60 c 8 118 c 9 110 c 10 55/
GAMS Kodu A(J) weight of ontainer J; A(J) = C(J); SCALAR B maximum capacity of the freighter /700/; Variables z objective function variable x(J) binary choice; BINARY VARIABLE x; EQUATIONS COST objective function equation CAPA is the loading of the freighter;
GAMS Kodu •
AKADEMİ PROBLEMİ. Akademi problemini örnek üzerinde göstermeğe çalışalım: Varsayalım ki, mühendislik akademisinin m sayıda üyesi var ve J aday kümesinden r sayıda yeni üye seçilmesi gerekiyor. Bu amaçla her gerçek üyeye en az 0, en fazla r sayıda adayı desteklemek fırsatı verilmiştir. En çok destek alan r aday akademiye alınacaktır. Seçim iki aşamalı yapılıyor.
AKADEMİ PROBLEMİ. • Final seçim sürecinin öncesinde her adayın destek derecesini öğrenmek için ön test yapılmaktadır • Bu süreçte her gerçek üye P listesinde en fazla s adaya bir skor ataya bilir, fakat her kese de skor atamak zorunda değil. • Her adayın sadece aldığı skorların toplamı bilinmektedir. • Problem, test sonuçlarına dayanarak her adayın minimal ve maksimal sayıdaki final destek miktarlarının belirlenmesinden oluşmaktadır. Böyle ki, bir adaya skor atanması, bu adayın gerçek üye tarafından desteklenmesi anlamına gelir. Problem aşağıdaki gibi formüle edilir:
VERİLER: •
KARAR DEĞİŞKENİ: •
KISITLAR: •
KISITLAR •
AMAÇ FONKSİYONU: •
ÖRNEK: Varsayalım ki, mühendislik akademisinin 20 üyesi var. J=8 aday içerisinden r=4 adayın seçilmesi gerekiyor. Skorların (p 1= 10 , p 2= 8 , p 3= 3 , p 4= 1) olduğunu, dolayısı ile s=4 olduğu verilmektedir. Her adayın aldığı skor, tabloda verilmiştir:
ÖRNEK • Varsayalım ki, atamalar aşağıdaki şekilde gerçekleşmiştir (bu bilgi bize konuyu anlamak için verilmiş, normalde bu bilgiye sahip değiliz. ) :
ÖRNEK
Problemin GAMS Kodu $title the academy problem SETS I number of actual members /1*20/ J number of candidates /1*8/ DIN(J) S the number of different scores that can be assigned /1*4/; ALIAS(J, J 1); PARAMETER P(S) the $s$-th score /1 10 2 8 3 3 4 1/;
GAMS Kodu TABLE N(I, J) score assigned to candidate J by actual member I 1 2 3 4 5 6 7 8 1 3 10 8 1 2 1 10 8 3 3 1 3 10 8 4 3 10 8 1 5 4 8 10 1 6 1 10 8 3 7 10 8 3 1 8 3 10 1 8 9 8 3 10 1 10 3 10 1 8 11 8 10 3 12 10 13 10 8 14 10 1 3 8 15 3 10 8 1 16 10 1 8 3 17 1 3 10 8 18 1 3 8 10 19 1 10 3 8 20 8 1 10 3;
GAMS Kodu SCALARS zmin, zmax; PARAMETER C(J) total score obtained by candidate J; C(J)=sum(I, N(I, J)); Variables z function to be optimized; BINARY VARIABLE x(I, J, S) if member I assigns score P(S) to candidate J takes on value 1. Otherwise 0. ; EQUATIONS OBJ function to be optimized L 1(I, J) each member can assign at most one score to each candidate L 2(I, S) each member I can assign score S to at most one candidate TOTALSCORE(J) totalscore given;
GAMS Kodu OBJ(J)$DIN(J). . z =e= sum(I, sum(S, x(I, J, S))) ; L 1(I, J). . sum(S, x(I, J, S))=l=1; L 2(I, S). . sum(J, x(I, J, S))=l=1; TOTALSCORE(J). . sum(I, sum(S, P(S)*x(I, J, S)))=e=C(J); ** The model includes all the constraints. MODEL academy /ALL/; ** The output file is open. file aux /academy. out/; put aux; ** First of all, the empty set is assigned to the dynamic set. DIN(J)=NO; loop(J 1, DIN(J 1)=YES;
GAMS Kodu Solve academy using mip Minimizing z; zmin=z. l; Solve academy using mip Maximizing z; zmax=z. l; put "J=", J 1. tl: 3, " zmin= ", zmin: 3: 0, " zmax= ", zmax: 3: 0/; DIN(J 1)=NO; );
Sonuç: J=1 Z min=8 Z max =20 J=2 Z min=3 Z max =14 J=3 Z min=15 Z max =20 J=4 Z min=2 Z max =13 J=5 Z min=15 Z max =20 J=6 Z min=2 Z max =18 J=7 Z min=3 Z max =20 J=8 Z min=1 Z max =8
Sonuç: 8 aday için minimum ve maksimum destek sayıları aşağıdaki tabloda verilmiştir:
ZAMAN DERS ÇİZELGELEME PROBLEMİ Bu tür problemler gerçek hayatta sık kullanılan problemlerdir. Okullarda, üniversitelerde ders çizelgeleme, sınav çizelgelerinin oluşturulması, hastanelerde hemşirelerin nöbet çizelgelerinin oluşturulması, havacılıkta pilotların uçuş çizelgelerinin oluşturulması ve bu gibi problemler, bu problemler sınıfına aittir. Problemin matematiksel modelini oluşturalım:
Veriler: •
VERİLER (devamı): •
KARAR DEĞİŞKENİ: •
KISITLAR: •
KISITLAR •
AMAÇ FONKSİYONU •
ÖRNEK: 3 derslik , (c= 1, 2, 3) 5 ders saati, (h=1, 2, 3, 4, 5) 8 tane ders, (s=1, 2, 3, 4, 5, 6, 7, 8) 2 öğretim üyesi, (i=1, 2) 2 ders bloku, (b=1, 2) olsun.
ÖRNEK •
Çözüm: Problemin çözümü aşağıdaki tabloda verilmiştir. H=1 H=2 H=3 H=4 H=5 - - C=1 C=2 C=3 - - -
ÇÖZÜM 1. Öğretim üyesinin programı: C=1 H=2 H=3 H=4 H=5 - - - - - C=2 C=3 - - -
ÇÖZÜM 2. öğretim üyesinin programı: H=1 H=2 H=3 H=4 H=5 C=2 - - - C=3 - - - C=1
ÇÖZÜM 1. Akademik bloğun çizelgesi: C=1 H=2 - - C=2 C=3 - - H=3 H=4 H=5 - - - -
ÇÖZÜM 2. Akademik bloğun çizelgesi: H=1 H=2 C=1 C=2 - - C=3 - - H=3 H=4 - - - H=5 - -
GAMS kodu Bu verilere dayanarak çizelgelemeyi, modeli GAMS de çözerek oluşturalım. Bunun için GAMS kodunu yazalım:
GAMS Kodu •
GAMS Kodu Const 4 (C, H) in every classroom-hour pair at most 1 subject is taught Const 5 (H, B) at every hour at most 1 subject of any academic block is taught; COST. . Z =e= SUM( (S, C, H), (ord(C)+ord(H))*v(S, C, H)) ; Const 1 (I). . SUM( (S, C, H)$SI(S, I), v (S, C, H)) =e= SUM(S$SI(S, I), 1); Const 2 (H, I). . SUM( (S, C)$SI(S, I), v (S, C, H)) =l= 1; Const 3 (S). . SUM( (C, H), v (S, C, H)) =l= 1; Const 4 (C, H). . SUM( (S), v (S, C, H)) =l= 1; Const 5 (H, B). . SUM( (S, C)$SB(S, B), v (S, C, H)) =l= 1;
GAMS Kodu MODEL timetable /ALL/; SOLVE timetable USİNG MIP MİNİMİZİNG Z ; DISPLAY v. L;
ÇÖZÜM Problemin çözümü aşağıdaki tabloda verilmiştir:
ÇÖZÜM Yani, 3. Dersliğe ders atanmıyor. 1. derslikte 1. saatte s 7 dersi, 2. saatte S 6 dersi, 3. saatte S 3 dersi, 4. saatte S 4 dersi, 5. saatte S 5 dersi yapılacaktır; 2. derslikte 1. saatte s 2 dersi, 2. saatte S 1 dersi, 3. saatte S 8 dersi yapılacaktır;
- Slides: 148