Primerjava algoritmov linearnega programiranja s pomočjo sistema ALGator

Podobni dokumenti
UNIVERZA V LJUBLJANI FAKULTETA ZA MATEMATIKO IN FIZIKO Katja Ciglar Analiza občutljivosti v Excel-u Seminarska naloga pri predmetu Optimizacija v fina

Učinkovita izvedba algoritma Goldberg-Tarjan Teja Peklaj 26. februar Definicije Definicija 1 Naj bo (G, u, s, t) omrežje, f : E(G) R, za katero v

resitve.dvi

RAM stroj Nataša Naglič 4. junij RAM RAM - random access machine Bralno pisalni, eno akumulatorski računalnik. Sestavljajo ga bralni in pisalni

Osnove matematicne analize 2018/19

Microsoft Word - UP_Lekcija04_2014.docx

Slide 1

FGG14

Ime in priimek: Vpisna št: FAKULTETA ZA MATEMATIKO IN FIZIKO Oddelek za matematiko Verjetnost Pisni izpit 5. februar 2018 Navodila Pazljivo preberite

'Kombinatoricna optimizacija / Lokalna optimizacija'

Turingov stroj in programiranje Barbara Strniša Opis in definicija Definirajmo nekaj oznak: Σ abeceda... končna neprazna množica simbolo

FGG13

EKVITABILNE PARTICIJE IN TOEPLITZOVE MATRIKE Aleksandar Jurišić Politehnika Nova Gorica in IMFM Vipavska 13, p.p. 301, Nova Gorica Slovenija Štefko Mi

Strojna oprema

5 SIMPLICIALNI KOMPLEKSI Definicija 5.1 Vektorji r 0,..., r k v R n so afino neodvisni, če so vektorji r 1 r 0, r 2 r 0,..., r k r 0 linearno neodvisn

Vaje: Matrike 1. Ugani rezultat, nato pa dokaži z indukcijo: (a) (b) [ ] n 1 1 ; n N 0 1 n ; n N Pokaži, da je množica x 0 y 0 x

MATLAB programiranje MATLAB... programski jezik in programersko okolje Zakaj Matlab? tipičen proceduralni jezik enostaven za uporabo hitro učenje prir

Microsoft Word - A-3-Dezelak-SLO.doc

6.1 Uvod 6 Igra Chomp Marko Repše, Chomp je nepristranska igra dveh igralcev s popolno informacijo na dvo (ali vec) dimenzionalnem prostoru

Urejevalna razdalja Avtorji: Nino Cajnkar, Gregor Kikelj Mentorica: Anja Petković 1 Motivacija Tajnica v posadki MARS - a je pridna delavka, ampak se

C:/Users/Matevž Èrepnjak/Dropbox/FKKT/testi in izpiti/ /IZPITI/FKKT-februar-14.dvi

Ime in priimek: Vpisna št: FAKULTETA ZA MATEMATIKO IN FIZIKO Oddelek za matematiko Statistika Pisni izpit 6. julij 2018 Navodila Pazljivo preberite be

Microsoft Word - avd_vaje_ars1_1.doc

3. Metode, ki temeljijo na minimalnem ostanku Denimo, da smo z Arnoldijevim algoritmom zgenerirali ON bazo podprostora Krilova K k (A, r 0 ) in velja

Univerza v Mariboru Fakulteta za naravoslovje in matematiko Oddelek za matematiko in računalništvo Enopredmetna matematika IZPIT IZ VERJETNOSTI IN STA

FAKULTETA ZA STROJNIŠTVO Matematika 2 Pisni izpit 9. junij 2005 Ime in priimek: Vpisna št: Zaporedna številka izpita: Navodila Pazljivo preberite bese

Microsoft Word - M docx

Kazalo 1 DVOMESTNE RELACIJE Operacije z dvomestnimi relacijami Predstavitev relacij

1. izbirni test za MMO 2018 Ljubljana, 16. december Naj bo n naravno število. Na mizi imamo n 2 okraskov n različnih barv in ni nujno, da imam

resitve.dvi

Teorija kodiranja in kriptografija 2013/ AES

