PRIMERJAVA ANALITIČNIH PROGRAMSKIH ORODIJ PRI REŠEVANJU PROBLEMOV ODLOČANJA V POSLOVNIH PROCESIH

Similar documents
Reševanje problemov in algoritmi

OPTIMIRANJE IZDELOVALNIH PROCESOV

UNIVERZA V NOVI GORICI POSLOVNO-TEHNIŠKA FAKULTETA REŠEVANJE OPTIMIZACIJSKIH PROBLEMOV S PROGRAMSKIM PAKETOM SCICOSLAB DIPLOMSKO DELO.

UČNI NAČRT PREDMETA / COURSE SYLLABUS (leto / year 2017/18) Študijska smer Study field ECTS

TOPLJENEC ASOCIIRA LE V VODNI FAZI

UČNI NAČRT PREDMETA / COURSE SYLLABUS (leto / year 2017/18) Predmet: Optimizacija 1 Course title: Optimization 1. Študijska smer Study field

ENAČBA STANJA VODE IN VODNE PARE

UČNI NAČRT PREDMETA / COURSE SYLLABUS. Študijska smer Study field. Samost. delo Individ. work Klinične vaje work

UČNI NAČRT PREDMETA / COURSE SYLLABUS Numerical linear algebra. Študijska smer Study field. Samost. delo Individ. work Klinične vaje work

UNIVERZA V LJUBLJANI PEDAGOŠKA FAKULTETA POLONA ŠENKINC REŠEVANJE LINEARNIH DIFERENCIALNIH ENAČB DRUGEGA REDA S POMOČJO POTENČNIH VRST DIPLOMSKO DELO

Makroekonomija 1: 4. vaje. Igor Feketija

Multipla korelacija in regresija. Multipla regresija, multipla korelacija, statistično zaključevanje o multiplem R

R V P 2 Predavanje 05

OA07 ANNEX 4: SCOPE OF ACCREDITATION IN CALIBRATION

Excel. Matjaž Željko

Študijska smer Study field. Samost. delo Individ. work Klinične vaje work. Vaje / Tutorial: Slovensko/Slovene

Uporaba preglednic za obdelavo podatkov

matematika + biologija = sistemska biologija? Prof. Dr. Kristina Gruden Prof. Dr. Aleš Belič Doc. DDr. Jure Ačimovič

UČNI NAČRT PREDMETA / COURSE SYLLABUS. Študijska smer Study field. Samost. delo Individ. work Klinične vaje work

UČNI NAČRT PREDMETA / COURSE SYLLABUS (leto / year 2017/18) Predmet: Analiza 3 Course title: Analysis 3. Študijska smer Study field ECTS

UČNI NAČRT PREDMETA / COURSE SYLLABUS (leto / year 2017/18) Diferencialne enačbe. Študijska smer Study field ECTS

Statistika 2 z računalniško analizo podatkov. Neizpolnjevanje predpostavk regresijskega modela

Attempt to prepare seasonal weather outlook for Slovenia

ENERGY AND MASS SPECTROSCOPY OF IONS AND NEUTRALS IN COLD PLASMA

UČNI NAČRT PREDMETA / COURSE SYLLABUS (leto / year 2017/18) Parcialne diferencialne enačbe Partial differential equations. Študijska smer Study field

Iskanje najcenejše poti v grafih preko polkolobarjev

UČNI NAČRT PREDMETA / COURSE SYLLABUS. Študijska smer Study field. Samost. delo Individ. work Klinične vaje work

Linearna regresija. Poglavje 4

USING SIMULATED SPECTRA TO TEST THE EFFICIENCY OF SPECTRAL PROCESSING SOFTWARE IN REDUCING THE NOISE IN AUGER ELECTRON SPECTRA

Distance reduction with the use of UDF and Mathematica. Redukcija dolžin z uporabo MS Excel ovih lastnih funkcij in programa Mathematica

LISREL. Mels, G. (2006). LISREL for Windows: Getting Started Guide. Lincolnwood, IL: Scientific Software International, Inc.

OPTIMIZACIJA Z ROJEM DELCEV

Cveto Trampuž PRIMERJAVA ANALIZE VEČRAZSEŽNIH TABEL Z RAZLIČNIMI MODELI REGRESIJSKE ANALIZE DIHOTOMNIH SPREMENLJIVK

UNIVERZA NA PRIMORSKEM FAKULTETA ZA MATEMATIKO, NARAVOSLOVJE IN INFORMACIJSKE TEHNOLOGIJE

UČNI NAČRT PREDMETA / COURSE SYLLABUS Predmet: Analiza 1 Course title: Analysis 1. Študijska smer Study field. Samost. delo Individ.

Verifikacija napovedi padavin

modeli regresijske analize nominalnih spremenljivk

ANALIZA EKONOMSKE UČINKOVITOSTI JAHALNEGA CENTRA S POMOČJO LINEARNEGA PROGRAMIRANJA

Vsebina Od problema do načrta programa 1. del

UNIVERZA NA PRIMORSKEM FAKULTETA ZA MATEMATIKO, NARAVOSLOVJE IN INFORMACIJSKE TEHNOLOGIJE

UČNI NAČRT PREDMETA / COURSE SYLLABUS (leto / year 2016/17) Diferencialne enačbe. Študijska smer Study field ECTS

Modelska Analiza 1. University of Ljubljana Faculty of Mathematics and Physics. 3. naloga - Numeri na minimizacija

MODELIRANJE IN SIMULACIJA TER NJUNA UPORABA V MEDICINI IN FARMACIJI

UNIVERZA V LJUBLJANI PEDAGOŠKA FAKULTETA SAŠO ZUPANEC MAX-PLUS ALGEBRA DIPLOMSKO DELO

Statistika 2 z računalniško analizo podatkov

UNIVERZA NA PRIMORSKEM FAKULTETA ZA MATEMATIKO, NARAVOSLOVJE IN INFORMACIJSKE TEHNOLOGIJE. O neeksaknotsti eksaktnega binomskega intervala zaupanja

Linearne enačbe. Matrična algebra. Linearne enačbe. Linearne enačbe. Linearne enačbe. Linearne enačbe

UNIVERZA V LJUBLJANI

Hipohamiltonovi grafi

MODEL ZA OCENJEVANJE KAKOVOSTI SPLETNIH STRANI

KVANTITATIVNE METODE V PROMETU

Izdelava spletne strani z uporabo programske opreme kot storitve

Verodostojnost in kvaliteta spletno dostopnih informacij

UČNI NAČRT PREDMETA / COURSE SYLLABUS Predmet: Numerične metode 1 Course title: Numerical methods 1. Študijska smer Study field

Naloge iz LA T EXa : 3. del

Simulacija dinamičnih sistemov s pomočjo osnovnih funkcij orodij MATLAB in Simulink

Iterativne metode podprostorov 2010/2011 Domače naloge

Modeliranje časovnih vrst z metodami teorije informacij

UNIVERZA NA PRIMORSKEM FAKULTETA ZA MATEMATIKO, NARAVOSLOVJE IN INFORMACIJSKE TEHNOLOGIJE. Kvadratne forme nad končnimi obsegi

Študijska smer Study field. Samost. delo Individ. work Klinične vaje work. Vaje / Tutorial: Slovensko/Slovene

UNIVERZA NA PRIMORSKEM FAKULTETA ZA MATEMATIKO, NARAVOSLOVJE IN INFORMACIJSKE TEHNOLOGIJE

TEORIJA GRAFOV IN LOGISTIKA

Univerza na Primorskem. Fakulteta za matematiko, naravoslovje in informacijske tehnologije. Zaznavanje gibov. Zaključna naloga

Optimizacija delovanja in povečanje obiska na spletni strani

UNIVERZA NA PRIMORSKEM FAKULTETA ZA MATEMATIKO, NARAVOSLOVJE IN INFORMACIJSKE TEHNOLOGIJE

THE NUMERICAL SOLUTION OF STRAIN WAVE PROPAGATION IN ELASTICAL HELICAL SPRING

arxiv: v1 [cs.dm] 21 Dec 2016

NIKJER-NIČELNI PRETOKI

UNIVERZA NA PRIMORSKEM FAKULTETA ZA MATEMATIKO, NARAVOSLOVJE IN INFORMACIJSKE TEHNOLOGIJE. Verjetnostni algoritmi za testiranje praštevilskosti

ANALIZA SPLETNIH STRANI IN NJIHOVA UPORABNOST

OPP Programska oprema

UPORABA METODE KALKULIRANJA STROŠKOV NA PODLAGI SESTAVIN DEJAVNOSTI V IZBRANIH DRŽAVAH

1) V diagramu sta prikazana plazemska koncentracijska profila po večkratnem intravenskem odmerjanju učinkovine v dveh različnih primerih (1 in 2).

Primerjava metod aproksimativnega sklepanja pri izolaciji napak - simulacijska študija

UNIVERZA NA PRIMORSKEM FAKULTETA ZA MATEMATIKO, NARAVOSLOVJE IN INFORMACIJSKE TEHNOLOGIJE. Ekstremne porazdelitve za odvisne spremenljivke

PRIPRAVA PODATKOV V PROCESU PODATKOVNEGA RUDARJENJA

Sodobna orodja in postopki za načrtovanje algortimov vodenja servopogonov

MICROWAVE PLASMAS AT ATMOSPHERIC PRESSURE: NEW THEORETICAL DEVELOPMENTS AND APPLICATIONS IN SURFACE SCIENCE

JEDRSKA URA JAN JURKOVIČ. Fakulteta za matematiko in fiziko Univerza v Ljubljani

Aleš Fleischmann Gradniki vmesniškega podsklopa sistema za procesno dokumentacijo

The consequences of quantum computing

OPTIMIZACIJA ENODIMENZIONALNEGA RAZREZA PO SKUPINAH

VAJE 2: Opisna statistika

DOSTOPNOST IN UPORABNOST SPLETNIH STRANI

Univerza v Ljubljani Fakulteta za matematiko in fiziko. Oddelek za fiziko. Seminar - 3. letnik, I. stopnja. Kvantni računalniki. Avtor: Tomaž Čegovnik

UNIVERZA V LJUBLJANI FAKULTETA ZA RAČUNALNIŠTVO IN INFORMATIKO. Gorazd Kovačič. Avtomatsko vizualno testiranje spletnih strani

Preverjanje optimiziranosti spletnih strani

OFF-LINE NALOGA NAJKRAJŠI SKUPNI NADNIZ

Katja Tuma Generiranje in reševanje sudokuja

Optimizacija razporeditve preizkušanja in vzdrževanja varnostne opreme na podlagi najmanjšega tveganja

Osnove numerične matematike

UNIVERZA V MARIBORU EKONOMSKO-POSLOVNA FAKULTETA, MARIBOR

Domen Perc. Implementacija in eksperimentalna analiza tehnike razvrščanja podatkov s konsenzom

Odločitve na dlani: Sistem za podporo večparametrskemu odločanju na dlančnikih

Analiza variance in linearna regresija

Modeling and Control of Instabilities in Combustion Processes Modeliranje in upravljanje nestabilnosti v procesih zgorevanja

Sistem za sledenje in analizo uporabe računalniških aplikacij

2A skupina zemeljskoalkalijske kovine

Zgoščevanje podatkov

Minimizacija učne množice pri učenju odločitvenih dreves

Transcription:

UNIVERZA V MARIBORU FAKULTETA ZA ORGANIZACIJSKE VEDE Smer: Organizacija in management informacijskih sistemov PRIMERJAVA ANALITIČNIH PROGRAMSKIH ORODIJ PRI REŠEVANJU PROBLEMOV ODLOČANJA V POSLOVNIH PROCESIH Mentor: izr. prof. dr. Anton Čižman Kandidat: Miha Osojnik Kranj, april 2009

ZAHVALA Zahvaljujem se dr. Antonu Čižmanu za njegovo pomoč, nasvete in njegove smernice pri izdelavi tega diplomskega dela. Hvala tudi g. Jaku Žgajnarju pri začetni pomoči in asistentu g. Marku Urhu. Zahvaljujem se tudi g. Francu Furlandu, za pomoč pri lektoriranju te diplomske naloge.

Povzetek Managerji v proizvodnjih organizacijah so danes soočeni s številnimi naraščajočimi potrebami po zagotavljanju konkurenčnosti podjetja na globalnem trgu, v smislu optimiranja poslovnih procesov na različnih področij gospodarstva. Na žalost pa le redko uporabijo ustrezna programska orodja za pomoč pri odločanju ali jih celo niti ne poznajo. Primankuje jim znanja in ustreznih metodologij za razvoj sistemov za podporo odločanju. Sodobna informacijska tehnologija (IT) pa jim lahko omogoča, da jo izkorisitjo in si z njo pomagajo pri sprejemanju boljših in hitrejših odločitev, majhnim in srednje velikim podjetjem pa veliko priložnosti za razvoj informacijskih sistemov (IS). Ti sistemi omogočajo uporabo modelov operacijskih raziskav (OR), za podporo odločanju. Vendar pa kljub dejstvu, da je na razpolago zelo zmogljiva IT, primanjkuje znanja o uporabnosti te tehnologije pri razvoju odločitvenih modelov in njihovi uporabi pri optimizaciji poslovnih procesov v podjetju. Namen diplomske naloge je predstaviti in opisati nekatera standardna analitična programska orodja, za pomoč pri razvoju odločitvenih informacijskih sistemov (OIS), ki omogočajo enostavno uporabo metod in modelov OR pri optimizaciji poslovnih procesov. Uporabnost prototipnih odločitvenih modelov bomo podali s pomočjo praktičnih primerov, ki bodo primerjalno prikazali učinkovitost, zmogljivost in uporabniško naravnanost izbranih programskih orodij, to so Excel Solver, Lingo, Lindo in POM-QM. Cilj naloge bomo dosegli s pomočjo modelov linearnega, nelinearnega in celoštevilčnega programiranja. Ključne besede: linearno programiranje, celoštevilčno programiranje, nelinearno programiranje, Excel, Reševalec, LINGO, LINDO, POM-QM, Odločitveni informacijski sistem. Abstract Managers in manufacturing organizations today are faced with a number of growing demands to ensure the competitiveness of enterprises in the global market, in terms of optimization of business processes in various areas of the economy. Unfortunately appropriate software tools are rarely used to aid in decision making or managers do not even know it. They lack of knowledge and appropriate methodologies for the development of decision making support systems. Modern information technology (IT) allows them to exploit it and help to adopt better and faster decisions with it, however small and medium-sized enterprises, have many opportunities to develop the information systems (IS). These systems enable usage of models of operational research (OR) for decision making support. However, despite the fact that there is available high technology IT, lack of knowledge causes the lack of application of this technology in the development of decision models and their application in the optimization of business processes in enterprises. The purpose of this thesis is to present and describe some of the standard analytical software tools for assistance in the development of decisionmaking information systems, which allow simple usage of the OR methods and models to optimize business processes. Applicability of decision-making prototype models, will be made with the help of practical examples that will show the efficiency, performance and user-orientated software tools. These are Excel - Solver, Lingo, Lindo and POM- QM. The objective of the thesis will be achieved with help of models of linear, nonlinear and integer programming. Keywords: linear programming, interer programming, nonlinear programming, Excel, Solver, LINGO, LINDO, POM-QM, Decision makeing system.

Kazalo 1. Uvod...1 2. Načrtovanje in razvoj odločitvenih sistemov...2 2.1. Faze in razvoj odločitvenega informacijskega sistema...2 3. Teoretične osnove matematičnega programiranja...4 3.1. Linearno programiranje...4 3.1.1. GRAFIČNA METODA...6 3.1.2. ANALIZA OBČUTLJIVOSTI, PRIMARNOST IN DUALNOST...7 3.1.3. METODA SIMPLEKS...7 3.2. Nelinearno programiranje...8 3.3. Celoštevilčno programiranje...9 4. Pregled pomembnejših komercialnih programskih orodij (PO), za linearano, nelinearno in celoštevilčno programiranje...11 5. Predstavitev programskih orodij EXCEL-solver, LINGO, LINDO in POM-QM...13 5.1. EXCEL...13 5.2. LINGO...20 5.3. LINDO...26 5.4. POM-QM...29 6. Vzorčni primeri uporabe programov (orodij) v gospodarstvu...33 6.1. Problem zmesi...33 6.1.1. EXCEL...34 6.1.2. LINGO...35 6.1.3. LINDO...35 6.1.4. POM-QM...36 6.2. Proizvodni problem...37 6.2.1. EXCEL...38 6.2.2. LINGO...39 6.2.3. LINDO...40 6.2.4. POM-QM...41 6.3. Transportni problem...42 6.3.1. EXCEL...43 6.3.2. LINGO...44 6.3.3. LINDO...45 6.3.4. POM-QM...46 6.4. Problem maksimalnega pretoka...48 6.5. Problem najkrajše poti...51 6.6. Problem antagonističnih iger...54 6.7. Problem optimizacije zalog (NLP problem)...56 6.7.1. POM-QM...57 6.7.2. EXCEL...58 7. Primerjava uporabnosti Excel - Solverja, Linga, Linda in POM-QM pri reševanju problemov odločanja (optimizacije)...60 8. Zaključek...66 9. Literatura in viri...67 Kazalo slik in tabel...69

