Mendelova univerzita v Brně Provozně ekonomická fakulta. programování. Vedoucí práce: Barbora Helešicová

Podobné dokumenty
4EK311 Operační výzkum. 2. Lineární programování

4EK213 Lineární modely. 12. Dopravní problém výchozí řešení

Metodické pokyny pro práci s modulem Řešitel v tabulkovém procesoru Excel

Obecná úloha lineárního programování. Úloha LP a konvexní množiny Grafická metoda. Jiří Neubauer. Katedra ekonometrie FEM UO Brno

4EK201 Matematické modelování. 2. Lineární programování

Příklady modelů lineárního programování

4EK213 LINEÁRNÍ MODELY

fakulty MENDELU v Brně (LDF) s ohledem na disciplíny společného základu (reg. č. CZ.1.07/2.2.00/28.

LDF MENDELU. Simona Fišnarová (MENDELU) Základy lineárního programování VMAT, IMT 1 / 25

4EK212 Kvantitativní management. 2. Lineární programování

Metody lineární optimalizace Simplexová metoda. Distribuční úlohy

Lineární programování

4EK311 Operační výzkum. 4. Distribuční úlohy LP část 1

4EK213 LINEÁRNÍ MODELY

Ekonomická formulace. Matematický model

Obr. P1.1 Zadání úlohy v MS Excel

Systémové modelování. Ekonomicko matematické metody I. Lineární programování

Simplexové tabulky z minule. (KMI ZF JU) Lineární programování EMM a OA O6 1 / 25

Přílohy. Příloha 1. Obr. P1.1 Zadání úlohy v MS Excel

1. července 2010

0.1 Úvod do lineární algebry

Parametrické programování

4EK213 Lineární modely. 4. Simplexová metoda - závěr

Matematika (CŽV Kadaň) aneb Úvod do lineární algebry Matice a soustavy rovnic

4EK213 Lineární modely. 5. Dualita v úlohách LP

4EK201 Matematické modelování. 4. Typické úlohy lineárního programování

0.1 Úvod do lineární algebry

Lineární programování

4EK311 Operační výzkum. 3. Optimalizační software a stabilita řešení úloh LP

B) výchovné a vzdělávací strategie jsou totožné se strategiemi vyučovacího předmětu Matematika.

4EK213 Lineární modely. 10. Celočíselné programování

10. Soustavy lineárních rovnic, determinanty, Cramerovo pravidlo

4EK212 Kvantitativní management. 3. Typické úlohy LP

13. Lineární programování

IB112 Základy matematiky

Karta předmětu prezenční studium

Globální matice konstrukce

1.1 Typy úloh LP. Klíčová slova: úlohy LP, formulace modelu. 1. Formulace ekonomického modelu.

skladbu obou směsí ( v tunách komponenty na 1 tunu směsi):

7. přednáška Systémová analýza a modelování. Přiřazovací problém

Nástroje pro analýzu dat

Návod na základní používání Helpdesku AGEL

Konvexní množiny Formulace úloh lineárního programování. Jiří Neubauer. Katedra ekonometrie FEM UO Brno

6 Simplexová metoda: Principy

4EK201 Matematické modelování 5. Speciální úlohy lineárního programování

12. Lineární programování

OSTRAVSKÁ UNIVERZITA PŘÍRODOVĚDECKÁ FAKULTA [ MOPV ] METODY OPERAČNÍHO VÝZKUMU

4.Řešení optimalizačních úloh v tabulkových kalkulátorech

Matice. Předpokládejme, že A = (a ij ) je matice typu m n: diagonálou jsou rovny nule.

4EK311 Operační výzkum. 1. Úvod do operačního výzkumu

P ílohy. P íloha 1. ešení úlohy lineárního programování v MS Excel

Metoda Monte Carlo a její aplikace v problematice oceňování technologií. Manuál k programu

Maticí typu (m, n), kde m, n jsou přirozená čísla, se rozumí soubor mn veličin a jk zapsaných do m řádků a n sloupců tvaru:

4EK212 Kvantitativní management. 1. Úvod do kvantitativního managementu a LP

Operační výzkum. Vícekriteriální programování. Lexikografická metoda. Metoda agregace účelových funkcí. Cílové programování.

Teorie her a ekonomické rozhodování. 2. Maticové hry

Nový způsob práce s průběžnou klasifikací lze nastavit pouze tehdy, je-li průběžná klasifikace v evidenčním pololetí a školním roce prázdná.

Obecná úloha lineárního programování

Uspořádanou n-tici reálných čísel nazveme aritmetický vektor (vektor), ā = (a 1, a 2,..., a n ). Čísla a 1, a 2,..., a n se nazývají složky vektoru

Operační výzkum. Přiřazovací problém.

Příklady ke cvičením. Modelování produkčních a logistických systémů

SOUSTAVY LINEÁRNÍCH ALGEBRAICKÝCH ROVNIC

2. část: Základy matematického programování, dopravní úloha. Ing. Michal Dorda, Ph.D.

1. Umístěte kurzor do sloupce Datový typ na řádek s polem, ve kterém vytvořit chcete seznam.

Úvod do lineární algebry

Výukový materiál zpracován v rámci projektu EU peníze školám

Cílem této kapitoly je uvedení pojmu matice a jejich speciálních typů. Čtenář se seznámí se základními vlastnostmi matic a s operacemi s maticemi

RNDr. Sousedíková Radmila, Ph.D.

STATISTICA Téma 1. Práce s datovým souborem

Operace s maticemi. 19. února 2018

Vektory a matice. Obsah. Aplikovaná matematika I. Carl Friedrich Gauss. Základní pojmy a operace

Přiřazovací problém. Přednáška č. 7

Microsoft Office. Excel ověření dat

1 Řešení soustav lineárních rovnic

Soustavy linea rnı ch rovnic

"Optimalizace krmných směsí"

Numerické metody a programování. Lekce 8

Matice přechodu. Pozorování 2. Základní úkol: Určete matici přechodu od báze M k bázi N. Každou bázi napíšeme do sloupců matice, např.

Matematika B101MA1, B101MA2

1 0 0 u 22 u 23 l 31. l u11

OPTIMALIZACE A MULTIKRITERIÁLNÍ HODNOCENÍ FUNKČNÍ ZPŮSOBILOSTI POZEMNÍCH STAVEB D24FZS

Soustavy lineárních rovnic a determinanty

CVIČNÝ TEST 41. OBSAH I. Cvičný test 2. Mgr. Tomáš Kotler. II. Autorské řešení 7 III. Klíč 15 IV. Záznamový list 17

KOMPLEXNÍ ČÍSLA INVESTICE DO ROZVOJE VZDĚLÁVÁNÍ

Soustavy. Terminologie. Dva pohledy na soustavu lin. rovnic. Definice: Necht A = (a i,j ) R m,n je matice, b R m,1 je jednosloupcová.

1 Vektorové prostory.

V této kapitole bude popsán software, který je možné využít pro řešení rozhodovacích problémů popisovaných v těchto skriptech.

Jeden ze způsobů zadávání dat v programu MS Access je pomocí tabulek. Ovšem mnohem výhodnější způsob je pomocí tzv. formulářů.

Gymnázium Jiřího Ortena, Kutná Hora

Problém lineární komplementarity a kvadratické programování

Systematická tvorba jízdního řádu 2. cvičení

MATICE. a 11 a 12 a 1n a 21 a 22 a 2n A = = [a ij]

4EK213 LINEÁRNÍ MODELY

Data v počítači. Informační data. Logické hodnoty. Znakové hodnoty

Polynomy. Mgr. Veronika Švandová a Mgr. Zdeněk Kříž, Ph. D. 1.1 Teorie Zavedení polynomů Operace s polynomy...

Determinant matice řádu 5 budeme počítat opakovaným použitím rozvoje determinantu podle vybraného řádku nebo sloupce. Aby byl náš výpočet

a počtem sloupců druhé matice. Spočítejme součin A.B. Označme matici A.B = M, pro její prvky platí:

Determinanty. Obsah. Aplikovaná matematika I. Pierre Simon de Laplace. Definice determinantu. Laplaceův rozvoj Vlastnosti determinantu.

Optimalizace. Obsah přednášky. DÚ LP - Okružní problém. Lineární optimalizace. DÚ LP - Okružní problém. DÚ LP - Okružní problém