Matematika Diferencialne enačbe prvega reda (1) Reši diferencialne enačbe z ločljivimi spremenljivkami: (a) y = 2xy, (b) y tg x = y, (c) y = 2x(1 + y

Ime in priimek: Vpisna št: FAKULTETA ZA MATEMATIKO IN FIZIKO Oddelek za matematiko Statistika Pisni izpit 31. avgust 2018 Navodila Pazljivo preberite

CpE & ME 519

ANALITIČNA GEOMETRIJA V RAVNINI

Vrste

PRIPRAVA NA 1. Š. N.: KVADRATNA FUNKCIJA IN KVADRATNA ENAČBA 1. Izračunaj presečišča parabole y=5 x x 8 s koordinatnima osema. R: 2 0, 8, 4,0,,0

Brownova kovariancna razdalja

7. VAJA A. ENAČBA ZBIRALNE LEČE

Optimizacija z roji delcev - Seminarska naloga pri predmetu Izbrana poglavja iz optimizacije

predstavitev fakultete za matematiko 2017 A

Poglavje 3 Reševanje nelinearnih enačb Na iskanje rešitve enačbe oblike f(x) = 0 (3.1) zelo pogosto naletimo pri reševanju tehničnih problemov. Pri te

REŠEVANJE DIFERENCIALNIH ENAČB Z MEHANSKIMI RAČUNSKIMI STROJI Pino Koc Seminar za učitelje matematike FMF, Ljubljana, 25. september 2015 Vir: [1] 1

BYOB Žogica v vesolju Besedilo naloge Glavna ideja igre je paziti, da žoga ne pade na tla igralne površine, pri tem pa zbrati čim več točk. Podobno ig

Delavnica Načrtovanje digitalnih vezij

Poročilo za 1. del seminarske naloge- igrica Kača Opis igrice Kača (Snake) je klasična igrica, pogosto prednaložena na malce starejših mobilnih telefo

2. izbirni test za MMO 2017 Ljubljana, 17. februar Naj bosta k 1 in k 2 dve krožnici s središčema O 1 in O 2, ki se sekata v dveh točkah, ter

4.Racionalna števila Ulomek je zapis oblike. Sestavljen je iz števila a (a ), ki ga imenujemo števec, in iz števila b (b, b 0), ki ga imenujemo imenov

Datum in kraj

C:/Users/Matevž Èrepnjak/Dropbox/FKKT/TESTI-IZPITI-REZULTATI/ /Izpiti/FKKT-avgust-17.dvi

LaTeX slides

Naloge iz kolokvijev Analize 1 (z rešitvami) E-UNI, GING, TK-UNI FERI dr. Iztok Peterin Maribor 2009 V tej datoteki so zbrane naloge iz kolokvijev za

Microsoft PowerPoint _12_15-11_predavanje(1_00)-IR-pdf

C:/Users/Matevž Èrepnjak/Dropbox/FKKT/TESTI-IZPITI-REZULTATI/ /Izpiti/FKKT-junij-17.dvi

Diapozitiv 1

Matematika 2

Microsoft Word - ELEKTROTEHNIKA2_ junij 2013_pola1 in 2

Microsoft PowerPoint - Java_spremenljivke

Osnove statistike v fizični geografiji 2

rm.dvi

DN5(Kor).dvi

Mere kompleksnih mrež (angl. Network Statistics) - Seminarska naloga pri predmetu Izbrana poglavja iz diskretne matematike

Microsoft Word - CNC obdelava kazalo vsebine.doc

GHOSTBUSTERS navodila za učitelje O PROJEKTU S tem projektom se učenci sami naučijo izdelati igro. Ustvariti morajo več ikon (duhcov ali kaj drugega)

Matematika II (UN) 1. kolokvij (13. april 2012) RE ITVE Naloga 1 (25 to k) Dana je linearna preslikava s predpisom τ( x) = A x A 1 x, kjer je A

GeomInterp.dvi

11. Navadne diferencialne enačbe Začetni problem prvega reda Iščemo funkcijo y(x), ki zadošča diferencialni enačbi y = f(x, y) in začetnemu pogo

Poslovilno predavanje

Microsoft Word - M docx

4. tema pri predmetu Računalniška orodja v fiziki Ljubljana, Grafi II Jure Senčar

Rešene naloge iz Linearne Algebre

ŠTEVCI PROMETA IN NJIHOVA UPORABA ZA NAMENE STATISTIK ČRT GRAHONJA

M

PREDMETNI KURIKULUM ZA RAZVOJ METEMATIČNIH KOMPETENC

Delavnica Načrtovanje digitalnih vezij

STAVKI _5_

Microsoft Word - Analiza rezultatov NPZ matematika 2018.docx

Ime in priimek

Document ID / Revision : 0519/1.3 ID Issuer System (sistem izdajatelja identifikacijskih oznak) Navodila za registracijo gospodarskih subjektov

N

FGG02

ARS1

glava.dvi

COBISS3/Medknjižnična izposoja

Naloge 1. Dva električna grelnika z ohmskima upornostma 60 Ω in 30 Ω vežemo vzporedno in priključimo na idealni enosmerni tokovni vir s tokom 10 A. Tr

H-Razcvet

Sestavljanje in re\unhbox \bgroup \let \unhbox \setbox \hbox {s\global \mathchardef \spacefactor }\ac

Ravninski grafi Tina Malec 6. februar 2007 Predstavili bomo nekaj osnovnih dejstev o ravninskih grafih, pojem dualnega grafa (k danemu grafu) ter kako

Avtomatizirano modeliranje pri celostnem upravljanju z vodnimi viri

Microsoft Word - Seštevamo stotice.doc

Linearna algebra - povzetek vsebine Peter Šemrl Jadranska 21, kabinet 4.10 Izpitni režim: Kolokviji in pisni izpiti so vsi s

(Microsoft PowerPoint - vorsic ET 9.2 OES matri\350ne metode 2011.ppt [Compatibility Mode])

Osnove verjetnosti in statistika

Numeri na analiza - podiplomski ²tudij FGG doma e naloge - 1. skupina V prvem delu morate re²iti toliko nalog, da bo njihova skupna vsota vsaj 10 to k

Priloga 1: Pravila za oblikovanje in uporabo standardiziranih referenc pri opravljanju plačilnih storitev Stran 4012 / Št. 34 / Uradni lis

resitve.dvi

RAČUNALNIŠKA ORODJA V MATEMATIKI

Bellman-Fordov algoritem za iskanje najkraj²ih poti Alenka Frim 19. februar 2009 Popravek 25. februar 2009 Imamo usmerjen graf G z uteºmi na povezavah

PowerPointova predstavitev

Transkripcija:

Univerza v Ljubljani Fakulteta za računalništvo in informatiko Fakulteta za matematiko in fiziko Andreja Perčič Primerjava algoritmov linearnega programiranja s pomočjo sistema ALGator DIPLOMSKO DELO INTERDISCIPLINARNI UNIVERZITETNI ŠTUDIJSKI PROGRAM PRVE STOPNJE RAČUNALNIŠTVO IN MATEMATIKA Mentor: doc. dr. Tomaž Dobravec Ljubljana, 2020

Copyright. Rezultati diplomske naloge so intelektualna lastnina avtorja in Fakultete za računalništvo in informatiko Univerze v Ljubljani. Za objavo in koriščenje rezultatov diplomske naloge je potrebno pisno privoljenje avtorja, Fakultete za računalništvo in informatiko ter mentorja. Besedilo je oblikovano z urejevalnikom besedil L A TEX.

Fakulteta za računalništvo in informatiko izdaja naslednjo nalogo: Tematika naloge: V diplomskem delu se osredotočite na problem linearnega programiranja. Opišite teoretično ozadje problema ter pogoste pristope, ki se uporabljajo za njegovo reševanje. Za natančnejšo analizo izberite dva izmed opisanih pristopov in ju implementirajte v programskem jeziku Java. V sistemu AL- Gator izdelajte projekt za reševanje problemov linearnega programiranja in s pomočjo premišljeno izbranih testnih množic opravite primerjalno analizo kakovosti izbranih pristopov.

Matjažu

Kazalo Povzetek Abstract 1 Uvod 1 1.1 Opis področja........................... 1 1.2 Namen dela............................ 2 1.3 Pregled dela............................ 2 1.4 Sorodni problemi......................... 3 2 Zgodovina 5 2.1 Razvoj algoritmov........................ 5 2.2 Časovna zahtevnost........................ 6 3 Teoretično ozadje 7 3.1 Osnovna formulacija LP..................... 7 3.2 Konveksna množica dopustnih rešitev.............. 11 4 Algoritmi 15 4.1 Simpleksna metoda........................ 15 4.2 Metode notranjih točk...................... 21 4.2.1 Afino skaliranje...................... 22 4.2.2 Elipsoidna metoda.................... 27 5 Integracija v sistem ALGator 31

5.1 ALGator.............................. 31 5.2 Implementirani algoritmi..................... 31 5.3 Opis datotek sistema ALGator.................. 31 5.4 Vhodni podatki.......................... 33 6 Sklepne ugotovitve 45 Literatura 48

Seznam uporabljenih kratic kratica angleško slovensko LP linear program linearni program ILP integer linear programming celoštevilsko linearno programiranje MILP mixed integer linear programming mešano linearno programiranje

Povzetek Naslov: ALGator Primerjava algoritmov linearnega programiranja s pomočjo sistema Avtor: Andreja Perčič Problem linearnega programiranja se v praksi pojavlja na številnih področjih. Denar, čas, surovine, prostor in podobne dobrine so pogosto omejene, hkrati pa z njimi želimo optimalno ravnati, da bi povečali svoj dobiček in zmanjšali stroške. Če se zahteve lahko zapišejo v linearni obliki, nam do optimizacije stroškov pomagajo algoritmi linearnega programiranja. V sklopu diplomskega dela smo v sistemu ALGator implementirali dva algoritma za reševanje linearnih programov. Simpleksni algoritem, ki se v praksi najpogosteje uporablja ter afino skaliranje, ki optimalno rešitev išče v notranjosti dopustnega območja. Ključne besede: linearno programiranje, optimizacija, ALGator.

Abstract Title: Comparison of linear programming algorithms using the ALGator system Author: Andreja Perčič The problem of linear programming is often seen in many industries. Money, time, space and other resources are often limited, while we want to optimaly handle them to maximize our profit and minimize our costs. If we can write the constraints in a linear form, linear programming algorithms can help us get the optimal profit. In this diploma we implemented two linear programming algorithms in the ALGator system. The simplex algorithm, which is most often used in practice, and affine scaling which moves in the interior of the feasible region, to get to the optimal solution. Keywords: linear programming, optimization, ALGator.

Poglavje 1 Uvod 1.1 Opis področja Nekateri optimizacijski problemi se matematično formulirajo kot problemi vezanih ekstremov. Splošni problem vezanega ekstrema formuliramo takole: določiti je treba ekstreme kriterijske funkcije več neodvisnih spremenljivk tako, da zadoščajo predpisanim pogojnim enačbam. Med problemi vezanih ekstremov izstopajo tisti, pri katerih je kriterijska funkcija linearna glede na vse spremenljivke, in pri katerih zadoščajo spremenljivke, ki lahko zavzemajo samo nenegativne vrednosti, pogojnim enačbam, ki so tudi linearne glede na vse spremenljivke. Problemi tega tipa so predmet linearnega programiranja. Najpogosteje se nanašajo na optimalno uporabo ali razporeditev kakršnihkoli sredstev, ki so na voljo le v omejenih količinah. Ker so številni problemi, s katerimi se srečujemo v gospodarstvu in tehniki, prav take vrste, se je praktična uporabnost linearnega programiranja kaj kmalu izkazala na številnih gospodarskih področjih, zlasti tistih, ki zadevajo podjetja [1]. 1

2 Andreja Perčič 1.2 Namen dela Namen diplomske naloge je bil implementirati problem linearnega programiranja v sistem ALGator. Implementirali smo dva najbolj znana algoritma, simpleksno metodo in afino skaliranje. Sistem ALGator se razvija, s tem ko se dodajajo vedno novi problemi s svojimi pripadajočimi algoritmi. Glavni namen sistema ALGator je, da bi nekdo, ki razvije nov algoritem, lahko primerjal svojo implementacijo z že uveljavljenimi algoritmi za reševanje določenega problema. Vsi algoritmi, znotraj modula linearnega programiranja, ki smo ga dodali v sistem ALGator, se testirajo na enaki množici testnih primerov, ki smo jih prav tako dodali v sklopu diplomskega dela. 1.3 Pregled dela Diplomsko delo sestavlja šest poglavij. V uvodu na splošno predstavimo področje, kjer se linearno programiranje uporablja, in na kratko opišemo poglavja, ki jih bomo obravnavali. V drugem poglavju pregledamo kratko zgodovino linearnega programiranja in glavne znanstvenike, ki so pripomogli k razvoju področja in dokazovanju časovne zahtevnosti algoritmov za reševanje linearnih programov. V tretjem poglavju definiramo glavne pojme, ki se uporabljajo v linearnem programiranju. Predstavimo primer kmetije, ki ga formuliramo kot linearni program z neenačbami, v matrični obliki in grafično. Nadaljujemo z nekaj osnovne teorije linearnega programiranja. Definiramo pojem konveksne množice, ki je pri linearnem programiranju območje, kjer ležijo vse dopustne rešitve. Podamo osnovni izrek linearnega programiranja, ki pravi, da v konveksni množici maksimum in minimum linearne funkcije ležita v eni od njegovih ekstremnih točk in ne v notranjosti. Izrek je teoretična osnova simpleksni metodi, ki ekstrem kriterijske funk-

Diplomska naloga 3 cije linearnega programa išče samo med ekstremnimi točkami dopustnega območja. Metodo predstavimo v četrtem poglavju. Izvajanje algoritma tudi ponazorimo na primeru kmetije. Poleg simpleksne metode v četrtem poglavju predstavimo še dve metodi notranjih točk, ki optimalno rešitev kriterijske funkcije iščeta z zaporednimi koraki v notranjosti dopustnega območja. To sta afino skaliranje in elipsoidna metoda. V naslednjem poglavju opišemo integracijo algoritmov v sistem ALGator. Opišemo sam sistem, kaj omogoča in kako vanj dodamo kodo algoritma in testne primere. V šestem poglavju si na začetku ogledamo splošno obliko vhodnih podatkov, zapis MPS, ki se najpogosteje uporablja za zapis linearnih programov. V naslednjem podpoglavju pa predstavimo rezultate meritev implementiranih algoritmov, ki smo jih dobili iz sistema ALGator. V zadnjem, sedmem poglavju na splošno pregledamo rezultate meritev in zaključimo s sklepnimi ugotovitvami, kateri implementirani algoritem se je na naših testnih primerih izkazal najbolje. 1.4 Sorodni problemi Pri naših testih smo se osredotočili na linearno programiranje, kjer je rezultat v obliki realnih števil. Obstajajo pa tudi problemi linearnega programiranja, ki za obliko rezultata zahtevajo drugačne, strožje pogoje npr. zahteve po celoštevilskih rešitvah. Čeprav so zelo podobni navadnim linearnim programom, moramo zaradi dodatnih zahtev uporabiti drugačne algoritme, ki imajo v splošnem tudi večjo časovno zahtevnost. V številnih problemih optimizacije se pojavlja zahteva po celoštevilskih rešitvah. Ne moremo npr. prodati 0.5 avtomobila, če jih ne prodajamo po delih. Takšni problemi spadajo v celoštevilsko linearno programiranje, ki ga s tujko označujemo kot ILP(integer linear programming). Takšni problemi so težji in sodijo v skupino NP-težkih problemov, za katere ne poznamo natančnih

4 Andreja Perčič algoritmov polinomske časovne zahtevnosti. Na prvi pogled bi se problem dalo rešiti tako, da bi sprostili zahtevo po celih številih, problem rešili npr. s simpleksno metodo, na koncu pa rešitev zaokrožili na najbližje celo število. Vendar take rešitve niso nujno optimalne, lahko tudi sploh ne ležijo več v dopustnem območju. Zato je treba za celoštevilsko linearno programiranje uporabiti druge algoritme. Najbolj znani sta metoda Razveji in omeji in Gomoryjeva metoda rezanja ravnine. Pri nekaterih problemih se le za neko podmnožico spremenljivk zahteva, da so celoštevilske, preostalim dovolimo realno vrednost. Tudi takšni problemi so NP-težki, saj so še bolj splošni kot ILP problemi. Primer bi bil npr. obsežnejši primer optimizacije kmetije, kjer bi prodajali koruzo v kilogramih, živali pa bi kmetijo zapustile žive, torej bi se zanje zahtevalo celo število. Reševanju takšne oblike problema pravimo mešano linearno programiranje oz. s tujko MILP (mixed integer programming). 0-1 linearni programi so optimizacijski problemi, kjer vsaka spremenljivka lahko zavzame le vrednosti 0 ali 1. Primer je npr. problem nahrbtnika, kjer lahko z določeno množico predmetov zapolnimo omejeno prostornino nahrbtnika. Vsak predmet ima svojo ceno, vrednost nahrbtnika želimo maksimizirati, predmetov pa ne smemo rezati. Torej, tu se za vsak predmet odločimo, ali ga v nahrbtnik damo (vrednost 1) ali ne (vrednost 0). Tudi 0-1 LP problemi so NP-težki [7, 29].

Poglavje 2 Zgodovina 2.1 Razvoj algoritmov Po svojem zgodovinskem razvoju je linearno programiranje razmeroma mlada panoga uporabne matematike, saj segajo njegovi začetki v čas neposredno pred drugo svetovno vojno. Prve formulacije problemov linearnega programiranja in prve metode reševanja so iz leta 1939 v knjigi ruskega matematika Leonida Kantoroviča o organizaciji in planiranju proizvodnje [4]. Neodvisno od ruskih matematikov so linearno programiranje razvijali na zahodu zlasti ameriški znanstveniki. Kot prvi med njimi je leta 1941 Frank Hitchcock objavil študijo o transportnem problemu linearnega programiranja [12]. Leta 1947 je George Dantzig odkril splošno algebrajsko metodo za reševanje linearnih programov, imenovano metoda simpleksov. Za prakso pomembni problemi linearnega programiranja morajo upoštevati številne okoliščine in zahtevajo pri numeričnem reševanju toliko računanja, da ga je mogoče praktično opraviti le z računalnikom. Zato ni naključje, da se je linearno programiranje zares uveljavilo šele tedaj, ko je bilo mogoče za numerično računanje uporabiti elektronske računalnike. Pomemben mejnik je leto 1952, ko je bil prvič izdelan program za elektronsko reševanje problemov 5

6 Andreja Perčič linearnega programiranja po metodi simpleksov [1]. 2.2 Časovna zahtevnost Dolgo časa ni bilo jasno, ali linearni programi sodijo v razred težkih problemov z nepolinomskimi časovnimi zahtevnostmi ali ne. Leta 1970 sta Victor Klee in George Minty našla primer, ki je pokazal, da je uporaba metode simpleksov eksponentne časovne zahtevnosti. Leta 1978 je ruski matematik Leonid Khachiyan s pomočjo elipsoidne metode dokazal, da sodi linearno programiranje v razred problemov s polinomsko časovno zahtevnostjo. Elipsoidno metodo so sicer leta 1972 iznašli Naum Shor, Arkady Nemirovsky in David Yudin. Nekaj let kasneje, leta 1984, je Narendra Karmarkar napisal Karmarkarjev algoritem, ki temelji na metodi notranjih točk. Z njim mu je uspelo ponovno dokazati polinomsko časovno zahtevnost reševanja linearnih programov. Za razliko od elipsoidne metode je Karmarkarjev algoritem uporaben tudi v praktičnih linearnih problemih. Še danes ostaja odprto vprašanje, ali je mogoče najti algoritem za reševanje linearnih problemov, ki bi bil krepke polinomske časovne zahtevnosti (število korakov, ki jih potrebuje algoritem za reševanje problema, je odvisno samo od števila spremenljivk in omejitev, ne pa tudi od velikosti podatkov) [13].

Poglavje 3 Teoretično ozadje 3.1 Osnovna formulacija LP Splošni problem linearnega programiranja v standardni obliki zapišemo takole: iščemo tako vrednost spremenljivke x = (x 1,..., x n ), ki zadošča pogojem nenegativnosti: x 1 0,..., x n 0 in linearnim omejitvam: a 11 x 1 + a 12 x 2 +... + a 1n x n b 1 a 21 x 1 + a 22 x 2 +... + a 2n x n b 2...... a m1 x 1 + a m2 x 2 +... + a mn x n b m tako da kriterijska funkcija: f(x 1,..., x n ) = c 1 x 1 +... + c n x n v njej doseže maksimum. Pri tem sta n in m poljubni naravni števili, koeficienti a ij in c j pri i = 1... m, j = 1... n, poljubna realna števila, števila b i pri i = 1... m, pa poljubna 7

8 Andreja Perčič nenegativna števila. Pogojne neenačbe sestavljajo sistem neodvisnih in neprotislovnih neenačb. V standardni obliki iščemo maksimum kriterijske funkcije. Če želimo poiskati minimum, faktorjem kriterijske funkcije spremenimo predznak, drugače pa je problem ekvivalenten [1, 14]. Linearni program lahko zapišemo tudi v matrični obliki: max c T x Ax b x 0 kjer je c 1 c 2 c = vektor koeficientov kriterijske funkcije,. c n a 11 a 12... a 1n a 21 a 22... a 2n A =. matrika sistema neenakosti, ki predstavljajo omejitve,..... a m1 a m2... a mn x 1 x n x 2 x = iskan vektor, ki ima vse svoje člene nenegativne in. b 1 b m b 2 b = vektor prostih členov neenačb..

Diplomska naloga 9 Ponazorimo na primeru. Želimo optimizirati zaslužek kmetije. Kmet ima 300 arov zemlje in želi posaditi pšenico in koruzo. Da vzgojimo en ar pšenice, porabimo 275 e, za en ar koruze pa 140 e. Kmet ima za kritje stroškov na voljo 60.000 e. Vsak ar posajene pšenice obrodi 120 kg pridelka, ar koruze pa 30 kg pridelka. Kmet ima sklenjeno pogodbo za prodajo pšenice po ceni 3 e za kg in prodajo koruze po 6 e za kg. Prodaja se izvede šele nekaj mesecev po žetvi, zato mora kmet pšenico in koruzo hraniti v skladišču, ki ima maksimalno kapaciteto 24.000 kg. Želimo maksimizirati dobiček kmeta. Najprej izračunamo dobiček pšenice in koruze na ar. Za pšenico porabimo 275 e, pridelek je vreden 120*3 = 360 e. Dobiček pšenice je tako 360-274 = 85 e. Za koruzo porabimo 140 e, pridelek je vreden 30*6 = 180 e. Dobiček koruze je 180-140 = 40 e. Označimo x 1 = število arov posejane pšenice, x 2 = število arov posejane koruze. Iskali bomo maksimum kriterijske funkcije f = 85x 1 + 40x 2 Omejitev kapacitete skladišča nam da prvo omejitev: 120x 1 + 30x 2 24.000 Omejeno število začetnih sredstev drugo: 275x 1 + 140x 2 60.000 Omejena prostornina zemlje pa tretjo: x 1 + x 2 300 Pogoji negativnosti veljajo, ker ne moremo posaditi negativnega števila arov pšenice ali koruze [15].

10 Andreja Perčič Če omejitve zapišemo v matrični obliki, imamo: [ ] 120 30 85 c = A = 40 275 140 x = 1 1 [ x1 x 2 ] 24000 b = 60000 300 Vse omejitve lahko predstavimo tudi v grafični obliki (glej sliko 3.1). Točke na robu in znotraj sivega območja zadoščajo vsem pogojem, rečemo jim tudi dopustne rešitve linearnega programa. Iščemo torej tisto točko v dopustnem območju, ki optimizira kriterijsko funkcijo. Slika 3.1: Dopustne rešitve ležijo znotraj sivega območja in na njegovih mejah

Diplomska naloga 11 3.2 Konveksna množica dopustnih rešitev Kot vidimo na sliki 3.1, dopustne rešitve linearnega programa ležijo na mnogokotniku, omejenem z abciso in ordinato (oz. x in y osjo) spodaj in linearnimi premicami omejitev zgoraj. Posledica tega je, da je dopustno območje linearnega programa konveksna množica. To pomeni, da če vzamemo dve poljubni točki v množici in med njima potegnemo premico, tudi vse točke na njej ležijo v konveksni množici. Za lažjo predstavo si oglejmo sliko 3.2. Slika 3.2: S1 predstavlja nekonveksno množico, S2 pa konveksno množico [17] Osnovni izrek linearnega programiranja pravi, da sta minimum in maximum linearne funkcije na konveksnem mnogokotniku v eni izmed njegovih ekstremnih točk, torej na eni izmed točk na zunanjem robu mnogokotnika. V primeru, da je ekstrem dosežen v dveh točkah, je dosežen tudi na celi premici med njima. Izrek je pomemben pri simpleksni metodi, kjer rešitve, zaradi izreka, lahko iščemo samo med točkami na robu dopustnega območja in ne v notranjosti [1, 18]. V splošnem glede oblike dopustnega območja ločimo tri možnosti. Množica dopustnih rešitev je prazna. V tem primeru rečemo, da je problem nedopusten in linearni program nima nobene rešitve. To se zgodi v primeru, ko pogojne neenačbe sestavljajo protisloven sistem, na primer tako, kot je prikazano na sliki 3.3.

12 Andreja Perčič Slika 3.3: Problem je nedopusten, nimamo nobene rešitve. Množica dopustnih rešitev je neomejena. V tem primeru je vrednost kriterijske funkcije lahko poljubno velika. Pri praktično pomembnih problemih linearnega programiranja ta možnost nima pravega smisla. Primer neomejenega območja je prikazan na sliki 3.4. Slika 3.4: Sivo označeno območje je neomejeno, rešitev je lahko poljubno velika. Množica dopustnih rešitev je neprazna in omejena konveksna množica. V tem primeru pravimo, da je problem dopusten in omejen. Pri praktično pomembnih problemih linearnega programiranja se srečamo s to možnostjo. Primer takšnega območja je prikazan na sliki 3.5.

Diplomska naloga 13 Slika 3.5: Sivo označeno območje dopustnih rešitev, ki je omejena konveksna množica.

14 Andreja Perčič

Poglavje 4 Algoritmi 4.1 Simpleksna metoda Simpleksna metoda rešuje linearni program v obliki: max c T x Ax = b Na primeru kmetije pokažimo izvajanje simpleksne metode. Spomnimo se podatkov: f = 85x 1 + 40x 2 120x 1 + 30x 2 24.000 275x 1 + 140x 2 60.000 x 1 + x 2 300 Ker v pogojih želimo enakosti, trenutno pa imamo neenakosti, bomo dodali dopolnilne spremenljivke na levi strani neenačb. Enačbe skupaj s kriterijsko funkcijo tvorijo simpleksno tabelo. Vrstico, v kateri je na začetku kriterijska funkcija, imenujemo funkcional. Dopolnilne spremenljivke so v začetni simpleksni tabeli na levi strani in jih imenujemo bazne spremenljivke, preostale 15

16 Andreja Perčič spremenljivke na desni pa nebazne. Oboje morajo imeti vrednost večjo ali enako 0. Slovar je dopusten, če so vsi prosti členi na desni strani nenegativni. Vsak dopusten slovar ima bazno dopustno rešitev, pri kateri imajo bazne spremenljivke vrednost prostih členov, nebazne pa vrednost 0. Dopolnjen problem ima obliko: 120x 1 + 30x 2 + x 3 = 24.000 275x 1 + 140x 2 + x 4 = 60.000 x 1 + x 2 + x 5 = 300 z = 85x 1 + 40x 2 Izrazimo bazne spremenljivke z nebaznimi, dobimo 1. simpleksno tabelo: x 3 = 24.000 120x 1 30x 2 x 4 = 60.000 275x 1 140x 2 x 5 = 300 x 1 x 2 z = 85x 1 + 40x 2 V naslednjih korakih poskušamo izboljšati bazno dopustno rešitev. To naredimo tako, da zamenjamo vlogi para ene bazne in ene nebazne spremenljivke. Ena nebazna spremenljivka (na desni) vstopi v bazo, ena od baznih (na levi) pa izstopi. Vstopi lahko katerakoli izmed nebaznih spremenljivk, ki ima v funkcionalu pozitiven koeficient. Izstopajoča spremenljivka pa je tista, ki najbolj omejuje vrednost vstopajoče spremenljivke. V primeru, da ne moremo izbrati izstopajoče spremenljivke (nobena ne omejuje vrednosti vstopajoče), je problem neomejen. Vrstica slovarja, iz katere je izstopajoča spremenljivka, se imenuje pivotna vrstica. Iz nje izrazimo vstopajočo spremenljivko. V prvem koraku lahko za vstopajočo spremenljivko izberemo x 1 ali x 2. Izberimo x 1. Po pravilu, ki dokazano preprečuje ciklanje simpleksnih tabel,

Diplomska naloga 17 namreč v vsakem koraku za vstopajočo spremenljivko vzamemo tisto, ki ima najmanjši indeks. Vse nebazne spremenljivke, razen naše vstopajoče x 1, nastavimo na 0. Ker morajo biti x 3, x 4, x 5 0, dobimo omejitve: 24000-120x 1 0 60000-275x 1 0 300 - x 1 0 x 3 najbolj omejuje x 1, zato iz 1. vrstice slovarja izrazimo x 1. Dobimo 2. simpleksno tabelo: x 1 = 200 1 4 x 2 1 120 x 3 kar vstavimo v preostali dve enačbi (napisani sta samo poračunani končni enačbi): x 4 = 5000 285 4 x 2 + 275 120 x 3 x 5 = 100 3 4 x 2 + 1 120 x 3 z = 17000 + 75 4 x 2 17 24 x 3 V funkcionalu ima sedaj samo še x 2 pozitiven koeficient, zato vstopa v bazo. Najbolj jo omejuje x 4, zato izstopa iz baze. 3. simpleksna tabela: x 2 = 4000 + 11 x 57 342 3 4 x 285 4 x 1 = 10400 14 x 57 855 3 + 1 x 285 4 x 5 = 900 3 x 19 190 3 + 1 x 95 4 z = 18315.789 2 x 19 3 5 x 19 4 Ker sedaj v funkcionalu ni ostalo nobene pozitivne spremenljivke več, vemo, da rešitve ne moremo več izboljšati. Optimalno rešitev začetnega problema lahko sedaj preberemo iz zadnjega slovarja. Prosti člen pri x 1 je 10400 57, pri x 2 pa 4000 57. Če ti dve vrednosti vstavimo v začetni funkcional z = 85x 1 + 40x 2, dobimo 348000 19 = 18315.789, kar bi lahko direktno prebrali kot prosti člen funkcionala

18 Andreja Perčič v zadnjem slovarju [5, 19]. Pri simpleksni metodi zahtevamo začetno rešitev v obliki Ax = b, kjer je vektor b 0. To v splošnem ne drži, vektor b ima katero od komponent negativno. V tem primeru moramo najprej popraviti problem, da so vse pozitivne. To lahko naredimo z metodo velikega M-ja. Vsaki vrstici simpleksne tabele, ki ima koeficient b-ja negativen, priredimo dodatno umetno spremenljivko, ki ima v kriterijski funkciji velik, negativen koeficient. Ker iščemo maksimum kriterijske funkcije, z zelo negativnim koeficientom poskrbimo, da nobena umetna spremenljivka ne bo nastopala v končni rešitvi [21]. Pokažimo postopek metode velikega M-ja na primeru: minimiziramo 2x 1 + 3x 2 + x 3 pri pogojih: x 1 + x 2 + x 3 40 2x 1 + x 2 x 3 10 x 2 + x 3 10 x 1, x 2, x 3 0 Neenačbe popravimo, da so vsi neenačaji pravilno obrnjeni: min 2x 1 + 3x 2 + x 3 x 1 + x 2 + x 3 40 2x 1 x 2 + x 3 10 x 2 x 3 10 x 1, x 2, x 3 0 Potem neenačbe pretvorimo v enačbe z dopolnilnimi in umetnimi spremenljivkami. V vrsticah, kjer je na desni strani neenačbe negativno število, imajo dopolnilne spremenljivke negativen predznak, poleg nje pa uvedemo dodatno umetno spremenljivko s pozitivnim predznakom. Kot bazne spremenljivke v 1. simpleksni tabeli vzamemo pozitivne dopolnile spremenljivke, v preostalih vrsticah pa pozitivne umetne spremenljivke.

Diplomska naloga 19 x 1 + x 2 + x 3 + x 4 = 40 2x 1 + x 2 x 3 x 5 + a 1 = 10 x 2 + x 3 x 6 + a 2 = 10 z = 2x 1 + 3x 2 + x 3 Ma 1 Ma 2 V funkcionalu smo dodali negativna a 1 in a 2 pomnožena z M. Z M označujemo neko zelo veliko število, večje od faktorjev, ki se pojavljajo v simpleksni tabeli. Ker iščemo maksimum funkcije, s tem zagotovimo, da sta vrednosti umetnih spremenljivk v končni rešitvi enaki 0. V funkcional smo, za umetne spremenljivke, dodali negativne faktorje M. V začetni simpleksni tabeli pa morajo imeti bazne spremenljivke v funkcionalu vrednost 0. To popravimo tako, da od funkcionala odštejemo, pomnoženo z M, vsako vrstico, kjer nastopa umetna spremenljivka. Začetni funkcional je v našem primeru torej: z = 2x 1 + 3x 2 + x 3 Ma 1 Ma 2 + M(2x 1 + x 2 x 3 x 5 + a 1 10) + M( x 2 + x 3 x 6 + a 2 10) Poračunano dobimo: z = (2 + 2M)x 1 + 3x 2 + x 3 Mx 5 Mx 6 20M Sedaj problem rešimo po standardni simpleksni metodi. 1. simpleksna tabela: x 4 = 40 x 1 x 2 x 3 a 1 = 10 2x 1 x 2 + x 3 + x 5 a 2 = 10 + x 2 x 3 + x 6 z = (2 + 2M)x 1 + 3x 2 + x 3 Mx 5 Mx 6 20M Vstopa x 1, izstopa a 1. 2. simpleksna tabela: x 1 = 5 1 2 x 2 + 1 2 x 3 + 1 2 x 5 + 1 2 a 1 x 4 = 35 1 2 x 2 3 2 x 3 1 2 x 5 + 1 2 a 1

20 Andreja Perčič a 2 = 10 + x 2 x 3 + x 6 z = 10 10M + (2 M)x 2 + (2 + M)x 3 + x 5 Mx 6 a 1 Ma 2 Vstopa x 3, izstopa a 2. 3. simpleksna tabela: x 3 = 10 + x 2 + x 6 a 2 x 1 = 10 + 1x 2 5 + 1x 2 6 1a 2 1 1a 2 2 x 4 = 20 7x 2 2 1x 2 5 3x 2 6 + 1a 2 1 z = 30 + 4x 2 + x 5 + 2x 6 (2 + 2M)a 2 a 1 Vstopa x 2, izstopa x 4. 4. simpleksna tabela: x 2 = 40 7 1 7 x 5 3 7 x 6 + 1 7 a 1 x 3 = 110 7 1 7 x 5 + 4 7 x 6 + 1 7 a 1 a 2 x 1 = 10 + 1 2 x 5 + 1 2 x 6 1 2 a 1 1 2 a 2 z = 370 7 + 3 7 x 5 + 2 7 x 6 3 7 a 1 (2 + 2M)a 2 Vstopa x 5, izstopa x 2. 5. simpleksna tabela: x 5 = 40 3x 6 + a 1 7x 2 x 3 = 10 + x 2 + x 6 a 2 x 1 = 30 7 x 2 6 1a 2 2 z = 70 3x 2 x 6 (2 + 2M)a 2 Ker so vse spremenljivke v funkcionalu sedaj negativne, smo prišli do konca simpleksne metode in našli optimalno rešitev x 1 = 30, x 2 = 0, x 3 = 10, pri čemer je vrednost funkcionala enaka 70.

Diplomska naloga 21 4.2 Metode notranjih točk Metode notranjih točk delujejo iterativno po notranjosti dopustnega območja rešitev. Korake, s katerimi poiščejo optimalno rešitev, lahko poenostavljeno zapišemo takole: 1. korak: začnemo z dopustno rešitvijo v notranjosti 2. korak: če je trenutna rešitev dovolj dobra, se ustavimo, sicer 3. korak: preverimo vse smeri za izbolšanje kriterijske funkcije in se premaknemo v smeri boljše rešitve. Vrnemo se na 2. korak. Slika 4.1: Koraki metode notranjih točk, začetek je v x 1, konec pa v x Če začetno dopustno rešitev v notranjosti označimo z x 0, imamo strukturo problema v obliki: Ax 0 = b, kjer so vse komponente x 0 večje od 0. Če bi bila namreč katera od komponent x 0 enaka nič, bi to pomenilo, da se rešitev nahaja na robu dopustnega območja, mi pa želimo začeti v notranjosti. Premikanje po notranjosti dopustnega območja lahko opišemo z iterativno enačbo x k+1 = x k + αd, kjer z α 0 označimo dolžino koraka, z d pa smer koraka. Ker točka ni na robu dopustnega območja, se iz nje lahko premaknemo v katerikoli smeri, vendar moramo pri tem paziti, da ostanemo znotraj

22 Andreja Perčič dovoljenega območja. Tako lahko v primeru določenih smeri naredimo daljši korak, pri drugih pa krajšega. Smeri, ki omogoča, da naredimo majhen premik in še vedno ostanemo znotraj dopustnega območja, rečemo možna smer premika. Smer, ki pa vodi v izboljšanje vrednosti kriterijske funkcije, imenujemo dobra smer premika. Rečemo, da je rešitev optimalna, kadar nobena možna smer iz trenutne rešitve ne izboljša kriterijske funkcije, se pravi nobena možna smer ni dobra smer premika. Če smo blizu meje dovoljenega območja, mora biti korak kratek, če pa blizu sredine, lahko naredimo daljši korak. Če trenutna rešitev ni blizu sredine, bomo v opisanih algoritmih transformirali koordinate, da bo [5]. 4.2.1 Afino skaliranje Slika 4.2: Algoritem afinega skaliranja v vsakem koraku transformira ravnino, tako da je trenutna točka v njeni sredini [22]. Iščemo rešitev problema v obliki:

Diplomska naloga 23 min c T x Ax = b x 0 Algoritem afinega skaliranja začnemo v neki točki x 0, ki leži v notranjosti dopustnega območja. To pomeni, da ustreza enačbi Ax 0 = b in ima vse komponente strogo večje od 0. V primeru, da bi bila katera od komponent vektorja x 0 enaka 0, bi to pomenilo, da točka leži na robu dopustnega območja. Skozi iteracije algoritma se potem, iz te začetne točke, skozi notranjost dopustnega območja premikamo v smeri optimalne rešitve. Ideja algoritma je, da se v vsakem koraku premaknemo v smeri negativnega gradienta kriterijske funkcije. Če bi iskali maksimum, bi se želeli premakniti v smeri najhitrejšega naraščanja funkcije, torej v smeri gradienta, tukaj pa iščemo minimim, zato se premikamo v smeri negativnega gradienta. Problem je, da gradient kriterijske funkcije lahko leži zunaj dopustnega območja. To rešimo tako, da točko gradienta projiciramo na dopustno območje in se premaknemo v smer projicirane točke. Tako zagotovimo, da v vsakem koraku ostanemo znotraj dopustnega območja. V vsakem koraku algoritma bi želeli narediti čim večji korak v pravi smeri, saj tako seveda hitreje pridemo do rešitve. Problem nastane, ker v primeru, da smo dokaj blizu meje dopustnega območja, ne moremo narediti velikega koraka, ker bi padli čez mejo. Zato v vsakem koraku algoritma transformiramo ravnino in s tem trenutno točko x k prestavimo bolj v sredino dopustnega območja. To storimo tako, da elemente trenutne rešitve x k preslikamo v enice. Vsako komponento vektorja delimo samo s sabo oz. vektor množimo z inverzom diagonalne matrike, ki ima na diagonali ta vektor, na vseh preostalih mestih pa ničle. Tudi matriko A in vektor c množimo z inverzom te diagonalne matrike in tako transfor-

24 Andreja Perčič miramo prostor rešitev. Novi x k se nahaja v transformiranem dopustnem območju, od vsake meje je oddaljen vsaj za 1 enoto. Iz te, transformirane, rešitve se prekmaknemo za nek faktor β [0, 1] v smeri negativnega gradienta. Na koncu transformiramo dobljeno rešitev x k nazaj v originalne koordinate. Izvajanje algoritma zaključimo, ko najdemo rešitev dovolj blizu optimalni. Tukaj uporabimo močni izrek o dualnosti, ki pravi, da sta optimalni rešitvi originalnega in dualnega programa enaki. V našem primeru končamo, ko je razlika dovolj majhna [2]. Algoritem 1 Algoritem afinega skaliranja Vhod: Linearni program min c T x, pri Ax = b, x 0 Izhod: Rešitev x*, v ɛ-okolici optimalne rešitve 1: while true do 2: X k =diag (x k ) 3: w k = (AX 2 k AT ) 1 AX 2 k c 4: r k = c A T w k 5: if r k > 0 in 1 T X k r k ɛ then 6: trenutna rešitev x k je ɛ-optimalna, končamo 7: else if X k r k 0 then 8: problem je neomejen, končamo 9: else 10: x k+1 = x k β X2 k rk X k r k 11: end Vhod algoritma je točka v notranjosti dopustnega območja x 0, matrika A, koeficientov v enačbah omejitev in vektor c, koeficientov kriterijske funkcije. V 1. vrstici definiramo zanko, ki teče, dokler ne najdemo dovolj dobre rešitve oz. zaznamo, da je problem neomejen. V 2. vrstici algoritma definiramo diagonalno matriko X k, ki ima po diagonali

Diplomska naloga 25 elemente vektorja x k. V 3. vrstici definiramo w k, ki projicira gradient na dopustno območje, s tem tudi ocenimo vrednost duala v trenutni točki. V 4. vrstici definiramo r k, ki pove faktor razlike med rešitvijo originalnega problema in rešitvijo duala. V 5. vrstici preverimo, ali je razlika med rešitvama originalnega in dualnega problema dovolj majhna. Če je, končamo izvajanje algoritma. Pravimo, da smo našli ɛ-optimalno rešitev. Ker za elemente x k vedno zahtevamo, da so nenegativni, je tudi diagonalna matrika X k nenegativna. Tako se ne more zgoditi, da bi bil drugi del pogoja, 1 T X k r k negativen. Če v 5. vrstici nismo našli končne rešitve, se v 7. vrstici za dolžino koraka β premaknemo v smeri projiciranega gradienta. S tem smo naredili korak v smeri optimalne rešitve. Pokažimo korake algoritma na problemu kmetije. Ker algoritem zahteva, da kriterijsko funkcijo minimiziramo, v algoritmu pa iščemo maksimum, jo bomo pomnožili z -1. Torej: min 85x 1 40x 2 120x 1 + 30x 2 + x 3 = 24000 275x 1 + 140x 2 + x 4 = 60000 x 1 + x 2 + x 5 = 300 Za začetno točko v notranjosti vzamemo npr. x 1 = 172, x 2 = 73, druge člene pa določimo tako, da enačbe veljajo. To storimo tako, da rešimo sistem linearnih enačb, saj moramo samo določiti vrednosti [ dopolnilnih spremenljivk ] x 3, x 4 in x 5. Za začetno točko imamo tako x 0 = 172 73 1170 2480 55 Algoritme smo v sistemu ALGator sicer implementirali v java kodi, vendar smo za namene testiranja uporabljali tudi program Octave, v katerem se

26 Andreja Perčič matrike in vektorji definirajo hitreje in bolj pregledno. programska koda: Priložena Octave function opt () A = [120 30 1 0 0; 275 140 0 1 0; 1 1 0 0 1]; b = [24000 60000 300]; x = [172 73 1170 2480 55] ; c = [-85-40 0 0 0] ; while(true) D=diag(x); wk = inv(a*d^2*a )*A*D^2*c; rk = c - A *wk; if (rk > 0 && D*rk <= 0.05) break elseif (-D*rk >= 0) break endif x end x = x - 0.6 *(D^2*rk/norm(D*rk)); endfunction Dobimo rešitev x = [ ] 182.456 70.175 0.000 0.000 47.368 Optimalna rešitev je x 1 = 182.46 in x 2 = 70.175, torej smo jo pravilno našli. Če merimo čas izvajanja algoritma, je ta seveda odvisen od ɛ, bolj natančno rešitev kot želimo, več korakov in časa bomo za to potrebovali. V naših testih se omejimo na dve decimalki, kar bi bilo realno pri problemu kmetije [23, 24, 25].

Diplomska naloga 27 4.2.2 Elipsoidna metoda Elipsoidna metoda je algoritem za reševanje linearnih programov in tudi nekaterih nelinearnih problemov optimizacije. Leta 1979 je Leonid Khachyian dokazal, da je z elipsoidno metodo linearne programe možno rešiti v polinomskem času. To je bil za teorijo časovne kompleksnosti linearnega programiranja velik dosežek. Žal pa se je v praksi metoda pokazala za prepočasno. Metoda ima polinomsko časovno zahtevnost, vendar ne močno polinomske. Pri močno polinomskih algorithmih je časovna zahtevnost odvisna samo od velikosti problema, npr. števila enačb, ne pa tudi od samih števil, ki nastopajo v enačbah. V našem primeru linearnega programiranja, ko iščemo rešitev enačbe Ax b, A R n m, bi bil močno polinomski algoritem časovno navzgor omejen le z dimenzijami matrike A m in n, pri elipsoidni metodi pa je časovna zahtevnost odvisna tudi od velikosti koeficientov matrike A. Elipsoidno metodo lahko ponazorimo kot lovljenje leva v sahari. Predpostavljamo, da je lev največ eden. Najprej ogradimo vso saharo, potem razpolovimo ograjen prostor na dve polovici in detektiramo, da v eni od polovic leva ni. Nadaljujemo isti postopek deljenja ograjenega prostora, dokler ni delček zemlje tako majhen, da se lev ne more več premikati in je s tem ujet, ali pa leva ni na njem in smo s tem dokazali, da ga tudi v celotni sahari ni [16]. Elipsoidna metoda deluje po podobnem principu. V vsakem koraku iskanja je ograjeno območje v obliki elipse, kar pomeni, da leva iščemo tudi v nekaterih robnih delih, iz katerih smo ga že izključili. Njegov teritorij pa se v vsakem koraku strogo krči. Iteracije algoritma ponavljamo, dokler center trenutne elipse ne pade v dopustno območje, ali pa je elipsa tako majhna, da pridemo do zaključka, da rešitve ni. Elipsoidna metoda sicer linearnega programa ne reši direktno. Poišče samo

28 Andreja Perčič dopustno rešitev sistema linearnih neenačb Ax b. Iz tega je možno dobiti optimalno rešitev na dva načina: 1.) Sistemu neenačb lahko dodamo pogoj, da mora biti rešitev večja od neke konstante. Optimalno rešitev s tem dobimo tako, da večkrat poženemo metodo in z bisekcijo najdemo optimalno rešitev. 2) Pomagamo si s teorijo dualnosti. v obliki: Če je originalen problem, ki ga rešujemo, max c T x Ax b x 0 je njegov dualni problem oblike: min b T y A T y c y 0 Šibki izrek o dualnosti pravi, da za vsak par originalnega problema in njegovega duala velja: c T x b T y, pri čemer je x dopustna rešitev prvotnega problema, y pa dopustna rešitev dualnega problema. Močni izrek o dualnosti pa: c T x = b T y, kar velja za optimalni rešitvi x in y, originalnega in dualnega problema [6, 26]. Tako lahko pri elipsoidni metodi rešujemo razširjen problem. Vsaka njegova dopustna rešitev, je optimalna rešitev originalnega linearnega programa.