1. Uvod Živimo v sodobnem svetu. Tistemu, ki se ne prilagodi sodobnemu poslovanju, se zna zgoditi, da bo kaj hitro začel izgubljati stranke in ugled. Trgu je namreč potrebno zagotoviti izdelke, ki so konkurenčni, kakovostni, hitro dobavljivi in cenovno ugodni, prav tako pa je potrebno poskrbeti tudi za morebitni servis. Če vodsto podjetja ne reagira in se ne odzove na potrebe kupcev in trga, je torej možen tudi njegov propad. Kako naprej v primerih manjše ali večje krize, je odvisno od odločitev. Te morajo biti pravilne, dobro premišljene, upoštevati pa morajo tudi veliko kriterijev. Odločitve so vedno pomembne, tudi ko podjetje ni v neki hudi krizi, saj ga vodijo naprej v rast in razvoj. Ena izmed možnih pomoči, h kateri se lahko zatečejo managerji, je prav gotovo odločitveni informacijski sistem ali OIS, ki nudi pomoč pri reševanju standardni problemov operacijskih raziskav (OR). Tovrstni informacijski sistemi ponujajo uporabnikom enostaven in prijazen grafični vmesnik, preko katerega vnašajo želene podatke in oblikujejo ustrezen matematičen model problema in ustrezne optimizacijske tehnike. Slednji se ustrezno obdelajo in računalnik prikaže dobljeni rezultat. Ponekod lahko le-tega prikaže celo z grafom, ki morda rešitev pokaže še nazorneje. Managerji možnosti uporabe modernih programskih orodij pogosto zanemarijo, ne uporabijo, ali morda celo ne vedo, da obstajajo, kar je najpogosteje v manjših podjetjih. V večjih se težav zavedajo nekoliko bolj, saj je večje podjetje seveda težje izvleči iz krize kot manjše. Da do česa takšnega sploh ne pride ali pač, če že, da so posledice čim milejše, je treba imeti sisteme za podporo pri odločanju stalno v uporabi. V diplomski nalogi bo z namenom predstavitve možnosti uporabe sodobne informacijske tehnologije za podporo odločanju predstavljeno delo s štirimi programskimi orodji, kot so Excel, Lingo, Lindo in POM-QM, ki je nadgradnja Excela. V prvem delu opisujemo matematično programiranje, nato pa sledijo opisi namestitve in uporabe omenjenih orodij. Sledi prikaz uporabe programov na prototipnih primerih in na koncu sklep o uporabi teh programov. Kot omenjata Krajewski in Ritzman, managerji sprejemajo veliko odločitev medtem ko se ukvarjajo z različnimi odločitvenimi področji. Čeprav je narava vsake odločitve različna, pa imajo te skupne oporne točke. Kot prvo, je vedno potrebno jasno prepoznati in definirati problem, saj šele tako postane jasno, kako se nanj odzvati. Treba je zbrati vse potrebne informacije za analizo vseh možnih rešitev, na koncu pa izberemo takšno odločitev, ki je za dani primer najustreznejša. Do odločitve ponavadi pridemo na podlagi dolgoletnih izkušenj. Včasih je morda za njeno iskanje potrebno intenzivno skupinsko razmišljanje in podajanje idej, kot denimo v primeru metode viharjenja možganov (brain storming), vendar pa je treba zaupati tudi sodobnim tehnologijam. Miha Osojnik: Primerjava analitičnih programskih orodij pri reševanju problemov stran 1

2. Načrtovanje in razvoj odločitvenih sistemov Sprejemanje dobrih in pravih odločitev je želja in prizadevanje vsakega dobrega managerja, saj kakovost odločitve določa, kako bo podjetje poslovalo in se obnašalo na trgu. Odločitev sicer ne sprejemajo samo glavni managerji, ampak tudi ostali zaposleni, vsak na svojem področju in v svojem obsegu. Odločitveni informacijski sistemi (OIS) pripomorejo k njihovim boljšim odločitvam, oziroma jim jih olajšajo. Gre za osnovne računalniške sisteme, ki na osnovi analize problema in metod ter modelov OR pomagajo pri reševanju optimizacijskih problemov z uporabo analiziranja in modeliranja podatkov pri reševanju problemov operacijskih raziskav. Današnja tehnologija nam omogoča njeno boljšo izrabo z uporabo programskih orodij, ki za namen iskanja rešitve uporabijo ogromne baze podatkov. Ključni elementi OIS so: analiziranje modelov, upravljanje s podatki in uporabniški vmesnik. Učinkovitost programa je lahko odvisna že od samega uporabniškega vmesnika. Če je ta zapleten in težak za uporabo, še tako dober program uporabniku ne koristi, saj ga ne zna izkoristiti. OIS je pri uporabi, za razliko od običajnih odločitvenih sistemov, drugačen. Z njim se probleme rešuje interaktivno, saj sistem in odločevalec delujeta interaktivno, se pravi povezano. To poteka tako, da uporabnik narekuje sistemu naloge v skladu s sposobnostjo slednjega na temelju razsojanja, izkušenj in generiranih rezultatov. Na sliki 1 je prikazana struktura interakcije med komponentami OIS. OR uporabnik/ manager Baza metod optimizacije Vmesnik uporabnik-sistem Okenski graficni vmesnik Baza modelov Podatkovna baza Slika 1: Prikaz strukture OIS 2.1. Faze in razvoj odločitvenega informacijskega sistema Ker se vsak projekt gradi po fazah, ni nič drugače niti pri tem. Sestavljen je iz več različnih faz. Za tiste, ki smo se jih namenili opisati, ni nujno, da si sledijo striktno ena za drugo, se pa prepletajo. Tudi niso enake za vsa podjetja, saj se lahko razlikujejo od primera do primera. Miha Osojnik: Primerjava analitičnih programskih orodij pri reševanju problemov stran 2

Faza razvoja OIS so prikazane v tabeli 1 Stopnja Ocenjevanje projekta Analiza problema Načrtovanje Razvijanje, testiranje in dokumentiranje Implementacija (Uvajanje) Vzdrževenje Naloga posamezne stopnje - Definirati poblem in preveriti ali je primeren za reševanje z OIS - Ugotoviti izvedljivost projekta - Razviti predloge projekta - Analizirati odločitveni proces, to je študija ključnih elementov problema skozi serijo intervjujev z odločevalci - Izbiranje najugodnejše rešitve problema - Izbiranje programskega orodja za razvoj OIS - Določiti potrebe sistema - Določiti logični izgled sistema (glavni meni, glavne sistemske komponente, plan sprememb) - Oblikovati bazo podatkov - Oblikovatigrafični vmesnik - Razvijanje aplikacij - Razvijanje baze podatkov - Napolnjevanje baze podatkov s testnimi podatki - Implementacija in testiranje - Izboljševanje uporabniškega vmesnika s pomočjo uporabnikov - Ovrednotenje uporabniškega vmesnika - Izvesti ocenitev testiranja - Razvijanje dokumentacije - Določanje odgovorne osebe za spremembe znotraj organizacije - Motivirati uporabnike za spremembe - Preveriti in izboljšati sprejemljivost uporabnikov do novosti - Zagotoviti šolanje uporabnikov - Razvijanje plana vzdrževanja in proračuna - Pomagati uporabnikom integrirati sistem v dnevno uporabo - Izvesti pregled po uvajanju - Zagotavljanje preoblikovanja sistema Tabela 1: Prikaz faz razvoja OIS (Čižman, Černetič, 2002) Od vseh zgoraj naštetih faz, je za okvir diplomske naloge najpomembnejša faza znotraj analize problema, to je izbiranje programskega orodja. Kajti če se odločimo za tisto programsko orodje, ki nam in našim potrebam najbolj ustreza, bomo z njim veliko lažje delali, kot pa z nekim drugim orodjem, ki nam ne bo najbolje ustrezal, v smislu karakteristik in načinu uporabe. Ta faza pa je pomembna predvsem zato, ker v diplomski nalogi ne gradimo novega OIS, vendar samo med obstoječimi na trgu delamo primerjavo in iščemo njihovo uporabno vrednost. Miha Osojnik: Primerjava analitičnih programskih orodij pri reševanju problemov stran 3

3. Teoretične osnove matematičnega programiranja 3.1. Linearno programiranje Pri sodobnih načinih managementa poslovnih procesov se pogosto srečujemo z reševanjem nalog, ki imajo mnogo možnih rešitev. Med vsemi želimo poiskati le tisto, pri kateri je pri danih pogojih dosežen najboljši poslovni učinek maksimalni dobiček ali minimalni stroški, kar je odvisno od konkretnega problema. V praksi najdemo celo vrsto problemov takšne narave, kot na primer: proizvodni program, načrtovanje investicij, izbor lokacije, izbor vrstnega reda obdelav pri proizvodnji, stroške zalog, transportne stroške, čas transporta, čas realizacije naloge, izkoriščenost virov, porabo materiala, tok skozi mrežo, matrične igre ipd. Ko iščemo optimalno proizvodnjo, izkoriščenost zmogljivosti, optimalen pretok idr., govorimo o primerih iskanja maksimalnih vrednosti. Če iščemo čim krajši transportni čas ter manjše transportne stroške in zaloge, pa govorimo o primerih minimuma. Pri reševanju managerskih nalog, kot so problemi odločanja, pogosto uporabljamo rezultate, do katerih pridemo s pomočjo intuicije (ocene na prst), ne pa s pomočjo znanstveno utemeljene metode. Včasih so tako pridobljene rešitve sicer dobre, ker temeljijo na izkušnjah, posebej še, če problemi niso preobsežni, vendar pa ne vedno. Prav zato je v gospodarstvu prišlo do potrebe po uporabi eksaktnih (znanstvenih) metod pri reševanju problemov optimizacije. Ena najpreprostejših metod optimiranja je prav gotovo linearno programiranje, ki se uporablja pri iskanju ekstremene vrednosti (optimuma) na najrazličnejših področjih gospodarstva. Probleme, ki jih optimiramo s pomočjo linearnega programiranja, maksimiramo ali minimiramo z namensko funkcijo, jih poimenujemo tudi ciljna ali kriterijska funkcija. Ekstremno vrednost namenske funkcije iščemo v pogojih, ki jih opišemo s sistemom linearnih pogojnih enačb in/ali neenačb. Neznanke imenujemo jih tudi spremenljivke odločanja katerih vrednosti želimo poiskati, predstavljajo konkretne vrednosti količin, kot so teža, dolžina, prostornina, čas, število izdelkov, idr., ki očitno ne morejo biti negativne. Pri linearnem programiranju gre torej za iskanje takšnih nenegativnih vrednosti spremenljivk, da bo vrednost clijne funkcije, ki se meri v denarnih enotah, ekstremna. Sodobna računalniška in informacijska tehnologija omogoča hitro in učinkovito reševanje linearnih pa tudi nelinearnih programov velikih dimenzij. Razpoložljiva programska oprema za matematično programiranje nudi uporabniku, poleg osnovnih rešitev v numerični ali grafični obliki, tudi raznovrstne dodatne analize (kaj-če) rezultatov optimizacije, kar znatno olajšuje sprejemanje čim boljših odločitev v pravem času. Kljub vsej razpoložljivi informacijski tehnologiji pa je še vedno treba najprej formulirati model»ročno«na osnovi podatkov s pomočjo ustreznih enačb. Pri tem pomembnem opravilu moramo biti zelo pozorni na to, da matematična formulacija kar najbolj ustreza dejanskemu problemu. Kajti, dobra formulacija problema brez dvoma predstavlja vsaj pol poti do končne rešitve. Takšen pristop k reševanju problemov matematičnega programiranja pa zahteva poznavanje teoretičnih osnov linearnega programiranja in tudi uporabe ustreznih programskih orodij, kot so naprimer Excel, Lindo in SAS System (Čižman, 2004). Miha Osojnik: Primerjava analitičnih programskih orodij pri reševanju problemov stran 4

Glede na lasten zgodovniski razvoj, je linearno programiranje sorazmerno mlada veja uporabe matematike. Njegovi začetki segajo pred drugo svetovno vojno, prve formulacije problemov linearnega programiranja in metode reševanja pa srečamo leta 1939 v knjigi ruskega matematika L. V. Kantoroviča o organizaciji in načrtovanju proizvodnje. Neodvisno od ruskih matematikov so linearno programiranje razvijali na Zahodu, posebno znanstveniki v ZDA, kjer je med prvimi F. L. Hitchcock leta 1941 objavil študijo o nekem transportnem problemu. Šest let zatem je G. B. Dantzig razvil splošno algebraično metodo za reševanje linearnih programov, imenovano»simpleks metoda«. Z njeno pomočjo je možno numerično rešiti vsak problem linearnega programiranja. Kmalu po njenem odkritju jo je Dantzig uporabil pri reševanju problema minimalnih stroškov prehrane. Linearno programiranje se je razvijalo vzporedno in v tesni povezavi z drugima dvema znanstenima vejama: z med-sektorsko analizo in teorijo strateških iger. Matematično osnovo teh treh vej tvori linearna algebra. Praktični problemi linearnega programiranja so običajno zelo kompleksni, zaradi česar pri numeričnem reševanju zahtevajo toliko računanja, da jih lahko praktično obdelujemo le s pomočjo računalnika. Zato je razumljivo, da se je linearno programiranje začelo uporabljati v gospodarski praksi šele tadaj, ko je bilo za numerično reševanje možno uporabljati elektronske računalnike. Pomemben dogodek v razvoju linearnega programiranja najdemo v letu 1952, ko je bil v okviru projekta, ki ga je vodil Dantzig, izdelan prvi program za reševanje problemov organizacije po simpleks metodi z uporabo računalnika. Ob koncu 60-tih let so bili na tržišču že prvi programski paketi za linearno programiranje. Danes programska orodja za matematično programiranje omogočajo milijon-krat hitrejše reševanje problemov kot v letu 1985, matematični modeli pa lahko dosegajo preko 200.000 spremenljivk in omejitev (Čižman, 2004). Problem linearnega programiranja izrazimo v matematični obliki tako: Linearnem programu želimo določiti vrednosti odločitvenih spremenljivk x1, x2,..., x s, te pa morajo odgovarjati pogojem nenegativnosti: x1 x2 x s 0, 0,..., 0 in linearnim neenačbam: a x + a x +... + a x < b > 11 1 12 2 1s s 1 < a x + a x +... + a x b > m1 1 m2 2 ms s m tako, da ima ciljna funkcija: z = c1x1 + c2x2 +... + csxs ekstrem (minimum ali maksimum). Miha Osojnik: Primerjava analitičnih programskih orodij pri reševanju problemov stran 5

3.1.1. GRAFIČNA METODA Grafična metoda je enostavna, vendar s pomankljivostjo, da za problem z več kot dvema spremenljivkama praktično ni več primerna. Za reševanje problemov z več spremenljivkami, oziroma bolj splošna metoda, je metoda simpleksov. Za lažjo predstavo si oglejmo primer linearnega programiranja (LP1) z dvema spremenljivkama x 1 in x 2. Želimo jima določiti vrednost, zadoščati pa morata naslednjim pogojem nenegativnosti: x 0, x 0 1 2 in linearnim neenačbam: x 3 x 1 2 6 2x + x 9 1 2 3x + x 4 1 2 tako, da ima ciljna funkcija: maksimum. z = 3x + 2x 1 2 Grafični model problema je prikazan na sliki 2. Iz neenačb izračunamo sečišča s koordinatnima osema in te premice vrišemo v koordinatni sistem. Točke znotraj nastalega lika so vse možne rešitve, teh je neskončno, poiskati pa je potrebno optimalno. Ogljišča lika določajo ekstremne vrednosti, odvisno od smernega koeficienta ciljne funkcije. Eno od teh ogljišč je rešitev. Na sliki 2 je ciljna funkcija predstavljena kot črtkana črta, sečišče z ogljiščem A pa predstavlja rešitev. Rešitve zgoraj navedenega problema so torej: x 1 = 1,5 x 2 = 6 in Z max =16,5 in to je v točki A (1.5, 6), kjer je tudi maksimalna vrednost ciljne funkcije z = 16,5. x2 6 A 4 3 0 1,333 1,5 3 x1 Slika 2: Grafični prikaz linearnega programa Miha Osojnik: Primerjava analitičnih programskih orodij pri reševanju problemov stran 6

3.1.2. ANALIZA OBČUTLJIVOSTI, PRIMARNOST IN DUALNOST Informacije, ki se nanašajo na spremembe tehnoloških koeficientov, razpoložljivih kapacitet (desno-stranski koeficienti) in koeficientov ciljne funkcije (cene ali stroški) v zvezi z optimumom so najbolj zanimive. Analiza takih sprememb se v strokovni literaturi imenuje analiza občutljivosti ali»kaj če analiza«oz. post-optimalna analiza. Pri analizi občutljivosti želimo ugotoviti, kaj se zgodi z optimalno rešitvijo, če spremenimo kakšen koeficient v linearnem programu. V praksi se najpogosteje uporablja dve vrsti analiz, imenovani c-analiza in b-analiza. C-analiza je uporabna predvsem pri vprašanju občutljivosti cene, torej za koliko lahko spremenimo ceno, da rešitev ostane optimalna, b-analiza pa je primerna za ugotavljanje območja dovoljenih sprememb desnostranskih koeficientov v pogojnih neenačbah. (Čižman, 2004) Vsakemu linearnemu programu lahko pridružimo določen drugi linearni program. Oba sta medsebojno povezana tako, da imata enake vrednosti ciljne funkcije in da dobimo optimalno možno rešitev drugega z optimalno rešitvijo prvega. Tako prvi linearni program imenujemo primarni, njemu pridruženemu pa pravimo dualni. V dualnem načinu lahko isti problem pogledamo iz drugega zornega kota. Dualni program uporablja enake parametre kot primarni program, vendar na različnih mestih. Vsakemu primarnemu linearnemu programu lahko priredimo dualnega na sledeč način: 1. Vrstice koeficientov preidejo v stolpce, stolpce pa v vrstice. 2. Omejitve primarnega programa postanejo koeficienti ciljne funkcije dualnega programa, koeficienti ciljne funkcije primarnega programa, pa postanejo omejitve dualnega programa. 3. Neenačaji obrnejo smer. 4. Standardni primarni model maksimuma preide v problem minimuma. 5. Standardni primarni model minimuma preide v problem maksimuma. Za primer LP1 ima dualni program naslednjo obliko: Omejitve: y + 2y 3y 3 1 3 4 y + y y 2 2 3 4 ciljna funkcija: w = 3y + 6y + 9y 4 y (min) 1 2 3 4 3.1.3. METODA SIMPLEKS Reševanje problemov linearnega programiranja z metodo simpleks je bolj splošno od uporabe metode grafičnega reševanja, ki je primerna za dve spremenljivki. Pri metodi simpleks se lahko uporabi poljubno število spremenljivk odločanja. Od časa, ko je to metodo razvil Dantzig, se ni spremenila, se je pa možnost njene uporabe, saj je z razvojem računalniške tehnologije danes možno reševati kompleksne probleme. Miha Osojnik: Primerjava analitičnih programskih orodij pri reševanju problemov stran 7