Transkript:

Mendelova univerzita v Brně Provozně ekonomická fakulta Podpora řešení úloh lineárního programování Bakalářská práce Vedoucí práce: doc. Ing. Jiří Rybička, Dr. Barbora Helešicová Brno 2010

Na tomto místě bych chtěla poděkovat doc. Ing. Jiřímu Rybičkovi, Dr., za vedení bakalářské práce a cenné rady při její tvorbě. Dále děkuji Ondřeji Helešicovi a rodičům za jejich psychickou podporu.

Prohlašuji, že jsem tuto bakalářskou práci vypracovala samostatně s použitím literatury, kterou uvádím v seznamu. V Brně dne 2. 1. 2010....................................................

4 Abstract Helešicová, B. A promotion of solving linear programming problems. Bachelor thesis. Brno, 2010. The thesis deals with a creation of an user interface design for entering data necessary to solve typical linear programming problems without any knowledge in formulating them. Furthermore, it deals with designing a unit which enables solving the problem by a specialized software Lingo. The thesis includes theoretical information regarding the most common types of problems and their solving methods. Key words optimization problem, linear programming, simplex method, model formulation Abstrakt Helešicová, B. Podpora řešení úloh lineárního programování. Bakalářská práce. Brno, 2010. Práce se zabývá tvorbou návrhu vhodného uživatelského rozhraní pro zadávání hodnot potřebných k řešení typických úloh lineárního programování bez znalosti formulace modelu úlohy. Dále se zabývá navržením modulu, který umožní vyřešení úlohy prostřednictvím specializovaného programu Lingo. Součástí práce jsou teoretické informace o hlavních typech těchto úloh a základních metodách jejich řešení. Klíčová slova optimalizační úloha, lineární programování, simplexová metoda, formulace modelu

OBSAH 5 Obsah 1 Úvod a cíl práce 6 1.1 Úvod do problematiky.......................... 6 1.2 Cíl práce.................................. 6 2 Úloha lineárního programování 7 2.1 Obecný tvar úlohy............................ 7 2.2 Standardní tvar úlohy.......................... 8 2.3 Platné definice a věty........................... 8 2.4 Kanonický tvar úlohy........................... 9 3 Simplexová metoda 10 3.1 Základní princip simplexové metody................... 10 4 Typické úlohy lineárního programování 11 4.1 Kapacitní problém............................ 11 4.2 Problém optimálního rozmístění finančních prostředků........ 12 4.3 Výživový (nutriční, směšovací) problém................. 13 4.4 Řezný, krájecí problém.......................... 14 4.5 Distribuční problém............................ 15 5 Další metody řešení úloh lineárního programování 17 6 Současný stav 18 7 Tvorba aplikace 19 7.1 Návrh uživatelského rozhraní....................... 19 7.2 Modul kapacitní problém......................... 20 7.3 Modul problém optimálního rozmístění finančních prostředků..... 23 7.4 Modul výživový problém......................... 24 7.5 Modul řezný problém........................... 25 7.6 Modul distribuční problém........................ 27 8 Software pro řešení modelu 28 8.1 Formulace modelu v Lingu........................ 29 8.2 Výsledek úlohy.............................. 29 9 Diskuse 31 10 Závěr 32 11 Literatura 33

1 ÚVOD A CÍL PRÁCE 6 1 Úvod a cíl práce 1.1 Úvod do problematiky Operační výzkum je soubor samostatných vědních disciplín, zabývá se analýzou a následným řešením věcně různorodých problémů. Operační výzkum lze chápat také jako soubor metod a nástrojů, které rozhodují o tom, jak co nejlépe řešit složité operace ve velkých a složitých systémech. Nejpropracovanější a v praxi nejpoužívanější součástí operačního výzkumu je lineární programování. Typické úlohy spadající do lineárního programování obvykle umožňují vyhledání optimálního řešení daného problému. Těchto typických úloh je celá řada, jedná se o kapacitní problém, řezný problém, problém optimálního rozmístění finančních prostředků, směšovací problém a distribuční problém. Výhodou je, že při řešení všech těchto úloh je možné použít jedinou metodu. Řešení těchto problémů vyžaduje znalost simplexové nebo jiné metody. Simplexová metoda není náročná, ale v praxi je jistě vhodnější použití některého z mnoha programů k řešení těchto úloh. Pro použití těchto programů je nutné samostatně vytvořit model problému. Teprve ten je možné nechat programem vyřešit. Proto programy pro řešení optimalizačních úloh nemůže uživatel používat bez znalosti převodu úlohy ze slovního zadání do podoby soustavy nerovnic. 1.2 Cíl práce Cílem této práce je vytvoření návrhu uživatelského rozhraní pro typické úlohy lineárního programování, které umožní zadání úlohy bez znalosti formulace modelu v podobě soustavy nerovnic. Uživateli by tedy mělo být umožněno zadávat tyto úlohy přímo ze slovního zadání. Dále je cílem navržení modulu, který tvoří nadstavbu programu pro řešení těchto úloh. Aplikace by měla nabízet pět základních typů úloh lineárního programování kapacitní problém, problém optimálního rozmístění finančních prostředků, výživový problém, řezný problém a distribuční problém. Všechny tyto úlohy budou uživateli nabízeny v základním tvaru s možností různých modifikací. Uživatel bude postupně naveden k vyplnění podstatných hodnot ze slovního zadání. Aplikace následně vytvoří soustavu nerovnic, kterou je možné předat vhodnému programu k řešení. Výběr vhodného programu bude také součástí této práce. Získané výsledky budou uživateli prezentovány ve srozumitelné a přehledné podobě. Součástí aplikace by měl být i užitečný návod, který uživateli ulehčí práci a předejde možným chybám v zadání. Součástí práce musí být i analýza metod k řešení optimalizačních úloh a vymezení typických úloh, které bude aplikace nabízet.

2 ÚLOHA LINEÁRNÍHO PROGRAMOVÁNÍ 7 2 Úloha lineárního programování 2.1 Obecný tvar úlohy Cílem optimalizačních úloh je zpravidla optimalizace reálného problému. Speciálním případem optimalizační úlohy je úloha lineárního programování. Chceme-li nějaký existující problém řešit jako úlohu lineárního programování, musíme sestavit lineární deterministický statický matematický model problému. Ze slovního zadání musíme stanovit proměnné, a to jak z hlediska jejich věcného významu, tak i počtu, co v daném problému představuje různá omezení, která je při úvahách o řešení nezbytné respektovat, co je považováno za kritérium, podle něhož jsou jednotlivá řešení porovnávána. (Holoubek, 2006) Obecný tvar úlohy má tuto podobu: z extr = c 1 x 1 + c 2 x 2 +... + c n x n (1) a 11 x 1 + a 12 x 2 +... + a 1n x n b 1 a 21 x 1 + a 22 x 2 +... + a 2n x n b 2. a m1 x 1 + a m2 x 2 +... + a mn x n b m (2) kde vztah 1 je účelová (kriteriální) funkce, vztah 2 je soustava vlastních omezujících podmínek, vztah 3 jsou podmínky nezápornosti. Maticová forma zápisu:.. x 1, x 2,..., x n 0 (3) z extr = T c x A x b x 0 kde použité symboly mají následující význam: T c je transponovaný n-složkový vektor koeficientů účelové funkce, x je n-složkový sloupcový vektor strukturních proměnných, A je matice strukturních koeficientů o rozměru m n, b je sloupcový m-složkový vektor hodnot pravých stran vlastních omezujících podmínek, 0 je sloupcový n-složkový nulový vektor. (Holoubek, 2006)

