Programy pro ˇreˇsen ı ulohy line arn ıho programov an ı 18. dubna 2011

Podobné dokumenty
Obecná úloha lineárního programování

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

1. července 2010

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

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

1 Úvod do celočíselné lineární optimalizace

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

Učební texty k státní bakalářské zkoušce Matematika Základy lineárního programování. študenti MFF 15. augusta 2008

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

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

13. Lineární programování

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

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

Celočíselné lineární programování(ilp)

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

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

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

4EK213 LINEÁRNÍ MODELY

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

8 Třídy, objekty, metody, předávání argumentů metod

KTE / PPEL Počítačová podpora v elektrotechnice

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

Parametrické programování

f ( x) = 5x 1 + 8x 2 MAX, 3x x ,

12. Lineární programování

Ekonomická formulace. Matematický model

Úvod do programovacích jazyků (Java)

Doňar B., Zaplatílek K.: MATLAB - tvorba uživatelských aplikací, BEN - technická literatura, Praha, (ISBN:

Základy programování (IZP)

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

Základy jazyka C. Základy programování 1 Martin Kauer (Tomáš Kühr)

3. ANTAGONISTICKÉ HRY

Lekce 6 IMPLEMENTACE OPERAČNÍHO SYSTÉMU LINUX DO VÝUKY INFORMAČNÍCH TECHNOLOGIÍ JAZYK C

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:

ANTAGONISTICKE HRY 172

Úvod do celočíselné optimalizace

7 Formátovaný výstup, třídy, objekty, pole, chyby v programech

IUJCE 07/08 Přednáška č. 1

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

Čtvrtek 8. prosince. Pascal - opakování základů. Struktura programu:

4EK213 LINEÁRNÍ MODELY

Úvod do jazyka C. Ing. Jan Fikejz (KST, FEI) Fakulta elektrotechniky a informatiky Katedra softwarových technologií

KTE / PPEL Počítačová podpora v elektrotechnice

Matematický software pro Linux

1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme:

Předmluva 9 Obsah knihy 9 Typografické konvence 10 Informace o autorovi 10 Poděkování 10

6 Simplexová metoda: Principy

MATLAB Úvod. Úvod do Matlabu. Miloslav Čapek

Operační systémy. Cvičení 4: Programování v C pod Unixem

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

Stručný návod k programu Octave

3. úloha - problém batohu metodami branch & bound, dynamické programování, heuristika s testem

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

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

Systém je citlivý na velikost písmen CASE SENSITIVE rozeznává malá velká písmena, např. PROM=1; PROm=1; PRom=1; Prom=1; prom=1; - 5 různých proměnných

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

Soustavy lineárních rovnic

Lineární programování

Nástroje pro analýzu dat

Čtvercové matice. Čtvercová matice je taková matice, jejíž počet řádků je roven počtu jejích sloupců

Matematika v programovacích

% vyhledání prvku s max. velikostí v jednotlivých sloupcích matice X

Základy matematiky pro FEK

Numerické metody optimalizace - úvod

DSL manuál. Ing. Jan Hranáč. 27. října V této kapitole je stručný průvodce k tvorbě v systému DrdSim a (v

POČÍTAČE A PROGRAMOVÁNÍ

Soustavy lineárních rovnic a determinanty

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

Lineární programování

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

1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme:

Generické programování

Algoritmizace a programování

Numerické metody a programování. Lekce 8

ČESKÉ VYSOKÉ UČENÍ TECHNICKÉ V PRAZE

K OZA SE PASE NA POLOVINĚ ZAHRADY Zadání úlohy

Základy programování (IZP)

11. března Výpočet je založen na prohledávání oblasti zahrnující všechna přípustná řešení [1, 2]. Vzhledem

ODR metody Runge-Kutta

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

NĚKTERÉ ASPEKTY TVORBY KNIHOVEN V JAZYCE R

Slovo ALGEBRA pochází z arabského al-jabr, což znamená nahrazení. Toto slovo se objevilo v názvu knihy

pi Ludolfovo číslo π = 3,14159 e Eulerovo číslo e = 2,71828 (lze spočítat jako exp(1)), např. je v Octave, v MATLABu tato konstanta e není

2 Základy práce v matematickém programu Sage

Objektově orientované programování

Velmi stručný návod jak dostat data z Terminálu Bloomberg do R

2) Napište algoritmus pro vložení položky na konec dvousměrného seznamu. 3) Napište algoritmus pro vyhledání položky v binárním stromu.