Linearni program rešujemo s simpleks metodo po naslednjem postopku: 1. Vpeljemo dopolnilne spremenljivke in z njimi spremenimo neenačbe v enačbe. 2. Vpeljemo umetne spremenljivke, ki jih ustreznim enačbam prištejemo. 3. Sestavimo tabelo. 4. Določimo bazo vektorskega prostora 5. Tabeli dopišemo dodatno vrstico z j c j, kjer indeks j zavzema vrednosti 0, 1, 2,..., n. 6. Določimo vektor P k, ki ga uvedemo v bazo. 7. Določimo vektor P r, ki ga odstranimo iz baze. 8. Transformiramo koeficiente v prvotni tabeli. 9. Po transformaciji koeficientov dobimo novo tabelo in njeno ustrezno novo možno rešitev. 10. Ugotovimo, ali je mogoče novo možno rešitev poboljšati. 11. Če je izboljšava izračuna možne rešitve mogoča, ponovimo iteracijo in začnemo računanje po tej predlogi v 6. točki. (Čižman, 2004) 3.2. Nelinearno programiranje Mnogo je problemov, ki jih z linearnim programiranjem ne moremo rešiti zaradi dveh razlogov. Prvi je, da je tovrsten problem»zelo«nelinearen, in da bi bil linearen približek neuporaben, drugi pa, da je že problem po naravi takšen, da se moramo oprijeti nelinearnega programiranja. Za reševanje problemov nelinearnega programiranja obstajajo indirektne metode, ki so analitične in enokoračne, in direktne metode, ki so numerične in iterativne večkoračne. V praksi so indirektne primernejše od direktnih le v primerih, ko je odločitvenih spremenljivk in omejitev malo (<10). Splošni problem nelinearnega programiranja (NLP) ima naslednjo obliko: Določiti moramo spremenljivke odločanja x1, x2,..., x n, tako da je: ki zadošča: min (ali maks) z = f ( x x x ),,..., n 1 2 Miha Osojnik: Primerjava analitičnih programskih orodij pri reševanju problemov stran 8

< g ( x, x,..., x ) b > < g ( x, x,..., x ) b > 1 1 2 n 1 2 1 2 n 2 < g ( x, x,..., x ) b > m 1 2 n m Tako kot je pri linearnem programiranju funkcija f(x) ciljna funkcija linearnega programiranja, je tu f(x) funkcija nelinearnega programiranja, g(x) pa so nelinearne omejitve nelinearnega programiranja. Problemi nelinearnega programiranja se ne rešujejo tako kot problemi linearnega programiranja. Pri linearnem lahko denimo uporabimo univerzalno metodo simpleks, pri nelinearnem programiranju pa tega ne moremo. Za vsak nelinearni problem posebej je potrebna nova metoda ali pa je treba metodo reševanja tega problema prilagoditi v sozvočju z njegovim matematičnim modelom, dimenzijami in značajem nelinearnosti. Specifični problemi nelinearnega porgramiranja so tisti, pri katerih je nelinearna ciljna funkcija ali pa so nelinearne omejitve. Da je reševanje enostavnejše, probleme razvrstimo, glede na obliko ciljne funkcije in omejitev, v različne kategorije, kot so na primer problemi nelinearnega programiranja z linearnimi omejitvami, kvadratično programiranje ali celoštevilčno programiranje. Če v vseh omejitvah nastopajo samo enakosti (enačbe), lahko tovrstne probleme rešujemo z metodo Lagrange-jevih multiplikatorjev. Med NLP spadajo tudi kvadratno, ulomljeno, 0/1 (binarno) in celoštevilčno (integer) programiranje. (Zadnik, 2004) 3.3. Celoštevilčno programiranje V vsakdanji praksi je mnogo problemov, ki so načeloma celoštevilčni. Na primer pri izračunu, pri iskanju proizvodnje količine, večinoma dobimo za rezultat neko realno (necelo) število. No, če bi tovarna v enem dnevu izdelala 442,7 avtomobila, bi bilo to nelogično. Rezultat mora namreč biti celo število. Problema celoštevilčnosti se običajno znebimo tako, da na decimalna mesta pozabimo ali števila zaokrožimo navzgor. Ta popravek se pri velikih količinah praktično ne pozna, pri majhnih pa moramo upoštevati tudi decimalna mesta. Mnogo dejanskih problemov linearnega programiranja pa je takšnih, da so že po svoji naravi celoštevilčni in si torej z zaokroževanjem rešitev ne moremo pomagati. Zato so ti opredeljeni kot problemi celoštevilčnega programiranja. Gre za linearne programe, v katerih morajo biti spremenljivke nenegativna cela števila. Ko so v celoštevilčnem programiranju vse spremenljivke definirane kot cela števila, ga imenujemo čisto celoštevilčno programiranje. Če pa so definirane kot cela števila samo nekatere izmed spremenljivk, govorimo o problemu mešanega celoštevilčnega programiranja. Celoštevilčni problemi programiranja, v katerem morajo biti vse spremenljivke enake 0 ali 1, imenujemo problem nič-ena (0-1) programiranja. Miha Osojnik: Primerjava analitičnih programskih orodij pri reševanju problemov stran 9

Enostaven primer celoštevilčnega programa za določanje maksimuma: x, x 0 1 2 x + x 6 1 2 z = 3x + 2x 1 2 Z je ciljna funkcija, x 1 in x 2 pa celoštevilčni nenegativni spremenljivki. V praksi večino celoštevilčnih problemov (IP) rešujemo z metodo»razvejevanja in omejevanja«(branch and bound method), ki najde rešitev problema z učinkovitim (pametnim) ugotavljanjem točk na področju možnih rešitev posameznega problema. Tipični primeri celoštevilčnega programiranja so: Problem trgovskega potnika Problem nahrbtnika Razporejanje kapitala Miha Osojnik: Primerjava analitičnih programskih orodij pri reševanju problemov stran 10

4. Pregled pomembnejših komercialnih programskih orodij (PO), za linearano, nelinearno in celoštevilčno programiranje Za področje komercialnih analitičnih programskih orodij bi lahko rekli, da je na njem kar precej pestro dogajanje, saj je izbira precejšna. Na voljo je mnogo programskih orodij, nekatera pa so celo brezplačna. Pregled pomembnejših komercialnih programskih orodij podajamo v tabelah 2, 3 in 4. AIMMS AMPL CPLEX Linear Optimizer C-0WHIZ DATAFORM DecisionPro DecisionScript EZMod FortMP Frontline Solvers for AMPL Frontline Solvers for Excel GAMS GAUSS HOPDM HS Linear Optimizer IBM Optimization Solutions LAMPS Large-Scale LP Solver Large-Scale SQP Solver LINDO LINGO LOQO LPS 867 LP-Toolkit LSSOL Mathematica MathPro 2000 MIMI MINOS MOSEK Optimization Tools MPL MPSIII NAG Numerical Libraries NAG Fortran Libraries OML OMNI OMP Optimization OPL Studio Optimal Engineer OptiMax 2000 OSL PIMS POM-QM Premium Solver Platform PROFIMAX Profit Vehicle Router Quant Methods QPOPT Software(QMS) SAS/OR SCIMOD SNOPT Solver Suite Solver DLL Platform SOPT TOMLAB What'sBest! XA Optimizer and Solver Xpress-MP XPRESS Solver Engine Tabela 2: Prikaz komercialnih programskih orodij za linearno programiranje V tabeli 3 so predstavljena komercialna orodja za nelinearno programiranje. AIMMS GAMS IBM Optimization Solutions KORBX LINGO LOQO MathPro 2000 MINOS NPSQL Optimal Engineer OSL POM-QM (v povezavi z Excel-om) SCIONIC Solver Suite What's Best! Tabela 3: Prikaz komercialnih programskih orodij za nelinearno programiranje Miha Osojnik: Primerjava analitičnih programskih orodij pri reševanju problemov stran 11

V tabeli 4 so predstavljena komercialna orodja za celoštevilčno programiranje. CPLEX Linear Optimizer FortLP GAMS IBM Optimisation Solution LAMPS LINDO LINGO MathPro 2000 MPL MPSIII OML OMNI Optimal Engineer PIMS POM-QM SAS/OR Solver Suite (Excel) What's Best! XA Optimizer and Solver Xpress-MP Tabela 4: Prikaz komercialnih programskih orodij za celoštevilčno programiranje Miha Osojnik: Primerjava analitičnih programskih orodij pri reševanju problemov stran 12

5. Predstavitev programskih orodij EXCEL-solver, LINGO, LINDO in POM-QM Fakulteta za organizacijske vede v okviru Laboratorija za logistiko uporablja v izobraževalnem programu nekaj programskih orodij z algoritmi za linearno programiranje, ki temeljijo na metodi simpleks, za nelinearno programiranje algoritme, temelječe na gradientnih metodah, za celoštevilčno programiranje pa algoritme, ki temeljijo na metodah razvejanja in omejitve (branch and bound method). Ta orodja omogočajo vnos različnega števila omejitev. Nekatera je z dodatnim doplačilom možno razširiti za obdelavo še večjega števila omejitev. Orodja, ki jim bomo posvetili pozornost so Microsoft Excel, Lingo, Lindo in POM-QM. Čeprav so ta programska orodja namenjena za lažje in hitrejše reševanje tovrstnih problemov, pa je še vedno potrebno ročno pripraviti podatke za vnos, problem pa je potrebno formulirati v matematični obliki, ki jih program zna sprejeti in obdelati. 5.1. EXCEL Excel je del programskega paketa Microsoft Office. Namenjen je delu s številkami, tabelami in grafi. Uporaben je na večih področjih poslovanja. Od proizvodnje, financ, distribucije in nabave do načrtovanja, primeren pa je tudi za domačo uporabo. Excela kot samostojnega dela ni mogoče kupiti, ampak le v okviru celotnega paketa Office. V Excelu je že vključen reševalec, imamo pa možnost uporabe še zmogljivejšega, vendar pa je zanj potrebno plačati. Podjetje Frontline systems Inc., ki je tudi izdelalo reševalca, ki je že vključen v excel, ponuja dve zmogljivejši verziji reševalca. Najzmogljivejši je Premium Solver Platform, če pa ne želite zapraviti za to verzijo reševalca preveč denarja oziroma ne potrebujete teh zmogljivosti, je druga možnost Premium Solver. Primerjava zmogljivosti vseh treh verzij reševalca je podana v tabeli 5. LASTNOSTI Standard Excel Solver Premium Solver Premium Solver Platinum Optimizacijske metode: Linearni simpleks reševalec Samo za LP Samo za LP LP/Kvadratno GRG Nelinearni reševalec Da Da Da (hitrejši) Mešani celoštevilčni Da Da (hitri) Da (hitrejši) reševalec Velikost problema: Linearne spremenljivke x 200 x 200 1000 x 8000 2000 x 8000 omejitve Nelinearne spremenljivke x 200 x 100 400 x 200 500 x 250 omejitve Poročila reševalca: Poročilo o rešitvi problema Da Da Da Poročilo o občutljivosti Da Da Da Poročilo o omejitvah Da Da Da Cena licence z letno podporo: Brezplačno $895 $1,795 Tabela 5: Prikaz zmogljivosti posameznih orodij in njihove cene Miha Osojnik: Primerjava analitičnih programskih orodij pri reševanju problemov stran 13

Uporaba reševalca Reševalec je program za optimizacijo in reševanje linearnih, nelinearnih in celoštevilčnih problemov. Z njim lahko poiščemo optimalno vrednost za formulo v ciljni celici. Reševalec dela s skupino celic, ki so povezane, bodisi posredno bodisi neposredno, s formulo v ciljne celice. Prilagaja vrednosti v spreminjajočih celicah, imenovanih prilagodljive celice, ki jih določi uporabnik, da izračuna rezultat, ki ga uporabnik prav tako določi v formuli ciljne celice. Da se omejijo vrednosti, ki jih potem reševalec uporabi v modelu, je treba uporabiti omejitve, le-te pa se lahko nanašajo tudi na druge celice, ki vplivajo na formulo ciljne celice. Reševalec se uporablja za določanje minimalne ali maksimalne vrednosti ene celice s spreminjanjem drugih celic na primer, ko se spremeni količina proračuna za oglaševanje, lahko ugotovimo, kakšne posledice ima to na načrtovan dobiček. Namestitev reševalca Za reševanje linearnih programov v Excelu je potrebno reševalca (solver) najprej namestiti, v kolikor že ob namestitvi ni bil nameščen. Reševalca najdemo, če kliknemo na Orodje/dodatki, postavimo kljukico pri Dodatek reševalec oziroma Tools/Add-ins in kljukico pri Solver Add-ins, če je angleška verzija programa, kot je prikazano na sliki 3. Potrebno pa je imeti originalno zgoščenko, ki jo zahteva postopek, da z nje prenesemo potrebne podatke za namestitev. Slika 3: Dodajanje reševalca Tako smo torej dodali funkcijo reševalca. Osnovna verzija je sposobna reševati linearne probleme z do 200 omejitev ter do 100 omejitev, če gre za nelinaerni problem. Za reševanje celoštevilnih problemov pa z uporabo metode razvejanja in omejevanja (Branch and bound method) vključimo probleme z 10 do 20 spremenljivkami. Miha Osojnik: Primerjava analitičnih programskih orodij pri reševanju problemov stran 14

Delovanje Reševalca bom prikazal na vzorčnem primeru (LP2): Podjetje izdeluje dve vrsti kalkulatorjev: običajne in hitre. Običajne prodaja z dobičkom 9, hitre pa 14. Na dan lahko izdela 200 enot običajnih in 100 enot hitrih. Za izdelavo kalkulatorjev ima na voljo omejeno število delovnih ur, na dan 160 ur. Da izdela običajnega, potrebujejo 10 minut, za hitrega pa 30. Določiti je treba, kakšna naj bo proizvodnja, da bo dobiček maksimalen, delovne ure in proizvodne zmogljivosti pa ne bodo presežene. Napišimo program najprej v matematični obliki: x 0, x 0 1 2 običajen 200 hiter 100 0,166667 * običajen + 0,5 * hiter 160 Opomba: x 1 x 2... običajen... hiter kjer ima ciljna funkcija: Maksimum. z = 9 * običajen + 14 * hiter Reševalca najdemo, če spet kliknemo na Orodja/Reševalec oziroma Tools/Solver in potem na Reševalec oziroma Solver, kot prikazuje slika 4. Podatke v Excel vnašamo, kot običajno, v obliki tabele. V nadaljnih primerih bomo pri uporabi Excela vedno uporabili to obliko, ki je prikazana na sliki. Ta oblika je uporabljena zaradi boljše preglednosti, saj je enobarvna tabela lahko nekoliko nepregledna. Vsak uporabnik pa, seveda, lahko uporabi program po svoji želji. Torej v sivem delu so podatki, v zelenem so omejitve, v modrem je zapisana ciljna funkcija, v rumenem pa je vrednost ciljne funkcije (rešitev), formulo zanjo pa moramo prej vpisati v to celico. V zelene celice vpišemo linearne enačbe, kot seštevek in zmnožek podatkov iz sivega polja in vrednosti spremenljivk x n. Vrednost spremenljivk x 1, x 2,..., x n, so napisane pod modrim delom in te bomo, poleg rezultata v rumeni celici, vedno iskali. Na spodnji sliki lahko vidimo, da je rešitev tega linearnega programa sledeča: običajnih kalkulatorjev mora biti 200 enot, hitrih pa 100, da bo maksimalen dobiček 3200. V tretji vrstici so vse enote pretvorjene v skupno enoto. 10 minut = 0,1666667 ure, 30 minut = 0,5 ure. Vidimo pa lahko tudi, da je bilo za doseganje tega rezultata potrebno 83,33 delovnih ur. Miha Osojnik: Primerjava analitičnih programskih orodij pri reševanju problemov stran 15

Slika 4: Zagon reševalca Postopek, kako pridemo do rešitve, pa je sledeč. Ko imamo podatke in formule vpisane v tabelo, kliknemo na reševalca in se odpre novo okno, v katerega vnšamo podatke za reševalca. Ogledamo si ga lahko na sliki 5. 2 1 10 3 4 5 6 7 8 11 9 Slika 5: Vnos parametrov V to okno vnašamo različne paremetre. Najprej potrebujemo ciljno funkcijo, nato pa spremenljivke in omejitve. V polju 1, Nastavimo ciljno funkcijo (Set target cell), določamo ciljno funkcijo. To naredimo tako, da že prej v pravo celico v tabeli vpišemo ciljno funkcijo, tukaj pa kliknemo gumb zraven okvirčka in potem na celico, v katero smo prej vpisali formulo. V polju 2, Equal to (Enako), določamo, ali bomo funkcijo maksimirali ali minimirali. Če hočemo vrednost po želji, jo vpišemo v okence Value of. V polju 3, S spremembo celic (By changing cells), določimo celice, ki jih reševalec lahko spreminja, dokler ni zadoščeno omejitvam problema in ciljni Miha Osojnik: Primerjava analitičnih programskih orodij pri reševanju problemov stran 16