Diplomska naloga 29 Neenačbe so: c T x b T y Ax b A T y c x, y 0

30 Andreja Perčič

Poglavje 5 Integracija v sistem ALGator 5.1 ALGator ALGator je sistem za avtomatsko primerjavo različnih algoritmov, ki rešujejo isti problem. Omogoča, da med sabo primerjamo časovno učinkovitost več različnih algoritmov, ki se izvajajo na istih testnih podatkih. Rezultate zapiše v datoteko, omogoča pa tudi grafično predstavitev [11]. 5.2 Implementirani algoritmi V sklopu diplomske naloge smo v javi implementirali simpleksno metodo in afino skaliranje. Programsko kodo smo vključili v sistemu ALGator, ki ju je izvedel na testnih podatkih. Rezultate smo primerjali med sabo in za bolj časovno učinkovit algoritem se je, po pričakovanjih, izkazala simpleksna metoda. 5.3 Opis datotek sistema ALGator Če želimo uporabljati sistem ALGator, moramo najprej prenesti osnovni projekt. To storimo z ukazom v konzoli 31

32 Andreja Perčič c u r l L O https : / / raw. github. com/algatordevel/ Algator / master /ALGator. z i p S tem se nam v trenutni direktorij prenese datoteka ALGator.zip, ki jo razširimo v poljuben direktorij, ki ga označimo z <algator root >. Sedaj lahko ustvarimo nov projekt z ukazom: java a l g a t o r. Admin cp <project name> V našem delu smo za <project name> izbrali ime LinearProgramming. Na projektu lahko sedaj ustvarimo poljubno število algoritmov z ukazom: java a l g a t o r. Admin ca <project name> <algorithm name> Datoteke, ki jih spreminjamo v sklopu celotnega projekta, so: <project name>input.java, ki definira objekt za vhodne podatke; <project name>output.java, ki definira objekt za izhodne podatke; <project name>testcase.java, ki definira parametre testnih primerov; <project name>absalgorithm.java, ki definira abstrakten razred z metodo run(), ki izvede algoritem. Naštete datoteke se nahajajo v /proj/src poddirektoriju projekta. Datoteka, ki jo spreminjamo v sklopu posameznega algoritma, pa je: <algorithm name>algorithm.java, kjer definiramo javansko kodo algoritma, ki jo želimo izvesti na testnih primerih in se nahaja v /algs/alg- <algorithm name>/src poddirektoriju projekta.

