510 likes | 651 Views
Zapsání modelu úlohy celočíselného programování do jazyka Mosel. Deklarace seznamu index ů , polí a jejich naplnění koeficienty modelu, Deklarace rozhodovacích proměnných , Definice účelové funkce, Zápis strukturálních podmínek, Zápis obligatorních podmínek, Příkaz optimalizace,
E N D
Zapsání modelu úlohy celočíselného programování do jazyka Mosel • Deklarace seznamu indexů, polí a jejich naplnění koeficienty modelu, • Deklarace rozhodovacích proměnných, • Definice účelové funkce, • Zápis strukturálních podmínek, • Zápis obligatorních podmínek, • Příkaz optimalizace, • Určení formy výstupu. Jen zde se liší zápis od úlohy lineárního programování!
Úloha plánování výrobys nedělitelností Podnikatel vyrábí a prodává bramborové lupínky a hranolky pořadě za ceny 120 a 76 peněžních jednotek za kilogram produktu, přičemž lupínky může prodávat pouze v 15 kg baleních a hranolky v 30 kg baleních. Na výrobu 1 kg lupínků je zapotřebí 2 kg brambor a 0.4 kg oleje, na výrobu 1 kg hranolků je třeba 1.5 kg brambor a 0.2 kg oleje. Podnikatel nakoupil před zahájením výroby 100 kg brambor a 16 kg oleje za regulované ceny 12 a 40 peněžních jednotek za kilogram. Jaká množství jednotlivých produktů má podnikatel vyrábět a prodávat, aby maximalizoval svůj zisk při respektování omezených množství obou surovin, které má k dispozici?
Jednotkový zisk z výroby a prodeje jednotlivých produktů • ...prodává lupínky a hranolky pořadě za ceny 120 a 76 peněžních jednotek za kilogram. Na výrobu 1 kg lupínků je zapotřebí 2 kg brambor a 0.4 kg oleje, na výrobu 1 kg hranolků je třeba 1.5 kg brambor a 0.2 kg oleje. Podnikatel nakoupil brambory a olejza 12 a 40 peněžních jednotek za kilogram. Náklady na 1 kg lupínků 40Sk za kilogram 0.4 kg oleje 12Sk za kilogram 2 kg brambor + = = Zisk z 1 kg: 120-40=80 Zisk z 15 kg balení c1=15*80=1200 =122+400.4=40
Jednotkový zisk z výroby a prodeje jednotlivých produktů • ...prodává lupínky a hranolky pořadě za ceny 120 a 76 peněžních jednotek za kilogram. Na výrobu 1 kg lupínků je zapotřebí 2 kg brambor a 0.4 kg oleje, na výrobu 1 kg hranolků je třeba 1.5 kg brambor a 0.2 kg oleje. Podnikatel nakoupil brambory a olejza 12 a 40 peněžních jednotek za kilogram. Náklady na 1 kg hranolků 40Sk za kilogram 0.2 kg oleje 12Sk za kilogram 1.5 kg brambor + = = Zisk z 1 kg: 76-26=50 Zisk z 30 kg balení c2=30*50=1500 =121.5+400.2=26
Model úlohy plánování výroby s nedělitelností (Pole s koeficienty úlohy) • UNITPROF: [1200, 1500] • CONSOFPOT: [30, 45] • CONSOFOIL: [6, 6]
Deklarace množiny indexů a polí v jazyku MOSEL model "Chips and Frenchfries Production" uses "mmxprs" declarations PRODUCTS=1..2 CONSOFPOT:array(PRODUCTS) of real CONSOFOIL:array(PRODUCTS) of real UNITPROF:array(PRODUCTS) of real end-declarations … end-model Úvodní klíčové slovodeklarace Koncové klíčové slovodeklarace
Inicializace polí v jazyku MOSEL model "Chips and Frenchfries Production" uses "mmxprs" declarations PRODUCTS=1..2 CONSOFPOT:array(PRODUCTS) of real CONSOFOIL:array(PRODUCTS) of real UNITPROF:array(PRODUCTS) of real end-declarations CONSOFPOT:=[30, 45] CONSOFOIL:=[6, 6] UNITPROF:=[1200, 1500] end-model
Deklarace rozhodovacích proměnných v jazyku MOSEL model "Chips and Frenchfries Production" uses "mmxprs" declarations PRODUCTS=1..2 CONSOFPOT:array(PRODUCTS) of real CONSOFOIL:array(PRODUCTS) of real UNITPROF:array(PRODUCTS) of real X:array(PRODUCTS) of mpvarend-declarations *** end-model Deklarace proměnných X(1), X(2)
Zápis účelové funkce v jazyku MOSEL model "Chips and Frenchfries Production" uses "mmxprs" declarations PRODUCTS=1..2 *** X:array(PRODUCTS) of mpvarend-declarations *** Profit:=sum(j in PRODUCTS) UNITPROF(j)*X(j) *** end-model Proměnná, která představuje zisk
Zápis strukturálních podmínek v jazyku MOSEL model "Chips and Frenchfries Production" uses "mmxprs" declarations *** end-declarations *** Profit:=sum(j in PRODUCTS) UNITPROF(j)*X(j) sum(j in PRODUCTS)CONSOFPOT(j)*X(j) <=100 sum(j in PRODUCTS)CONSOFOIL(j)*X(j) <=16 end-model
Deklarace celočíselných proměnných v jazyku MOSEL model "Chips and Frenchfries Production" uses "mmxprs" declarations *** end-declarations *** Profit:=sum(j in PRODUCTS) UNITPROF(j)*X(j) sum(j in PRODUCTS)CONSOFPOT(j)*X(j) <=100 sum(j in PRODUCTS)CONSOFOIL(j)*X(j) <=16 forall (j in PRODUCTS) X(j) is_integer end-model Toto jsou obligatorní podmínky celočíselnosti
Příkaz optimalizace v jazyku MOSEL model "Chips and Frenchfries Production" uses "mmxprs" declarations *** end-declarations *** Profit:=sum(j in PRODUCTS) UNITPROF(j)*X(j) sum(j in PRODUCTS)CONSOFPOT(j)*X(j) <=100 sum(j in PRODUCTS)CONSOFOIL(j)*X(j) <=16 maximize(Profit) end-model
Úloha o batohu(Knapsack Problem) Do batohu je možno uložit náklad o hmotnosti 21 kg. Tento náklad je možno složit z předmětů 1, 2, 3, 4, 5 a 6, které mají pořadě hmotnosti 12, 11, 10, 9, 9 a 8 a které není možno dělit. S přepravou jednotlivých předmětů jsou spojeny následující zisky 16, 14, 13, 10, 9 a 6. Úlohou je maximalizovat celkový zisk z přepravy předmětů, když s batohem je možno absolvovat jen jedinou cestu.
Úloha o batohu(Knapsack Problem) maximalizujte x0 = 16x1+ 14 x2+ 13x3+ 10x4 +9 x5 + 6x6 za podmínek 12x1+ 11 x2+ 10x3 +9x4 +9 x5 + 8x621 xj {0, 1} pro j = 1, ..., 6.
Úloha o batohu-vstupní údaje(Knapsack Problem) maximalizujte x0 = 16x1+ 14 x2+ 13x3+ 10x4 +9 x5 + 6x6 za podmínek 12x1+ 11 x2+ 10x3 +9x4 +9 x5 + 8x621 xj {0, 1} pro j = 1, ..., 6. Koeficienty cj jsou uloženy v textovém souboru KP_c.txt a koeficienty ajv textovém souboru KP_a.txt v následujícím tvaru: N resp. N c1 a1 c2 a2 : : cN aN
Úloha o batohu(Knapsack Problem) model "Knapsack Problem" uses "mmxprs" declarations N:integer end-declarations ! Reading from a text file fopen("KP_c.txt", F_INPUT) readln(N) fclose(F_INPUT) end-model Otevření souboru KP_c.txt Načtení první položky souboru do N Uzavření souboru
Úloha o batohu(Knapsack Problem) declarations c:array(1..N) of integer a:array(1..N) of integer X:array(1..N) of mpvar end-declarations ! Reading from a text file fopen("KP_c.txt", F_INPUT) readln forall(j in 1..N) readln(c(j)) fclose(F_INPUT) Vynechání první položky souboru Načtení cj v cyklu
Úloha o batohu(Knapsack Problem) fopen("KP_a.txt", F_INPUT) readln forall(j in 1..N) readln(a(j)) fclose(F_INPUT) Profit:=sum(j in 1..N) c(j)*X(j) sum(j in 1..N) a(j)*X(j)<=21 forall(j in 1..N) X(j) is_binary maximize(Profit) Definování 0-1 proměnných
Úloha o batohu(Knapsack Problem) Profit:=sum(j in 1..N) c(j)*X(j) sum(j in 1..N) a(j)*X(j)<=21 forall(j in 1..N) X(j) is_binary maximize(Profit) writeln("Profit := ", getobjval) forall(j in 1..N) writeln("X( ",j,") := ", getsol(X(j))) end-model
Úloha o batohu-výsledky(Knapsack Problem) Profit := 27 X( 1) := 0 X( 2) := 1 X( 3) := 1 X( 4) := 0 X( 5) := 0 X( 6) := 0
Přiřazovací úloha V dopravní síti se v místech t1, t2, t3 a t4 nacházejí taxíky. Dispečer taxislužby obdržel objednávku od čtyř zákazníků, kteří se nacházejí v jiných čtyřech místech z1, z2, z3 a z4. Vzdálenosti mezi stanovišti taxíků a zákazníky udává {cij}. Je třeba určit, který taxík má obsloužit kterého zákazníka (být mu přiřazen), aby celková vzdálenost kterou taxíky projedou na prázdno, tj. ze svého stanoviště k zákazníkovi, byla co nejmenší. Je třeba respektovat podmínku, že každý zákazník musí být obsloužen a že jeden taxík nemůže uspokojit více než jednoho z těchto zákazníků.
2 3 4 Přiřazovací úloha(Prezentace v grafu) 1 1 2 3 4 xij {0, 1} „Jet či nejet, to je otázka“.
Alokační úloha(Allocation Problem) Firma disponuje třemi velkými sklady v své distribuční síti. Z těchto skladů, které mají pořadě kapacity ai = 5000, 7000 a 6000 tun zboží, pokrývají požadavky deseti velkoodběratelů. Jejich požadavky jsou pořadě bj = 2000, 1000, 800, 700, 900, 2200, 1800, 1700, 1100 a 1200 tun. Vzdálenosti skladů od velkoodběratelů jsou dány koeficienty {dij} Určete který velkoodběratel bude odkud zásobován tak, aby celkové dopravní náklady byly minimální, když víte že náklady na přepravu jedné jednotky zboží z i na místo j jsou lineárně závislé na vzdálenosti těchto míst. Je třeba dodržet podmínku, že každý velkoodběratel musí dostat celý svůj požadavek z jediného skladu.
Alokační úloha(Allocation Problem) b3 b2 b4 b1 b5 a1 a2 a3 1 Sklady j=1, 2, 3 2 3 b10 b9 b8 b6 b7 zákazníci zij{0, 1}
Úloha o rozmístění dopravní flotily Školní správa zabezpečuje svoz dětí do škol od 7:00 do 8:00 po třech trasách j = 1, 2, 3. Zajištění přepravy obdržel jako zakázku za pevnou cenu dopravní podnik. V dané době podnik může na zakázku nasadit autobusy dvou typů i = 1, 2 s různými parametry. Doby jízdy na jednotlivých trasách v min. a náklady na jejich projetí udávají matice koeficientů {tij } a {cij }. Aby byli žáci svezeni do škol, je třeba, aby první trasu projely 4 druhou trasu 3 a třetí trasu 5 autobusů. Dopravní podnik v uvedenédobě může z časového fondu autobusů prvního typu čerpat celkem až 180 min a z časového fondu autobusů druhého typu nejvýše 120 min. Jak má podnik zabezpečit zakázku, aby jeho zisk byl co největší.
Úloha o rozmístění dopravní flotily Doby jízdy na jednotlivých trasách v min. a náklady na jejich projetí udávají matice koeficientů {tij } a {cij }. Trasa_1 4 z1jZ+ Typ_1180 min Trasa_2 3 Kolikrát typ 1 bude nasazen na trasu j Škola Typ_2120 min Trasa_3 5
Úloha o rozmístění dopravní flotilyúčelová funkce Trasa_1 4 z1jZ+ Typ_1180 min Trasa_2 3 Kolikrát typ 1 bude nasazen na trasu j Škola Typ_2120 min Trasa_3 5
Úloha o rozmístění dopravní flotily„náš zákazník, náš pán“ Trasa_1 4 z1jZ+ Typ_1180 min Trasa_2 3 Kolikrát typ 1 bude nasazen na trasu j Škola Typ_2120 min Trasa_3 5
Úloha o rozmístění dopravní flotily„kde nic není, ani čert nebere“ Trasa_1 4 z1jZ+ Typ_1180 min Trasa_2 3 Kolikrát typ 1 bude nasazen na trasu j Škola Typ_2120 min Trasa_3 5
Úloha o přidělování dopravních prostředků Pro zabezpečení stavby je třeba v průběhu jednoho dne dovézt ze železáren 70 t armovací ocele a z cementárny 135 t cementu. Každý z uvedených podniků se nachází v jiném místě a obě místa jsou od stavby vzdálená tak, že každé vozidlo použité na přepravu je za den schopno zvládnout jen jedinou cestu ze stavby do jednoho z podniků a zpět. K dispozici máme heterogenní park vozidel složený z 7 vozidel o nosnosti 10 t, 8 vozidel o nosnosti 8 t a 5 vozidel o nosnosti 20 t. Vozidla mohou převážet jak cement tak i ocel. Rozhodněte o nejvýhodnějším přidělení vozidel při nákladech {cij } na jednu cestu tam a zpět do každého z obou podniků (1-železárny, 2-cementárna).
Úloha o přidělování dopravních prostředků Rozhodněte o nejvýhodnějším přidělení vozidel při nákladech {cij } na jednu cestu tam a zpět do každého z obou podniků (1-železárny, 2-cementárna). Železárna 70 t z1jZ+ Typ_1:10 tun7 kusů Kolikrát typ 1 bude nasazen na trasu j Typ_2:8tun8 kusů Stavba Typ_3:20tun5 kusů Cementárna 150 t
Úloha o přidělování dopravních prostředků„náš zákazník, náš pán“ Železárna 70 t z1jZ+ Typ_1:10 tun7 kusů Kolikrát typ 1 bude nasazen na trasu j Typ_2:8tun8 kusů Stavba Typ_3:20tun5 kusů Cementárna 150 t
Úloha o přidělování dopravních prostředků„kde nic není, ani čert nebere“ Železárna 70 t z1jZ+ Typ_1:10 tun7 kusů Kolikrát typ 1 bude nasazen na trasu j Typ_2:8tun8 kusů Stavba Typ_3:20tun5 kusů Cementárna 150 t
Dopravní úloha s kontejnery Je třeba řešit zásobování n odběratelů s požadavky bj z m skladů s kapacitami ai, kde součet požadavků je menší než součet kapacit. K dopravě zboží je ale možno použít jen kontejnery o kapacitě K. Požadavky i kapacity je možno do kontejnerů libovolně dělit, ale náklady na dopravu jsou dány počty kontejnerů, které budou přepraveny mezi jednotlivými dvojicemi sklad-odběratel. Určete nyní nejlevnější přepravní plán pro zásobení odběratelů, když náklady na přepravu jednoho kontejneru z místa i na místo j jsou cij.
Dopravní úloha s kontejnery Podnikatel
Dopravní úloha s fixní sazbou Organizace zásobuje čtyři vodárny vodou z tří zdrojů vlastní potrubní sítí. Pro doplnění zásob je třeba do vodáren dopravit pořadě bj = 80, 80, 140 a 80 m3 vody denně. Kapacity zdrojů jsou pořadě ai = 100, 150 a 200 m3 denně. Náklady na dopravu jedné jednotky vody ze zdroje i do vodárny j potrubím které je a nebo bude vybudováno, jsou dány maticí koeficientů cij, i = 1..3 a j = 1..4. Informace, zda ze zdroje i do vodárny j je vybudováno potrubí, je dána 0-1 hodnotou koeficientu qij, kde qij = 0 znamená že ze zdroje i k vodárně j není vybudováno potrubí. Jeho vybudování si vyžádá investičními náklady, jejichž denní odpisy představují částku 300 peněžních jednotek. Je třeba určit co nejméně nákladný zásobovací program organizace.
Dopravní úloha s fixní sazbou Podnikatel
Lokační úloha Uncapacitated Facility Location Problem Je zadaná dopravní síť se zákazníky v uzlech j J a s místy i I v nichž je možno umístit servisní střediska poskytující služby. I jedno středisko umístěné kdekoliv v uzlu z množiny I je schopno obsloužit všechny zákazníky. Úloha spočívá v minimalizaci celkových nákladů, které zahrnují investiční náklady fi spojené s umístěním střediska v místě i a dále provozní náklady cij spojené s obsluhou zákazníka j z místa i. Podmínkou je, že každý zákazník musí být obsloužen, nebo-li musí být přiřazen některému vybudovanému středisku.
Lokační úloha Uncapacitated Facility Location Problem Podnikatel
Úloha obchodního cestujícího (Travelling Salesman Problem) V úplné dopravní síti ( tj. síť, kde je každý uzel spojen úsekem s každým jiným uzlem ) o n uzlech a s nezáporným ohodnocením neorientovaných úseků cij se v uzlu 1 nachází obchodní cestující. Je třeba pro něho nalézt trasu s co nejmenším celkovým ohodnocením použitých úseků tak, aby navštívil každý uzel právě jednou a aby se vrátil zpět do výchozího uzlu. ( Tato úloha je známa také pod názvem úloha nejlevnější hamiltonovské kružnice na úplném grafu.)
Úloha obchodního cestujícího (Travelling Salesman Problem) Podnikatel
Úloha okružních jízd (Vehicle Routing Problem-VRP) V úplné dopravní síti s uzly 1, ..., n se vzdálenostmi cij mezi nimi je v uzlu 1 umístěn zdroj a v uzlech 2, ..., n odběratelé s požadavky bj. Ve zdroji jsou k dispozici vozidla o kapacitě K, kde bj K pro j = 2, ..., n. Určete trasy vozidel tak, aby jejich celková délka byla co nejmenší, aby všichni odběratelé byli obslouženi a to každý jen jednou návštěvou některého vozidla.
Úloha okružních jízd (Vehicle Routing Problem-VRP) Podnikatel
Úloha rozkladu množiny(Set Partitioning Problem) Bylo navrženo 7 různých tras, jimiž je možno obsloužit ze střediska 1 zákazníky 2, 3, 4 a 5 jsou to trasy 1-2-3-1 s náklady 7 1-4-5-3-1 s náklady 12 1-4-3-1 s náklady 8 1-4-1 s náklady 5 1-5-1 s náklady 4 1-4-5-2-1 s náklady 13 1-4-2-5-3-1 s náklady 20 Určete nejlevnější sestavu tras, které obslouží všechny zákazníky tak, že každý zákazník bude ležet jen na jedné trase.
Podmínky "buď a nebo" Nechť z ostatních podmínek úlohy plánování výroby, které zde neuvádíme, vyplývá že výrobků typu 1 může být nejvýše 50 a výrobků typu 2 nejvýše 100. Je třeba zabezpečit, aby výroba buď nespotřebovala více pracovních hodin než 500 a nebo, aby nespotřebovala více než 600 tun materiálu. Přitom na výrobu jednoho výrobku typu 1 je třeba 20 hod a 27 tun, na výrobek typu 2 je třeba 18 hod a 30 tun.
Podmínky "buď a nebo" Podmínky, z nichž alespoň jedna má platit, jsou vzhledem k výrobnímu programu < x1, x2 > tyto: 20 x1 + 18 x2 500 27 x1 + 30 x2 600.
Podmínky "buď a nebo" Z maximálního počtu výrobků víme, že spotřeba prac. hodin nepřekročí 2800 hod a spotřeba ocele 4350 tun. Zavedeme bivalentní proměnnou y, hodnota 1 znamená, že řešení má vyhovovat podmínce 20 x1 + 18 x2 500 a platnost druhé podmínky nemusí být požadovaná. Hodnota 0 bude znamená druhý případ. 20 x1 + 18 x2 500 + 2300 (1- y) 27 x1 + 30 x2 600 + 3750 y. Proměnná y může nabývat pouze jedné ze dvou hodnot 1 a 0, bude-li y = 1, druhá z podmínek přejde v něco, co je v každém případě splněno a první bude vyžadována v původním tvaru. Pro y = 0 tomu bude právě naopak.