funkciji. Celice, ki smo jih spremenili, morajo biti s ciljno celico povezane posredno in neposredno. Gumb 4, Ugani (Guess). S klikom nanj funkcija ugane celice brez formul, ki se sklicujejo na ciljno funkcijo v Nastavi ciljno celico. Polje 5, Predmet omejitve (Subject to the constraints). V tem polju se prikažejo omejitve, ki jih vnašamo, ko pritisnemo gumb 6, Dodaj (Add). Odpre se vnosno okno, nato pa označujemo celice, ki jim želimo določiti omejitve. Vsako novo omejitev potrdimo z gumbom Dodaj. Tu se lahko nastavi tudi celoštevilčne vrednosti (int) in vrednosti za binarno programiranje (bin). To okno je prikazano na sliki 6. Slika 6: Nastavitev omejitev Gumb 7, Spremeni (Change), odpre isto okno, kot gumb 6, vendar je najprej potrebno označiti eno od omejitev iz polja 5, ki jo želimo spremeniti. Potem lahko želeno omejitev spremenimo ali popravimo in kliknemo OK. Gumb 8, Izbriši (Delete), izbriše eno od omejitev iz polja 5, ki pa jo je potrebno prej označiti. Gumb 9, Ponastavi vse (Reset all), zbriše trenutne nastavitve problema in ponastavi vse nastavitve na njihove izvirne vrednosti. Ko smo pravilno nastavili ciljno funkcijo, spremenljivke in omejitve, kliknemo gumb 10, Reši (Solve), in program bo izračunal rešitev, še prej pa se odpre novo okno (slika 7), kjer reševalec sprašuje, ali naj v preglednici obdrži rešitve oziroma izvirne vrednosti. Lahko izbiramo tudi med tremi poročili: Poročilom o odgovoru (Answer), Občutljivostno analizo (Sensitivity) in Poročilom o omejitvah (Limits). Poročilo o odgovoru Slika 7: Izbira poročil To poročilo nam za prilagodljive celice in ciljno funkcijo izpiše izvirne in končne vrednosti. Pri izbranih omejitvah se vpiše tudi formula omejitve in razlika med začetno in končno vrednostjo omejitve. Miha Osojnik: Primerjava analitičnih programskih orodij pri reševanju problemov stran 17

Poročilo o omejitvah Izpiše nam zgornjo in spodnjo mejo posamezne spremenljive celice. Poročilo o občutljivostni analizi To poročilo vsebuje tudi postavko Omejeni stroški. Na primeru je videti to tako, da če spremenljivki povišamo vrednost za eno enoto, se ciljna vrednost posledično poveča ali zmanjša za vrednost omejenih stroškov. Nastavitve reševalca Če v oknu reševalca, na sliki 5, kliknemo na gumb 11, Možnosti (Options), se odpre okno, v katerem lahko reševalca nastavljamo po želji. To prikazuje slika 8. Tu lahko nastavljamo parametre za linearne in nelinearne probleme ter napredne lastnosti procesa reševanje problema, imamo pa tudi možnost shraniti in naložiti modele. 1 2 3 4 5 9 6 7 8 Slika 8: Možnosti Kot je razvidno iz slike, je možno nastavljati kar precej parametrov. Ogledali si bomo tiste, ki so najpogosteje v uporabi. V polje 1, Maks. Čas (Max time), vpisujemo čas, ki ga damo na razploago, da proces opravi svoje delo. Najdaljši čas, ki ga je možno vpisati, je 32767 sekund, že privzeto pa je nastavljen na 100 sekund. V polje 2, Iteracije (Iterations), vpišemo število iteracij oziroma ponovitev, ki jih želimo dovoliti. Če proces reševanja doseže maksimalen čas in število ponovitev predenj reševalec najde rešitev, se odpre okno s poskusno rešitvijo. V polje 3, Natančnost (Precision), vnašamo natančnost rešitve. Manjša kot je vnešena številka, večja bo natančnost. Torej je denimo 0,000001 bolj natančno število kot 0,001. V polje 4, Odstopanje (Tolerance), se vnaša vrednost v odstotkih, pomeni pa delež napak, ki jih še dovoljujemo v rešitvi. Torej povemo, do kje bo rezultat za nas še vedno sprejemljiv. Miha Osojnik: Primerjava analitičnih programskih orodij pri reševanju problemov stran 18

V polje 5, Konvergenca (Convergence), vnesemo vrednost relativne spremembe, ki jo še dovoljujemo, predenj reševalec najde rešitev. Manjša kot je številka, manjša relativna napaka je dovoljena. Polje 6, Predpostavi linearni model (Asume linear model), pospeši reševanje problema, ko so vsa razmerja v modelu linearna in rešujemo linearno optimiran problem, oziroma linearni približek nelinearnega problema. Predpostavi nenegativno (Assume Non-Negative) pa pomeni, da reševalec prevzame spodnjo mejo 0 (nič) za vse nastavljive celice, za katere ni določene spodnje meje v polju, kjer se dodajajo omejitve Polje 7, Prikaži rezultate iteracij (Show iterations results), obkljukamo, če želimo prikaz rezultatov po vsaki končani ponovitvi. V polju 8 Ocena (Estimates) aktiviramo aktivnosti, ki se nanašajo na nelinearno programiranje. Polje 9, OK pomeni potrditev nastavitev in zapustitev nastavitev, Cancel pomeni preklic in zapustitev nastavitev, Naloži model (Load Model) sproži postopek nalaganja (oz. priklica) že shranjenega modela in Shrani model (Save model) sproži postopek shranjevanja modela na željeno lokacijo. Miha Osojnik: Primerjava analitičnih programskih orodij pri reševanju problemov stran 19

5.2. LINGO Lingo je vsestransko orodje, namenjeno izgradnji in reševanju linearnih, nelinearnih in celoštevilčnih problemov hitreje, enostavneje in bolj činkovito. Je celovit paket, ki vključuje zmogljiv programski jezik za izražanje optimizacijskih modelov, prijazno okolje za gradnjo in urejanje problemov ter niz vgrajenih hitrih reševalcev. Zadnja verzija Linga, verzija 11, je zmožna delovati na več operacijskih sistemih in delovnih postajah. Windowsu, ki delujejo na 32- ali 64-bitni tehnologiji in na operacijskem sistemu Lunux. Starejše verzije Linga delujejo tudi na operacijskem sistemu Solaris in Linux na procesorjih Itanium II in SPARC32 na 64- oziroma 32-bitni tehnologiji. Prav tako je možno dobiti več različno zmogljivih različic. Brezplačno različico kar na proizvajalčevi strani (www.lindo.com), ki pa ima omejene zmogljivosti v smislu manjšega števila spremenljivk in omejitev. Te so enako zmogljive kot plačljive različice, vendar so zmožne reševati samo manjše probleme. Plačljive različice so seveda zmožne reševati kompleksnejše in obsežnejše probleme. V tabeli 6 je prikazan seznam različic skupaj s ceno in zmogljivostmi. (V tej diplomski nalogi uporabljamo verzijo, ki je brezplačna, in jo je možno uporabiti tudi na naši fakulteti.) Celoštevilčna Nelinearna Globalna Različica Cena Omejitve Spremenljivka spremenljivka spremenljivka spremenljivka Osnovna $495 1000 2000 200 200 10 Izboljšana $995 4000 8000 800 800 20 Industrijska $2.995 16000 32000 3200 3200 50 Razširjena $4.995 neomejeno neomejeno neomejeno neomejeno neomejeno Tabela 6: Seznam različic LINGO Prav tako kot pri Excelu v Reševalcu, tudi tukaj lahko uporabimo pomoč (Help), ki je razložena tako, kot v vseh običajnih priročnikih. Vključeno je veliko primerov s komentarji. Uporaba Linga Lingo je vsestransko orodje, izdelano za ustvarjanje in reševanje matematičnih optimizacijskih problemov enostavneje in bolj učinkovito. Vgrajene ima številne reševalce, ki so povezani z okoljem za modeliranje (modeling envoirment). Lingo je oblikovan tako, da proces reševanje modelov od uporabnika zahteva najmanjši možni vložek dela. Glede na strukturo modela, Lingo avtomatično prilagodi notranje parametre ter sam izbere ustreznega reševalca. Vgrajeni reševalci so: Linearni reševalci (Linear solver) Za reševanje linearnih problemov Lingo uporablja metodo Simplex, ki je bila opisana že v teoretičnemu delu tega zapisa in Mejno metodo. Slednja je alternativna možnost Miha Osojnik: Primerjava analitičnih programskih orodij pri reševanju problemov stran 20

reševanja linearnih problemov v Lingu, ki hitro rešuje probleme velikega obsega pa tudi specifične probleme. Celoštevilčni reševalci (Global solver) Uporabni so za modele, kjer veljajo splošne in binarne omejitve. Lingovi reševalci delujejo v povezavi z reševalci za linearne, nelinearne ter kvadratne probleme. Vsebujejo pa tudi veliko celoštevilčnih omejitev, ki pri velikih ali celoštevilčnih modelih precej izboljšajo čas reševanja. Nelinearni reševalci (Multistart solver) Za nelinearne modele obstaja več vrst reševalcev in sicer: Splošni nelinearni reševalec (General nonlinear solver) Nelinearni reševalec za Lingo je osnovan na GRG algoritmih (Generalized reduced gradient) ter SLP modelih (Successive linear programing), ki nudijo možnosti ustrezne in hitre rešitve. Globalni reševalec (Global solver) Globalni reševalec se za razliko od lokalnega reševalca, ki se ustavi, ko najde lokalni optimum (to je lahko minimum ali maksimum), ne ustavi pa se pri prvem najdenem lokalnem optimumu, vendar išče toliko časa, dokler ne najde globalnega. Ta reševalec pretvori originalne nekonveksne ter nelinearne probleme v več konveksnih (linearnih). Nato uporabi metodo razvejanja in omejevanja (Brench and bound method) za izčrpno iskanje globalne rešitve med na novo nastalimi podproblemi. Večzačetni reševalec (Multistart solver) Običajen NLP reševalec se aktivira ob začetku iskanja lokanega optimuma. Uporabnik določa maksimalno število poskusov. Ta metoda pride v poštev, ko časovno omejeno iskanje globalnega optimuma odpove, saj večzačetni reševalec omogoča hitrejše in boljše iskanje rešitve. Kvadratni reševalec (Quadratic Solver) Tovrsten reševalec omogoča hitrejše reševanje linearnih, mešanih celoštevilčnih ter kvadratnih modelov z uporabo Mejne metode kot Splošni nelinearni reševalec. Z njim je možno rešiti tudi kvadratne modele z binarnimi ter celoštevilčnimi omejitvami. Na ta način je Lingo primeren za reševanje problemov regresije, optimizacije portfelja in nekaterih logističnih problemov. Predpostopkovni proces (Preprocessing) Ta proces je vključen v vse reševalce. Linearni in nelinearni reševalci vključujejo merilo in tehnike za zmanjševanje obsega modelov. Tehnika za zmanjševanje omogoča hitrejše reševanje problemov s pomočjo analiziranja prvotne formulacije ter ustreznega krčenja obširnejših modelov v manj obširne. Miha Osojnik: Primerjava analitičnih programskih orodij pri reševanju problemov stran 21

Začetek uporabe programa Potem, ko na proizvajalčevi strani izpolnimo obrazec z nekaj osebnimi podatki, prenesemo zagonsko datoteko na računalnik. Z njo potem instaliramo program na želeno lokacijo. Ikona se postavi na namizje, dvakrat kliknemo nanjo in odpre se program, kot je prikazano na sliki 9. Slika 9: Začetno stanje Na sredini imamo prazen»list«, kamor se potem piše program, nad njim pa je serija ikon in orodna vrstica. Po želji lahko te in še nekaj drugih vizualnih pripomočkov izklopimo in ponovno vklopimo, če kliknemo LINGO in nato Options, kjer potem dodajamo in odvzemamo kljukice za stvar, ki jo želimo imeti prikazano oziroma ne. Kot je razvidno iz slike, je v primerjavi z Excelom, ki ima poleg reševalca še mnogo drugih matematičnih funkcij za različne namene, Lingo namenjen resnično samo za namen matematičnega programiranja. Pisanje modela z urejevalnikom Za razliko od Excela, ni potrebno v posebno okno vnašati formul, omejitev in ostalih parametrov. Program se napiše tako, kot bi ga pisali ročno na list papirja, nakar ve sam, kaj mora izračunati, če je seveda vse pravilno napisano, saj za sintakso uporablja poseben (algebraičen) programski jezik. Med pisanjem lahko naredimo tudi osebne komentarje za lažje razumevanje, če bi pozneje spet odpirali program ali pa, če bi ga bral za nami kdo drug. Komentarje je potrebno označiti, da jih potem program ne bo vključil v izračun, saj bi v tem primeru prišlo do napake in ne bi dobili rezultata. Komentar začnemo pisati tako, da postavimo na začetek klicaj (!), zaključimo pa ga s podpičjem (;), samodejno pa se obarva zeleno, tako da se loči tudi na ta način. Kje pišemo komentar, ni pomembno, lahko na začetku vrstice, vmes med pisanjem programa, pomembno pa je označiti začetek in konec komentrja. LINGO tudi ni občutljiv na velike ali male črke. Pišemo lahko po želji. Pri pisanju spremenljivk je pomembno, da jih poimenujemo tako, da najprej napišemo črko (od A do Z), ki ji lahko sledi katera koli črka, številka ali pa Miha Osojnik: Primerjava analitičnih programskih orodij pri reševanju problemov stran 22

podčrtaj (_). Omejitev je samo v dolžini besede, ki je lahko dolga 32 znakov, kar bi moralo zadostovati za vsako ime. Pri pisanju programa je potrebno paziti, da vedno zaključimo vrstico, tako kot pri komentarju, s podpičjem. Program pišemo tako, da najprej napišemo ciljno funkcijo, ki jo želimo maksimirati oziroma minimirati. Temu sledijo omejitve, ki jih moramo razbrati iz problema. Če želimo dobiti pravilne rezultate, je potrebno imeti vse podatke v istih enotah. Kar hitro se namreč lahko pripeti, da vse napišemo pravilno, vendar pozabimo pretvoriti na skupno enoto in zatorej potem dobimo napačen rezultat. Delovanje Linga lahko predstavimo na kratkem vzorčnem primeru (LP2), ki je prikazan na sliki 10. Slika 10: Primer uporabe Linga Ko je model napisan, kliknemo gumb Solve (Reši), oziroma kliknemo v menijski vrstici LINGO/Solve. Program preveri, če smo program napisali brez napak in dobimo rešitev. Če smo nekje v sintaksi naredili napako, nam sporoči in odpre okno, kjer je razloženo, kaj je najverjetneje napačno, zraven pa še doda povezavo do pomoči, kjer je pojasnjeno, kako bi moralo biti napisano. Če je vse pravilno, se nam odpre statusno okno, kot je prikazano na sliki 11. Slika 11: Statusno okno Miha Osojnik: Primerjava analitičnih programskih orodij pri reševanju problemov stran 23

Statusno okno nam poda informacije o modelu. Polje Solver Status (Stanje reševalca) prikazuje trenutno stanje reševalca. Prva postavka pove, kakšne vrste model je to (linearni program, nelinearni, celoštevilčni, kvadratni,...), druga pa v kakšnem stanju je model. Sprva je začetno stanje nedoločljivo (Undetermined), ker reševalec še ni imel priložnosti generirati rešitve za model. Ko začne z iteracijami, se status spremeni v Nerešljivo (Infeasible). V tem stanju Lingo generira poskusno rešitev, vendar nobena ne zadostuje vsem omejitvam modela. Če možna rešitev obstaja, reševalec nato preide v stanje Rešljivo (Feasible). V tem stanju Lingo poišče rešitev, ki zadostuje omejitvam modela, vendar reševalec še ni zadovoljen, če to res ni najboljša rešitev. Če reševalec ne najde več boljše rešitve modela, se stanje spremeni v Globalni optimum (Global optimum) oziroma Lokalni optimum (Local optimum). Če model nima kakšnih nelinearnih spremenljivk, potem bo vsak lokalni optimum tudi globalni optimum. V primeru, da obstaja ena ali več nelinearnih spremenljivk, pa ni nujno, da bo lokalni optimum najboljša rešitev problema. Možno je, da je še kje boljša rešitev, vendar je reševalčevo lokalno iskanje ne»vidi«. Lahko, da Lingo zna priti do globalnega optimuma, vendar zaradi narave nelinearnega problema, ne more trditi, da ga ima. Tako torej pri nelinearnih modelih obstane v stanju lokalnega optimuma. Zaradi tega dejstva je boljše, da se model formulira, kadar je le možno, le z linearnimi spremenljivkami. Tu je še postavka Iterations (Ponovitve), ki pokaže število iteracij, ki jih je opravil Lingo. Polje Extended Solver Status (Podaljšano Stanje reševalca) se nanaša na različne posebne reševalce v Lingu. Večzačetni reševalec, Globalni reševalec ter Razvejevalni in omejevalni (Branch-and-Boud) reševalec. Postavke v tem okviru, se bodo posodabljala samo, če bo uporabljen kateri od teh reševalcev. V polju Variables (Spremenljivke) lahko po postavkah vidimo skupno število linearnih, nelinearnih oz. celoštevilčnih spremenljivk, ki smo jih vključili v model. Polje Constrains (Omejitve) prikazuje skupno število omejitev v modelu in koliko omejitev od teh je nelinearnih. Omejitev je nelinearna takrat, če je ena ali več spremenljivk nelinearnih. Lingo išče tudi fiksne omejitve. Omejitev je fiksna, če so vse spremenljivke v omejitvah fiksne. Takšne omejitve Lingo izloči in jih ne prišteje k skupnemu številu omejitev. Polje Nonzeros (Neničelno) prikazuje neničelne koeficiente, ki se pojavijo v nelinearnih spremenljivkah in njihovo skupno število. Polje General Memory used (Količina porabljenega spomina) prikazuje koliko spomina porabi Lingov model. Polje Elapsed runtime (Potrebni izvajalni čas) prikazuje skupen čas, poteben za reševanje modela. Čas reševanje je odvisen tudi od zasedenosti sistema. Podaljša se, če je bolj zaseden in obratno. (Vir: Help v Lingu). Miha Osojnik: Primerjava analitičnih programskih orodij pri reševanju problemov stran 24