2.2 Standardní tvar úlohy 8 Cílem této úlohy je stanovit hodnoty proměnných x 1... x n tak, aby hodnota účelové funkce dosahovala extrému. Hledáme-li co nejvyšší hodnotu účelové funkce, pak se úloha nazývá maximalizační. Hledáme-li nejnižší hodnotu účelové funkce, pak se úloha nazývá minimalizační. 2.2 Standardní tvar úlohy Libovolnou úlohu lineárního programování v obecném tvaru lze převést na tvar standardní. Tento tvar se vyznačuje tím, že obsahuje vlastní omezující podmínky stejného typu rovnice. Převedení do tohoto tvaru provedeme pomocí doplňkových (přídatných) proměnných. Tyto proměnné slouží k vyrovnání levých stran vlastních omezujících podmínek s pravými stranami. Doplňkovou proměnnou buď přičítáme, nebo odečítáme od levé strany podmínky, aby se pravá a levá strana vyrovnaly. Má-li omezující podmínka v obecném tvaru tvar rovnice, pak zůstává ve standardním tvaru nezměněna. Pro doplňkové proměnné platí také podmínky nezápornosti. V účelové funkci se tyto proměnné objevují s nulovým koeficientem, takže hodnotu kritéria nijak neovlivňují. Maticový zápis úlohy ve standardním tvaru: z extr = T c x A x = b x 0. 2.3 Platné definice a věty Pro úlohu lineárního programování v obecném i standardním tvaru platí následující definice. Definice 1 přípustným řešením úlohy lineárního programování je každý takový vektor řešení x= (x 1, x 2,..., x n ), který vyhovuje všem omezujícím podmínkám. V typickém případě existuje takových přípustných řešení nekonečné množství. (Holoubek, 2006) Definice 2 bázickým řešením úlohy nazveme takové přípustné řešení, kterému odpovídá vektor x= (x 1, x 2,..., x n ), obsahující maximálně m kladných složek. Platí, že má-li úloha přípustné řešení, pak má i řešení bázické. Úloha má vždy konečný počet bázických řešení. (Holoubek, 2006) Definice 3 Bázické řešení úlohy nazýváme nedegenerované, jestliže obsahuje přesně m kladných složek. Jestliže je počet kladných složek menší než m, pak toto řešení nazýváme degenerované. (Rašovský a Šišláková, 2003) Definice 4 Přípustné řešení úlohy nazýváme optimálním, jestliže při něm účelová funkce dosahuje maximální (minimální) hodnotu. (Rašovský a Šišláková, 2003)

2.4 Kanonický tvar úlohy 9 Základní věta lineárního programování má-li úloha optimální řešení, potom musí mít i bázické řešení. Z této věty je možné vyvodit, že při hledání optimálního řešení úlohy je možné se zaměřit jen na bázická řešení. (Holoubek, 2006) 2.4 Kanonický tvar úlohy Kanonický tvar úlohy lze vytvořit k libovolné úloze lineárního programování ze standardního tvaru. Získáme jej použitím Gaussovy eliminační metody a elementárních úprav vlastních omezujících podmínek. Gaussova eliminační metoda představuje řešení soustavy lineárních rovnic vyjádřených jako matice převedením dané matice na horní trojúhelníkovou nebo diagonální matici. Tyto úpravy vytvoří na levé straně soustavy čtvercovou jednotkovou submatici (bázi). Její rozměr je shodný s počtem vlastních omezujících podmínek modelu. Proměnné, které v tomto tvaru tvoří jednotkovou submatici, jsou označovány jako bázické. Zbývající proměnné jsou nebázické. Kanonický tvar úlohy obsahuje jedno bázické řešení, které označujeme jako výchozí bázické řešení. Velikosti bázických proměnných jsou rovny hodnotám pravých stran omezujících podmínek, nebázické proměnné jsou rovny nule. Kanonický tvar úlohy lze vytvořit dvěma způsoby: 1. Kanonický tvar je shodný se standardním tvarem. 2. Standardní tvar upravíme za pomoci umělých proměnných. Tyto přičítáme k levé straně pouze těch vlastních omezujících podmínek, které v obecném tvaru měly podobu rovnice nebo nerovnice s relací. Umělé proměnné se stávají bázickými a jsou součástí výchozího bázického řešení. Umělé proměnné musí splňovat podmínky nezápornosti, v účelové funkci se objevují s velmi nevýhodným (prohibitivním) koeficientem M, který zajistí, že jsou v průběhu hledání optimálního řešení z báze odstraněny. (Holoubek, 2006) Kanonický tvar úlohy má tuto podobu: z extr = c 1 x 1 + c 2 x 2 +... + c n x n a 11 x 1 + a 12 x 2 +... + a 1n x n = b 1 a 21 x 1 + a 22 x 2 +... + a 2n x n = b 2 a m1 x 1 + a m2 x 2 +... + a mn x n = b m x 1, x 2,..., x n 0....

3 SIMPLEXOVÁ METODA 10 3 Simplexová metoda Simplexová metoda umožňuje řešit všechny problémy spadající do lineárního programování bez ohledu na jejich rozsah a složitost. Je nejznámější a nejpoužívanější metodou. Komerční programy pro řešení úloh lineárního programování jsou většinou založeny na primární či duální simplexové metodě. Simplexová metoda je metodou iterační, je založena na Gaussově metodě úplné eliminace. Jejími nejdůležitějšími vlastnostmi jsou: Konečnost. Prakticky to znamená, že pokud existuje optimální řešení, nalezneme je za konečný počet kroků výpočtu, nebo zjistíme, že optimální řešení neexistuje. (Berka, 2008) Jednoduchost algoritmu. Všechny výpočty v simplexové metodě provádíme srovnáváním nebo výpočtem podle jednoduchých vzorců, které obsahují pouze algebraické operace sčítání, násobení, dělení a odčítání. (Berka, 2008) 3.1 Základní princip simplexové metody Simplexová metoda je založena na Gaussově metodě úplné eliminace, která dovoluje získat bázické řešení a postupovat od jednoho bázického řešení k jiným. Simplexová metoda zajišťuje, aby všechna získaná řešení byla přípustná a aby se při přechodu od jednoho bázického řešení ke druhému zlepšovala hodnota účelové funkce. (Rašovský a Šišláková, 2003) Simplexová metoda řeší úlohy v několika krocích: 1. nalezení výchozího bázického řešení, 2. testování výchozího bázického řešení a dalších bázických řešení, 3. podle výsledku testu a) řešení končí v případě, že test optimality byl splněn, b) řešení pokračuje, jestliže test optimality nebyl splněn, 4. v případě nesplnění testu optimality přechod k jinému bázickému řešení daného problému, 5. otestování bázického řešení získaného v předcházejícím bodu, 6. návrat k bodu 3. (Holoubek, 2006) Možné závěry řešení: určení optimálního řešení (existuje-li vůbec), prokázání, že úloha je (za daných podmínek) neřešitelná, upozornění na to, že při formulování problému byla (zřejmě) opomenuta některá omezení, protože úloha má optimální řešení v nekonečnu, hodnota účelové funkce není omezena. (Holoubek, 2006)

4 TYPICKÉ ÚLOHY LINEÁRNÍHO PROGRAMOVÁNÍ 11 4 Typické úlohy lineárního programování Následující úlohy jsou typicky řešené v praxi v rámci lineárního programování. Všechny je možné řešit simplexovou metodou. Ze zkušeností s různými úlohami byly sestaveny ilustrativní příklady uvedené v následujícím textu. 4.1 Kapacitní problém Cílem těchto úloh je stanovení optimální struktury výroby při omezených zdrojích. Tyto zdroje mohou být například: finance (výrobní náklady) různé suroviny, materiál čas (pracovní hodiny, strojní čas) energie prostory (půda) Mohou existovat i jiná omezení, například požadavek na výrobu produktů v určitém poměru (v sadách). Kritériem u úloh tohoto typu je obvykle maximalizace zisku, minimalizace nákladů, maximální vyrobené množství některého z výrobků, maximální množství vyrobených sad apod. Strukturní proměnné představují množství výrobků vyjádřené v kusech, popřípadě výměru pěstovaných produktů nebo čas, po který bude výrobek produkován na výrobní lince. Příklad kapacitního problému: Výrobce chce produkovat dva výrobky V 1 a V 2. Pro jejich výrobu má k dispozici 180 kg suroviny S 1 a 200 hod. strojního času S 2. Na základě předběžného průzkumu lze očekávat zisk 2000 Kč za 1 kus výrobku V 1 a 1000 Kč za 1 kus výrobku V 2. Výrobce požaduje vytvoření takové struktury výroby, při které by dosáhl co nejvyššího zisku. Spotřeba suroviny S 1 a času S 2 na produkci jednotlivých výrobků je uvedena tabulce 1. Tab. 1: Spotřeba surovin na produkci výrobků Suroviny Výrobky surovina S 1 surovina S 2 výrobek V 1 9 4 výrobek V 2 4 3 Formulace modelu: x 1... počet výrobků V 1 x 2... počet výrobků V 2