Diplomska naloga 33 5.4 Vhodni podatki MPS format predstavitve podatkov je bil uporabljen na luknjanih karticah, s katerimi so programirali v začetku razvoja računalnikov. Določil ga je IBM, kot standardno predstavitev linearnih programov in še danes je večina objavljenih linearnih programov v tem formatu. Podatki so zapisani po stolpcih. Vsaka vrstica, stolpec in spremenljivka dobi svoje ime. Polja se začnejo na indeksih 2,5,15,25,40 in 50. Zgodovinsko so se za poimenovanje spremenljivk uporabljale velike tiskane črke, čeprav format dopušča tudi mešan font poimenovanja [30]. PRIMER MPS FORMATA NAME ROW S N L G E T EST COST LIM1 LIM2 LIM3 COLUMNS XON E COST 1 LIM 1 1 XONE LIM2 1 XT W O COST 4 LIM1 1 XT W O LIM3 1 XT HREE COST 9 LIM 2 1 XT HREE LIM 3 1 RHS RHS1 LIM 1 5 LIM 2 10 RHS1 LIM 3 7

34 Andreja Perčič BOUNDS UP BND1 XONE 4 LO BND1 XT W O 1 UP BND1 XT W O 1 ENDAT A Isti problem, zapisan v splošni obliki: min XONE + 4 XTWO + 9 XTHREE LIM1: XONE + XTWO 5 LIM2: XONE + XTHREE 10 LIM3: -XTWO + XTHREE = 7 XONE 4 XTWO -1 XTWO 1 Opombe: 1) V ROWS imajo oznake naslednje pomene: E.. enako L.. manjše ali enako G.. večje ali enako N.. brez omejitve 2) RHS definira desno stran enačbe Ax b 3) BOUNDS definira dovoljene meje spremenljivk, v primeru da niso definirane, se privzame 0 x < LO.. spodnja meja.. b x < + UP.. zgornja meja 0 x b FX.. fiksirana vrednost x = b FR.. prosta vrednost < x < MI.. spodnja meja < x 0 PL.. zgornja meja 0 x < + BV.. dvojiška vrednost x = 0 ali x = 1 LI.. celoštevilska vrednost b x < +