Poročilo Skupaj s statusnim oknom, pa se odpre tudi okno s poročilom, ki nam pove, kakšna je optimalna rešitev za model, ki ga v tistem trenutku rešujemo. Iz slike 12 je razvidno, da je za problem, ki smo si ga ogledali malo prej, optimalno, če prizvedejo 200 običajnih kalkulatorjev in 100 hitrih kalkulatorjev, da bo skupni dobiček 3200 denarnih enot. Poleg rešitve, pa v poročilu napiše še dualno vrednost za vsako omejitev, ki pomeni za koliko bi se vrednost dobička povečala, če povečamo atribut za 1 enoto. V tem primeru, v vrstici 2, kaže, da bi se vrednost dobička povečala za 9 denarnih enot, če bi naredili en običajen kalkulator več. V polju Reduced costs pa pove koliko enot bo ostalo na zalogi po izvedbi te naloge (v tem primeru 0). V polju Slack or surplus (primankljaj ali presežek), pa pove koliko je optimalna vrednost oddaljena od tega, da bi bila enakovredna. V našem primeru to pomeni, da je 76,666 ur neizkoriščenih. Slika 12: Poročilo Miha Osojnik: Primerjava analitičnih programskih orodij pri reševanju problemov stran 25

5.3. LINDO LINDO (Linear, Interactive and Discrete optimizer) je orodje podjetja LINDO Systems inc., www.lindo.com, za reševanje linearnih, celoštevilčnih in kvadratnih problemov matematičnega programiranja. Možnost njegove uporabe je predvsem na področju gospodarstva, industrije, raziskav, uporaben pa je tudi pri reševanju problemov distribucije izdelkov, mešanja sestavin in razporejanja kadrov. Lastnosti Linda so pravzaprav enake, kot veljajo za Lingo, zato jih ne bomo niti opisovali (preberemo jih lahko nekaj strani nazaj), je pa nekoliko bolj okleščen. Po besedah gospoda Marka Wileya, zaposlenega pri podjetju, s katerim sem stopil v kontakt 29.10.2008, je večinoma sposoben računati iste probleme, vendar nima toliko izboljšav kot Lingo in je, ne glede na velikost in kompleksnost, nekoliko počasnejši. Delo s programom Gre za enostaven program, kakršno je tudi njegovo načelo. Če uporabnik želi narediti nekaj enostavnega, potem naj bo tudi vložen trud za uporabo potrebnih ukazov ravno tako majhen. Zaradi tega načela je pisanje modelov poenostavljeno do te mere, da se ciljno funkcijo in omejitve enostavno napišejo, kot bi jih reševali ročno na papir. Pomembna značilnost Linda je, da je sposoben uvažanja tudi podatkov iz drugih programov, preglednic, baz podatkov ali besedilne datoteke. Tako kot pri Lingu, je tudi tu pisanje modelov takšnoo, kot če bi jih pisali v urejevalniku besedil. Torej je izgled takšen kot bi model pisali ročno. Model potrebuje tri osnovne podatke: ciljno funkcijo, eno ali več omejitev ter eno ali več spremenljivk. Ciljna funkcija predstavlja, kaj se bo z modelom počelo, ali se išče minimum ali maksimum. Po enostavni namestitvi programa na trdi disk, ga zaženemo in prikaže se osnovni zaslon, s pripravljenim praznim»listom«, na katerega pričnemo pisati model. Osnovni zaslon je predstavljen na sliki 13. Slika 13: Osnovni zaslon Miha Osojnik: Primerjava analitičnih programskih orodij pri reševanju problemov stran 26

Na podoben način kot pri Lingu pišemo model tudi tu. Na istem vzorčnem primeru (LP2), bomo predstavili še uporabo Linda, prikazano na sliki 14. Kot prvo, je opazno, da se komentarji ne obarvajo zeleno in tako so manj vidni, še vedno pa jih naredimo tako, kot pri Lingu, da jih začnemo s klicajem in zaključimo z podpičjem. Pri ciljni funkciji ni potrebno za MAX ali MIN pisati znaka za enačaj. Prav tako ni treba pisati znaka za množenje, uporabljamo samo znak za seštevanje. V praksi izgleda to tako, da namesto denimo 0.5 * hiter, zdaj napišemo 0.5 hiter. Ko pišemo omejitve spremenljivkam, začnemo ta del s ST in zaključimo z END. Nikjer pa ni več potrebno pisati podpičja, da bi zaključili vrstico (razen pri komentarjih). Slika 14: Predstavitev uporabe Linda Ko imamo model napisan, kliknemo na Solve. Če je model napisan brez napak, nas program vpraša, ali želimo, da naredi analizo občutljivosti, po odgovoru pa prikaže okno s stanjem reševalca, prikazano na sliki 15. Slika 15: Stanje reševalca Miha Osojnik: Primerjava analitičnih programskih orodij pri reševanju problemov stran 27

Stanje reševalca nam poda nekaj koristnih informacij o modelu: Status: Iterations Inffeasibility Objective Best IP IP Bound Branches Elapsed time Update interval Interupt solver Vrne status trenutne rešitve. Možne vrednosti so: Optimal, Feasible, Infeasible, Unbounded. Število ponovitev. Za koliko so kršene omejitve. Trenutna vrednost ciljne funkcije. Ciljna vrednost najboljše celoštevilčne rešitve (velja za celoštevilčne modele). Teoretična meja ciljne funkcije za celoštevilčne probleme. Število celoštevilčnih spremenljivk, ki jih je celoštevilčni reševalec razvejal. Čas, ki ga je reševalec potreboval za reševanje. Na koliko sekund naj se obnovi statusno okno. Prekini reševalca. Reševalec vrne trenutno najboljšo vrednost. Istočasno s statusnim oknom, pa se v ozadnju prikaže poročilo, ki pove, kakšna je optimalna vrednost in kakšna vrednost spremenljivk je optimalna. Pove tudi, za koliko je možno povečati ali zmanjšati spremenljivke, da dobimo še vedno isto končno optimalno rešitev. Prikazano je na sliki 16. Na začetku v vrsticah, običajen in hiter, prikazuje, koliko kalkulatorjev bi bilo potrebno izdelati, da bo dosežena optimalna vrednost. Torej 200 običajnih in 100 hitrih, da bo dobiček 3200 denarnih enot. Rezultat je bil dobljen v drugi ponovitvi. Enake vrednosti kot v Lingu, dobimo tudi v poljih Reduced costs, Dual prices in Slack or surplus. Do tu je poročilo enako Lingovem, spodnji del pa prikaže še nekaj informacij več. Vidimo lahko, za koliko lahko ciljni koeficient spremenimo, ne da bi se spremenile vrednosti neničelnih spremenljivk. Na tem primeru je razvidno, da ne moremo povečati dobička nobene vrste kalkulatorja, ne da bi se spremenila tudi količina izračunanih dnevno proizvedenih hitrih in običajnih kalkulatorjev. Slika 16: Poročilo Miha Osojnik: Primerjava analitičnih programskih orodij pri reševanju problemov stran 28

5.4. POM-QM Programsko orodje POM QM je izdelalo in izdalo podjetje Prentice-Hall, Inc., http://www.prenhall.com/weiss. Namenjeno je za področje proizvodnje, operacijskega managementa in kvantitativnih metod, ved o managementu ali operacijske raziskave. Razvito je bilo z namenom pomagati uporabniku naučiti se in razumeti ta področja. Uporabi se ga lahko za reševanje problemov ali pa preverjanje odgovorov, do katerih smo prišli na roke. Vsebuje tudi veliko število modelov. Značilnosti POM-QM so: Standardizacija Grafični vmesnik je standarden, takšen kot ga najdemo v operacijskm sistemu Windows. Kdor koli je vešč dela s Excelovimi preglednicami, urejevalnikom besedil Word ali paketom za predstavitve v Windows okolj, bo enostavno uporabljal tudi ta program. Standardni grafični vmesnik vključuje po želji nastavljive menije, orodne vrstice, statusno vrstico in help meni. Čeprav program sestoji iz 29 modulov in več kot 60 podmodulov, je prikaz vseh skladen, tako da, ko se uporabnik navadi uporabljati enega, ne bo imel težav z uporabo ostalih modulov. Shranjevanje in nalaganje je enostavno, saj se tudi to opravlja na standarden način, poznan v sistemu Windows. Kot dodatno so datoteke shranjene po modulih, kar olajša iskanje shranjenih datotek. Podatki in rezultati, vključno z grafi, se lahko enostavno kopirajo v druge aplikacije. Fleksibilnost Zaslonske komponente, ki jih uporabnik vidi, in barve si lahko nastavi sam. To je učinkovito pri pregledu podatkov. Uporabnik lahko izbere željen rezultat in si ga natisne, ne da bi moral natisniti vse. Možne so mnoge dodatne možnosti tiskanja. Obstaja tudi več prednosti, ki jih uporabnik lahko izbere v Help meniju, uporabniškem informacijskem meniju. Program se denimo lahko nastavi tako, da samodejno reši problem potem, ko so bili vnešeni podatki. Uporabniško usmerjena oblika Urejevalnik podatkov, ki je v obliki preglednic, omogoča enostaven vnos podatkov in njihovo zelo enostavno urejanje. Ko se podatki vnašajo, se ponudi jasna pomoč na zaslonu, ki pove, kaj je potrebno vnesti v določeno polje, v primeru nepravilnega vnosa podatkov, pa prikaže sporočilo, ki javi in opiše napako. To olajša popravek napake, saj vemo, kaj ni bilo pravilno vnešeno. Enostavno se da spreminjati med dvema metodama reševanja, z namenom primerjave različnih metod in rešitev. V številnih primerih je ta operacija opravljena z enim klikom. Miha Osojnik: Primerjava analitičnih programskih orodij pri reševanju problemov stran 29

Vmesne korake poteka je tudi možno videti na zaslonu, na koncu pa je rešitev obarvana drugače, kot ostali pdatki, kar je pregledneje. Ko POM-QM namestimo na trdi disk in zaženemo porogram, se odpre okno, kot je prikazano na sliki 17. Delo s programom Slika 17: Glavni grafični vmesnik Ko program odpremo, je potrebno najprej klikniti v menijski vrstici na Module, kot je prikazano na sliki 17. Odpre se vrsta modulov, s katerimi je POM-QM sposoben operirati. Poiščemo željen modul in nanj kliknemo. Sprva je zaslon prazen, vendar je nato potrebno klikniti ikono za nov»list«. Odvisno od izbire modula, se po kliku na nov»list«odpre novo vnosno okno, kjer nastavljamo nastavitve kot so: število omejitev, spremenljivk in vej ter mnoge druge. Če pa smo izbrali modul, s katerim je možno reševati več različnih problemov, pa se nam po kliku na nov»list«odpre seznam možnosti. Iz tega izberemo tisto vrsto reševanja problema, ki jo potrebujemo za reševanje svojega problema, nato pa se nam odpre že omenjeno vnosno okno. Primer vnosnega okna, v katerega vnesemo število omejitev in število spremenljivk, je prikazan na sliki 18. Miha Osojnik: Primerjava analitičnih programskih orodij pri reševanju problemov stran 30

Slika 18: Vnosno okno za nastavitve Osredotočili se bomo na uporabo 5 modulov in nekaj podmodulov ter jih na kratko opisali. Imenujejo se Linear programming (linearno programiranje), Transportation (transport), Networks (omrežja), Game theory (teorija iger) in Inventory (zaloge). Modul za linearno programiranje, omogoča nastavljanje števila omejitev in števila spremenljivk. Nastavimo jih lahko do 90. Določimo tudi, ali iščemo največjo vrednost ali najmanjšo, ter način poimenovanja omejitev in spremenljivk (s črkami, številkami, z imenom). Modul za transport ima isto podobo kot za linearno programiranje, samo da imamo namesto nastavljanja omejitev in spremenljivk, izvore in ponore. Prav tako jih lahko nastavimo do 90. Modul za omrežja nam daje na volja tri podmodule, vendar pa za okvir te diplomske naloge prideta v poštev dva, Shortest route (najkrajša pot) in Maximal flow (maksimalen pretok). Oba podmodula nastavimo na isti način, obema moramo določiti samo število vej. Oba dovoljujeta nastavitev do 100 vej, s to razliko, da pri podmodulu za najkrajšo pot določimo še, ali je omrežje usmerjeno ali neusmerjeno. Modul za teorijo iger omogoča nastavljanje števila strategij v vrstah in stolpcih. Nastavimo lahko do 50 strategij, glede poimenovanja pa je enako, kot pri ostalih. Modul za zalogo sestoji iz osmih podmodulov, uporabili pa bomo podmodul Production order quantity model. Pri tem ni potrebno ničesar nastaviti, saj gre za standardiziran obrazec, v katerega vnesemo podatke in dobimo rešitev. Prav tako ni potrebno ničesar nastavljati niti pri ostalih podmodulih, saj so vsi standardizirani obrazci, vsak za svoje področje. Po kliku na OK za potrditev se odpre tabela prikazana na sliki 19. Na vzorčnem primeru (LP2), bomo pokazali uporabo programa. Podatke vnesemo tako, kot je prikazano spodaj. Torej najprej v prvo vrstico vnesemo ciljno funkcijo, nato pa v ostale vrstice vnesemo linearne neenačbe. S padajočimi meniji določimo še enakost in zgoraj v polju Objective določimo še ali računamo maksimum ali minimum. Ko podatke pravilno vnesemo, kliknemo na Solve nakar se odpre okno z rešitvijo, prikazano na sliki 20 in, odvisno od modula, pa še nekatera okna, kot je na primer graf, število ponovitev, dualna rešitev ipd. Miha Osojnik: Primerjava analitičnih programskih orodij pri reševanju problemov stran 31

Slika 19: Vnosna tabela V tem primeru smo izbrali modul Integer & Mixed intereger programming, kjer lahko določimo kakšne so spremenljivke. To določimo v celici Variable type, izbiramo pa lahko med celoštevilčnimi, realnimi in za primer, ko rešujemo problem binarnega programiranja. Slika 20: Poročilo Kot vidimo v poročilu tudi tu dobimo isto rešitev, torej 200 enot običajnih kalkulatorjev (označeno kot x 1 ) in 100 eno hitrih (x 2 ), v skupni vrednosti 3200. Vidimo pa tudi, da v tem primeru dobimo tudi rešitev v grafični obliki. POM-QM omogoča tudi izvoz modela v Excel. Da omogočimo to funkcijo, je potrebno namestiti še dodatek. Ko ga namestimo, lahko model shranimo enako kot do sedaj, vendar s to razliko, da namesto, da bi kliknili na File in nato Save as, kliknemo Save as Excel file. Tu lahko določimo, kako se bo nova datoteka imenovala in njeno lokacijo, kam naj se shrani. Po želji pa lahko model shranimo tudi kot dodaten zavihek k že obstoječi Excelovi datoteki. Takoj ko izberemo eno od teh možnosti, se generira nova datoteka in vse, kar moramo storiti, je to, da jo odpremo in z reševalcem rešimo problem in zopet dobimo rešitev. Miha Osojnik: Primerjava analitičnih programskih orodij pri reševanju problemov stran 32

6. Vzorčni primeri uporabe programov (orodij) v gospodarstvu Teoretični del je potrebno prenesti v prakso, da imamo sploh kaj koristi od naučenega znanja. Programi so naloženi na trdi disk, kako se to izvede, pa je na kratko in enostavno razloženo v prejšnji točki. V tem poglavju bomo pogledali, kako se te programe uporablja na enostavnih vzorčnih primerih iz prakse, najprej pa primer problema zmesi. Ta vrsta problema je prisotna predvsem v kmetijstvu, prehrambeni industriji in industriji, kjer se mešajo različne surovine. 6.1. Problem zmesi Podjetje, ki se ukvarja s kozmetiko, denimo izdeluje dva posebna tipa krem za telo oziroma za blaženje pekoče kože po prekomernem sončenju, ki vsebujejo bio polnilo A in bio polnilo B. Prva krema vsebuje tri enote bio polnila A in dve enoti bio polnila B, druga pa eno enoto bio polnila A in dve enoti bio polnila B. Prva krema stane 15, druga 11. Da bi dosegli dober učinek kreme, je potrebno imeti na telesu 11 enot bio polnila A in 14 enot bio polnila B. Koliko tub obeh krem moramo kupiti, da bomo zadovoljili potrebe, in da bo strošek nakupa najmanjši? Rešitev: Za lažjo predstavo podatke prepišemo v tabelo 7: Polnilo Krema 1 Krema 2 Potrebe A 3 1 11 B 2 2 14 Cena 15 11 Spremenljivke x 1 x 2 Tabela 7: Vhodni podatki Spremenljivki x 1 in x 2 morata biti večji ali enaki nič. Iz tabele in podatkov zgoraj lahko razberemo, da potrebujemo za nakup x 1 enot prve kreme in x 2 enot druge kreme, 3x 1 +x 2 enot polnila A in 2x 1 + 2x 2 enot polnila B. Omejujejo nas potrebe, ki kažejo, da potrebujemo vsaj 11 enot polnila A in vsaj 14 enot polnila B. Da bo strošek nakupa najmanjši, je torej potrebno kupiti za 15x 1 + 11x 2 obeh krem. Najprej napišemo linearni program za opisani problem z omejitvami: x 0, x 0 1 2 3x + x 11 1 2 2x + 2x 14 1 2 Ciljna funkcija pa je: Min = 15x + 11x 1 2 Miha Osojnik: Primerjava analitičnih programskih orodij pri reševanju problemov stran 33