4.2 Problém optimálního rozmístění finančních prostředků 12 Dle slovního zadání bude účelová funkce maximalizační. Představuje maximalizaci zisku v tisících Kč: z max = 2x 1 + 1x 2. Dále vyjádříme vlastní omezující podmínky. Výrobce má k dispozici 180 kg suroviny S 1. Výrobek V 1 spotřebuje 9 kg suroviny S 1, tedy 9x 1. Výrobek V 2 spotřebuje 4 kg suroviny S 1, tedy 4x 2. První omezující podmínka má tedy tvar (v kg): 9x 1 + 4x 2 180. Obdobně vypadá i další omezující podmínka (v hodinách): 4x 1 + 3x 2 200. Poslední částí formulace modelu jsou podmínky nezápornosti, které vyloučí všechna řešení, při nichž by proměnné nabývaly záporných hodnot: x 1, x 2 0. 4.2 Problém optimálního rozmístění finančních prostředků Cílem těchto úloh je rozdělení finančních prostředků do různých investic nebo do uvažovaných médií. Investiční varianty a uvažovaná média mohou být omezeny hranicemi pro množství prostředků, které mohou být do jednotlivých variant (médií) vloženy a vlastnostmi variant (médií). Vlastnosti mohou být i veličiny, při kterých je podstatná jejich průměrná hodnota (například riziko investice). Tyto vlastnosti jsou ve formulaci modelu vyjádřené formou váženého aritmetického průměru. Kritériem u úloh tohoto typu je obvykle maximalizace výnosu, minimalizace rizika či maximalizace počtu oslovených osob. Strukturní proměnné představují hledané objemy finančních prostředků určené pro jednotlivé investiční varianty či jednotlivá média. Příklad problému: Firma má k dispozici 50 mil. Kč. V úvahu přichází tři investiční varianty. Jsou jimi investice I 1, I 2 a I 3. Investice I 1 by měla být nakoupena v minimálním objemu 5 mil. Kč, investice I 2 a I 3 v minimálním objemu 10 mil. Kč. Riziko spojené s celkovou investicí by nemělo překročit hodnotu 6. Firma požaduje nalezení takové struktury portfolia, která bude maximalizovat výnos a přitom respektovat všechna uvedená omezení. Roční výnos v procentech a hodnota rizika jednotlivých variant jsou uvedeny v tabulce 2. Formulace modelu: x 1... objem financí vložených do investiční varianty I 1 v mil. Kč x 2... objem financí vložených do investiční varianty I 2 v mil. Kč x 3... objem financí vložených do investiční varianty I 3 v mil. Kč

4.3 Výživový (nutriční, směšovací) problém 13 Tab. 2: Vlastnosti investičních variant Vlastnosti Investice Výnos Riziko Investice I 1 25 3 Investice I 2 18 7 Investice I 3 20 5 Cílová funkce představuje maximalizaci ročního výnosu (v mil. Kč): z max = 25x 1 + 18x 2 + 20x 3. Omezující podmínka, která vyjadřuje celkovou míru rizika, je formulována jako vážený aritmetický průměr rizik: 3x 1 + 7x 2 + 5x 3 x 1 + x 2 + x 3 6. Poslední částí formulace modelu jsou opět podmínky nezápornosti. 4.3 Výživový (nutriční, směšovací) problém Cílem těchto úloh je vytvoření směsi, která zabezpečí požadavky na dodávku živin, nebo roztoku, který splňuje zadaná omezení. V prvním případě jsou omezením maximální či minimální požadované hodnoty živin. Použité suroviny mají vlastnosti, jakými je například cena suroviny nebo obsah živin v surovině. Ve druhém případě je roztok tvořen surovinami, které jsou určeny svými vlastnostmi. Příkladem těchto vlastností je cena suroviny nebo kyselost (ph). V případě kyselosti a podobných veličin se omezení zapisuje ve formě váženého aritmetického průměru. Strukturní proměnné vyjadřují hledané množství surovin. Kritériem u těchto typů úloh bývá tvorba směsi (roztoku) s co nejnižší cenou, s co nejvyšším (nejnižším) obsahem některé ze surovin nebo tvorba maximálního množství směsi. Příklad problému: Podnik vyrábí roztok ze surovin S 1 a S 2. Tyto suroviny se liší cenou a kyselostí. Požadovaný roztok má mít kyselost 4 ph. Podnik požaduje stanovení takového množství surovin S 1 a S 2, které vytvoří roztok s požadovanými vlastnostmi a s co nejnižší cenou. Údaje vztažené na 1 l uvažovaných surovin jsou uvedeny v tabulce 3. Formulace modelu: x 1... množství suroviny S 1 v litrech x 2... množství suroviny S 2 v litrech

4.4 Řezný, krájecí problém 14 Tab. 3: Cena a kyselost surovin Suroviny Vlastnosti S 1 S 2 kyselost 5 2 cena 20 25 Cílová funkce minimalizuje cenu roztoku (v Kč): z min = 20x 1 + 25x 2. Omezující podmínka zajistí, že průměrná kyselost roztoku bude 4 ph. Zapíše se ve formě váženého aritmetického průměru: 5x 1 + 2x 2 x 1 + x 2 = 4. Poslední částí formulace modelu jsou opět podmínky nezápornosti. 4.4 Řezný, krájecí problém Tyto úlohy řeší optimální rozřezání výchozího materiálu na menší části. Omezením může být maximální (minimální) požadované množství částí, případně maximální odpad vznikající při jednotlivých způsobech rozřezání. Cílovou funkcí bývá minimalizace celkového odpadu, minimalizace počtu použitého výchozího materiálu či minimalizace počtu provedených řezů. Strukturní proměnné vyjadřují počet kusů výchozího materiálu rozřezaného určitým způsobem. Příklad problému: Podnik má k dispozici 12m prkna, která chce rozřezat na 3m, 4m a 6m části. Maximální odpad na jeden kus výchozího materiálu je 2 m. Požadovaný počet desek je uveden v tabulce 4. Jak má podnik prkna rozřezat, aby byly splněny následující požadavky? 1. Vznik minimálního množství odpadu. 2. Použití minimálního množství výchozího materiálu. 3. Provedení minimálního množství řezů. Tab. 4: Délky desek a jejich požadované počty Délka desky (m) 3 4 6 Počet desek (ks) 10 12 4 Formulace modelu: První částí formulace modelu je vytvoření všech řezných variant, které respektují zadaná omezení. V tomto případě je omezením maximální odpad z jedné desky 2 m.

4.5 Distribuční problém 15 Tab. 5: Řezné varianty Řezná schémata 3m deska 4 2 1 0 0 2 0 4m deska 0 0 2 3 1 1 0 6m deska 0 1 0 0 1 0 2 Odpad 0 0 1 0 2 2 0 Řezy 3 3 3 2 2 3 1 Řezných schémat je celkem 7, proto bude existovat 7 strukturních proměnných. x 1... počet desek výchozího materiálu nařezaných podle 1. varianty. x 7... počet desek výchozího materiálu nařezaných podle 7. varianty Cílová funkce v prvním případě minimalizuje celkový odpad ze všech řezných variant (v m) z min = x 3 + 2x 5 + 2x 6, ve druhém případě minimalizuje množství použitého výchozího materiálu (použije minimum řezných variant) z min = x 1 + x 2 + x 3 + x 4 + x 5 + x 6 + x 7, ve třetím případě minimalizuje počet provedených řezů z min = 3x 1 + 3x 2 + 3x 3 + 2x 4 + 2x 5 + 3x 6 + x 7. Omezujícími podmínkami jsou v tomto problému pouze počty desek. Uvedené nerovnice vyjadřují minimální počet desek vzniklých ve všech řezných variantách. 4x 1 + 2x 2 + x 3 + 2x 6 10 2x 3 + 3x 4 + x 5 + x 6 12 x 2 + x 5 + 2x 7 4 Poslední částí formulace modelu jsou opět podmínky nezápornosti. 4.5 Distribuční problém Distribuční úlohy zajišťují optimální převoz zboží od dodavatelů k odběratelům. Omezením bývají požadavky dodavatelů na množství doručeného zboží, kapacity dodavatelských skladů a vzdálenosti nebo náklady na dopravu mezi dodavateli a odběrateli. Jsou-li celkové požadavky odběratelů rovny celkovým kapacitám dodavatelů, pak jsou omezující podmínky zapisovány ve formě rovnic. Jsou-li požadavky vyšší než kapacity, jsou omezující podmínky požadavků zapsány jako nerovnice s relací, v opačném případě jsou omezující podmínky kapacit zapsány jako nerovnice s relací.