Diplomska naloga 35 UI.. celoštevilska vrednost 0 x b Ker so objavljene zbirke podatkov v formatu MPS zelo različnih velikosti in lastnosti, je na njih težko primerjati čase izvajanja. Naše testne podatke smo zato generirali sami, in velikosti lineranih programov povečevali vsakič z enakim korakom. Vsak primer linearnega programa iz testne zbirke smo med testiranjem izvedli desetkrat. Grafi prikazujejo minimalne čase izvajanja za vsakega izmed testnih primerov. Naše zbirke testnih primerov so bile označene z id-ji od 1 do 3. Primere smo generirali s programom Octave po naslednjih pravilih: - izbrali smo naključno generiran vektor v R n, ki bo predstavljal neko, ne nujno optimalno rešitev našega linearnega programa - določili b R m, ki ustreza pogoju b Av, pri čemer smo b določili, tako da smo vzeli b = Av + δ, kjer je δ naključno generirano število, večje od 0. Omejitve linearnega programa so tako Ax b, kriterijsko funkcijo pa lahko naključno generiramo. Generirali smo tri sklope testov, v vsakem po 10 primerov. V prvem testu imajo vsi primeri 10 omejitev, število spremenljivk pa je v vsakem primeru za 2 večje, vrednosti tečejo od 10 do 28. V drugem testu imajo vsi primeri 20 omejitev, število spremenljivk pa na enak način teče od 10 do 28. Tretji test ima primere s 30 omejitvami in številom spremenljivk od 10 do 28.