DIPLOMOVÁ PRÁCE. Petra Váchová Lineární programování ve výuce na střední

Četba: Texty o lineární algebře (odkazy na webových stránkách přednášejícího).

Grafické výstupy v Octave/Matlabu a GnuPlotu

Základy jazyka C. Základy programování 1 Tomáš Kühr

MATURITNÍ OTÁZKY ELEKTROTECHNIKA - POČÍTAČOVÉ SYSTÉMY 2003/2004 PROGRAMOVÉ VYBAVENÍ POČÍTAČŮ

Zpráva s popisem softwarového návrhu a specifikací rozhraní prototypového modulu pro odhad chyby a zjemnění sítě

Lineární algebra s Matlabem. Přednáška 4

[1] samoopravné kódy: terminologie, princip

Obsah. Předm luva 3. Obsah \ 6

Gymnázium Vysoké Mýto nám. Vaňorného 163, Vysoké Mýto

Výpočet excentrického klikového mechanismu v systému MAPLE 11 Tomáš Svoboda Technická fakulta Česká Zemědělská Univerzita

B3B33ALP - Algoritmy a programování - Zkouška z předmětu B3B33ALP. Marek Boháč bohacm11

III/2 Inovace a zkvalitnění výuky prostřednictvím ICT

Transkript:

Programy pro řešení úlohy lineárního programování 18. dubna 2011

Přehled Mathematica Sage AMPL GNU Linear Programming Kit (GLPK)

Mathematica Mathematika je program pro numerické a symbolické počítání. maticové počítání kreslení 2D i 3D funkcí řešení úloh lineárního programování(i jiných optimalizačních úloh), diofantických rovnic integrace...

Mathematica Mathematika je program pro numerické a symbolické počítání. maticové počítání kreslení 2D i 3D funkcí řešení úloh lineárního programování(i jiných optimalizačních úloh), diofantických rovnic integrace... Minimize [ { x+2y, 5x+y=7 && x+y>=26 && x>=3 && y>=4}, {x, y } ] Na prvním řádku je cílová funkce, na druhém jsou podmínky a na třetím jsou proměnné, které se mají minimalizovat.

LinearProgramming [ { 1, 2}, {{ 5, 1}, {1, 1}}, {{7, 0}, {26, 1}}, {{3, I n f i n i t y }, {4, I n f i n i t y } } ] Na prvním řádku je vektor cílové funkce, na druhém matice je A a na čtvrtém je dolní a horní omezení na každou proměnnou. Na třetím řádku je pro každou podmínku dvojice čísel, kde první je pravá strana podmínky a druhé udává, zda se jedná o rovnost (0), alespoň (1) nebo nejvýše (-1).

Alternativy Instalační CD programu Mathematica je v knihovně zdarma pro studijní účely. Podrobnosti a dokumentace na adrese http://www.wolfram.com/products/mathematica/index.html

Alternativy Instalační CD programu Mathematica je v knihovně zdarma pro studijní účely. Podrobnosti a dokumentace na adrese http://www.wolfram.com/products/mathematica/index.html Další podobné programy: Maple, Matlab, Octave,...

Alternativy Instalační CD programu Mathematica je v knihovně zdarma pro studijní účely. Podrobnosti a dokumentace na adrese http://www.wolfram.com/products/mathematica/index.html Další podobné programy: Maple, Matlab, Octave,... Opensource varianta k programu Mathematica je například Sage, jehož syntaxe je založena na jazyku Python.

Sage třída MixedIntegerLinearProgram Vytvoření instance: p=mixedintegerlinearprogram(maximization=true)

Sage třída MixedIntegerLinearProgram Vytvoření instance: p=mixedintegerlinearprogram(maximization=true) Pojmenování vektoru proměnných (p může pracovat zaráz s více vektory proměnných): x=p.new_variable()