4.5 Distribuční problém 16 Cílem úlohy obvykle bývá minimalizace vzdáleností nebo dopravních nákladů mezi dodavateli a odběrateli. Strukturní proměnné vyjadřují množství zboží přepravené od určitého dodavatele k určitému odběrateli. Příklad problému: Ze dvou skladů S 1 a S 2 se zásobují tři odběratelé O 1, O 2 a O 3. Kapacita skladu S 1 je 4000 ks výrobku, kapacita skladu S 2 je 5000 ks výrobku. Odběratel O 1 požaduje 2000 ks, odběratel O 2 3000 ks a odběratel O 3 4000 ks výrobku. Zákazník požaduje stanovení takového plánu rozvozu, při kterém budou dopravní náklady minimální. Náklady na přepravu 1 ks výrobku jsou uvedeny v tabulce 6. Tab. 6: Náklady na přepravu zboží Odběratelé Sklady O 1 O 2 O 3 S 1 24 12 14 S 2 18 10 30 Formulace modelu: x 11... počet kusů výrobku přepraveného ze skladu S 1 odběrateli O 1 x 12... počet kusů výrobku přepraveného ze skladu S 1 odběrateli O 2. x 23... počet kusů výrobku přepraveného ze skladu S 2 odběrateli O 3 Cílová funkce minimalizuje dopravní náklady: z min = 24x 11 + 12x 12 + 14x 13 + 18x 21 + 10x 22 + 30x 23. Celkový požadavek odběratelů je 2000+3000+4000 = 9000 ks, kapacita skladů je 5000+4000 = 9000 ks. Existujícími zásobami je tedy možné plně uspokojit potřeby odběratelů. Proto budou omezující podmínky ve formě rovnic. x 11 + x 12 + x 13 = 4000 x 21 + x 22 + x 23 = 5000 x 11 + x 21 = 2000 x 12 + x 22 = 3000 x 13 + x 23 = 4000 Poslední částí formulace modelu jsou opět podmínky nezápornosti.

5 DALŠÍ METODY ŘEŠENÍ ÚLOH LINEÁRNÍHO PROGRAMOVÁNÍ 17 5 Další metody řešení úloh lineárního programování Simplexová metoda je dle dlouholetých zkušeností velmi rychlá pro většinu úloh lineárního programování. Na úlohu s m omezujícími podmínkami stačí v průměru 2m až 3m iterací. V roce 1972 ale V. Klee a J. Minty sestavili příklad, který dokazuje, že simplexová metoda může mít až exponenciální složitost. (Carreira, 2009) První algoritmus k řešení úloh lineárního programování, který má nejhůře polynomiální složitost, byl navržen Leonidem Khachiyanem v roce 1979. Jednalo se o elipsoidovou metodu pro úlohy lineárního programování. Tato metoda se však v praxi projevila jako neefektivní, v průměru je simplexová metoda lepší. Metoda elipsoidů je velmi výhodná pouze pro řešení úloh kombinatorického typu, kde simplexová metoda selhává. To je i důvodem, proč se tato metoda v běžné praxi nerozšířila tak, jak se původně očekávalo. Dalším problémem je, že na rozdíl od simplexové metody zde vypočítáváme druhé odmocniny a použitá čísla nemusí být přesná. (Berka, 2008) Karmarkarův algoritmus byl představen v roce 1984 Narendrarem Karmarkarem. Byl to po metodě elipsoidů další algoritmus, který řešil úlohy lineárního programování v polynomiálním čase. Je založen na metodě vnitřních bodů, která na rozdíl od simplexové metody neprochází po hranici oblasti přípustných řešení, ale pohybuje se i uvnitř této oblasti. Většina dnešních programů na řešení úloh lineárního programování je založena na primární a duální simplexové metodě a metodě vnitřních bodů.

6 SOUČASNÝ STAV 18 6 Současný stav V současnosti existuje mnoho programů k řešení úloh z oblasti operačního výzkumu. Pro úlohy lineárního programování používají většinou simplexový algoritmus, často také nabízejí možnost použití metody vnitřních bodů. Následuje několik nejznámějších nástrojů pro řešení těchto úloh. AIMMS modelovací prostředí vytvořené společností Paragon Decision Technology Inc. Řeší úlohy lineárního, nelineárního i celočíselného programování. K řešení úloh používá například řešitele CPLEX a GUROBI (viz dále). Nabízí i možnost vytvořit si vlastní řešení problému. (Optimization Software for Operations Research Applications, 2009) AMPL modelovací jazyk pro úlohy lineárního a nelineárního programování. Byl vytvořen společností Bell Laboratories. Používá řešitele CPLEX a GUROBI (viz dále). (AMPL, 2009) CPLEX vytvořen studiem ILOG společnosti IBM. Pro řešení úloh využívá hlavně simplexový algoritmus, a to i pro rozsáhlé úlohy. Pro úlohy určitého typu nabízí i metodu vnitřních bodů. (IBM ILOG CPLEX, 2009) GAMS modelovací systém vytvořený společností GAMS Development Corporation. Slouží k řešení lineárních, nelineárních i celočíselných úloh většího rozsahu. (GAMS, 2009) GUROBI vytvořen společností GUROBI Optimization. Je k dispozici jak samostatně, tak jako součást jiných modelovacích systémů (AIMMS, AMPL a další). Používá simplexový algoritmus i metodu vnitřních bodů. (The Gurobi Optimizer, 2009) Lingo nástroj vytvořený společností Lindo Systems Inc. Slouží k vytváření a řešení lineárních, nelineárních, celočíselných a globálních optimalizačních modelů. Obsahuje modelovací jazyk a sadu řešitelů úloh. K řešení úloh lineárního programování Lingo používá dva zabudované řešitele. První je na bázi primární a duální simplexové metody. Tento postačuje k řešení běžných úloh. Pro úlohy větších rozměrů a složitosti má Lingo řešitele, který je založený na metodě vnitřních bodů. (LINGO 11.0, 2008) MOPS program vytvořený firmou MOPS Optimierungssysteme. Je vhodný pro řešení rozsáhlých úloh lineárního a celočíselného programování. Používá jak primární a duální simplexovou metodu, tak i metodu vnitřních bodů. (MOPS Studio, 2009) STORM vytvořen společností Storm Software, Inc. Slouží k řešení nejčastěji používaných úloh z oblasti operačního výzkumu a statistiky. Tento program je používán k výuce. Úlohy řeší pomocí primární a duální simplexové metody, umožňuje zobrazení simplexové tabulky v jednotlivých krocích řešení. (Holoubek, 2006)

7 TVORBA APLIKACE 19 7 Tvorba aplikace 7.1 Návrh uživatelského rozhraní Cílem práce je vytvořit návrh uživatelského rozhraní, které umožní zadání optimalizační úlohy bez znalosti formulace modelu. Pro tento návrh byly vybrány výše uvedené typické úlohy lineárního programování, protože jsou řešeny nejčastěji. Úlohy jsou nabízeny v základním tvaru a v nejběžnějších modifikacích. Všechny tyto úlohy se formulují obdobným způsobem. Hlavní rozdíl mezi nimi je v interpretaci slovního zadání. Proto se návrh skládá z pěti modulů. Každý modul řeší jeden ze základních typů optimalizačních úloh. Výběr správného modulu provede uživatel pomocí tlačítek v úvodním okně aplikace. Tato tlačítka jsou popsána názvem úlohy a krátkým popiskem, který usnadní uživateli výběr. V případě nutnosti je k dispozici návod, ve kterém jsou jednotlivé úlohy popsány podrobněji. Úvodní okno aplikace je na obrázku 1. Obr. 1: Úvodní okno aplikace Každá úloha obsahuje základní informace, v případě kapacitního problému se jedná například o počet produktů, surovin a cílovou funkci. Dále obsahuje vztahy (například mezi produkty a surovinami) a další informace, jakými jsou například