36 Andreja Perčič Slika 5.1: Rezultati afinega skaliranja na zbirki primerov 1. Na x-osi imamo število spremenljivk, ki teče od 10 do 28, na y-osi pa minimalni čas izvajanja v milisekundah. Število omejitev je v vseh primerih enako 10.

Diplomska naloga 37 Slika 5.2: Rezultati simpleksnega algoritma na zbirki primerov 1. Tudi tukaj je na x-osi število spremenljivk, na y-osi pa minimalni čas izvajanja. Število spremenljivk teče od 10 do 28, število omejitev je 10. Na sliki 5.1 so izrisani minimalni časi izvajanja vsakega od testnih primerov iz zbirke 1, z algoritmom afinega skaliranja, na sliki 5.2 pa rezultati izvajanja s simpleksnim algoritmom. Opazimo, da je pri afinem skaliranju čas izvajanja bolj odvisen od velikosti problema kot pri simpleksnem algoritmu, kjer prvi, manjši, testni primer porabi več časa kot zadnji. Če pa primerjamo oba algoritma, se časi močno razlikujejo, tako da je graf simpleksnega algoritma proti afinemu skaliranju skoraj raven, primerjavo vidimo na sliki 5.3. Čeprav je simpleksni algoritem v najslabšem primeru eksponentne časovne zahtevnosti, afino skaliranje pa ima polinomsko časovno zahtevnost, se simpleksna metoda v praksi izkaže za zelo učinkovito. V povprečnem primeru ima simpleksna metoda prav tako polinomsko časovno zahtevnost [10].