6.1.1. EXCEL V polja, ki so na sliki 21 obarvana sivo, vpišemo podatke iz primera. Torej v stolpec C potrebne količine za izdelavo prve kreme in njeno ceno, v stolpec D pa potrebne količine za izdelavo druge kreme in njeno ceno. Ko imamo to vpisano, v polje F4, obarvano zeleno, vpišemo prvo linearno formulo tako, da napišemo formulo za množenje in seštevanje polj C4, C8 in D4, D8, v polje F5 pa drugo linearno formulo na isti način. Potrebno je samo še vpisati ciljno funkcijo v polje E6, kot zmnožek in seštevek polj C6, C8 in D6, D8. Odpremo reševalca in najprej določimo celico ciljne funkcije, to je F6, določimo katere celice bo reševalec spreminjal, to sta celici C8 in D8, in mu dodamo omejitve, da torej morata biti polji F4 in F5 manjši ali enaki poljema E4 in E5 pri čemer ne smemo pozabiti, da morata biti vrednosti C8 in D8 večji ali enaki nič. Ker iščemo minimum, označimo še možnost MIN in pritisnemo Solve. V okencu, ki se odpre, izberemo še možnost Sensitivity, da generira poročilo o občutljivostni analizi. Rešitev je prikazana na sliki 21, poročilo pa na sliki 22. Rešitev pravi, da je potrebno kupiti dve enoti prve kreme in pet enot druge kreme v skupni vrednosti 85, kar je najcenejši možni nakup. Slika 21: Prikaz rešitve v Excelu Če pogledamo poročilo v polju Adjustable cells pod kategorijo Allowable increase in Allowable decrease, vidimo, da se lahko cena kreme 1 največ poveča za 18 oziroma zmanjša za 4, cena kreme 2 pa se lahko poveča za 4 oziroma zmanjša za 6, da ohranimo vrednost spremenljivk x 1 in x 2, to je 2 in 5. Seveda se bo potem spremenila skupna vrednost nakupa. Polje Reduced cost pove, da na telesu ne bo presežka kreme, polje Shadow price pa pomeni za koliko bi se zmanjšala vrednost bio polnila A na telesu, če bi bilo potrebno na telesu imeti eno dozo polnila A manj, kot je predpisano. Enako velja za B. Slika 22: Poročilo občutljivosti Miha Osojnik: Primerjava analitičnih programskih orodij pri reševanju problemov stran 34

6.1.2. LINGO V Lingu napišemo linearni program na sledeč način:!problem zmesi; min =15 * x1 + 11 * x2; 3 * x1 + x2 >= 11; 2 * x1 + 2 * x2 >= 14; nato kliknemo Solve. Ko računalnik opravi z reševanjem, se odpre drugo okno s poročilom, prikazano spodaj: Global optimal solution found. Objective value: 85.00000 Infeasibilities: 0.000000 Total solver iterations: 2 Variable Value Reduced Cost X1 2.000000 0.000000 X2 5.000000 0.000000 Row Slack or Surplus Dual Price 1 85.00000-1.000000 2 0.000000-2.000000 3 0.000000-4.500000 Vidimo, da pridemo do iste rešitve, kot pri Excelu, torej dveh enot prve kreme in petih druge, v skupni vrednosti 85. V polju Reduced Cost imamo ničle, kar pomeni, da ni presežka polnila na telesu. V polju Slack or Surplus (primankljaj ali presežek) nam vrednosti 0 povedo, da je rešitev takšna, da bomo zadostili potrebam. V polju Dual Price pa za koliko bi se zmanjšala vrednost bio polnila A na telesu (vrstica 2), če bi bilo potrebno na telesu imeti eno dozo polnila A manj, kot je predpisano. Enako velja za B. 6.1.3. LINDO V Lindu je model napisan zelo podobno, kot v Lingu, v ciljni funkciji pa ni potrebno pisati znaka za enačaj (=) in znaka za množenje (*), prikazano spodaj: MIN 15 x1 + 11 x2 ST 3 x1 + x2 >= 11 2 x1 + 2 x2 >= 14 END Ko imamo model napisan, pritisnemo Solve in program nas vpraša, če želimo, da opravi tudi občutljivostno analizo. To potrdimo in dobimo rešitev, prikazano spodaj: Miha Osojnik: Primerjava analitičnih programskih orodij pri reševanju problemov stran 35

LP OPTIMUM FOUND AT STEP 2 OBJECTIVE FUNCTION VALUE 1) 85.00000 VARIABLE VALUE REDUCED COST X1 2.000000 0.000000 X2 5.000000 0.000000 ROW SLACK OR SURPLUS DUAL PRICES 2) 0.000000-2.000000 3) 0.000000-4.500000 NO. ITERATIONS= 2 RANGES IN WHICH THE BASIS IS UNCHANGED: OBJ COEFFICIENT RANGES VARIABLE CURRENT ALLOWABLE ALLOWABLE COEF INCREASE DECREASE X1 15.000000 18.000000 4.000000 X2 11.000000 4.000000 6.000000 RIGHTHAND SIDE RANGES ROW CURRENT ALLOWABLE ALLOWABLE RHS INCREASE DECREASE 2 11.000000 10.000000 4.000000 3 14.000000 8.000000 6.666667 Poročilo pove, da je optimalna vrednost prav tako 85, potrebno pa je kupiti dve enoti prve kreme in pet enot druge. Prvi del poročila je torej enak kot v Lingu. Spodnji del pa prikazuje še dodatne možnosti, enako kot Excel, torej, da se lahko cena kreme 1 poveča za 18 oziroma zmanjša za štiri in cena kreme 2 poveča za štiri in zmanjša za šest, pa bo še vedno zadoščeno pogojem. 6.1.4. POM-QM Pri POM-QM kliknemo na Module in izberemo Linear programming. Določimo dve omejitvi in dve spremenljivki. Odpre se tabela in vnesemo podatke, kot so prikazani na sliki 23. Slika 23: Prikaz vnosa podatkov Miha Osojnik: Primerjava analitičnih programskih orodij pri reševanju problemov stran 36

Paziti moramo, da nastavimo znak na večje ali enako, saj računamo minimum. Pod orodno vrstico, v polju Objective, postavimo piko pred minimize, da bo program računal minimum. Ko je vse vneseno, kliknemo Solve in dobimo rezultat, skupaj s poročili, prikazan na sliki 24. Vidimo, da do istega rezultata pridemo tudi s tem programom. Torej, potrebno je kupiti dve enoti prve kreme in pet enot druge kreme v skupni vrednosti 85. Slika 24: Rešitev v POM-QM POM-QM pa poleg rešitve ustvari tudi več spremljajočih oken s koristnimi informacijami. Vidimo, da poleg rešitve zna samodejno narisati graf, kjer lahko tudi izbiramo, katero linearno funkcijo si bomo ogledali. Prikaže nam, kako bi izgledal dualni program. V oknu Ranging pa prav tako prikaže, na katero vrednost se lahko spremeni cena obema kremama, da še vedno zadostuje pogojem. Prav tako pokaže tudi dualne vrednosti, kot vsi programi doslej. 6.2. Proizvodni problem Podjetje izdeluje dva tipa izdelkov: izdelek 1 in izdelek 2, ki sestojita iz treh vrst surovin, ki jih bomo poimenovali A, B in C. Na zalogi imajo 25 enot surovine A, 21 enot surovine B in 19 enot surovine C. Da izdela eno enoto izdelka 1, je potrebno uporabiti dve enoti surovine A, eno enoto survine B in eno enoto surovine C. Da izdelajo eno enoto izdeleka 2, pa je potrebno imeti dve enoti surovine A, dve enoti surovine B in tri enote suroivne C. Ko sta izdelek 1 in izdelek 2 proizvedena, se na trgu izdelek 1 proda za šest evrov, izdelek 2 pa za 5 evrov. Kako naj bo organizirana proizvodnja, da bo dobiček od prodaje teh izdelkov največji? Rešitev: Za lažjo predstavo je najbolje, če podatke iz teksta razberemo, jih pravilno interpretiramo in damo v preglednico, prikazano v tabeli 8. Miha Osojnik: Primerjava analitičnih programskih orodij pri reševanju problemov stran 37

Proizvodi Izdelek 1 Izdelek 2 Zaloga surovin A 2 2 25 B 1 2 21 Surovine C 1 3 19 Cene 6 5 Proizvodne količine x 1 x 2 Tabela 8: Podatki, prenešeni iz teksta Spremenljivki x 1 in x 2, vrednosti, ki ju iščemo, torej ne moreta biti negativni, saj predstavljata proizvodne količine (ki ne morejo biti negativne). Za proizvodnjo x 1 enot izdelka 1 in x 2 enot izdelkov 2 je potrebno 2x 1 + 2x 2 enot surovine A, x 1 + 2x 2 enot surovine B in x 1 + 3x 2 enot surovine C. Porabo surovin omejuje njihova zaloga, torej ni mogoče porabiti več kot 25 enot surovine A, 21 enot surovine B in 19 enot surovine C. Dobiček od prodaje x 1 in x 2 enot obeh izdelkov pa je 6x 1 + 5x 2, ki mora biti maksimalen. Linearni program ima sledečo obliko: x 0, x 0 1 2 2x + 2x 25 1 2 x + 2x 21 1 2 x + 3x 19 1 2 Ciljna funkcija pa izgleda tako: Max = 6x + 5x 1 2 Ta vrsta problema, ki ga rešujemo na tem mestu, se imenuje proizvodni problem. Podatke spet vnesemo v vse reševalce in dobimo rezultat. Na slikah, ki sledijo, si lahko ogledate rešitve, izdelane s programskimi orodji. Za razliko od primera 1, kjer se je iskalo minimum, se tokrat išče maksimum. Torej je potrebno biti pozoren pri pisanju omejitev. Zdaj se, namesto znaka večje ali enako, piše manjše ali enako. V primeru napačnega znaka, programi rešitve ne bodo pravilno izračunali! 6.2.1. EXCEL V Excelu v del tabele, obarvan sivo, vnesemo podatke iz modela. Nato v celice, obarvane zeleno, vpišemo linearne formule. Torej, v prvo celico vpišemo formulo za množenje in seštevanje polj D5, D10 in E5, E10. Po istem principu ravnamo pri ostalih dveh celicah. Sledi ciljna funkcija, ki jo vpišemo v celico, obarvano rumeno. Formula je znova za seštevanje in množenje celic D8, D10 in E8, E10, to so cene x proizvodne količine. Nato v reševalcu določimo celico ciljne funkcije in spreminjajoče se celice, obarvane modro, ter omejitve. Torej, celice G5, 6, 7 morajo biti manjše ali enake celicam F5, 6, 7, celice D10 in E10 pa večje ali enake nič. Izberemo še možnost Max, ker računano maksimum, in pritisnemo Solve. Nato izberemo iz ponujenih možnosti ustvarjanje občutljivostnega poročila. Dobimo rešitev, prikazano na sliki 25, in poročilo, prikazano na sliki 26. Miha Osojnik: Primerjava analitičnih programskih orodij pri reševanju problemov stran 38

Slika 25: Prikaz rešitve v Excelu Vidimo torej, da je potrebno prodati 13 izdelkov 1 (številka je cela zato, ker 12,5 izdelkov ni mogoče izdelati) ni pa potrebno prodati nobenega drugega. Vrednost maksimalnega dobička bo tako znašala 75. V poročilu v polju Adjustable cells vidimo, da se cene prvega izdelka ne sme povišati, če želimo zadostiti pogojem, lahko pa se za en evro zniža. V primeru drugega izdelka pa se cena lahko poveča za en evro, ne sme pa se zmanjšati. V polju Shadow price nam prikaže, da v primeru povečanja zaloge surovine A, za eno enoto, bo podjetje povečalo dobiček za 3. 6.2.2. LINGO Slika 26: Poročilo občutljivosti V Lingu model napišemo tako, kot je prikazano spodaj:!proizvodni problem; max = 6 * x1 + 5 * x2;!omejitve; 2 * x1 + 2 * x2 <= 25;!Zaloga; x1 + 2 * x2 <= 21;!Zaloga; x1 + 3 * x2 <= 19;!Zaloga; Miha Osojnik: Primerjava analitičnih programskih orodij pri reševanju problemov stran 39

Ko imamo model napisan, pritisnemo Solve in dobimo rezultat, skupaj z občutljivostno analizo, prikazano spodaj: Global optimal solution found. Objective value: 75.00000 Infeasibilities: 0.000000 Total solver iterations: 1 Variable Value Reduced Cost X1 12.50000 0.000000 X2 0.000000 1.000000 Row Slack or Surplus Dual Price 1 75.00000 1.000000 2 0.000000 3.000000 3 8.500000 0.000000 4 6.500000 0.000000 Vidimo, da dobimo isti rezultat, torej, da je potrebno izdelati in prodati 13 prvih izdelkov in nobenga drugega, dobiček pa bo znašal 75. V polju Reduced Cost vidimo, da se vrednost ciljne funkcije ne poveča, če se poveča vrednost x 1, če pa se poveča spremenljivka x 2, se povečajo skupni stroški za en evro. Polje Slack or Surplus prikazuje, da bo potem, ko bo podjetje izdelalo 13 izdelkov, ostalo na zalogi nič kosov surovine A, 8,5 kosov surovine B in 6,5 kosov surovine C, saj sta za en izdelek 1 potrebni dve enoti surovine A (2 * 12,5 =25, 25 enot potrebujemo 25 enot na zalogi = 0 enot na zalogi), ena enota surovine B (21 na zalogi 12,5 potrebujemo = 8,5 ostane na zalogi) in ena enota surovine C (19 na zalogi -12,5 potrebujemo = 6,5 na zalogi). Polje Dual price prikazuje, da v primeru povečanja zaloge surovine A, bo dobiček večji za 3. 6.2.3. LINDO Model napisan v Lindu je zelo podoben tistemo v Lingu, izgleda pa tako: MAX 6 x1 + 5 x2 ST 2 x1 + 2 x2 <= 25 x1 + 2 x2 <= 21 x1 + 3 x2 <= 19 END Ko imamo model napisan, kliknemo Solve in program nas vpraša, ali želimo, da izdela tudu občutljivostno analizo. To potrdimo in dobimo rešitev, prikazano spodaj: LP OPTIMUM FOUND AT STEP 1 OBJECTIVE FUNCTION VALUE 1) 75.00000 Miha Osojnik: Primerjava analitičnih programskih orodij pri reševanju problemov stran 40

VARIABLE VALUE REDUCED COST X1 12.500000 0.000000 X2 0.000000 1.000000 ROW SLACK OR SURPLUS DUAL PRICES 2) 0.000000 3.000000 3) 8.500000 0.000000 4) 6.500000 0.000000 NO. ITERATIONS= 1 RANGES IN WHICH THE BASIS IS UNCHANGED: OBJ COEFFICIENT RANGES VARIABLE CURRENT ALLOWABLE ALLOWABLE COEF INCREASE DECREASE X1 6.000000 INFINITY 1.000000 X2 5.000000 1.000000 INFINITY RIGHTHAND SIDE RANGES ROW CURRENT ALLOWABLE ALLOWABLE RHS INCREASE DECREASE 2 25.000000 13.000000 25.000000 3 21.000000 INFINITY 8.500000 4 19.000000 INFINITY 6.500000 Vidimo, da je prvi del isti kot v Lingu in pravi, da je potrebno izdelati 13 izdelkov 1 in dobiček od prodaje bo 75. Iste rezultate dobimo tudi za polja Reduced cost, Slack or surplus in Dual value. V drugem delu pa imamo prikazano isto kot v Excelu, torej, da se cena prvega izdelka ne sme povečati, medtem ko se lahko zniža za en evro. Cena drugega izdelka pa se, ravno obratno, lahko poveča za en evro, ne sme pa se zmanjšati. 6.2.4. POM-QM Pri tem problemu prav tako, kot v prejšnjem, v meniju kliknemo na Module in izberemo Linear programing. Odpremo nov list, določimo tri omejitve in dve spremenljivki ter kliknemo OK. Tokrat iščemo maksimum, zato označimo Maximize. V tabelo vnesemo podatke tako, kot je prikazano na sliki 27. Slika 27: Prikaz vnosa podatkov Miha Osojnik: Primerjava analitičnih programskih orodij pri reševanju problemov stran 41

Pri omejitvah pravilno postavimo znake za enačaje in v polju Objective označimo Maximize. Ko so podatki vnešeni, kliknemo Solve in prikaže se rešitev, skupaj s poročili prikazana na sliki 28. Prav tako, kot pri prejšnjih programih, tudi ta izračuna enak rezultat. Torej, za dosego optimalne vrednosti, to je maksimalen dobiček, je potrebno prodati 13 enot prvega izdelka in nobenega drugega v vrednosti 75. Program je izrisal tudi graf, tako da lahko vidimo rešitev predstavljeno tudi grafično. V oknu Dual je prikazan dualni problem (kar je transponirana matrika primarnega problema). V oknu Ranging je prikazano, na koliko se lahko cena izdelkoma dvigne ali spusti, da zadostimo pogojem. Torej se izdelek 1 lahko poceni na vrednost pet evrov, podražiti pa se ne sme (infinity), medtem ko se izdelek 2 ne sme poceniti, lahko pa se podraži za en evro, na vrednost šest evrov. Prav tako prikaže v tem oknu vrednosti, kot jih prejšnji programi, to so zmanjšana vrednost, dualna vrednost in stanje zaloge po opravljenem delu (polje Slack/Surplus). Slika 28: Rezultat v POM-QM Tretja vrsta problema, ki ga bomo opisali, se imenuje transportni problem. 6.3. Transportni problem Blago dobivamo od dveh dobaviteljev, ki ju poimenujemo dobavitelj A in dobavitelj B. To blago naročata dve stranki: S1 in S2. Dobavitelj A ima zmogljivost 50 enot, dobavitelj B pa 45 enot blaga. To pomeni, da lahko v določenem obdobju od njiju dobimo skupno 95 enot blaga. Blago mora biti seveda pravočasno dostavljeno do strank tako, da dobi stranka S1 30 enot, stranka S2 pa 65 enot. Prevoz ene enote blaga od dobavitelja A do stranke S1 stane 25, do stranke S2 pa 28. Prevoz ene enote blaga od dobavitelja B do stranke S1 stane 19, do stranke S2 pa 26. Kako naj se usmeri prevoz blaga od dobaviteljev do strank, da bodo stroški najmanjši? Miha Osojnik: Primerjava analitičnih programskih orodij pri reševanju problemov stran 42