7.2 Modul kapacitní problém 20 názvy a omezená množství či poměrové sady. Zadávaných informací je tedy velmi mnoho a některé jsou nepovinné. Pro přehlednost je tedy zadání úlohy rozděleno do postupných dialogů. Uživatel prochází dialogy a postupně zadává požadované informace. Dialogy jsou uspořádány tak, aby byly informace požadovány v logické posloupnosti a zadávání bylo vzhledem ke slovnímu zadání co nejpřirozenější. Zadávání začíná obecnou charakteristikou úlohy, následuje popis názvů a maximálních či minimálních hodnot strukturních proměnných a omezení, dále následují nepovinné formuláře (například produktové sady), formuláře vztahů mezi strukturními proměnnými a omezeními a okno s výsledky. Každé dialogové okno obsahuje v pravém horním rohu logo daného typu úlohy, které usnadňuje uživateli orientaci. Dále obsahuje název okna a krátký popisek, který navede uživatele k zadání správných informací. Mezi jednotlivými okny je možné přecházet (i zpět). Tím je umožněna například oprava nesprávně vyplněných hodnot. V každém okně je k dispozici tlačítko, po jehož stisknutí si má uživatel možnost prohlédnout návod na zadávání daného typu úlohy. Kvůli kontrole zadáváných hodnot bylo zavedeno, že hodnoty zadané v některém okně obvykle ovlivňují okna následující. Výběr cílové funkce obvykle ovlivní počet omezení v úloze. Počet produktů, investic, dodavatelů, odběratelů ovlivní množství políček v dalších formulářích. Zadané názvy se také objevují v následujících formulářích. Některá okna se objeví jen tehdy, zadá-li uživatel v některém z předchozích oken určité omezení. Toto velmi zjednodušuje práci s aplikací a nedovolí uživateli chybně měnit počet strukturních proměnných a omezení. Posloupnost dialogů tedy vytváří jednodušší a srozumitelnější aplikaci, nehodí se však pro zadávání většího množství hodnot, případně i pro opakované zadávání úlohy, kde uživatel mění pouze některé hodnoty. Pro toto použití je zavedeno zadávání pomocí textového souboru. Po načtení dat ze souboru je možné pohybovat se mezi okny a zadané hodnoty upravovat. Celá aplikace je vytvořená v programovacím prostředí Delphi a využívá komponent tohoto prostředí (například tlačítka, editační okna, obrázky). Hodnoty zadané uživatelem zpracovává zápisem do textového souboru, aby bylo možné tento soubor předat nástroji k řešení optimalizačních úloh. K řešení úloh byl vybrán program Lingo (viz dále). Výsledek úlohy by měl být prezentován ve srozumitelné formě, proto je využito názvů, které uživatel v aplikaci zadává a tyto názvy jsou přiřazeny strukturním proměnným. 7.2 Modul kapacitní problém V případě, že si uživatel v hlavní nabídce zvolí kapacitní problém, zobrazí se první formulář (obrázek 2). Zde uživatel zadá základní charakteristiku problému: 1. Počet druhů produktů odpovídá počtu strukturních proměnných ve formulaci modelu. Jejich počet je omezen na maximálně 20 druhů. 2. Povolení produktových sad zatržení této nabídky umožní výrobu produktů v sadách.

7.2 Modul kapacitní problém 21 3. Počet druhů surovin suroviny a omezení, ze kterých se v modelu formulují omezující podmínky. Jejich počet je omezen na maximálně 20 druhů. 4. Měrná jednotka kusy umožňuje změnu měrné jednotky vyráběných produktů. 5. Cíl úlohy v rozbalovací nabídce jsou na výběr všechny běžné cíle tohoto typu úlohy. Po vyplnění hodnot uživatel postoupí k dalšímu formuláři stiskem tlačítka Další. Aplikace provede kontrolu formátu všech vepisovaných hodnot. V případě chybného formátu nebo chybějící hodnoty si vynutí opravu formou dialogového okna s upozorněním. Stiskem tlačítka Zpět je možné se z kteréhokoliv formuláře přepnout na předchozí formulář. Tlačítko? otevře nabídku help. Obr. 2: První formulář modulu kapacitní problém Druhý formulář tohoto modulu (obrázek 3) obsahuje pole k vyplnění názvů produktů, případně jejich minimálního či maximálního vyráběného množství. Počet polí se liší podle počtu druhů produktů zadaného v prvním formuláři. Názvy uživatel vyplňuje pouze kvůli interpretaci výsledků. Hodnoty množství vytvoří jednoduché omezující podmínky x i hodnota.

7.2 Modul kapacitní problém 22 Obr. 3: Druhý formulář modulu kapacitní problém Třetí formulář obsahuje pole k vyplnění názvů surovin a jiných omezení, případně jejich maximálního a minimálního množství. V prvním řádku je automaticky nastaven název omezení podle cílové funkce vybrané v prvním formuláři (například při výběru cílové funkce minimalizace nákladů se v prvním řádku objeví omezení Náklady ). Hodnoty množství se objeví na pravých stranách vlastních omezujících podmínek. Čtvrtý formulář (obrázek 4) umožňuje zadání poměru mezi produkty. Zobrazí se pouze tehdy, zvolí-li uživatel v prvním formuláři možnost Povolit produktové sady. Pátý formulář obsahuje tabulku. Řádky tabulky tvoří suroviny a omezení zadané ve třetím formuláři, sloupce tabulky tvoří produkty zadané ve druhém formuláři. Do buněk tabulky uživatel vepisuje spotřebu dané suroviny na výrobu daného produktu. Podle těchto hodnot se vytvářejí koeficienty strukturních proměnných v omezujících podmínkách a v cílové funkci. Šestý formulář obsahuje opět tabulku. Do buněk tabulky se vepisují maximální či minimální hodnoty celkové spotřeby suroviny na určitý produkt (je-li zadáno, že na výrobu produktu x i je dovoleno spotřebovat maximálně y jednotek suroviny S j ).

7.3 Modul problém optimálního rozmístění finančních prostředků 23 Po vyplnění všech formulářů se vytvoří textový soubor a do něj se zapíše kompletní formulace modelu. Tento model stačí předat programu na řešení optimalizačních úloh. Výsledek řešení se objeví ve formě výpisu strukturních proměnných, ke kterým jsou přiřazeny názvy zadané uživatelem ve druhém formuláři a jejich výsledné hodnoty. Obr. 4: Formulář k zadání poměrových sad 7.3 Modul problém optimálního rozmístění finančních prostředků Tento modul obsahuje stejný počet formulářů, jako předchozí modul kapacitního problému. V prvním formuláři uživatel opět vyplní základní charakteristiku problému: 1. Počet investičních variant odpovídá počtu strukturních proměnných ve formulaci modelu. Omezen na maximální počet 20 variant. 2. Počet druhů omezení omezení investic (například výnosnost, riziko, náklady), ze kterých se tvoří v modelu omezující podmínky. Omezen na maximální počet 20 druhů.