Sage třída MixedIntegerLinearProgram Vytvoření instance: p=mixedintegerlinearprogram(maximization=true) Pojmenování vektoru proměnných (p může pracovat zaráz s více vektory proměnných): x=p.new_variable() Zadání cílové funkce: p.set_objective(x[1] + x[2])

Sage třída MixedIntegerLinearProgram Vytvoření instance: p=mixedintegerlinearprogram(maximization=true) Pojmenování vektoru proměnných (p může pracovat zaráz s více vektory proměnných): x=p.new_variable() Zadání cílové funkce: p.set_objective(x[1] + x[2]) Přidání omezující podmínky: p.add_constraint(-3*x[1] + 2*x[2], max=10)

Sage třída MixedIntegerLinearProgram Vytvoření instance: p=mixedintegerlinearprogram(maximization=true) Pojmenování vektoru proměnných (p může pracovat zaráz s více vektory proměnných): x=p.new_variable() Zadání cílové funkce: p.set_objective(x[1] + x[2]) Přidání omezující podmínky: p.add_constraint(-3*x[1] + 2*x[2], max=10) Zadání rozsahu proměnné: p.set_min(x[1],none)#implicitne 0

Sage třída MixedIntegerLinearProgram Vytvoření instance: p=mixedintegerlinearprogram(maximization=true) Pojmenování vektoru proměnných (p může pracovat zaráz s více vektory proměnných): x=p.new_variable() Zadání cílové funkce: p.set_objective(x[1] + x[2]) Přidání omezující podmínky: p.add_constraint(-3*x[1] + 2*x[2], max=10) Zadání rozsahu proměnné: p.set_min(x[1],none)#implicitne 0 p.set_max(x[2],3)#implicitne None...+oo

Sage třída MixedIntegerLinearProgram Vytvoření instance: p=mixedintegerlinearprogram(maximization=true) Pojmenování vektoru proměnných (p může pracovat zaráz s více vektory proměnných): x=p.new_variable() Zadání cílové funkce: p.set_objective(x[1] + x[2]) Přidání omezující podmínky: p.add_constraint(-3*x[1] + 2*x[2], max=10) Zadání rozsahu proměnné: p.set_min(x[1],none)#implicitne 0 p.set_max(x[2],3)#implicitne None...+oo Vyřešení úlohy: optimum=p.solve(solver="glpk") #implicitne solver="coin"

Sage třída MixedIntegerLinearProgram Vytvoření instance: p=mixedintegerlinearprogram(maximization=true) Pojmenování vektoru proměnných (p může pracovat zaráz s více vektory proměnných): x=p.new_variable() Zadání cílové funkce: p.set_objective(x[1] + x[2]) Přidání omezující podmínky: p.add_constraint(-3*x[1] + 2*x[2], max=10) Zadání rozsahu proměnné: p.set_min(x[1],none)#implicitne 0 p.set_max(x[2],3)#implicitne None...+oo Vyřešení úlohy: optimum=p.solve(solver="glpk") #implicitne solver="coin" Získání hodnoty x1=p.get_values(x[1])

Sage jednoduchý příklad Lineární program: Sage kód: Maximalizuj: 2x 1 + x 2 (1) Za podmínek: 3x 1 + 4x 2 2.5 (2) 0.5 1.5x 1 + 0.5x 2 4 (3) x 1, x 2 0 (4) p=mixedintegerlinearprogram(maximization=true) x=p.new_variable() p.set_objective(2*x[1]+x[2]) p.add_constraint(3*x[1]+4*x[2],max=2.5) p.add_constraint(1.5*x[1]+0.5*x[2],max=4,min=0.5) print str(p.solve())+":"+str(p.get_values(x)) Vypíše: 1.66666666667:{1: 0.83333333333333326, 2: 0.0}

Odkazy Web Sage (+webový klient): http://www.sagemath.org/ http://www.sagenb.org/ Dokumentace (průvodce k (celočíselnému) LP + reference k MixedIntegerLinearProgram): http://www.sagemath.org/doc/thematic_tutorials/linear_pr http://www.sagemath.org/doc/reference/sage/numerical/mip.html

AMPL AMPL je modelovací jazyk pro matematické programování. Možnosti AMPL sahají až za lineární programování.