38 Andreja Perčič Slika 5.3: Rezultati obeh algoritmov na zbirki primerov 1. Slika 5.4: Rezultati afinega skaliranja na zbirki primerov 2. Tudi tu število spremenljivk teče od 10 do 28, število omejitev pa je 20 na vseh primerih iz testne zbirke 2.

Diplomska naloga 39 Slika 5.5: Rezultati simpleksnega algoritma na zbirki primerov 2. spremenljivk teče od 10 do 28, število omejitev pa je 20. Število Na grafih 5.4 in 5.5 so izrisani rezultati izvajanja afinega skaliranja in simpleksnega algoritma na zbirki testnih primerov 2. Velikost testnih primerov je linearno naraščala, v vsakem koraku smo dodali 2 novi omejitvi. Primeri so razvrščeni od leve proti desni, vendar časi niso odvisni samo od velikosti. Testni primeri se razlikujejo tudi v koeficientih omejitev, kar poleg velikosti problema tudi pomembno vpliva na rezultate. To je opazno predvsem pri simpleksnem algoritmu, mendtem ko je pri afinem skaliranju čas izvajanja bolj direktno povezan z velikostjo problema. Na grafih 5.6 in 5.7 so izrisani rezultati izvajanja algoritmov na testni zbirki 3. Tudi tu lahko vidimo, da je čas izvajanja odvisen tudi od koeficientov omejitev, ne samo od njihovega števila. In prav tako se je, prikazano na sliki 5.8, simpleksna metoda izkazala za učinkovitejšo.

40 Andreja Perčič Slika 5.6: Rezultati afinega skaliranja na zbirki primerov 3. Število spremenljivk na x-osi teče od 10 do 28, število omejitev pa je 30. Slika 5.7: Rezultati simpleksnega algoritma na zbirki primerov 3.

Diplomska naloga 41 Slika 5.8: Rezultati obeh algorithmov na zbirki primerov 3. Slika 5.9: Rezultati afinega skaliranja na vseh treh zbirkah primerov. Testni primeri si sledijo v naravnem zaporedju, na x-osi pa imamo tokrat id-je posameznega testnega primera.