7.4 Modul výživový problém 24 3. Množství peněžních prostředků udává celkové množství peněžních prostředků určených k investování. 4. Cíl úlohy. V dalším formuláři vyplní uživatel pro přehlednost názvy investičních variant a maximální či minimální výši investice do dané varianty. Tyto položky jsou nepovinné. V případě jejich vyplnění jsou v modelu zapsány jako omezující podmínky ve tvaru x i hodnota, kde x i představuje množství peněz investovaných do dané investiční varianty. Ve třetím formuláři uživatel vyplní názvy omezení a jejich maximální či minimální hodnoty. V prvním řádku tohoto formuláře je automaticky nastaveno omezení podle vybrané cílové funkce. Ve druhém řádku je nastaveno omezení peněžních prostředků, jehož maximální hodnota je určena množstvím peněžních prostředků z prvního formuláře (minimální hodnotu může uživatel doplnit). Hodnoty z tohoto formuláře se objevují na pravých stranách vlastních omezujících podmínek. Čtvrtý a pátý formulář se skládá opět z tabulek, do kterých uživatel vepisuje hodnoty omezení pro jednotlivé investiční varianty, případně i maximální či minimální množství omezení na danou investici. 7.4 Modul výživový problém První formulář tohoto problému obsahuje pole k vyplnění základní charakteristiky úlohy: 1. Počet druhů surovin jedná se o suroviny potřebné k vytvoření směsi nebo roztoku. Jejich počet odpovídá počtu strukturních proměnných. Počet druhů surovin je omezen na 20. 2. Počet druhů omezení a živin omezení surovin (například cena) a obsah živin v surovinách, slouží k vytvoření omezujících podmínek. Jejich počet je omezen na maximálně 20 druhů. 3. Požadované množství směsi nepovinná položka. Uživatel ji vyplní pouze tehdy, přeje-li si vytvoření určitého množství směsi nebo roztoku. 4. Cíl úlohy. Ve druhém formuláři vyplní uživatel názvy surovin a jejich maximální či minimální množství. Tyto položky jsou nepovinné. V případě vyplnění jsou zapsány v modelu jako omezující podmínky ve tvaru x i hodnota, kde x i představuje množství dané suroviny použité pro výrobu směsi nebo roztoku. Třetí formulář (obrázek 5) obsahuje názvy omezení a živin a jejich maximální či minimální hodnoty. Tyto položky jsou nepovinné. V případě, že je uživatel nevyplní, do pole MIN se automaticky přiřadí 0. První řádek je vyplněn podle hodnoty

7.5 Modul řezný problém 25 Obr. 5: Třetí formulář modulu výživový problém cílové funkce vybrané v prvním formuláři. V posledním sloupci je možné zatrhnout průměrovou veličinu (například ph). Ve čtvrtém formuláři uživatel zapíše do tabulky množství živin (a omezení) v jednotlivých surovinách. 7.5 Modul řezný problém V prvním formuláři řezného problému zadá uživatel tyto informace: 1. Rozměry materiálu jedná se o rozměr výchozího materiálu. Tato hodnota je použita pro výpočet řezných variant. 2. Počet řezných variant počet druhů menších částí, na které chce uživatel rozdělit výchozí materiál. Počet řezných variant je omezen na 10. 3. Maximální odpad nepovinná položka. Určuje, jaký nejvyšší odpad může vzniknout při nařezání jednoho kusu výchozího materiálu. Je-li zadán, musí být respektován při vytváření řezných variant. 4. Cílová funkce. Ve druhém formuláři (obrázek 6) uživatel zadá rozměry požadovaných řezů, jejich popis (nepovinná položka potřebná pro přehlednou interpretaci výsledků) a po-

7.5 Modul řezný problém 26 žadované maximální či minimální množství řezů. Z těchto informací aplikace vytvoří řezné varianty a ze všech vyhovujících variant vytvoří cílovou funkci a omezující podmínky. Pravé strany omezujících podmínek jsou tvořeny počty řezů z druhého formuláře. Obr. 6: Druhý formulář modulu řezný problém

7.6 Modul distribuční problém 27 7.6 Modul distribuční problém V prvním formuláři zadá uživatel tyto informace: 1. Počet dodavatelů počet je omezen na maximálně 10 dodavatelů. 2. Počet odběratelů počet je omezen na maximálně 10 odběratelů. 3. Cíl úlohy. Obr. 7: Čtvrtý formulář modulu distribuční problém Strukturní proměnné vyjadřují cesty od dodavatelů k odběratelům. Počet strukturních proměnných je tedy dán součinem počtu dodavatelů a počtu odběratelů. Ve druhém formuláři zadá uživatel názvy odběratelů a jejich požadavky na dodávku zboží, ve třetím formuláři názvy dodavatelů a jejich skladové kapacity. Z těchto údajů se tvoří vlastní omezující podmínky. Porovnáním celkových požadavků odběratelů a celkových kapacit dodavatelů se určí tvar omezujících podmínek. Čtvrtý formulář (obrázek 7) je tabulka, do níž uživatel vepisuje vzdálenosti nebo náklady na dopravu mezi dodavateli a odběrateli. Tyto hodnoty tvoří koeficienty strukturních proměnných v cílové funkci.

8 SOFTWARE PRO ŘEŠENÍ MODELU 28 8 Software pro řešení modelu Při výběru nástroje pro výpočet úloh bylo nutné brát v úvahu několik parametrů. Prvním z nich byla dostupnost nástroje. Byly upřednostňovány ty nástroje, u kterých je možné získat demo verzi či studentskou licenci. Druhým parametrem byla dostupnost a užitečnost dokumentace. Ta by měla být snadno dostupná, přehledná a dostatečně obsáhlá. S její pomocí se určuje tvar zápisu modelu. Třetím parametrem byl způsob zápisu modelu. Je žádoucí, aby se zápis příliš nelišil od jednoduchého zápisu pomocí soustavy nerovnic (viz kapitolu 4). Posledním parametrem je spolupráce s aplikací. Aplikace by měla bez problémů předat nástroji model úlohy a stejně jednoduše i obdržet výsledek, a to ve formátu, který lze dále jednoduše zpracovávat. Podle těchto parametrů byly hodnoceny nejznámější nástroje k řešení optimalizačních úloh, jejichž stručný popis je uveden výše. Hodnotící stupnice je od 1 do 5, přičemž 1 je nejlepší výsledek. Hodnocení je uvedeno v tabulce 7. Tab. 7: Srovnání parametrů optimalizačních nástrojů Dostupnost Dokumentace Zápis Spolupráce Průměr AIMMS 1 1 3 2 1,75 AMPL 1 2 3 3 2,25 CPLEX 4 1 1 2 2 GAMS 1 1 3 1 1,5 GUROBI 1 1 3 2 1,75 Lingo 1 1 1 2 1,25 MOPS 1 3 2 2 2 STORM 4 3 2 2 2,75 Podle průměrné známky byl vybrán nástroj Lingo od společnosti LINDO Systems. Ostatní hodnocené nástroje obvykle uspěly v dostupnosti. Většina je nabízena jako demo verze nebo na studentskou licenci (v obou případech se jedná o omezené verze). Dokumentace byla u všech nástrojů dostačující, stejně tak i způsob spolupráce s aplikací. Většině nástrojů lze model předat ve formě textového či jiného souboru. Rozhodujícím faktorem byl způsob zápisu modelu. V jednoduchosti zápisu jasně dominuje Lingo a CPLEX, který však není dobře dostupný. Ostatní nástroje vyžadují složitější zápis, obvykle s velkým množstvím vyhrazených slov. Při výběru jiného nástroje by se tedy značně zkomplikoval způsob formulace modelu. Demo verze programu Lingo je omezena, a to počtem omezujících podmínek a počtem strukturních proměnných. Omezujících podmínek lze zadat maximálně 150, strukturních proměnných maximálně 300. Dodržení uvedeného rozsahu úlohy je zajištěno tím, že jsou hodnoty vložené uživatelem kontrolovány, jestli nepřesahují omezené hodnoty.