Příklad Továrna produkuje dva druhy barev - modrou a zlatou. Je možné vyrobit 40 litrů modré barvy za hodinu nebo 30 litrů zlaté barvy. Modrá barva se prodává za 10 Kč/litr, zlatá 15 Kč/litr. Není možné prodat více než 1000 litrů modré barvy a 860 litrů zlaté barvy za týden. Pracovní týden má 40 hodin.

Příklad Továrna produkuje dva druhy barev - modrou a zlatou. Je možné vyrobit 40 litrů modré barvy za hodinu nebo 30 litrů zlaté barvy. Modrá barva se prodává za 10 Kč/litr, zlatá 15 Kč/litr. Není možné prodat více než 1000 litrů modré barvy a 860 litrů zlaté barvy za týden. Pracovní týden má 40 hodin. max 10m + 15z 1 40 m + 1 30 z 40 0 m 1000 0 z 860

AMPL program Vstup: var m; var z ; maximize p r o f i t : 10 m + 15 z ; s u b j e c t to time : ( 1 / 4 0 ) m + ( 1 / 3 0 ) z <= 40; s u b j e c t to m l i m i t : 0 <= m <= 1000; s u b j e c t to z l i m i t : 0 <= z <= 860;

AMPL program Vstup: var m; var z ; maximize p r o f i t : 10 m + 15 z ; s u b j e c t to time : ( 1 / 4 0 ) m + ( 1 / 3 0 ) z <= 40; s u b j e c t to m l i m i t : 0 <= m <= 1000; s u b j e c t to z l i m i t : 0 <= z <= 860; Výstup: MINOS 5. 5 1 : optimal s o l u t i o n found. 2 i t e r a t i o n s, o b j e c t i v e 17433.33333 : varname v a r := 1 p a i n t [ blue ] 453.333 2 p a i n t [ gold ] 860

shrnutí Klíčové slovo var uvozuje proměnné Vše musí být pojmenované(poměnné, cílová funkce, pomínky), jména musejí být jedinečná Vše končí středníkem AMPL je case-sensitive Lze mít program i data v jednom souboru(jako výše), ale je také možno tyto části oddělit(program *.mod, data *.dat). Webové řešiče chtějí oddělené soubory.

Složitější problém n počet barev t pracovních hodin p i r i m i zisk z prodeje jednoho litru i-té barvy rychlost výroby i-té barvy(v litrech za hodinu) maximální množství vyrobené(prodané) i-té barvy

Odpovídající program param n ; param t ; param p{ i i n 1.. n } ; param r { i i n 1.. n } ; param m{ i i n 1.. n } ; var p a i n t { i i n 1.. n } ; #n barev maximize p r o f i t : sum{ i i n 1.. n} p [ i ] p a i n t [ i ] ; s u b j e c t to time : sum{ i i n 1.. n} ( 1 / r [ i ] ) p a i n t [ i ] <= t ; s u b j e c t to c a p a c i t y { i i n 1.. n } : 0 <= p a i n t [ i ] <= m[ i ] ;

Data programu paran n := 2; param t := 40; param p := 1 10 2 15; param r := 1 40 2 50; param m: = 1 1000 2 860;

Data programu paran n := 2; param t := 40; param p := 1 10 2 15; param r := 1 40 2 50; param m: = 1 1000 2 860; # parametry l z e zadávat c h y t ř e j i param : p r m: = 1 10 40 1000 2 15 30 860;

Další možnosti Množina (set P) - namísto i in 1..n lze psát i in P

Další možnosti Množina (set P) - namísto i in 1..n lze psát i in P set P ; param t ; param p{ i i n P} ; param r { i i n P} ; param m{ i i n P} ; var p a i n t { i i n P} ; maximize p r o f i t : sum{ i i n P} p [ i ] p a i n t [ i ] ; s u b j e c t to time : sum{ i i n P} ( 1 / r [ i ] ) p a i n t [ i ] <= t ; s u b j e c t to c a p a c i t y { i i n P} : 0 <= p a i n t [ i ] <= m[ i ] ;