42 Andreja Perčič Na grafu 5.9 so prikazani rezultati afinega skaliranja na vseh treh zbirkah podatkov. Vidimo, da je čas izvajanja zelo direktno povezan z velikostjo problema. Medtem ko na grafu 5.10, ki prikazuje čase izvajanja simpleksnega algoritma, ne opazimo tako direktne povezave med časom izvajanja in velikostjo problema. Slika 5.10: Rezultati simpleksnega algoritma na vseh treh zbirkah primerov. Testni primeri si sledijo v naravnem zaporedju, na x-osi pa imamo tokrat id-je posameznega testnega primera.

Diplomska naloga 43 Slika 5.11: Rezultati simpleksnega algoritma in afinega skaliranja na vseh treh zbirkah primerov. Testni primeri si sledijo v naravnem zaporedju, na x-osi pa imamo id-je posameznega testnega primera. Na grafu 5.11 so prikazani rezultati obeh algoritmov, na vseh treh skupinah testnih primerov. Vidimo, da na začetku, na manjših primerih, razlika ni tako velika, ko pa se velikost linearnih programov povečuje, je zelo očitno, da je simpleksni algoritem veliko hitrejši. Simpleksni algoritem ima sicer v najslabšem primeru eksponentno časovno zahtevnost, afino skaliranje pa polinomsko, vendar se izkaže, da je tudi simpleksna metoda v praksi bližje polinomski časovni zahtevnosti. Vprašanje je, ali bi se afino skaliranje dalo implementirati hitreje, in kaj vse je lahko vplivalo na naše čase izvajanja. Eden od faktorjev je, kako natančno rešitev želimo dobiti. Bolj natančno rešitev kot želimo, več iteracij algoritma moramo narediti, več časa porabimo. Drugi faktor, ki vpliva na hitrost implementacije, je način matričnih operacij.

44 Andreja Perčič Afino skaliranje ima v vsaki iteraciji precej matričnega množenja. Nekatere knjižnjice za delo z matrikami v javi podpirajo paralelno množenje, kar bi v kombinaciji s primerno strojno opremo lahko naredilo veliko razliko v hitrosti izvajanja algoritma. Matriki pravimo, da je redka ali razpršena, če je večina njenih elementov enaka nič. Pri matričnem množenju za redke matrike potrebujemo manj časa, saj zanje obstajajo bolj učinkoviti algoritmi množenja. To pa je odvisno, ne od velikosti problema, temveč samo od faktorjev, ki nastopajo v omejitvah linearnega programa.

Poglavje 6 Sklepne ugotovitve Diplomsko delo smo vsebinsko razdelili na dva dela. Najprej smo problem linearnega programiranja teoretično predstavili in obravnavali nekaj algoritmov za njegovo reševanje. V drugem delu pa smo dva algoritma, simpleksno metodo in afino skaliranje, implementirali v sistemu ALGator. Oba smo testirali na istih testnih zbirkah, izmed katerih so bili nekateri primeri pridobljeni iz objavljenih linearnih problemov, za drugi sklop testiranja pa smo testne primere generirali sami. Testiranje bi lahko izvedli na še večjih primerih, vendar smo se, ker se z naraščanjem dimenzije problema čas izvajanja hitro poveča, omejili na majhne do srednje velikosti problemov. Iz rezultatov testiranja smo videli, da za manše dimenzije problemov algoritma porabita približno enak čas, z večanjem števila spremenljivk in števila omejitev, pa se simpleksni algoritem po pričakovanjih izkaže za bolj učinkovitega. Implementacija problema linearnega programiranja v sistem ALGator je del razvoja sistema, ki služi v raziskovalne in študijske namene primerjave različnih algoritmov za reševanje istega problema. V prihodnje bi se lahko dodali tudi drugi algoritmi linearnega programiranja, ki bi se izvedli na istih, že ob- 45

46 Andreja Perčič stoječih testnih primerih, rezultati pa bi se lahko primerjali z že obstoječimi algoritmi. Možnost za razširitev implementacije bi bile, na primer, če bi se v sistem dodali tudi algoritmi za celoštevilsko in mešano linearno programiranje. Ti problemi so zahtevnejši od osnovnega linearnega programiranja, tako da bi bilo zanimivo primerjati časovno zahtevnost, morda bi se ti algoritmi vseeno izkazali za bolj učinkovite kot afino skaliranje.

Diplomska naloga 47

48 Andreja Perčič

Literatura [1] I. Vidav, Višja matematika II. Državna založba Slovenije, 1979. [2] R. Vanderbei, Linear Programming: Foundations and Extensions. Department of Operations Research and Financial Engineering, Princeton University, 2001. [3] A. Schrijver, Theory of linear and integer programming. John Wiley & Sons Ltd, England, 1998. [4] L. Kantorovič, Matematičeskie metodi organizacii i planirovanija proizvodstva. 1939. [5] H. Karloff, Linear programming. Birkhäuser Basel, 1991. [6] J. Matoušek and B. Gartner, Understanding and Using Linear Programming. Springer, 2007. [7] A. Schrijver, Theory of linear and integer programming. John Wiley, 1998. [8] I. Griva, S. Nash, and A. Sofer, Linear and Nonlinear Optimization, Appendix E. George Mason University Fairfax, Virginia, 2009. [9] I. Lustig, A practical approach to karmarkar s algorithm, tech. rep., Department of Operations Research Stanford University Stanford, 1985. 49

50 Andreja Perčič [10] D. Spielman, Smoothed analysis of algorithms: Why the simplex algorithm usually takes polynomial time, tech. rep., Massachusetts Institute of Technology, 2004. [11] T. Dobravec, ALGator - An automatic algorithm evaluation system. Dosegljivo: :https://github.com/algatordevel/algator. [12] F. Hitchcock, The distribution of a product from several sources to numerous localities, Journal of Mathematics and Physics, vol. 20, no. 3, 1941. [13] M. Berden, Zgodovina linearnega programiranja. Dosegljivo: https://www.fmf.uni-lj.si/~juvan/racunalnistvo3/gradivo/ zgodovinalp.pdf, 2009. [Dostopano 1. 6. 2019]. [14] Linearno programiranje. Dosegljivo: http://www.doba.si/ftp/ egradiva/pms-df/programiranje_male.html. [Dostopano: 20. 4. 2019]. [15] Linear programming. Dosegljivo: https://users.math.msu.edu/ users/drachman/math106spring01/lec20_linear_programming. pdf. [Dostopano: 20. 3. 2019]. [16] Problem: To Catch a Lion In the Sahara Desert. Dosegljivo: http://www.physics.usu.edu/dennison/3870-3880/humor/ Humor_Catching%20a%20Lion.pdf. [Dostopano: 20. 3. 2019]. [17] N. Lauritzen, Lectures on convex sets. Dosegljivo: https://www.fmf. uni-lj.si/~lavric/lauritzen.pdf, 2009. [Dostopano 1. 4. 2019]. [18] Optimization. Dosegljivo: http://www.jchl.co.uk/maths/ Optimization.pdf. [Dostopano 1. 2. 2019]. [19] Optimization. Dosegljivo: http://mat.gsia.cmu.edu/classes/ QUANT/NOTES/chap7.pdf. [Dostopano 1. 8. 2018].

Diplomska naloga 51 [20] Dvofazna simpleksna metoda. Dosegljivo: https://ucilnica.fmf. uni-lj.si/course/view.php?id=41. [Dostopano 15. 7. 2019]. [21] An example of two phase simplex method. Dosegljivo: http:// optlab.mcmaster.ca/feng/4o03/two.phase.simplex.pdf. [Dostopano 05. 8. 2019]. [22] Affine scaling algorithms. Dosegljivo: https://www.ise.ncsu.edu/ fuzzy-neural/wp-content/uploads/sites/9/2015/08/lpchapter- 7.pdf. [Dostopano 15. 7. 2018]. [23] Optimization Methods. Dosegljivo: https://ocw.mit.edu/courses/ sloan-school-of-management/15-093j-optimization-methodsfall-2009/lecture-notes/mit15_093j_f09_lec21.pdf. [Dostopano 15. 7. 2018]. [24] Affine scaling. Dosegljivo: https://en.wikipedia.org/wiki/ Affine_scaling. [Dostopano 15. 7. 2018]. [25] R. Saigal, A simple proof of a primal affine scaling method. Dosegljivo: https://deepblue.lib.umich.edu/bitstream/handle/2027. 42/44263/10479_2005_Article_BF02206821.pdf. [Dostopano 15. 7. 2018]. [26] M. Goemans, Lecture notes on the ellipsoid algorithm. Dosegljivo: http://www-math.mit.edu/~goemans/18433s09/ellipsoid. pdf, 2009. [Dostopano 20. 7. 2018]. [27] N. Kumar, Other Algorithms for Solving Linear Programming Problems. Dosegljivo: https://nptel.ac.in/content/storage2/ courses/105108127/pdf/module_3/m3l6_ln.pdf. [Dostopano 10. 8. 2018]. [28] Y. Hu, Paper Review - Interior-Point Methods for LP. Dosegljivo: http://islab.soe.uoguelph.ca/sareibi/teaching_dr/