370 likes | 504 Views
Pécsi Tudományegyetem Pollack Mihály Műszaki Kar Műszaki Informatika Szak Data Mining. 24. Gyakorlat Dr. Pauler Gá bor , Egyetemi Docens PTE-PMMK Számítástechnika Tanszék Iroda: Boszorkány u., B épület 101 Tel: 72/503-650/3725 E-mail: gjpauler@acsu.buffalo.edu. A gyakorlat tartalma.
E N D
Pécsi TudományegyetemPollack Mihály Műszaki KarMűszaki Informatika SzakData Mining 24. Gyakorlat Dr. Pauler Gábor, Egyetemi Docens PTE-PMMK Számítástechnika Tanszék Iroda: Boszorkány u., B épület 101 Tel: 72/503-650/3725 E-mail: gjpauler@acsu.buffalo.edu
A gyakorlat tartalma 23. Házi Feladat ellenőrzése: Demarkációs vonalak Az optimalizációs modellezés folyamata • Adatgyűjtés az optimalizációs problémával kapcsolatban • Matematikai modell felírása • Az optimalizációs szoftver kiválasztása • Matematikai modell lefordítása az adott modellezési nyelvre • Teszt futtatások • Visszacsatolás, a megoldás összevetése az eddigiekkel LP modellek • Termelési modell • Szállítási modell • Raktározási modellek • Egyszerű forgalmi egyenletes • Tőkelekötés nyomonkövetése • Minimális költségű hálózati folyam modell • Keverési modell • Ütemezési modell • Játékelméleti modell 24. Házi Feladat: MOL Rt. esettanulmány
Az optimalizációs modellezés folyamata 1 Adatgyűjtés az optimalizációs problémával kapcsolatban: • A korlátozó feltételek és a célfüggvény begyűjtése: • A korlátozó feltételek viszonylag egyszerűbben összegyűjthetők, mert általában a piaci környezet és a technológia adottságai diktáljk őket • A célfüggvény azonban sokszor nem egyértelmű, egy szervezet többféle célt követhet (eladott mennyiség, vagy bevétel vagy profit, vagy profitabilitás maximalizálása). A célok általában ellentmondanak egymásnak (pl. vagy a bevételt maximalizáljuk egy alacsonyabb árral vagy a profitot egy magasabbal), és a szervezet különféle érdekcsoportjai más fontossági súlyokat rendelnek a célokhoz. • Mindezekkel a problémákkal a többcélú programozás (Multiple Goal Programming, MGP) foglalkozik: • Ha a célfüggvényeket valamilyen közös mértékegységre lehet hozni (pl. pénz), akkor súlyozva összeadhatjuk őket egyetlen célfüggvénybe • Ha nem összehasonlítható mértékegységben mértek, akkor a főcél lesz a modellben a célfüggvény, az alcélok pedig alsó korlátok lesznek (pl. maximalizáld a profitot, de úgy, hogy a bevétel ne menjen egy szint alá) • Az adatok kinyerése adatbázisból, aggregáció: • Egy nagyméretű modellnek általában sok bemenő adata van, így ezeket nagyon kényelmetlen és munkaigényes manuálisan közvetlenül a modellbe beírni, pláne ha ezt többször meg kell tenni (pl. hetente)
Az optimalizációs modellezés folyamata 2 • A legtöbb modellező nyelv lehetőséget ad arra, hogy az adatokat külső adatforrásból vonjuk be a modellbe • Ezzel kapcsolatban a legjobb megoldás, ha a vállalati adattárház (Data Warehouse) egy adatbázisából (Data Mart) valamilyen OLAP eszköz segítségével aggregáljuk az adatokat a modellbe • Ebben a tekintetben költséghatékony alapmegoldásnak számít, hogy Windows ODBC szerver segítségével elérjük egy távoli adatbázis adatait, és Excel Kimutatás Táblában (Pivot Table) aggregáljuk őket (lásd Lesson8), majd innen szedi őket fel egy modellbe az Excel egy moduljaként (add-in) működő célérték-kereső (Solver) szoftver. • Becslések a modellhez: • Külön problémát jelent, ha bizonyos modellbeli korlát értékek (Bound) nem determinisztikusak, hanem valószínűségi változók (pl. a kereslet alakulása). Ezeket az LP modellek nem tudják kezelni, át kell alakítani őket • Ehhez megkeressük az adott változó empírikus eloszlásához legjobban illeszkedő elméleti valószínűségeloszlást, kijelölünk egy biztonsági szintet (általában 95%), majd a megfelelő egy- vagy kétoldalú próba segítségével megadhatunk egy kritikus értéket (lásd Session10), ami a korlát értéke lesz (pl. ha a kereslet normális eloszlású, adott várható értékkel és szórással, kiszámítható, hogy a=5% szignifikancia szinten maximum mekkora lehet) • A korlátozó feltételek és célfüggvények becslésével még majd részletesebben foglalkozunk a Lesson26-ban
Az optimalizációs modellezés folyamata 3 Matematikai modell felírása: • Az első és legfontosabb szabály, hogy egyáltalán nem írunk egy büdös bitnyi modellt sem, amíg meg nem bizonyosodtunk róla, hogy más már megírta-e! • A kereskedelmi optimalizációs szoftverekhez több 10000 féle modell érhető el ingyenesen internetes modell könyvtárakban (Model Library) (lásd Session24 irodalomjegyzéke). • Sok időt, energiát és idegeskedést takarítunk meg, ha nem a nulláról kezdünk el írni egy modellt, hanem átbuheráljuk saját céljainkra más modelljét • Ha nincs a problémánkhoz hasonló kész modell az Interneten (aminek igen csekély a valószínűsége, mert a problémák a történelemhez hasonlóan ismétlik önmagukat...), akkor előbb matematikai formában probáljuk felírni (lásd Lesson23). Ez ugyan az utca embere számára nehezebben érthető, mint egy modellező nyelv kódja, de tömörsége miatt sokkal áttekinthetőbb Az optimalizációs szoftver kiválasztása során a következő tényezők számítanak: • Kapacitás: max. változószám, max. feltételszám, max. egészértékű változók száma, futási sebességi összehasonlító tesztek, milyen optimalizációs algoritmusokat kezel • Lineáris Programozás, LP: Hagyományos simplex algoritmus, Belsőpontos gyors algoritmusok • Mixelt Integer/Lineáris Programozás, MILP: Korlátozás-szétválasztás • Nem Lineáris Programozás, NLP: Kvadratikus algoritmusok, QP • Globális Optimalizáció, heurisztikák, GO: Gradiens tipusú algoritmusok egyszeres/többsörös indítással, Szimulált hűtés, Genetikus algoritmusok, Tabu keresés, stb.
Az optimalizációs modellezés folyamata 4 • Ingyenes internetes modell könyvtárak rendelkezésre állása • Könnyen kezelhető grafikus felhasználó felület (Graphic User Interface, GUI). A legfejlettebb és legdrágább rendszerekben a modell generálása is grafikus felületen, egérkattintással/húzással történik, minimális mennyiségű kód beírásával (lásd pl. Taylor Scheduler http://www.taylor.com/index.php : nem célfüggvényt és feltételeket írogatunk, hanem útvonalakat és kamion-ikonokat húzunk ki egérrel). Itt a végső cél, hogy akár egy funkcionális analfabéta is össze tudjon „legózni” egérrel egy bonyolult matematikai modellt, anélkül, hogy akár egy egyenletet fel tudna írni. Tekintve a tömegek egyre inkább leépülő tanulási kultúráját és analitikus gondolkodását az egymást követő generációk során, erre hamarosan szükség is lesz! • Könnyen érthető modellezési nyelv: a legtöbb embernek nehézséget okoz egy többszörös indexeket tartalmazó matematikai modell olvasása, ezért ezek a nyelvek némileg terjengősebben, de érthetőbb, emberközelibb indexeléssel ábrázolják a modelleket. Mostanság a legnépszerűbb az AIMMS nyelv (lásd: http://www.aimms.com). • Adatimportálási lehetőség adatbázisokból: mind korlát-, koefficiens- és kezdeti változóértékek többdimenziós tömbjeit tudnia kell importálnia adatbázisokból. Nem árt, ha ez ODBC szerveren keresztül történik, és lehetőleg sokdimenziós kezelést lehetővé tevő OLAP felületen keresztül • Hardverigény, parallel processzorok kezelési lehetősége nagyszámítógépi környezetben (pl. Multi Thread technológia Unix Solaris operációs rendszerben) • Ingyenes demó: lehetőleg időben nem, hanem modell méretben korlátozott shareware elérhetősége (ez sajnos csak a LINDO-nál van meg, lásd: http://www.lindo.com) Matematikai modell lefordítása az adott modellezési nyelvre, teszt futtatások: • Sajnos, majd mindegyik modellezési nyelvnek megvannak a kisebb-nagyobb szintaktikai túlbonyolításai, ami megnehezíti egy matematikai modell átírását az adott nyelvre, ezekre vigyázzunk
Az optimalizációs modellezés folyamata 5 Visszacsatolás, a megoldás összevetése az eddigiekkel: • Nem hiszünk el kapásból mindent, csak azért, mert „a gép köpte ki”!!! A jó modell optimális megoldásának józan paraszti ésszel is hihetőnek kell lennie (pl. nem rughatjuk ki meg vehetjük fel ugyanazt a dolgozót havonta), és nem szabad nagyon messze állnia attól a megoldástól, amit egy témában jártas és motivált szakember hosszas és drága próbálgatással kísérletezne ki. Mi nem biztos, hogy jobb megoldást találunk, csak gyorsabban és olcsóbban találjuk meg! • Azonkívül, nem biztos, hogy egy modellnek az optimális megoldása az üzletileg leghasznosabb megoldása. Mivel az üzleti élet jellegétől fogva bizonytalan, erősen számít, hogy az adott megoldás mennyire rugalmas (Flexible): mennyire romlik/javul a célfüggvényérték a modell tényezőinek egységnyi megváltoztatására. Erről a megoldások érzékenységvizsgálata ad felvilágosítást. • Ha modell jó, és a számított optimális megoldás mégis távol áll a valóságos megoldástól, nem biztos, hogy az adott szervezetnél mind buták dolgoznak: lehet, hogy a nagy bizonytalanság miatt kénytelenek szuboptimálisan, de rugalmasabban működni. (Pl. amíg az egészségügyi rendszert nagyrészt egy bizonytalan, osztogató-fosztogató állami költségvetés finanszírozza, azt azért jellemzi alacsony színvonal, borzasztó hiányosságok és pazarlás egyszerre, mert mindenki „bespájzol” amíg a keretét teljesen ki nem meríti, hogy ki tudja védeni a kormányzat aktuális húzásait, így más dolgokra már nem jut pénz) • Ha túl érzékeny megoldást kaptunk, a korlátokra és koefficiensekre történő %-os „biztonsági tartalékok” rápakolásával terelgethetjük a modellt egy rugalmasabb megoldás irányába. Sajnos a rugalmasság és az optimalitás örök ellentmondásban van: ha tökéletesen, matematikai pontossággal optimalizálok egy rendszert, az általában olyan rugalmatlan lesz, hogy a légy zümmögésére is összeomlik.
A gyakorlat tartalma 23. Házi Feladat ellenőrzése: Demarkációs vonalak Az optimalizációs modellezés folyamata • Adatgyűjtés az optimalizációs problémával kapcsolatban • Matematikai modell felírása • Az optimalizációs szoftver kiválasztása • Matematikai modell lefordítása az adott modellezési nyelvre • Teszt futtatások • Visszacsatolás, a megoldás összevetése az eddigiekkel LP modellek • Termelési modell • Szállítási modell • Raktározási modellek • Egyszerű forgalmi egyenletes • Tőkelekötés nyomonkövetése • Minimális költségű hálózati folyam modell • Keverési modell • Ütemezési modell • Játékelméleti modell 24. Házi Feladat: MOL Rt. esettanulmány
x1 termékp1=$25d1=1100db m1=8ml1=0.3h x3 termékp3=$44d3=700db m3=9ml3=0.8h x2 termékp2=$31 d2=900db m2=11ml2=0.5h g31=$4.0 g21=$3.5 g22=$2.0 g32=$2.5 g11=$2.0 g12=$1.5 2. gép q2=1500db 1. gépq1=2000db w wC=$40 wB=$25 wA=$20 L 1.Műszak sA=336h 2.Műszak sB=336h Túlóra sC=168h Termelési (Production) modell 1 Elsőként nézzük meg a 24.1 iskolapélda egy sokkal valószerűbb változatát! Jelmagyarázat: A modellváltozókat zölddel, a koefficienseket narancssárgával, a korlátokat kékkel, eltérési/felhasználási változókat lilával, a célfüggvényt pirossal jelöljük) • Egy cég xi i = 1..n termékeket termel, ezeket pi i = 1..n ($25, $31, $44) áron adja a vevőknek. A termékekből a kereslet di i=1..n (1100db, 900db, 700db) • Egyfajta, egy szállítótól vásárolt nyersanyag felhasználásával termelnek, amiből mi i = 1..n(8m, 11m, 9m) mennyiség kell az egyes termékekhez, és c=$1.1 az egységára • A termékeket j=1..m gépen lehet gyártani, az i-edik termék j-edik gépen jelentkező gépköltsége gij i=1..n, j=1..m (az 1. gépre: $2, $3.5, $4, a 2. gépre: $1.5, $2, $2.5), a gépek termelési kapacitása qj j=1..m (2000db, 1500db) • A termékek előállítása egységenként li i = 1..n(0.3h, 0.5h, 0.8h) munkaórát igényel. Az első műszak kapacitása sA=336 munkaóra, az órabérük wA =$20, a második műszak kapacitása sB=336 munkaórawB=$25 órabér mellet, a túlóra kapacitása sC=168 munkaórawC=$40 órabér mellett (wA < wB <wC) • Melyik termékből mennyit termeljünk (x1, x2, x3), hogy z maximális nyereséget érjünk el?
Termelési (Production) modell 2 Ez egy bonyolult valós probléma, ami látszólag nem lináris összefüggéseket is tartalmaz (pl. más költségű műszakok) de mégis megoldható lineáris modellel, ha ügyesen részekre bontjuk. Ezt nevezzük hierachikus modell tervezésnek (Hierarchic Model Design): • Határozzuk meg először a célfüggvényt! Ez első közelítésben: Bevétel – Anyagköltség – Gépkölts. – Munkakölts. = z → Max (24.8) • Bontsuk részekre a gépköltséget gépenként/termékenként, és a munkaerőköltséget a műszakoknak megfelelően: Bevétel – Anyagköltség – Gép1Term1 – Gép1Term2 – Gép1Term3 – Gép2Term1 – Gép2Term2 – Gép2Term3 – Műszak1 – Műszak2 – Túlóra = z → Max (24.9) • A termelés teljes Bevételét, Anyagköltségét és Munkarőigényét könnyen megfogalmazhatjuk a megadott x1,x2,x3 termelési változók segítségével: Bevétel = p1x1 + p2x2 + p3x3 = 25x1 + 31x2 + 44x3 (24.10) Anyagköltség = cm1x1 + cm2x2 + cm3x3 = 1.1×8x1 + 1.1×11x2 + 1.1×9x3 (24.11) Munkaerőigény = l1x1 + l2x2 + l3x3 = 0.3x1 + 0.5x2 + 0.8x3 (24.12) • A költségek számítása során felbukkan egy olyan probléma, hogy a teljes munkaerőigény műszakokra/túlórákra bomlik, amikben más munkabér van, illetve egy termék termelése több gépen történhet, aminek szintén más költsége van
Termelési (Production) modell 3 • Ezt új változók bevezetésével hidaljuk át. Mivel a modell nem egy egyenletrendszer, itt a változók és a feltételek számának NEM KELL egyenlőnek lenni, bármikor vezethetünk be új változókat (Introduction of Variables) (persze célszerű a számukat minimalizálni). Vezessünk be a három műszakra külön lA,lB,lC felhasználási változókat: Munkaerőigény = l1x1 + l2x2 + l3x3= lA + lB + lC (24.13) • Mivel bármely terméket termelhetik bármely gépen, de ez eltérő költségekkel jár, a termékek termelését 1., 2. gépekre lebontó változókat vezetünk be: 1. termékre:x1 = y11 + y12 (24.14) 2. termékre:x2 = y21 + y22 (24.15) 3. termékre:x3 = y31 + y32 (24.16) • Most már kifejezhetők a gépenkénti és műszakonkénti költségek és beépíthetők a célfüggvénybe: (p1– cm1)x1 + (p2– cm2)x2 + (p3– cm3)x3/(Ár-Anyag)×Termelés – wAlA – wBlB – wClC /Bérköltség – g11 y11 – g12 y12 – g21 y21 – g22 y22 – g31 y31 – g32 y32 /Gépköltség = z→ Max /Nyereség(24.17) Konkrétan: (25–1.1×8)×x1 + (31–1.1×11)×x2 + (44–1.1×9)×x3/(Ár-Anyag)×Termelés – 20lA – 25lB – 40lC /Bérköltség – 2y11 – 3.5y12 – 4y21 – 1.5y22 – 2y31 – 2.5y32 /Gépköltség = z→ Max /Nyereség(24.18)
Termelési (Production) modell 4 A korlátozó feltételek definiálása (Subject To): • Elsőként írjuk fel a változók értékhatárával, tipusával kapcsolatos feltételeket: x1, x2, x3, lA, lB, lC, y11, y12 , y21, y22, y31, y32≥ 0, (24.19) • Majd írjuk fel azokat a feltételeket, amelyek a célfüggvény helyes működéséhez technikailag szükségesek: l1x1 + l2x2 + l3x3-lA - lB - lC =0/Munkaerő-egyenlet (24.20) Konkrétan: 0.3x1 + 0.5x2 + 0.8x3-lA - lB - lC =0/Munkaerő-egyenlet (24.21) x1 - y11 - y12 =0;x2 - y21 - y22 =0; x3 - y31 - y32 =0/Termék-egyenletek(24.22) • Majd írjuk fel azokat a feltételeket, amelyek triviálisan kiderülnek a feladat szövegéből: x1≤d1; x2≤d2; x3≤d3 /Termékek keresleti korlátai(24.23) Konkrétan: x1≤1100; x2≤900; x3≤700 /Termékek keresleti korlátai (24.24) y11 + y21 + y31 ≤q1; y12 + y22 + y32 ≤q2 /Gépek kapacitáskorlátai(24.25) Konkrétan: y11 + y21 + y31 ≤2000; y12 + y22 + y32 ≤1500/Gépek kapacitásai(24.26) lA≤sA; lB≤sB; lC≤sC/Műszakok kapacitáskorlátai(24.27) Konkrétan: lA≤336; lB≤336; lC≤168/Műszakok kapacitáskorlátai (24.28)
Termelési (Production) modell 5 Felvetődik a kérdés, milyen követési feltételek (Follow Constraint) biztosítják azt, hogy a szakaszonként lineáris munkaerő költség függvény részei megfelelő sorrendben lépjenek be, vagyis, hogy addig ne legyen második műszak illetve túlóra, amíg az elsőt teljesen ki nem használtuk • Van olyan eset, amikor ezt maga a célfüggvény megfogalmazása biztosítja • A simplex algoritmust egy éhes macskaként kell elképzelni, ami mániákusan kutat kaja (az optimum) után, és minden kis résbe (feltételrendszer) beférkőzik, hogy a legrövidebb úton hozzájusson • Mivel a célfüggvény lineáris, tudjuk, hogy az algoritmus alapvető hajlama: • Maximalizáció esetén: • Elsősorban a minél nagyobb célfüggvény-koefficienssel rendelkező változókat növelje, • A kis célfüggvény-koefficiensűeket pedig csökkentse, • Minimalizáció esetén pont fordítva, Mindaddig, amíg ez valami korlátba bele nem ütközik • A cél a z nyereség maximalizálása, így az „éhes macska” rögtön a legdrágább termékből (x3) akar sokat termelni, de a (24.20) egyenlet miatt ehhez valamely műszakot is használnia kell. Mivel ezek egyre negatívabb koefficienssel (-w1>-w2>-w3,konkrétan:-20> -25> -40) szerepelnek a célfüggvényben, a maximalizáció automatikusan a legnagyobb koefficiensűvel kezd, vagyis az elsővel, és csak akkor használja a többit, ha ennek s1 kapacitása (konkrétan 336) kimerült. • Így a követési feltételek a keresett szélsőérték fajtának (maximum) megfelelő együttható rangsor (csökkenő) miatt automatikusan teljesülnek
Termelési (Production) modell 5 • A kész modell konkrét számadatokkal: Célfüggvény: (25–1.1×8)×x1 + (31–1.1×11)×x2 + (44–1.1×9)×x3/(Ár-Anyag)×Termelés – 20lA – 25lB – 40lC /Bérköltség – 2y11 – 3.5y12 – 4y21 – 1.5y22 – 2y31 – 2.5y32 /Gépköltség = z→ Max /Nyereség(24.29) Subject to x1, x2, x3, lA, lB, lC, y11, y12 , y21, y22, y31, y32≥ 0 (24.30) 0.3x1 + 0.5x2 + 0.8x3-lA - lB - lC =0/Munkaerő-egyenlet (24.31) x1 - y11 - y12 =0;x2 - y21 - y22 =0; x3 - y31 - y32 =0/Termék-egyenletek(24.32) x1≤1100; x2≤900; x3≤700 /Termékek keresleti korlátai (24.33) y11 + y21 + y31 ≤2000; y12 + y22 + y32 ≤1500/Gépek kapacitásai(24.34) lA≤336; lB≤336; lC≤168/Műszakok kapacitáskorlátai (24.35)
Termelési (Production) modell 6 • A kész modellt szimbólumokkal is felírhatjuk, általános formában, ekkor függetlenné válik a konkrét számadatoktól. Ilyenkor jó szolgálatot tesz a különböző színek, betűformátumok használata a változók, koefficiensek, eltérésváltozók stb. elkülönítésére: Célfüggvény: (p1– cm1)x1 + (p2– cm2)x2 + (p3– cm3)x3/(Ár-Anyag)×Termelés – wAlA – wBlB – wClC /Bérköltség – g11 y11 – g12 y12 – g21 y21 – g22 y22 – g31 y31 – g32 y32 /Gépköltség = z→ Max /Nyereség(24.36) Subject to x1, x2, x3, lA, lB, lC, y11, y12 , y21, y22, y31, y32≥ 0 (24.37) l1x1 + l2x2 + l3x3-lA - lB - lC =0/Munkaerő-egyenlet (24.38) x1 - y11 - y12 =0;x2 - y21 - y22 =0; x3 - y31 - y32 =0/Termék-egyenletek(24.39) x1≤d1; x2≤d2; x3≤d3 /Termékek keresleti korlátai(24.40) y11 + y21 + y31 ≤q1; y12 + y22 + y32 ≤q2 /Gépek kapacitáskorlátai(24.41) lA≤sA; lB≤sB; lC≤sC/Műszakok kapacitáskorlátai(24.42)
Termelési (Production) modell 7 • Mivel egy bonyolult modell rengeteg feltételt tartalmazhat, ezek azonban egymáshoz hasonló feltételek csoportjaiba tömörülnek, rendkívül időpazarló dolog minden egyes feltételt kézzel kiírni. Ezen segít a modell indexes formában történő felírása, ami jóval tömörebb. Az optimalizációs szoftvereknél tanulandó modellezési nyelvek ezen a formán alapulnak: Indexek: i = 1..n /Termékek j = 1..m /Gépek k = A..C /Műszakok Célfüggvény: Si((pi-cmi)xi) - Sk(wklk) - Si Sj(gijyij) = z→ Max /(Bevétel-anyag) - bér - gép = nyereség (24.43) Subject to: xi, lk, yij≥ 0,i=1..n, j=1..m, k=A..C /Értékhatárok (24.44) Si(lixi) - Sk(lk) =0 /Munkaerőszükséglet = felhasználás (24.45) xi - Sj(yij) =0,i=1..n/Terméktermelés = össz.gépterhelés (24.46) xi ≤di,i=1..n/Keresleti korlátok (24.47) Si(yij) ≤qj, j=1..m/Gépi kapacitás korlátok (24.48) lk ≤sk,k=A..C/Műszak kapacitás korlátok (24.49) Megfigyelhető, hogy a modell felírása gyorsul, terjedelme már nem függ a résztvevők mennyiségétől de kommentezhetősége romlik
Termelési (Production) modell 8 • A modellek legtömörebb felírási formája a mátrix-algebrai forma. Mivel ehhez alaposan ismerni kell a mátrix algebrai műveletek szabályait, a gyakorlatban általában nem használatos: Célfüggvény: (p-cm)x + wl + (Gn×m)TEn×nYn×m = z→ Max /(Bevétel-anyag) - bér - gép = nyereség (24.50) Subject to: x, l, Yn×m≥ 0 /Értékhatárok (24.51) lx - le =0 /Munkaerőszükséglet = felhasználás (24.52) x - En×nYn×m =0/Terméktermelés = össz.gépterhelés (24.53) x≤d/Keresleti korlátok (24.54) Yn×mEm×m≤q/Gépi kapacitás korlátok (24.55) l≤s/Műszak kapacitás korlátok (24.56) Ahol: p= (pi i = 1..n), m= (mi i = 1..n), l = (li i = 1..n) – vektorok Gn×m= {gij i = 1..n, j = 1..m}, Yn×m= {yij i = 1..n, j = 1..m}– n×m-es mátrixok T – mátrix transzponáltja En×n– n×n-es egységmátrix (főátlójában 1, a többi eleme 0), az összegzéshez szükséges a mátrix algebrában e – egységvektor az összegzéshez
Termelési (Production) modell 9 • A TermelesiModell.xls fájl a termelési modell felírására mutat példát Excelben. • A zölddöntési változók itt az újonnan bevezetett lila részváltozók összegei
Termelési (Production) modell 10 katt katt katt • A Solver modell nehezen érthető a cellahivatkozások miatt. Ezen úgy segíthetünk, ha Excelben az Beszúrás|Név|Definál... (Insert|Name|Define...) menüvel nevet adunk a modell különböző cellatartományainak • Majd Beszúrás|Név|Alkalmaz... (Insert|Name|Apply...) menüvel megjelenítjük ezeket a cellahivatkozások helyett a munkalapon és a Solverben katt katt katt katt katt katt
Raktár1 s1=120db Raktár2 s2=200db Raktár3 s3=160db c32=6$/db c33=3$/db c22=6$/db c11=2$/db c12=5$/db c34=7$/db c21=4$/db c24=5$/db c13=7$/db c23=8$/db c31=4$/db c14=3$/db Vevő4 d4=100db Vevő1 d1=80db Vevő2 d2=90db Vevő3 d3=210db Szállítási (Transportation) modell • i = 1..n raktárból kell si készleteket j = 1..m vevőhöz szállítani, amelyek kereslete dj. Az i-edik raktárból a j-edik vevőhöz cij egységköltséggel szállíthatunk • Az összkereslet megegyezik az összkínálattal: Sisi = Sjdj (24.57) • Honnan hova milyen xij mennyiséget szállítsunk, hogy a z összköltség minimális legyen? (Ld.: SzallitasiModell.xls) Célfüggvény: SiSjcijxij =z Min /Min. költség (24.58) Subject to xij ≥ 0,i = 1..n, j = 1..m /Ért.határ (24.59) Sixij =dj,j = 1..m/Összes beszállítás = kereslet, minden fogyasztónál(24.60) Sjxij =si,i = 1..n/Összes kiszállítás = készlet, minden raktárnál (24.61) • Ha a készletek és keresletek összege nem egyezik, fiktív fogyasztót/raktárat vezetünk be a különbséghez, akihez/akitől ingyen lehet szállítani, cij= 0 • Ha adott raktár nem szállíthat adott fogyasztónak, ezt cij= M=9999999 nagytiltótarifával(Prohibitive coefficient) kizárjuk
Egyszerű raktározási (Inventory) modell • Egy napolajgyár xt t = 1..T havi termeléseiből és yt havi raktárkészleteiből (indulókészlet y0 = 4Edb) történő st havi eladásokkal elégíti ki az erősen szezonális dt havi keresleteket. A termék havi egységnyi fedezetei pt, a raktár havi egységköltségei ct. • A 19Edb/hó havi termelési kapacitás évközben nem változtatható, qdb-oséveleji bővítése b=20$/db egységberuházási költségbe kerül. • Mennyi legyen a termelési kapacitás, mikor mennyit termeljünk, raktározzunk, és adjunk el, hogy a z összprofit maximális legyen? Célfüggvény: (Lásd: RaktarModell.xls) Stptst - Stctyt - bq = z Max /Fedezet - raktároz. - beruh. költség (24.62) Subject to xt, yt, st, q≥ 0,t = 1..T /Értékhatárok (24.63) yt-1+xt = st+ yt, t=1..T /Raktár forgalmi egyenletek: előző készlet + termelés = eladás + készletezés (24.64) xt≤ 19000+q, t=1..T /Term.kap.korlát(24.65) st≤ dt, t=1..T /Keresleti korlátok (24.66) • De mi van, ha a raktárkészlet tőkelekötési költségét is figyelembe akarjuk venni, ami időben kamatos kamattal, nem lineárisan nő?
Tőkelekötéses raktározási (Inventory with cost of capital) modell 1 A raktározás tőkeköltségének helyes számításához ismernünk kell néhány fogalmat a kamatozással kapcsolatban: • A bankok a hiteleik költségét mindig nt, t=1éves nominális kamatláb, % (Annual Nominal Interest) szintjén adják meg, ahol t = 1..T az évente megjelenő kamatperiódusok számát jelenti • Ehhez még hozzá kell adni a h1%-os kezelési költségeket, rendelkezésre tartási jutalékot, kockázati prémiumot, stb. (Handling/Liquidity/Risk Fee), hogy megkapjuk aTHM%-os teljes hitel mutatót (Annual Percentage, APR): THM = n1 + h1 (24.67) • Mivel a raktáron tartott áruink várhatóan a gazdaság átlagos inflációs rátájának megfelelően drágulnak, az i1inflációs ráta (Inflation Rate) nem számít a tőkeköltségek kiszámításakor, ezért ezt le kell vonnunk, hogy megkapjuk az r1éves reál kamatlábat (Annual Real Interest): r1 = THM - i1 (24.68) • A kamatráta (Interest Rate) a kamatláb plusz egy: 1 + r1 • A raktárkészlet frissítése általában jóval rövidebb periódusokban jelentkezik, mint egy év, ezért gondot jelent az éves kamatláb átszámítása havi, heti szintre. Ez a kamatos kamatozás miatt NEM t-vel történő osztással történik, még akkor sem ha néhány pénzintézet néhány esetben az egyszerűség kedvéért így számol (mindig az ügyfelek kárára tévedve), hanem t-edik gyökvonással a kamatráták közt: r12 ≠r1/12 (24.69) 1 + rt = (1+r1)1/t (24.70) • Az időperiódusokbeli tevékenységek tervezésekor tartsuk szem elött, hogy egy hónap átlagosan 4.33 hétből és – az ünnepeket is levonva - 20 munkanapból áll.
Tőkelekötéses raktározási (Inventory with cost of capital) modell 2 • Tegyük fel, hogy a napolajgyár r1=10% éves reálkamatlábú hitelből finanszíroza készleteit, ami havi szinten r12≈0.8%. Ez esetben fontos lesz nyomonkövetni, hogy egy adott termék mikor kerül be és ki a raktárból, mert a hosszabban elfekvő készlet részeket nemlineárisan növekvő kamatos kamatköltség terheli. • Ezt a szállítási modell ötlete alapján ábrázolhatjuk lineárisan: a raktár u = 1..T-1 időpontokból v = t+1..T jövőbeli időpontokba végez yuv „szállításokat”, és minden „útvonalat” más fuv raktározási+kamat egységköltség terhel: fuv = Stct + pv((1+r12)(v-u)-1) u=1..T-1, v=t+1..T, t=u..v (24.71) Célfüggvény: (Lásd: ) Stptst - SuSvfuvyuv - bq = z Max /Fedezet – raktározás minden időpontból minden jövőbeli időpontba - beruházás (24.72) Subject to xt, yuv, st, q≥ 0,t = 1..T, u=1..T-1, v=t..T /Értékhatárok (24.73) Suyut+xt = st+ Svytv, t=1..T, u=1..t-1, v=t..T /Raktár forgalmi egyenletek minden időpontra: összes előző időből érkező + termelés = eladás + összes jövőbe továbbított (24.74) xt≤ 19000+q, t=1..T /Termelési kapacitás korlát (24.75) st≤ dt, t=1..T /Keresleti korlátok (24.76)
Tőkelekötéses raktározási (Inventory with cost of capital) modell 3 • A TokeLekotModell.xls fájl a tőkelekötéses raktározási modellre mutat példát Excel Solverben:
Minimális költségű hálózati folyam (Minimal Cost Network Flow) modell • Egy úthálózatot leíró nem irányított gráf i = 1..n csomópontjaiban di +/- készletek/keresletek vannak, melyek összege nulla: Sidi = 0 (24.77) • A i, j = 1..n csomópontokat cij költségű útvonalak kötik össze, ahol xij>0 mennyiségeket szállíthatunk • Vigyük a készleteket fogyasztókhoz min.z költségen: Célfüggvény: (lásd: MKHFModell.xls) SiSjcijxij = z Min /Min. száll.ktg (24.78) Subject to xij≥ 0, i,j=1..n /Értékhatárok (24.79) Sixij – Sjxij = di, i=1..n /Városok forgalmi egyenletei: össz.kiszállítás – össz.beszállítás = készlet (24.80) • Ha az adott i,j útvonal nem létezik, nem hozunk létre xij változót, vagy a költsége cij=M nagy tiltótarifa. • Kétirányú utaknál lehet a költség asszimetrikus: cij≠cji, pl. emelkedő/lejtő miatt. Speciális este a legrövidebb út (Minimal Path) modell, ha d1= -dn, di= 0, i=2..n-1 Az Eszközök|Célérték|Beállítások|Nem negatív (Tools|Solver|Options|Assume non-negatíve) menüvel állíthatjuk egyszerre minden változóra a nem negativitást, így ez nem fogyaszt külön feltételeket katt katt
Keverési (Blending) modell • Egy vegyipari cég i = 1..n nyersanyagokat vásárolhat xi mennyiségben, ci egységköltségen, amelyek j = 1..m komponenst tartalmazhatnak vij≥ 0 részarányban, ahol: Sjvij=1(24.81) • Olyan terméket állítanak elő, amihez az egyes komponensekből minimálisan lj, maximálisan uj mennyiségre van szükség • Melyik nyersanyagból mennyit vegyünk, hogy a z összköltség minimális legyen? Célfüggvény: (lásd: KeveresiModell.xls) Sicixi = z Min /Min. beszerzési ktg.(24.82) Subject to xi≥ 0, i=1..n /Értékhatárok (24.83) Sivijxi≥lj, Sivijxi≤uj, j=1..m /Komponensek alsó/felső korlátai (24.84) • A Beszúrás|Nevek|Címke (Insert|Names|Label) menüvel olyan sor/oszlopcímke cellatartományokat adhatunk meg, ami alapján az Excel a nevesített cellatartomány-hivatkozások ban a sorokat/oszlopokat elnevezheti. • Ez megkönnyíti a Solver által készített munkalapokon az egyes változók azonosítását katt
Munkaerő felvétel h2=36h Kishíd építés h8=48h Alapásás h4=72h Alap falazás h10=48h Közmű fektetés h5=96h Tervezés h1=240h Anyag-beszerz. h3=48h Behajtó építés h7=48h Pince lejárat h9=10h Kerítés építés h6=96h Ütemezési (Scheduling, CPM, PERT) modell • Egy tevékenységi hálótervben i = 1..n műveletek valamilyen ti időpontokban kezdődhetnek és hi ideig tartanak • Az fij{0,1} bináris konstansok 1 értéke jelzi, ha az i-edik művelet előfeltétele a j = 1..n-edik műveletnek, 0 ha nem. Az 1. művelet minden másiknak előfeltétele, az n. műveletnek minden másik előfeltétele • Milyen ti időpontokban kezdődjenek a műveletek, hogy az 1. és n. művelet közti z idő minimális legyen? (Ld.: UtemezesiModell.xls) Célfüggvény: tn = z Min /Az átfutási időt minimalizáljuk (24.85) Subject to ti ≥ 0, i = 1..n/Értékhatár(24.86) fij(ti+ hi) ≤ tj,i,j = 1..n /Az előfeltétel előbb véget érjen, mint a művelet kezdése (24.87) • Sok alternatív optimum lehetséges!
A jövedelme 1 0.8 0.6 B Cég árai 0.4 0.2 Magas 0 -0.2 -0.4 -0.6 -0.8 Közepes -1 Alacsony Alacsony Közepes A Cég árai Magas Játékelméleti (Game Theory) modellek 1 • Játéknak (Game) nevezzük azt a modellt, ahol A, B független játékosok xi, i=1..n, illetve xj, j=1..m diszkrét stratégiák közül választhatnak, úgy hogy egymás választását előre nem ismerik és nem tudják befolyásolni, de a választott stratégiák előre ismert módon kihatnak a játékosok rAij, rBijeredményeire (Reward): rAij = fA(xi,xj), rBij = fB(xi,xj), i=1..n, xj, j=1..m (24.88) • Ha nem igaz, hogy rAij+rBij = 0, i=1..n, j=1..m akkor a játék nem 0 összegű (Non-zero Sum). Ilyen a fogoly-dilemma (Prisoner Dilemma): ha két külön fogvatartott rab nem vall egymásra, megúszhatják. Ha csak az egyik vall, a másik megjárja, de nem tudhatják mit tesz a másik. Ezért mind a ketten vallanak és rosszul járnak. Itt a kooperáció (Cooperation) jobb eredményt segít elérni. • Ez nem igaz a 0 összegű (Zero Sum) játéknál: amit az egyik elveszt, a másik megnyeri, ezért nincs kooperáció: • Egyensúlyi (Eqilibrium) a játék, ha van olyan (xi,xj) helyzet, amiből egyik játékosnak sem érdemes kilépni: Maxi(Minj(rAij)) = Mini(Maxj( rBij)) (24.89) Ez a nyeregpont (Saddle Point) az eredményfüggvényen • Ha ilyen nincs ilyen, akkor a játék nem egyensúlyi (Dis- equilibrium), körbeverés van (pl. a kő-olló-papír játékban): • Az első véletlen nyerő előnybe kerül, de azonos képességű játékosok nem tudják végleg legyőzni egymást. Hosszú távon szemet-szemért (Tit for Tat) alapon másolják egymás lépéseit, mert ha nagy a bizony- talanság és az információhiány, matematikailag bizonyíthatóan ez a legjobb túlélési stratégia
Nem egyensúlyi, nulla összegű játék kiegyensúlyozása LP modellel 1 24.2 PÉLDA: Az Al-Ibn-Ghazala és Sharik-Al-Bahar hadurak uralta két szomszédos sivatagi falunak csak egy kútja van, amiért megy a harc. Mindkét hadúr a következő egymást kizáró stratégiákat vetheti be: támadhat, elmenekülhet, egy döglött birka kútba dobásával járványt idézhet elő. A menekülésnél jobb a támadás, de azt meg lehet állítani járvánnyal, a járvány elől meg el lehet menekülni. Mit mennyire büntessen bombázással egy idegen hatalom, hogy nyugalom legyen? Al-Ibn-Ghazala Sharik-Al-Bahar
Sharik nyeresége 10000 Sharik-Al- 8000 6000 Bahar 4000 Al-Ibn-Ghazala 2000 Sharik nyeresége Döglött birka 0 -2000 Támad Menekül Döglött birka -4000 -6000 Támad 0 10000 -6000 -8000 Menekül -10000 Sharik-Al-Bahar Menekül -10000 0 6000 Támad Döglött birka 6000 -6000 0 Támad Menekül Döglött birka Al-Ibn-Ghazala Nem egyensúlyi, nulla összegű játék kiegyensúlyozása LP modellel 2 • A táblázatban látható az egyik hadúr nyeresége (a másiké pont az ellentettje, mivel a játék 0 összegű). A függvényt ábrázolva láthatjuk, hogy nincs nyeregpontja, tehát nem alakulhat ki egyensúly, és a kölcsönös megtorlások a végtelenségig folynak, szemet-szemért alapon. • Hacsak rá nem vesszük A, B játékosokat, hogy ne azonos valószínűséggel alkalmazzák a stratégiákat, hanem p’Ai, i = 1..n, p’Bj, j = 1..m valószínűségekkel (többet bombázunk arra a lépésre, aminek csökkenteni akarjuk a valószínűségét), ekkor a játék egyensúlyivá tehető. Az optimális valószínűségek egy LP modell segítségével számíthatók ki • Vonjuk le A játékos rAij nyereségeiből a minimumukat, hogy a minimális elem 0 legyen: r’Aij = rAij – Mini(Minj(rAij)), i = 1..n, j = 1..m (24.90) • Oldjuk meg a következő LP modellt: Célfüggvény: SipAi = z Max (24.91) Subject to pAi≥ 0, i = 1..n, pBj≥0, j = 1..m (24.92) Sir’AijpAi + pBj = 1 , j = 1..m (24.93) • A valószínűségek a következő módon határozhatók meg a (p*Ai, i = 1..n, p*Bj, i = 1..m, z*) optimumból: p’Ai = 1/z* × p*Ai, i = 1..n (24.94) p’Bj = 1/z* × p*Bj, j = 1..m (24.95)
Nem egyensúlyi, nulla összegű játék kiegyensúlyozása LP modellel 3 • A JatekElmeletiModell.xls fájl nem egyensúlyi, nulla összegű játék kiegyensúlyozására mutat példát Excel Solver segítségével:
A gyakorlat tartalma 23. Házi Feladat ellenőrzése: Demarkációs vonalak Az optimalizációs modellezés folyamata • Adatgyűjtés az optimalizációs problémával kapcsolatban • Matematikai modell felírása • Az optimalizációs szoftver kiválasztása • Matematikai modell lefordítása az adott modellezési nyelvre • Teszt futtatások • Visszacsatolás, a megoldás összevetése az eddigiekkel LP modellek • Termelési modell • Szállítási modell • Raktározási modellek • Egyszerű forgalmi egyenletes • Tőkelekötés nyomonkövetése • Minimális költségű hálózati folyam modell • Keverési modell • Ütemezési modell • Játékelméleti modell 24. Házi Feladat: MOL Rt. esettanulmány
24-1. Házi Feladat: MOL Rt. esettanulmány 1 Készítette: Handó Anett, 1998 A MOL Rt. finomítóiról • Magyarországon három nagy kőolaj-finomító létezik, a Zalai, a Tiszai és a Dunai. Ezek közül a Dunai és a Tiszai finomítók tartoznak a MOL Rt. tulajdonába. (A Zalai finomítóba beérkező kőolajból főleg bitumen és bitumen származékok állíthatóak elő.) • A Tiszai finomító nem üzemel egész évben csak a téli időszakban. Ennek az az oka, hogy ez a finomító főleg vegyipari benzint, gázolajat, és fűtőolajat állít elő, melyeknek télen van piaca, és ezeknek az anyagoknak a tárolási költségeik is relatíve magasak. • A fentiekből is következik, hogy a legnagyobb kapacitású finomító a Dunai finomító. Több mint 300 féle terméket állít elő, mind hazai értékesítésre, mind pedig exportra. Kőolajvezetékek • Az import orosz kőolaj a Barátság I-II vezetékeken érkezett sokáig hazánkba. A szocialista rendszerben a szállítási költség közel egyforma nagyságú volt a két vezetéken, de amióta Csehszlovákia felbomlott Csehországra és Szlovákiara, a Barátság-I vezeték már több országon halad keresztül. Az egyes országok természetesen ráteszik az alap szállítási díjra a saját extra díjaikat is, így az olaj szállítás ezen a vezetéken jelentősen megdrágult. A Barátság II vezetéken tehát olcsóbb a szállítási költség, és a Barátság I vezetéket szinte egyáltalán nem is használja Magyarország. • A Harmadik nagy vezeték, amelyen olaj érkezhet Magyarországra, az az Adria vezeték. Ennek ugyancsak magas a szállítási költsége, így ezt a vezetéket bár fenntartjuk, de nem használjuk. A fenntartás oka, az hogyha véletlenül valami konfliktus lenne Oroszországgal és az megtagadná az olaj szállítást, akkor még mindig van más lehetőség arra, hogy Magyarország ne maradjon olaj nélkül.
24-1. Házi Feladat: MOL Rt. esettanulmány 2 A Kőolajak feldolgozása • A kőolajak feldolgozási sebessége különböző. Ami hazai kőolaj termelődik azt mindenképpen fel kell dolgozni, mivel nincs megfelelő tároló kapacitás az országban rá. Ugyancsak nagyon fontos az, hogy hogyan szállítják a hazai kőolajat. Ennek a kőolajnak nagyon magas a paraffin tartalma, és ezáltal nem lehet csak önmagában szállítani. Gazolint kevernek hozzá, mely egy hígabb anyag, azért, hogy ne legyen az olaj olyan sűrű, mivel egy idő után eldugulna a vezeték. Nyáron kb. 10%-ot télen pedig 20% gazolint kevernek a hazai kőolajba, hogy azt problémamentesen szállítani lehessen. • Az orosz kőolajból, hogy mennyit dolgozzunk fel azt mi döntjük el, viszont nagyon fontos a pontos terv elkészítése. Egy évre előre kell körülbelül gondolkodni az import kőolajakkal kapcsolatban. Figyelembe kell venni, hogy mindig csak annyi kőolaj érkezzen e finomítóba, amennyit az fel tud dolgozni. Egy kis mennyiséget tud ugyan a Dunai finomító is raktározni, de a tartályok kellenek a már feldolgozott kőolajakból készült termékek számára. (A Dunai finomító területén 416 db tartály van 500 m3 -estől 80.000 m3-esig, és kb. 10.000 km hosszú csővezetékrendszer van csak a finomító terültén) A Syrius KFT • A Syrius KFT egy olajszármazékok továbbértékesítésével foglalkozó KFT, mely néhány éve már kapcsolatban áll a MOL Rt.-vel. A két vállalat legtöbbször olyan megállapodást köt, mely szerint a Syrius Kft-nek minden alapanyagból meg kell vásárolnia egy bizonyos mennyiséget, így a MOL Rt. alacsonyabb árakat tud biztosítani a számára. A Syrius Kft viszont meghatározza azt a mennyiséget, melyet maximálisan meg tud, vagy meg akar vásárolni. • Jelen példánkban egyes anyagokra nem határozott meg a KFT felső korlátokat, mely azt jelenti, hogy ezekből az anyagokból minden mennyiséget értékesíteni tud. Ezek az anyagok főleg fűtőolaj, illetve gázolaj komponensek, melynek nagyobba piaca télen
24-1. Házi Feladat: MOL Rt. esettanulmány 3 Az olajeladási és -vásárlási probléma • Ismert két vállalat igényrendszere. Az egyik a MOL Rt. aki értékesíteni szeretné finomítóiban feldolgozott kőolajakat, a másik pedig a Syrius KFT, aki vásárolni szeretne bizonyos kőolajszármazékokat. A MOL Rt. jelen pillanatban 10 különböző olajat dolgoz fel, melynek az egység árai különbözőek, az egyes olajak rendelkezésre álló mennyisége, pedig korlátozott. A MOL Rt. nem adja el az egyes kőolajszármazékokat külön-külön, mert a népszerűtlen termékek ("salakanyagok") felhalmozódnának azáltal, hogy szinte senki sem vásárolná meg őket, míg a fontosabb anyagokból (benzin, gázolaj komponensek...) nem tudna elegendő mennyiséget előállítani. Ezenkívül alsó korlátokat is állít az egyes származékokból vásárolt mennyiségekre, tehát mekkora az a minimális mennyiség, melyet meg kell, hogy vásároljon valaki. Ez azért fontos, mert másképpen nem lenne gazdaságos előállítani egy származékot. A cél: • A Syrius KFT oldaláról nézve pedig az a kérdés, hogy melyik olajból mennyit vásároljon, úgy hogy minimálisak legyenek a költségei. A MOL Rt. feltételeit elfogadta, tehát azt, hogy mindegyik termékből kell vásárolnia legalább egy adott mennyiséget, viszont a KFT-nek is adottak a felső korlátai, amit meg akar, vagy meg tud vásárolni. A döntés célja, tehát egy optimális megoldás megtalálása, mely mindkét fél igényeit kielégíti. Adatok: • A 24.12 Táblázat A Dunai Finomító által feldolgozott 10 kőolaj hozamstruktúráit mutatja • A 24.13 Táblázat összefoglalva mutatja, hogy mennyi kőolajszármazékra lenne szüksége maximálisan a Syrius Kft-nek, és mekkora az a mennyiség, mely alatt a MOL Rt. nem ad el:
24-1. Házi Feladat: MOL Rt. esettanulmány 4 24.12 Táblázat: A Dunai Finomító által feldolgozott 10 kőolaj hozamstruktúrái
24-1. Házi Feladat: MOL Rt. esettanulmány 5 24.13 Táblázat: Kereslet és minimálisan eladható mennyiségek Feladatok: • A, Írja fel a probléma LP modelljét, indexes formában, Wordben vagy PowerPointban! Használja a megfelelő színkódokat a modell részeinek jelölésére! (1p) • B, Készítsen egy excel munkalapot a megfelelő formázásokkal a modellről! (2p) • C, Határozza meg az optimális megoldást Excel Solver segítségével! (1p) • D, Értelmezze szövegesen az optimális megoldást egy bekezdés terjedelemben! (1p) A megoldás: 24-1Megoldas.xls