Další možnosti Množina (set P) - namísto i in 1..n lze psát i in P set P ; param t ; param p{ i i n P} ; param r { i i n P} ; param m{ i i n P} ; var p a i n t { i i n P} ; maximize p r o f i t : sum{ i i n P} p [ i ] p a i n t [ i ] ; s u b j e c t to time : sum{ i i n P} ( 1 / r [ i ] ) p a i n t [ i ] <= t ; s u b j e c t to c a p a c i t y { i i n P} : 0 <= p a i n t [ i ] <= m[ i ] ; set P:= blue gold ; param t := 40;

Omezení na proměnné: nerovnostmi celočíselné - var x integer binární - var y binary

AMPL prakticky Zkuste si AMPL na webu: http://www.ampl.com/tryampl/startup.html nebo lokálně (GNU řešení): glpsol --mps Dalši informace o AMPL: http://www.ampl.com/refs/amplmod.pdf

API pro jazyk C GNU Linear Programming Kit (GLPK) je knihovna napsaná v jazyce ANSI C, která umí řešit úlohy lineárního a celočíselného lineárního programování.

API pro jazyk C GNU Linear Programming Kit (GLPK) je knihovna napsaná v jazyce ANSI C, která umí řešit úlohy lineárního a celočíselného lineárního programování. K řešení úlohy lineárního programování používá simplexovou metodu a metody vnitřního bodu a pro celočíselne LP používá branch-and-bound a Gomory cutting-plane.

API pro jazyk C GNU Linear Programming Kit (GLPK) je knihovna napsaná v jazyce ANSI C, která umí řešit úlohy lineárního a celočíselného lineárního programování. K řešení úlohy lineárního programování používá simplexovou metodu a metody vnitřního bodu a pro celočíselne LP používá branch-and-bound a Gomory cutting-plane. Příklad

API pro jazyk C GNU Linear Programming Kit (GLPK) je knihovna napsaná v jazyce ANSI C, která umí řešit úlohy lineárního a celočíselného lineárního programování. K řešení úlohy lineárního programování používá simplexovou metodu a metody vnitřního bodu a pro celočíselne LP používá branch-and-bound a Gomory cutting-plane. Příklad Nejprve je nutné inkludovat soubor glpk.h. # i n c l u d e <s t d i o. h> # i n c l u d e <s t d l i b. h> # i n c l u d e <glpk. h>