8.1 Formulace modelu v Lingu 29 Dokumentace k programu Lingo je volně dostupná a obsahuje veškeré potřebné informace o způsobu formulace modelu. Formulace je velmi jednoduchá (viz dále). Spolupráce s aplikací je také jednoduchá, model i výsledek lze předat jako textový soubor. 8.1 Formulace modelu v Lingu Při řešení optimalizačních úloh v Lingu je nutné dodržovat správný zápis modelu. Prvním řádkem zápisu je MODEL:. Na dalším řádku je formulována cílová funkce. Tato funkce je uvozena MAX = v případě maximalizační funkce, nebo MIN = v případě minimalizační funkce. Za tímto slovem následuje běžný zápis cílové funkce, koeficienty strukturních proměnných se zapisují se znakem *. Na konci funkce musí být znak ;. Desetinná čísla se zapisují s desetinnou tečkou. MODEL: MIN/MAX = k x1 + k x2 +... + k xn; Omezující podmínky mají stejná pravidla zápisu jako cílová funkce. Na konci každé podmínky musí být znak ;. Podmínky nezápornosti se musí zapsat pro každou proměnnou zvlášť. xi 0; Při formulaci modelu v aplikaci je tedy nutné dodržovat správný zápis. Je potřeba sledovat počet proměnných a za poslední proměnnou v dané podmínce (či cílové funkci) zapsat středník. Program LINGO umožňuje vkládat modely jako textové soubory s příponou.lng. Formulace modelu je proto zapisovaná do souboru s touto příponou. 8.2 Výsledek úlohy Program Lingo vytváří výsledek úlohy jako textový soubor s příponou.lgr. Název souboru zůstává stejný jako název souboru s modelem. Výsledný soubor obsahuje tyto informace: Nalezení optimálního řešení Global optimal solution found (je-li nalezeno optimální řešení), Optimal solution found at step (v případě více možných řešení vypisuje krok, ve kterém bylo vybrané řešení nalezeno), No feasible solution (neexistuje-li optimální řešení). Tato informace je ve výsledném formuláři uživateli prezentována pouze v případě, neexistuje-li optimální řešení. Hodnota cílové funkce (je prezentována i ve výsledném formuláři). Strukturní proměnné, jejich hodnoty a redukované ceny. Strukturní proměnné jsou ve výsledku vypsány spolu s popisky a poté jsou k nim přiřazeny hodnoty. Redukované ceny se uživateli nezobrazí. Ke každé omezující podmínce stínové ceny a množství nevyužitého zdroje. Tyto informace se ve výsledném formuláři nezobrazují.

8.2 Výsledek úlohy 30 Redukované ceny udávají, o kolik by se zhoršila hodnota účelové funkce, kdybychom zařadili do optimálního řešení jednu jednotku dané proměnné. Je-li tato hodnota kladná, znamená to, že použití proměnné zhoršuje hodnotu účelové funkce. Je-li tato hodnota rovna nule, je produkce efektivní a tato proměnná je součástí optimálního řešení. Stínové ceny poskytují informace o tom, kolik jednotek hodnoty účelové funkce připadá na 1 jednotku pravé strany dané omezující podmínky. Vyjadřuje, jak se změní hodnota účelové funkce, změníme-li pravou stranu omezující podmínky o jednotku. (Holoubek, 2006) Příklad interpretace výsledku u distribuční úlohy je na obrázku 8. Obr. 8: Výsledek distribuční úlohy

9 DISKUSE 31 9 Diskuse Podařilo se vytvořit návrh aplikace, která umožňuje zadání a řešení optimalizační úlohy bez znalosti formulace modelu úlohy. Aplikace nabízí všechny typické úlohy lineárního programování v jejich základním tvaru s možností různých modifikací. U všech typických úloh lineárního programování může existovat mnoho modifikací, které tato aplikace nenabízí. Vzhledem k tomu, že cílem práce byla tvorba návrhu aplikace, je rozsah nabízených úloh dostačující. Existuje i několik typů netypických optimalizačních úloh vícekriteriální lineární optimalizace, cílové a celočíselné programování a další druhy distribučních úloh (přiřazovací a okružní problém). Tyto úlohy nebyly součástí této práce, ale jejich zavedení do aplikace by bylo jistě užitečné. Vzhledem k povaze aplikace by bylo nutné pro každý nový typ úlohy vytvořit samostatný modul. Uživatelské rozhraní je navrženo tak, aby zajistilo správné zadání hodnot uživatelem a bylo zároveň přehledné a jednoduché k použití. Obsahuje pouze prvky, na které jsou uživatelé zvyklí i z jiných, běžně používaných aplikací. Pro všechny typy úloh je k dispozici návod, který obsahuje i ukázky správně vyplněných polí formulářů. Aplikace spolupracuje s programem Lingo, který řeší úlohy lineárního, nelineárního i celočíselného programování. V této práci je použita demo verze, která je omezena pouze počtem proměnných a omezujících podmínek. Aplikace je těmto omezením přizpůsobená. I přesto dostačuje svým rozsahem k řešení běžných úloh. Pro rozměrnější úlohy je potřeba používat plnou verzi programu Lingo. Omezení v aplikaci lze jednoduše odstranit.

10 ZÁVĚR 32 10 Závěr Práce se zabývala návrhem uživatelského rozhraní a modulu k zadávání a řešení typických úloh lineárního programování. První částí práce bylo seznámení se základními tvary formulace úloh. Dále byly vymezeny typické úlohy lineárního programování. Jedná se o kapacitní problém, směšovací problém, problém optimálního rozmístění finančních prostředků, řezný problém a distribuční problém. U každé z těchto úloh byly na příkladech vysvětleny různé modifikace zadání. Tyto informace byly použity ke tvorbě uživatelského rozhraní aplikace. Součástí práce je i popis metod pro řešení úloh lineárního programování, jejich porovnání a hodnocení zejména vzhledem k jejich časové náročnosti a použitelnosti v praxi. Jako nejvhodnější metoda k řešení běžných úloh byla určena simplexová metoda. Tato metoda má v nejhorším případě exponenciální časovou složitost, avšak v praxi se této složitosti obvykle nedosahuje. Program Lingo k řešení optimalizačních úloh používá nejčastěji právě simplexovou metodu, případně i metodu vnitřních bodů. Aplikace byla vytvořena v programovacím prostředí Delphi v programovacím jazyce Object Pascal. Nejdříve bylo navrženo uživatelské rozhraní, které se skládá z několika po sobě jdoucích formulářů. Díky tomuto uspořádání je zadávání úlohy jednoduché a přehledné. Při opakovaném řešení úloh či pro úlohy s větším rozsahem je možné vkládat data do formuláře z textového souboru. Dále bylo nutné přihlédnout k formě zápisu modelu v programu Lingo a podle ní přizpůsobit zápis modelu z dat jednotlivých formulářů. Model i výsledek problému je předáván v textovém souboru. Vytvořená aplikace je vhodná k použití ve výuce, případně i ve firmách k řešení běžných úloh nevelkého rozsahu.uživatelské rozhraní může být použito jako návrh k tvorbě aplikace s rozsáhlejším spektrem úloh a modifikací.

11 LITERATURA 33 11 Literatura AMPL [on-line]. 29. 10. 2009. [cit. 9. 12. 2009]. Dokument ve formátu HTML. Dostupný na Internetu: http://www.ampl.com. Berka, M. Lineární programování [on-line]. 2008. [cit. 9. 12. 2009]. Dokument ve formátu HTML. Dostupný na Internetu: http://www1.osu.cz/studium/mopv2/matemprog/linprog.htm. Carreira-Perpiňán, Miguel Á. Simplex method [on-line]. 2009. [cit. 9. 12. 2009]. Dokument ve formátu HTML. Dostupný na Internetu: http://mathworld.wolfram.com/simplexmethod.html. GAMS [on-line]. 2009. [cit. 9. 12. 2009]. Dokument ve formátu HTML. Dostupný na Internetu: http://www.gams.com. Holoubek, J. Ekonomicko-matematické metody. 1. vyd. Brno: Mendelova zemědělská a lesnická univerzita v Brně, 2006. 153 s. ISBN 978-80-7157-970-0. IBM ILOG CPLEX [on-line]. 2009. [cit. 9. 12. 2009]. Dokument ve formátu HTML. Dostupný na Internetu: http://www-01.ibm.com/software/integration/optimization/cplex. LINGO 11.0 Optimization Modeling Software for Linear, Nonlinear, and Integer Programming [on-line]. 3. 4. 2008. [cit. 9. 12. 2009]. Dokument ve formátu HTML. Dostupný na Internetu: http://www.lindo.com/ index.php?option=com content&view=article&id=2&itemid=10. MOPS Studio [on-line]. 2009. [cit. 9. 12. 2009]. Dokument ve formátu HTML. Dostupný na Internetu: http://www.mops-optimizer.com/index.php?id=mops_studio. Optimization Software for Operations Research Applications [on-line]. 2009. [cit. 9. 12. 2009]. Dokument ve formátu HTML. Dostupný na Internetu: http://www.aimms.com. Rašovský, M. Šišláková, H. Ekonomicko-matematické metody. 1. vyd. Brno: Mendelova zemědělská a lesnická univerzita v Brně, 2003. 195 s. ISBN 80-7157-412-0. The Gurobi Optimizer [on-line]. 2009. [cit. 9. 12. 2009]. Dokument ve formátu HTML. Dostupný na Internetu: http://www.gurobi.com/html/products.html.