Rešitev: Najbolje je podatke najprej urediti v tabelo, tako da so najbolj pregledni in enostavni za nadaljno uporabo. Prikazani so v tabeli 9, na sliki 29 pa je prikazana struktura transportnih poti. A Stranke S1 S2 x 1 c 1 =25 x 2 c 2 =28 Dobavitel x 3 c 3 =19 x 4 c 4 =26 j B Potrebe 30 65 Kapacitete tovarn 50 45 A B c2, x3 c1, x1 c2, x2 c4, x4 S1 S2 Tabela 9: Podatki, prenešeni iz teksta Slika 29: Prikaz transportnih poti Tako lahko iz tabele enostavneje in bolj pregledno razberemo podatke, potrebne za enačbe in za nadaljno delo. Potrebno je določiti vrednost nenegativnih spremenljivk x 1, x 2, x 3, x 4, ki za izvore zadovoljujejo enačbe: x + x = 50 1 2 x + x = 45 3 4 za izhodišča pa enačbe: x + x = 30 x 1 3 + x = 65 2 4 tako, da ima ciljna funkcija: minimum. S = c1x 1 + c2x2 + c3x3 + c4x4 Vrednosti iz tabele 8 vnesemo v ciljno funkcijo: S = 25x + 28x + 19x + 26x 6.3.1. EXCEL 1 2 3 4 V Excel vnesemo, kot je vidno na sliki 30, v siva polja vrednosti iz teksta, torej cene prevozov. Nato v celice, označene zeleno, vpišemo linearne funkcije. Na primer v celico H6 prvo formulo, ki je zapisana zgoraj, to je seštevek polj C11 in D11. Po istem principu vnesemo linearne funkcije v ostale tri zelene celice. Nato potrebujemo še ciljno funkcijo, Miha Osojnik: Primerjava analitičnih programskih orodij pri reševanju problemov stran 43

ki jo vpišemo v celico, obaravano rumeno; to je zmnožek in seštevek cen prevozov in spremenljivk. Torej prva cena krat prva spremenljivka plus druga itd. do četrte. Nato odpremo reševalca in mu določimo, katera celica je ciljna, označimo, da računamo minimum, nato določimo celice, ki se bodo spreminjale (to so celice C11 do F11). Sledi dodajanje omejitev: določimo, da morajo biti vrednosti spreminjajočih celic večje ali enake nič, celice, obarvane zeleno, pa morajo biti enake kapacitetam in potrebam, na primer celica H6 enaka F6. Kliknemo Solve in dobimo rezultat. Rešitev pravi, da pri najcenejšem prevozu blaga, ki znaša 2360, usmerjamo blago k uporabnikom tako, kot je grafično prikazano na sliki 31. Slika 30: Rešitev v Excelu x1 = 0 S1 A Od A k S1 Od A k S2 Od B k S1 Od B k S2 0 enot (relacija A do P je neizkoriščena) 50 enot 30 enot 15 enot B x3 = 30 x2 = 50 x4 = 15 S2 Slika 31: Prikaz transportnih poti z rešitvijo 6.3.2. LINGO V Llingu model napišemo tako, kot je prikazano spodaj, najprej vpišemo ciljno funkcijo, nato pa napisal še ostale omejitve:!transportni problem; Min = 25 * x1 + 28 * x2 + 19 * x3 + 26 * x4;!omejitve; x1 + x2 = 50; x3 + x4 = 45; x1 + x3 = 30; x2 + x4 = 65; Ko imamo model napisan, pritisnemo Solve in dobimo naslednjo rešitev: Miha Osojnik: Primerjava analitičnih programskih orodij pri reševanju problemov stran 44

Global optimal solution found. Objective value: 2360.000 Infeasibilities: 0.000000 Total solver iterations: 0 Variable Value Reduced Cost X1 0.000000 4.000000 X2 50.00000 0.000000 X3 30.00000 0.000000 X4 15.00000 0.000000 Row Slack or Surplus Dual Price 1 2360.000-1.000000 2 0.000000-28.00000 3 0.000000-26.00000 4 0.000000 7.000000 5 0.000000 0.000000 Tudi Lingo pride do enake rešitve kot Excel, torej, najcenejša vrednost prevoza je 2360 evrov, transport blaga pa potuje tako: Od dobavitelja A k stranki S1 Od dobavitelja A k stranki S2 Od dobavitelja B k stranki S1 Od dobavitelja B k stranki S2 0 enot 50 enot 30 enot 15 enot V polju Slack or Surplus vidimo ničle, kar pomeni, da smo zadostili pogojem. 6.3.3. LINDO Lindov zapis programa je nekoliko poenostavljen v primerjavi z Lingovim, saj ne potrebuje vpisovanja znaka za enačaj (=) niti znaka za množenje (*). Zapis pa izgleda tako: MIN 25 x1 + 28 x2 + 19 x3 + 26 x4 ST x1 + x2 = 50 x3 + x4 = 45 x1 + x3 = 30 x2 + x4 = 65 END Kliknemo Solve, potrdimo na vprašanje, če želimo narediti analizo občutljivosti in dobimo poročilo, prikazano spodaj: Miha Osojnik: Primerjava analitičnih programskih orodij pri reševanju problemov stran 45

LP OPTIMUM FOUND AT STEP 0 OBJECTIVE FUNCTION VALUE 1) 2360.000 VARIABLE VALUE REDUCED COST X1 0.000000 4.000000 X2 50.000000 0.000000 X3 30.000000 0.000000 X4 15.000000 0.000000 ROW SLACK OR SURPLUS DUAL PRICES 2) 0.000000-2.000000 3) 0.000000 0.000000 4) 0.000000-19.000000 5) 0.000000-26.000000 NO. ITERATIONS= 0 RANGES IN WHICH THE BASIS IS UNCHANGED: OBJ COEFFICIENT RANGES VARIABLE CURRENT ALLOWABLE ALLOWABLE COEF INCREASE DECREASE X1 25.000000 INFINITY 4.000000 X2 28.000000 4.000000 INFINITY X3 19.000000 4.000000 INFINITY X4 26.000000 INFINITY 4.000000 RIGHTHAND SIDE RANGES ROW CURRENT ALLOWABLE ALLOWABLE RHS INCREASE DECREASE 2 50.000000 0.000000 0.000000 3 45.000000 0.000000 0.000000 4 30.000000 0.000000 0.000000 5 65.000000 0.000000 0.000000 Spet lahko vidimo, da je zgornji del poročila enak tistemu v Lingu, spodnji pa ima dodano še, za koliko se lahko spremenijo vrednosti (cene) prevozov. Prevoz od dobavitelja A do stranke S1 se lahko poceni za 4 na 21, ne sme pa se podražiti, prevoz od dobavitelja A do S2 se lahko podraži za štiri evre na 32, ne sme pa se poceniti, prevoz od B do S1 se prav tako lahko podraži za 4 na 23, ne sme pa se poceniti ter prevoz od B do S2 se ne sme podražiti, lahko pa se poceni za 4 na 22. 6.3.4. POM-QM Pri POM-QM moramo spet najprej določiti, s katerim modulom bomo delali. V meniju kliknemo na Module in nato izberemo Transportation. Odpremo novo delovno okolje. Miha Osojnik: Primerjava analitičnih programskih orodij pri reševanju problemov stran 46

Program nas tokrat vpraša, koliko izvorov (dobavitelji) in ponorov (stranke) želimo imeti v novem delovnem okolju. V tem primeru izberemo dva izvora in dva ponora ter kliknemo OK. Lahko ju tudi poimenujemo po svoji želji. Odpre se nova delovna tabela prikazana na sliki 32. Takoj vidimo, da lahko podatke enostavno vnesemo, saj je že vse pripravljeno in označeno, kateri kam spada. Podatke vnesemo praktično enako kot smo jih, na sliki 30, v Excelu. Slika 32: Prikaz vnosa podatkov Tabela je pripravljena tudi za vnos podatkov o potrebi in zmogljivostih. Vnesemo podatke v pravem vrstnem redu in nastavimo, da iščemo minimum, v polju Starting method, pa lahko pustimo, kot je že prednastavljeno na Any starting method. Ko imamo vse vnešeno in nastavljeno, kliknemo Solve in dobimo rešitev, prikazano na sliki 33: Slika 33: Prikaz rešitve in stroškov dobave Program tudi v tem primeru izračuna isto optimalno vrednost, kot ostali. Torej najnižja vrednost prevoza je 2360, stroški prevoza pa so: Od dobavitelja A k stranki S1 Od dobavitelja A k stranki S2 Od dobavitelja B k stranki S1 Od dobavitelja B k stranki S2 0 enot 50 enot 30 enot 15 enot Miha Osojnik: Primerjava analitičnih programskih orodij pri reševanju problemov stran 47

POM-QM pa ima možnost, da prikaže tudi stroške posamezne enote ene transportne poti ter skupne stroške ene transportne poti, kar lahko vidimo v oknu Shiping list in oknu Shipments with costs. Torej, vzemimo primer poti od Dobavitelja A do stranke S2, kjer je potrebno prepeljati 50 enot, po ceni 28, in so skupni stroški te poti 1400. Na isti način velja za ostale. 6.4. Problem maksimalnega pretoka Problem maksimalnega pretoka se lahko modelira z mrežnim modelom, kjer ena veja predstavlja zmogljivost prenosa, ki jo je sposobna prenesti. Kadar se v pravi situaciji srečujemo s to težavo, je večinoma želja managerja maksimalen pretok od začetne točke (imenovanega izvora) do zadnje točke (imenovan ponor). Primer: Podjetje se ukvarja z distribucijo plina. Od rafinerije do končnega cilja gre plin skozi sedem vozlišč (upoštevaje, da sta prvo in zadnje vozlišče izvor in ponor). Vse veje gredo samo v eno smer, torej po istem plinovodu ne more iti plin nazaj v drugo smer, premore pa 12 takšnih vej. Vsaka veja ima svoje omejitve, torej koliko plina v 1000 m 3 je sposobna pretočiti na uro. Razporeditev vej, skupaj z omejitvami, je prikazana na sliki 34, kjer vsaka točka predstavlja vozlišče, usmerjena puščica kaže, v katero smer teče plin, številka nad posamezno vejo pa prikazuje pretok plina v 1000 m 3 na uro. Omejitve, napisane nad puščicami, so za lažjo in preglednejšo predstavo podane še v tabeli 10: 15 2 8 4 4 2 6 1 19 3 5 6 11 6 6 5 7 11 7 Slika 34: Pretok skozi mrežo Veje 1,2 1,3 2,3 2,4 2,5 3,5 3,6 4,5 4,7 5,7 6,5 6,7 Zmogljivosti 15 19 5 8 4 6 11 2 6 11 6 7 Rešitev: Tabela 10: Zmogljivosti vej Plin torej teče od točke 1, izvora, do točke 7, ponora. Želimo, da v tej mreži vej teče tako, da je njegov pretok maksimalen. Označimo matematično pretok plina skozi posamezno vejo s spremenljivkami. To so: x12, x13, x23, x24, x25, x35, x36, x45, x47, x57, x65, x 67 Miha Osojnik: Primerjava analitičnih programskih orodij pri reševanju problemov stran 48

Prvi indeks pri posamezni spremenljivki pomeni začetno vozlišče, drugi pa, v katerem vozlišču se ta veja konča. Poudariti je potrebno tudi, da te spremenljivke ne morejo biti negativne, saj tok ne more biti negativen. Vsaka spremenljivka je hkrati tudi zgornja meja možnega pretoka posamezne veje. Model linearnega programa pa ima naslednjo obliko: 0 x 15 12 0 x 19 13 0 x 5 23 0 x 8 24 0 x 4 25 0 x 6 35 0 x 11 36 0 x 2 45 0 x 6 47 0 x 11 57 0 x 6 65 0 x 7 67 Tok skozi mrežo je možen takrat, če za vsako vozlišče velja pogoj o ohranitvi toka: Tok v vozlišče i = tok iz vozlišča i Za posamezna vozlišča pa veljajo naslednje enačbe: Za vozlišče 2: x12 = x23 + x24 + x25 Za vozlišče 3: x13 + x23 = x35 + x36 Za vozlišče 4: x24 = x45 + x47 Za vozlišče 5: x57 = x25 + x36 + x45 + x65 Za vozlišče 6: x36 = x65 + x67 Te enačbe predstavljajo omejitve tokov skozi posamezna vozlišča. Količina plina od izvora 1 mora biti enaka količini, ki priteče v točko 7 v ponor. Enačba torej izgleda tako: x0 = x12 + x13 = x47 + x57 + x67 Potrebno je izračunati vrednost spremenljivk glede na zgoraj podane pogoje, pretok pa mora biti maksimalen. Ciljna funkcija ima torej naslednjo obliko: max z = max x 12 + x 13 Za reševanje tega problema smo se odločili za POM-QM, zato, ker ima ta že vgrajen modul, in ker je upravljanje z njim enostavno. V menijski vrstici kliknemo na Module in iz ponujenih modulov izberemo Networks. Odpreti moramo novo delovno okolje, da lahko nadaljujemo z delom. Kliknemo na ikono za novo delovno okolje in odpre se manjši meni s tremi ponujenimi možnostmi. Izberemo zadnjo, to je Maximal Flow. Program nam ponudi na izbiro, koliko vej ima naša mreža, določimo 12 in izbiro potrdimo. Še prej lahko veje tudi po želji preimenujemo. Odpre se nam novo delovno okolje s tabelo, pripravljeno na vnos podatkov. Začnemo pri prvi veji. Miha Osojnik: Primerjava analitičnih programskih orodij pri reševanju problemov stran 49

V prvem okvirčku določimo, v katerem vozlišču se veja začne, v drugem, v katerem se konča, v tretjega pa vpišemo vrednost posamezne veje. Torej na primer za prvo vejo, x 12, vnos izgleda tako: 1, 2 in vrednost 15. Za ostale veje se naredi enako. Nad tabelo še določimo, v katerem vozlišču je izvor (Source) in v katerem je ponor (Sink). Ko imamo vse vnešeno, kliknemo Solve in program izračuna rešitev, prikazano na sliki 35. Izračuna, da je maksimalen pretok 24, kar pomeni 24000 m 3 plina, vrednost posameznih spremenljivk (v 1000 m 3 ) pa je podana v tabeli 11: Veja X 12 X 13 X 23 X 24 X 25 X 35 X 36 X 45 X 47 X 57 X 65 X 67 Kapaciteta 15 19 5 8 4 6 11 2 6 11 6 7 Rešitev Veja X 12 X 13 X 23 X 24 X 25 X 35 X 36 X 45 X 47 X 57 X 65 X 67 Rešitev 11 13 4 7 0 6 11 1 6 11 4 7 Tabela 11: Prikaz rešitve Slika 35: Maksimalen pretok Poleg rešitve pa prikaže tudi ponovitve, torej pretok po vejah in njihov seštevek. Če pogledamo to rešitev grafično, na sliki 34, začnemo pri vozlišču 1 in gledamo, katera od obeh vej ima največji pretok. To je do vozlišča 3 s pretokom 19. Do naslednjega vozlišča gremo po istem principu. Torej, naslednje vozlišče z največjim pretokom, ki izhaja iz vozlišča 3, je vozlišče 6 s pretokom 11. Od vozlišča 6 do naslednjega, je s pretokom 7 največji pretok do vozlišča 7. Ko smo ugotovili verigo (tako temu pravimo), pogledamo, katera vrednost je v tej verigi najnižja. To je vrednost 7, med vozliščema 6 in 7 (prikazano na sliki 30 v spodnjem oknu v prvi vrstici). To vejo pobrišemo in ostalim vejam na tej verigi zmanjšamo vrednost za 7. Spet gledamo vozlišče 1 in pogledamo, katera veja ima najmočnejši pretok. Tokrat je to veja proti vozlišču 2 s pretokom 15 (saj je veja proti točki 3 zmanjšana za 7 na vrednost 12), naslednja najpretočnejša veja iz vozlišča 2 naprej pa je veja proti vozlišču 4 s pretokom 8. Iz vozlišča 4 gre najpretočnejša veja proti Miha Osojnik: Primerjava analitičnih programskih orodij pri reševanju problemov stran 50

končnem vozlišču 7 s pretokom 6. Spet smo dobili novo vejo in pogledamo, katera veja od teh ima najnižji pretok in jo izločimo. To je veja od vozlišča 4 do 7 z vrednostjo 6. To vejo izbrišemo in za to vrednost znižamo pretok vsem ostalim na tej verigi. Če gremo na ta način do konca, dokler ne zmanjka vej, dobimo rešitev. Ko seštejemo veje, ki smo jih zbrisali, dobimo vrednost 24. 6.5. Problem najkrajše poti Problem najkrajše poti lahko definiramo kot iskanje poti med dvema točkama tako, da je vsota vrednosti poti minimalna. To je lahko na primer iskanje najkrajše poti med dvema krajema na avtomobilski karti, kjer posamezne točke predstavljajo kraje skozi katere moramo peljati, da pridemo do cilja, vrednosti pa predstavljajo dolžine v kilometrih od enega do drugega vmesnega kraja. Primer: Podjetje se ukvarja z distribucijo električne energije. Potrebno jo je dobaviti od elektrarne E (vozlišče 1) do tovarne T (vozlišče 6), vmesne postaje pa so vozlišča od 2 do 5. Distribucija pa ni možna med vsemi vozlišči. Ni mogoča med vozliščema 3 in 4, prav tako pa tudi ne med 4 in 5. Vrednosti med posameznimi vozlišči predstavljajo razdaljo v kilometrih. Podjetje želi transportirati elektriko pa najkrajši možni razdalji, zato mora poiskati najkrajšo pot, ki povezuje vozlišči 1 in 6. Na sliki 36 je prikazana skica mreže: 6 2 3 4 2 1 1 6 5 3 4 5 3 Slika 36: Mrežni model Za reševanje problema najkrajše poti obstaja več algoritmov. To so Dijkstra algoritem, Bellman-Ford algoritem, Floyd-Warshall algoritem, Johnsonov algoritem in še nekateri drugi. (Čižman, 2004) Če so vse dolžine vej nenegativne, lahko za izračun minimalne poti uporabimo metodo, poznano kot Dijkstra algoritem, ki ga je leta 1959 razvil danski znanstvenik Edsger Dijkstra. (Wikipedia, 14.10.2008) Potek dela z Dijkstra algoritmom: Začetno vozlišče 1 najprej označimo s stalno oznako 0, nato pa z začasno oznako i označimo vsako vozlišče i, ki je z enojno vejo povezano z vozliščem 1. Ta začasna oznaka je enaka dolžini veje, ki povezuje vozlišči 1 in i. Vsem drugim damo začasno oznako neskončno ( ). Ko to naredimo, izberemo vozlišče z najmanjšo začasno oznako in mu dodelimo trajno oznako. Vozlišču j, ki ima trenutno začasno oznako in je Miha Osojnik: Primerjava analitičnih programskih orodij pri reševanju problemov stran 51