Vytvoření úlohy Vytvoříme hlavní objekt pro naši úlohu a přiřadíme ji jméno. i n t main ( void ) { glp prob l p ; l p = g l p c r e a t e p r o b ( ) ; glp set prob name ( lp, sample ) ;

Vytvoření úlohy Vytvoříme hlavní objekt pro naši úlohu a přiřadíme ji jméno. i n t main ( void ) { glp prob l p ; l p = g l p c r e a t e p r o b ( ) ; glp set prob name ( lp, sample ) ; V naší úloze budeme maximalizovat. g l p s e t o b j d i r ( lp, GLP MAX ) ;

Popis podmínek Budeme mít tři podmínky. glp add rows ( lp, 3 ) ;

Popis podmínek Budeme mít tři podmínky. glp add rows ( lp, 3 ) ; První podmínce přiřadíme symbolický název (pomocnou proměnnou) p. glp set row name ( lp, 1, p ) ;

Popis podmínek Budeme mít tři podmínky. glp add rows ( lp, 3 ) ; První podmínce přiřadíme symbolický název (pomocnou proměnnou) p. glp set row name ( lp, 1, p ) ; První podmínka bude x 1 + x 2 + x 3 100, a proto nastavíme nerovnost a pravou stranu. glp set row bnds ( lp, 1, GLP UP, 0.0, 1 0 0. 0 ) ;

Popis podmínek Budeme mít tři podmínky. glp add rows ( lp, 3 ) ; První podmínce přiřadíme symbolický název (pomocnou proměnnou) p. glp set row name ( lp, 1, p ) ; První podmínka bude x 1 + x 2 + x 3 100, a proto nastavíme nerovnost a pravou stranu. glp set row bnds ( lp, 1, GLP UP, 0.0, 1 0 0. 0 ) ; Analogicky nastavíme druhou a třetí podmínku. glp set row name ( lp, 2, q ) ; glp set row bnds ( lp, 2, GLP UP, 0.0, 6 0 0. 0 ) ; glp set row name ( lp, 3, r ) ; glp set row bnds ( lp, 3, GLP UP, 0.0, 3 0 0. 0 ) ;

Popis proměnných sloupců Budeme mít tři proměnné (sloupce). g l p a d d c o l s ( lp, 3 ) ;

Popis proměnných sloupců Budeme mít tři proměnné (sloupce). g l p a d d c o l s ( lp, 3 ) ; První proměnnou pojmenujeme x 1. glp set col name ( lp, 1, x1 ) ;

Popis proměnných sloupců Budeme mít tři proměnné (sloupce). g l p a d d c o l s ( lp, 3 ) ; První proměnnou pojmenujeme x 1. glp set col name ( lp, 1, x1 ) ; Proměnná x 1 je omezena jen zdola a to nulou (je nezáporná). g l p s e t c o l b n d s ( lp, 1, GLP LO, 0.0, 0. 0 ) ;

Popis proměnných sloupců Budeme mít tři proměnné (sloupce). g l p a d d c o l s ( lp, 3 ) ; První proměnnou pojmenujeme x 1. glp set col name ( lp, 1, x1 ) ; Proměnná x 1 je omezena jen zdola a to nulou (je nezáporná). g l p s e t c o l b n d s ( lp, 1, GLP LO, 0.0, 0. 0 ) ; Analogicky nastavíme druhou a třetí proměnnou. glp set col name ( lp, 2, x2 ) ; g l p s e t c o l b n d s ( lp, 2, GLP LO, 0.0, 0. 0 ) ; glp set col name ( lp, 3, x3 ) ; g l p s e t c o l b n d s ( lp, 3, GLP LO, 0.0, 0. 0 ) ;

Cílová funkce Cílová funkce je 10x 1 + 6x 2 + 4x 3. g l p s e t o b j c o e f ( lp, 1, 1 0. 0 ) ; g l p s e t o b j c o e f ( lp, 2, 6. 0 ) ; g l p s e t o b j c o e f ( lp, 3, 4. 0 ) ;

Matice A GLPK používá řídké matice, a proto pro každý nenulový prvek A i,j musíme do pole řádkových indexů ia uložit i, do pole sloupcových indexů ar uložit j a do pole hodnot ar uložit A i,j.

Matice A GLPK používá řídké matice, a proto pro každý nenulový prvek A i,j musíme do pole řádkových indexů ia uložit i, do pole sloupcových indexů ar uložit j a do pole hodnot ar uložit A i,j. x 1 + x 2 + x 3 100 10x 1 + 4x 2 + 5x 3 600 2x 1 + 2x 2 + 6x 3 300

Matice A GLPK používá řídké matice, a proto pro každý nenulový prvek A i,j musíme do pole řádkových indexů ia uložit i, do pole sloupcových indexů ar uložit j a do pole hodnot ar uložit A i,j. x 1 + x 2 + x 3 100 10x 1 + 4x 2 + 5x 3 600 2x 1 + 2x 2 + 6x 3 300 i n t i a [ 1 0 ], j a [ 1 0 ] ; double ar [ 1 0 ] ; i a [ 1 ] = 1, j a [ 1 ] = 1, ar [ 1 ] = 1. 0 ; i a [ 2 ] = 1, j a [ 2 ] = 2, ar [ 2 ] = 1. 0 ; i a [ 3 ] = 1, j a [ 3 ] = 3, ar [ 3 ] = 1. 0 ; i a [ 4 ] = 2, j a [ 4 ] = 1, ar [ 4 ] = 1 0. 0 ; i a [ 5 ] = 3, j a [ 5 ] = 1, ar [ 5 ] = 2. 0 ; i a [ 6 ] = 2, j a [ 6 ] = 2, ar [ 6 ] = 4. 0 ; i a [ 7 ] = 3, j a [ 7 ] = 2, ar [ 7 ] = 2. 0 ; i a [ 8 ] = 2, j a [ 8 ] = 3, ar [ 8 ] = 5. 0 ; i a [ 9 ] = 3, j a [ 9 ] = 3, ar [ 9 ] = 6. 0 ;

Načtení matice A Hodnoty matice A jsou uloženy v polích ia, ja, ar, které jsou indexovány od 1 a máme 9 nenulových prvků matice A. g l p l o a d m a t r i x ( lp, 9, ia, ja, ar ) ;

Simplexová metoda Spustíme simplexovou metodu. g l p s i m p l e x ( lp, NULL ) ;

Simplexová metoda Spustíme simplexovou metodu. g l p s i m p l e x ( lp, NULL ) ; Druhým argumentem můžou být kontrolní parametry: množství informací vypisovaných na terminál, typ simplexové metody, pivotovací pravidlo, maximální čas pro výpočet, ošetřování numerické nestability Gaussovské eliminace a další.

Simplexová metoda Spustíme simplexovou metodu. g l p s i m p l e x ( lp, NULL ) ; Druhým argumentem můžou být kontrolní parametry: množství informací vypisovaných na terminál, typ simplexové metody, pivotovací pravidlo, maximální čas pro výpočet, ošetřování numerické nestability Gaussovské eliminace a další. Návratová hodnota určuje, jak výpočet skončil.

Získání výsledků Optimální hodnota cílové funkce. double z = g l p g e t o b j v a l ( l p ) ;

Získání výsledků Optimální hodnota cílové funkce. double z = g l p g e t o b j v a l ( l p ) ; Optimální vrchol. double x1 = g l p g e t c o l p r i m ( lp, 1 ), x2 = g l p g e t c o l p r i m ( lp, 2 ), x3 = g l p g e t c o l p r i m ( lp, 3 ) ;

Získání výsledků Optimální hodnota cílové funkce. double z = g l p g e t o b j v a l ( l p ) ; Optimální vrchol. double x1 = g l p g e t c o l p r i m ( lp, 1 ), x2 = g l p g e t c o l p r i m ( lp, 2 ), x3 = g l p g e t c o l p r i m ( lp, 3 ) ; Výpis výsledků. p r i n t f ( \ nz = %g ; x1 = %g ; x2 = %g ; x3 = %g\n, z, x1, x2, x3 ) ;

Konec Zrušíme objekt úlohy LP g l p d e l e t e p r o b ( l p ) ;

Konec Zrušíme objekt úlohy LP g l p d e l e t e p r o b ( l p ) ; a zkončíme. r e t u r n 0; }

Kompilace Náš soubor example.c zkompilujeme příkazem gcc c example. c

Kompilace Náš soubor example.c zkompilujeme příkazem gcc c example. c a při linkování musíme přilinkovat matematickou a GLPK knihovnu. gcc example. o l g l p k lm o example

Výstup z programu 0: obj = 0.000000000e+00 i n f e a s = 0.000e+00 ( 0 ) 2: obj = 7.333333333e+02 i n f e a s = 0.000e+00 ( 0 ) OPTIMAL SOLUTION FOUND z = 733.333; x1 = 33.3333; x2 = 66.6667; x3 = 0

Výstup z programu 0: obj = 0.000000000e+00 i n f e a s = 0.000e+00 ( 0 ) 2: obj = 7.333333333e+02 i n f e a s = 0.000e+00 ( 0 ) OPTIMAL SOLUTION FOUND z = 733.333; x1 = 33.3333; x2 = 66.6667; x3 = 0 Průběžné výstupy funkce glpk_simplex mají tvar nnn : obj = xxx i n f e a s = yyy ( ddd ) nnn Pořadové číslo kroku simplexové metody. xxx Aktualní hodnota cílové funkce. yyy Numerická nepřesnost. ddd Aktuální počet pevných bázických proměnných.

Získání GLPK Hlavní stránka GLPK http://www.gnu.org/software/glpk/

Získání GLPK Hlavní stránka GLPK http://www.gnu.org/software/glpk/ GLPK je ve všech běžných Linuxových distribucích a verze pro windows je na http://gnuwin32.sourceforge.net/packages/glpk.htm.

Získání GLPK Hlavní stránka GLPK http://www.gnu.org/software/glpk/ GLPK je ve všech běžných Linuxových distribucích a verze pro windows je na http://gnuwin32.sourceforge.net/packages/glpk.htm. Licence: GNU General Public License