na vozlišče i povezano z vejo, nadomestimo začasno oznako. Njegova nova začasna oznaka predstavlja dolžino najkrajše poti iz vozlišča 1 v vozlišče j, ki pelje skozi k vozlišča, ki so najbližja vozlišču 1. Nato postavimo najmanjšo začasno oznako kot trajno. Vozlišče z novo trajno oznako je (k+1) to je najbližje vozlišče vozlišču 1. Ta postopek je potrebno nadaljevati, dokler nimajo vsa vozlišča trajne oznake. Na primeru iz slike 36 poglejmo, kako to izgleda v praksi: Od vozlišča 1 do 6 iščemo najkrajšo pot, trajne oznake pa označujmo z *. Na začetek postavimo 0 in pripišemo *, kar predstavlja trajno oznako, hkrati pa pomeni, da iz vozlišča 1 do vozlišča 1 ne naredimo nič poti, saj smo že v njem. Iz vozlišča 1 gremo lahko v vozlišči 2 in 3, zato naprej napišemo števili 6 in 5 (razdalje), ostalim vozliščem pa dodelimo neskončno: 0,6,5,,,. Vozlišče 3 ima zdaj najmanjšo oznako, zato mu dodelimo trajno oznako *, in dobimo: 0,6,5,,, Vemo, da je vozlišču 3 najbljižje vozlišče 1. Nato je potrebno izračunati nove začasne oznake vozlišč, ki so z vozliščem 3 povezana z enojno vejo. Iz slike lahko ugotovimo, da je to vozlišče 5. Da iz vozlišča 1 pridemo do vozlišča 5, je potrebno iti skozi vozlišče 3. Poti se seštevajo in torej je nova začasna oznaka vozlišča 5 takšna: 5 = min,5 + 4 = 9. Tako smo dobili novo začasno oznako vozlišča 5, vozlišče 2 pa { } je postalo trajno, saj je novo najmanjše: 0,6,5,,9, Vozlišči 4 in 5 sta povezani z novim trajnim vozliščem 2, zato jima je potrebno spreme- 4 = min,6 + 3 = 9, niti začasne oznake. Za vozlišče 4 dobimo začasno oznako tako: { } za vozlišče 5 pa 5 = min{ 9,6 + 1} = 7. Iz tega sledi, da je vozlišče 5 najbližje in mu dodelimo trajno oznako. Tako dobimo nove oznake: 0,6,5,9,7, Ker je zdaj samo vozlišče 6 povezano z vozliščem 5, je potrebno spremeniti še oznako 6 = min,7 + 3 = 10. Vozlišče 4 postane novo vozlišče z vozlišča 6. Dobimo jo tako: { } najmanjšo vrednostjo in jo označimo kot trajno. Vemo torej, da je vozlišče 4 četrto najbližje vozlišču 1. Zdaj imamo nove oznake: 0,6,5,9,7,10 Če pogledamo povezavo vozlišča 4 in 6, vidimo, da je začasna oznaka 10 boljša, saj je 6 = min 10,9 + 2 = 11 daljša, zato označimo vozilšče 6 kot trajno: { } Miha Osojnik: Primerjava analitičnih programskih orodij pri reševanju problemov stran 52

0,6,5,9,7,10 Torej lahko poiščemo najkrajšo pot med vozliščema 1 in 6. Razlika med trajnima oznakama vozlišč 5 in 6 je tri torej dolžina veje (5, 6), zato zdaj gledamo iz vozlišča 5. Razlika med vozliščema 5 in 2 je ena, dolžina veje (2, 5). Prestavimo se v vozlišče 2. Razlika od vozlišča 2 do 1 je 6, torej dolžina veje (1, 2). To pomeni, da je najkrajša pot iz vozlišča 1 v 6 skozi vozlišča 1-2-5-6, v skupni dolžini 10 km. Če bi šli po poti 1-2-4-6, bi bila dolžina 11 km, po poti 1-3-5-6 pa 12 km. Tako pridemo do rezultata ročno, pokazali pa bomo še, kako se do tega rezultata pride s pomočjo programa POM-QM. Kliknemo na Module in izberemo modul Networks. Nato kliknemo na»nov list«in izberemo Shortest route. Prikaže se nam vnosno okno, kjer določimo, koliko vej ima naša mreža. Določimo, da jih ima sedem, po želji pa veje in ta problem še posebej poimenujemo in nato potrdimo. Odpre sa nam prazna tabela, v katero bomo vnesli podatke, prikazana na sliki 37. Slika 37: Prikaz vnosa podatkov Za vnašanje imamo na voljo tri stolpce. V prvem določimo, kje se veja začne, v drugem, kje se konča, v tretjem pa določimo vrednost te veje, torej dolžino. Podatke vnesemo v tabelo, nato v polju Network type označimo directed, desno od te možnosti, pa še določimo, v katerem vozlišču je začetek (Origin) in cilj (Destination); torej je vozlišče 1 začetek in vozlišče 6 konec. Ko imamo vse vnešeno, kliknemo na Solve, in dobimo rešitev, prikazano na sliki 38. Prva tabela prikazuje, kako poteka najkrajša pot, torej 1-2- 5-6 v skupni dolžini 10 kilometrov, spodnja pa prikazuje, koliko kilometrov je od enega vozlišča do drugega. Ker je mreža usmerjena, torej ni možno iti nazaj. Če na primer želimo priti iz vozlišča 3 v vozlišče 6, je potrebno narediti 7 km. Miha Osojnik: Primerjava analitičnih programskih orodij pri reševanju problemov stran 53

Slika 38: Rešitev problema najkrajše poti v POM-QM 6.6. Problem antagonističnih iger Antagonistične igre spadajo v področje teorije iger. To lahko sicer razdelimo na dva dela. Prvi so igre na srečo oziroma hazardne igre. To so igre, kjer je izid slučajen in igralec s svojimi sposobnostmi ne more vplivati na končni rezultat. Drugi del so strateške igre. Gre za igre, pri katerih lahko igralec s svojimi sposobnostmi vpliva na končni rezultat. Teorija iger je uporabna na več področjih. Ne samo, da je pravšnja za namen zabave, na primer pri igrah s kartami, ampak tudi za namene raziskav. Predvsem je uporabna pri raziskavah konfliktnih situacij, posledic nasprotnih interesov udeležencev, ko vsak želi zase čim večjo korist. Tudi v gospodarstvu, kjer je udeleženo veliko oseb in organizacij z različnimi in nasprotujočimi si interesi. Teorija iger, za razliko od ostalih optimizacijskih metod (pri katerih se išče optimum samo za v naprej predpisan sistem - za primer lahko vzamemo proizvodni problem, ko iščemo optimalen načrt z maksimalnim dobičkom, dogajanje okrog ostalih konkurentov pa nas ne zanima), upošteva tudi vplive ostalih sistemov. Ta metoda torej, za razliko od drugih, upošteva obstoj več partnerjev, ki se odločajo vsak zase, obravnava konfliktne situacije, upošteva pa tudi interakcijo med konflikti in enotnim ciljem. To so tri lastnosti, po katerih se razlikuje od standardnih optimizacijskih metodah. Osnovni element igre je konfliktna situacija, v kateri se igralec znajde vsakič, ko ima na voljo več ukrepov. Konfliktne situacije najlažje prepoznamo po naslednjih lastnostih: Vsak od igralcev A in B skuša doseči nek namen. Ta sta med seboj nezdružljiva. Torej, če A doseže svoj namen, ga B ne in obratno. Možna pa je tudi, da se zgodi situacija, kjer ne A niti B ne dosežeta svojega namena. Oba se ravnata po določenih pravilih. Igrata razumno, tako da vsaka poteza deluje v njun prid. Obstaja merilo, po katerem je vedno mogoče oceniti korist vsakega ukrepa. Kljub temu, da je zadnji točki najtežje ustreči, je to pogoj za uporabnost teorije, čeravno so lahko ta merila slaba, kar pa je potrebno vzeti v zakup, če želimo njen obstoj. Miha Osojnik: Primerjava analitičnih programskih orodij pri reševanju problemov stran 54

Pri teoriji iger imenujemo udeležene igralce, označimo pa z P 1, P 2,..., P n. Praviloma nastopata le dva igralca, če jih več z istimi interesi, pa jih obravnavamo kot enega. Ukrepe, ki jih igralci izvedejo med igro, imenujemo izbira, fazi v kateri poteka to izbiranje pa rečemo poteza. Povedati je potrebno še, kaj je igra. To je zbirka pravil in dogovorov, po katerih se morajo udeleženci ravnati. Igre ločimo po različnih vidikih: Po številu igralcev. Po vsoti dobičkov. Igri, kjer je vsota dobičkov enaka 0, to je taka igra kjer nekateri toliko dobijo, kot drugi izgubijo, pravimo antagonistična igra. Če pa vsota dobičkov ni nič, pa pravimo, da je igra neantagonistična. Po številu izbir, kjer ima igralec končno ali pa neskončno možno število izbir. Po informaciji, ko ima igralec o izbirah in možnostih nasprotnika popolno ali delno informacijo ali pa je sploh nima. Primer je šah. Matrične igre To je antagonistična igra med dvema igralcema, kjer ima vsak na voljo po eno potezo in nobene informacije o nasprotniku. Primer: Neko podjetje oglašuje svojo novo punudbo izdelkov z oglasi na internetu, po televiziji, ali na oba načina hkrati. Enako seveda lahko ravna tudi konkurenčno podjetje. V tabeli 12 so predstavljeni pričakovani dohodki podjetja pri posameznih načinih oglaševanje in različnih možnih načinih ravnanja konkurenčnega podjetja. Podjetje A Konkurenca B Ne oglašuje Internet TV Internet in TV Ne oglašuje -3-4 -5-11 Internet 4 3-2 -5 TV 6 2 1 4 Internet in TV 11 2 2 2 Tabela 12: Prikaz vrednosti oglaševanja Rešitev: V POM-QM kliknemo na Module in iz seznama izberemo modul Game Theory. Kliknemo na ikono za nov list, da začnemo z delom z novim modelom. Odpre se vnosno okno, kjer določimo število stolpcev in vrstic ter obema nastavimo število 4 (to so možnosti, da ne oglašujejo, oglašujejo preko tiska, preko televizije ali pa oboje hkrati). Vrstice in stolpce lahko tudi po želji preimenujemo, poimenujemo pa lahko tudi ime projekta. Potrdimo nastavjeno in odpre se nam prazna tabela, podobna tabeli zgoraj (tabela 12). V prazna polja vnesemo vrednosti, ki so napisana v zgornji tabeli na istih ustreznih mestih. Ko je tabela izpolnjena, kliknemo na Solve in dobimo rešitev, prikazano na sliki 39. Rešitev pove, da podjetju najbolj ustreza, da vloži ves denar, namenjen za oglaševanje, preko x = 0;0;0;1, interneta in televizije, na sliki prikazano v zadnjem stolpcu, oziroma kot { } saj mu zagotavlja, da v povprečju ne dobi manj, kot w = 2 denarni enoti. Na drugi strani pa konkurenčnemu podjetju najbolj ustreza taktika, kjer 83 odstotkov denarja vloži v oglaševanje preko interneta, 11 odstotkov v televizijsko, in šest odstotkov v oglaševanje Miha Osojnik: Primerjava analitičnih programskih orodij pri reševanju problemov stran 55

preko interneta in televizije, napisano v zadnji vrstici, oziroma predstavljeno kot y = 0;0,83;0,11;0,06. Ta strategija mu zagotavlja, da podjetje v povprečju ne bo { } izgubilo več kot w = 2 denarni enoti. Slika 39: Rešitev problema antagonistične igre 6.7. Problem optimizacije zalog (NLP problem) Gre za področje, ki je del logističnega managementa. Točneje je to modificirani model optimalne naročilne količine (ONK) in mu pravimo model optimalne proizvodne količine (OPK). V primerjavi z ONK, kjer se obravnava predmet, ki ga kupec kupuje oziroma naročuje, se pri OPK upošteva, koliko teh predmetov je potrebno izdelati v domači proizvodnji. Ker je to modificiran model ONK, ga je možno uporabiti tudi za management vezanih zalog. (Čižman, 2002) Oznake, uporabljene v modelu za izračun OPK: sp d p H Lp Kp Kp* Spc... stroški priprave proizvodnje... Dnevna poraba... Zmogljivost proizvodnje na dan... Stroški skladiščenja enote na leto... Letna potreba... Proizvodna količina... optimalna proizvodna količina... celotni letni stroški proizvodnje Namen OPK je poiskati takšno vrednost, kjer bodo celotni letni stroški minimalni. Izraz za optimalno proizvodno količino pa je nasleden: Kp* = 2 Lp( sp) d H 1 p Poleg optimalne proizvodne količine, pa nas zanimajo tudi letni stroški proizvodnje oz. ciljna funkcija. Enačba, ki določa celotne letne stroške Spc, je podana tako: Miha Osojnik: Primerjava analitičnih programskih orodij pri reševanju problemov stran 56

d Kp 1 p Lp Spc = H + sp 2 Kp Primer: Podjetje se ukvarja s proizvodnjo in prodajo industrijskih ležajev na domačem in tujem trgu. Letna potreba po industrijskih ležajih je 50.000 kosov in je porazdeljena enakomerno. Podjetje je dnevno sposobno izdelati 275 ležajev, v letu pa je 242 delovnih dni. Stroški priprave na izdelavo ležajev znašajo 320, cena enega ležaja je 0,5, stroški skladiščenja ležaja pa znašajo 0,1 na leto. a) Koliko ležajev naj bo proizvedeno v eni proizvodnji seriji? b) Koliko naj bo maksimalno prizvedenih ležajev, če želi podjetje imeti najmanj 500 ležajev v skladišču? Rešitev: Model problema je sledeč: 2 Lp( sp) 2 * 50000 * 320 Kp* = = = 35871,54 d 50000 H 1 0,1 1 p 275 * 242 Tako se problem reši ročno, sledi se predstavitev s programoma POM-QM in Excel. 6.7.1. POM-QM a) V POM-QM kliknemo na Module Inventory, nato kliknemo na ikono za nov list in iz seznama izberemo Production Order Quantity Model. Odpre se običajno okno, kjer smo do zdaj določali število vej, omejitev, spremenljivk, idr., tokrat pa nam ni potrebno ničesar, ampak samo potrdimo z OK in odpre se nam nova tabela. V prazne okvirčke vnesemo podatke iz naloge, tako kot je prikazano na sliki 40, vendar v celici Daily demand rate pustimo ničlo, saj to vrednost izračuna program. Slika 40: Prikaz vnosa podatkov Pred vsako celico piše, katero vrednost je potrebno vnesti, tako da je uporabniku to olajšano. Ko imamo vse vnešeno, kliknemo na Solve in dobimo rezultat 35872 enot, Miha Osojnik: Primerjava analitičnih programskih orodij pri reševanju problemov stran 57

prikazano na sliki 41 v zadnjem stoplpcu v prvi vrstici (program je izračunal vrednost 35871,54, vendar izdelek je lahko samo cel, zato smo zaokrožili navzgor), zraven pa rezultat prikaže še grafično. Ob tem dobimo še druge koristne rešitve, kot so maksimalna zaloga, ki naj bo 8921 kosov, povprečna 4460 kosov, letni stroški priprave pa znašajo 446,04 evrov. 6.7.2. EXCEL Slika 41: Numerična in grafična rešitev problema OPK Za rešitev v Excelu, pa uporabimo možnost, ki jo ponuja POM-QM, torej da model shrani v excelovem formatu. To naredimo tako, da v POM-QM kliknemo File in izberemo Save as Excel file, namesto običajno Save as. Program nam ponudi tri možnosti, prikazane na sliki 42: Slika 42: Prikaz Save as Excel file možnosti Prva možnost je, da shrani na isto mesto, kjer je model že shranjen v POM-QM formatu, druga je, da shrani v novo datoteko, ki jo uporabnik sam poimenuje in določi lokacijo, Miha Osojnik: Primerjava analitičnih programskih orodij pri reševanju problemov stran 58

tretja možnost pa je, da v obstoječ excelov dokument doda nov zavihek. Ko se odločimo za eno izmed njih, program tja shrani datoteko, in ko jo odpremo, dobimo rezultat, prikazan na sliki 43. Vidimo torej, da dobimo tudi tokrat isti rezultat: 35872 kosov. Slika 43: Rešitev v Excelu b) Za proizvodnjo te količine bo potrebno 35872 275 = 130,44 dni. V tem obdobju bo podjetje prodalo 130,44 (50000 242) = 26951 ležajev. Torej se bo zaloga dvignila na 35782 26951 = 8921 enot. Temu moramo prišteti še zahtevo po minimalno 500 ležajih in dobimo rešitev 9421 enot. Miha Osojnik: Primerjava analitičnih programskih orodij pri reševanju problemov stran 59