Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.
courses:a4b35ko:ukol-2015-5 [2015/04/26 19:44] jendan vytvořeno |
courses:a4b35ko:ukol-2015-5 [2025/01/03 18:28] (aktuální) |
||
---|---|---|---|
Řádek 1: | Řádek 1: | ||
====== Warehousing ====== | ====== Warehousing ====== | ||
- | Nevite nekdo, jak na to? | + | <code> |
+ | param n; /* product count */ | ||
+ | param m; /* season count */ | ||
+ | param R, integer, >= 0; /* max capacity of warehouse */ | ||
+ | |||
+ | /* uzly vyrobku*/ | ||
+ | set V1 := 1..n; | ||
+ | set V2 := 1..m; | ||
+ | |||
+ | |||
+ | #set E, within V1 cross V2; | ||
+ | set E := V1 cross V2; | ||
+ | /* set of arcs */ | ||
+ | |||
+ | /* unit cost, i - product in j - season */ | ||
+ | param c{(i,j) in E},>=0; | ||
+ | |||
+ | /* units demand, i - product in j - season */ | ||
+ | param d{(i,j) in E},>=0; | ||
+ | |||
+ | /* production capacity, i - product in j - season */ | ||
+ | param u{(i,j) in E},>=0; | ||
+ | |||
+ | /* unit holding storage cost, i - product from j - season (to j+1) season */ | ||
+ | param h{(i,j) in E}, >=0; | ||
+ | |||
+ | /* unit production, i - product in j - season */ | ||
+ | var x{(i,j) in E}, integer, >=0; | ||
+ | |||
+ | /* chceme platit co nejmene. Vyprodukujeme x produktu, za kazdy zaplatime c dle sezony + holding cost, pokud jsme ho neprodali */ | ||
+ | #minimize total: sum{(i,j) in E} (x[i,j] * c[i,j] + ((x[i,j] - d[i,j]) * h[i,j])); | ||
+ | #minimize total: sum{j in {1..m-1} ( sum{i in {1..n}} (x[i,j] * c[i,j]))# + h[i,j] * sum{k in {1..j}} ((x[i,k] - d[i,k])) ) + sum{i in {1..n}} (x[i,m] * c [i,m]); | ||
+ | minimize total: sum{j in {1..m-1}} ( sum{i in {1..n}} ((x[i,j] * c[i,j]) + h[i,j] * sum{k in {1..j}} ((x[i,k] - d[i,k]))) ) + sum{i in {1..n}} (x[i,m] * c [i,m]); | ||
+ | |||
+ | /* vsechno, co jsme vyrobili, se proda */ | ||
+ | #POZN. myslim, ze tahle podminka je zbytecna a neresi vubec nic | ||
+ | s.t. satisfactionTotal: sum{(i,j) in E} x[i,j] = sum{(i,j) in E} d[i,j]; | ||
+ | |||
+ | /* nemuzeme vyrobit vic, nez kolik je kapacita v sezone */ | ||
+ | s.t. maxproduction{(i,j) in E}: x[i,j] <= u[i,j]; | ||
+ | |||
+ | /* vyrobime aspon tolik, aby vsechna poptavka danou sezonu byla uspokojena */ | ||
+ | s.t. satisfactionSeasonal{(i,j) in E}: x[i,j] >= ( d[i,j] - sum{l in {1..j-1}}(x[i,l] - d[i,l]) ); | ||
+ | |||
+ | /* Po sezone uskladnime maximalne R vyrobku. Coz je soucet dosud vyrobenych - dosud prodanych. */ | ||
+ | /* Tato podminka nezmeni vysledek. Je zajimave, ze kdyz je sklad velky 90, NO PRIMAL SOLUTION FOUND. Vys je cena trochu vetsi nez optimal. Zrejme je nekde maximalni kapacita u mala a musime ulozit do skladu... | ||
+ | EDIT: Tuto podmínku ale unkomentujme. Protože na cviku se model testoval s daty Testing_wearhousing.dat, které se objevily v moodlu, a pro ty je třeba. */ | ||
+ | s.t. maxstorage{j in {1..m}}: sum{(k,l) in {1..n,1..j}} ((x[k,l] - d[k,l])) <= R; | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | solve; | ||
+ | printf "Optimal solution: %d\n", | ||
+ | sum{j in {1..m-1}} ( sum{i in {1..n}} ((x[i,j] * c[i,j]) + h[i,j] * sum{k in {1..j}} ((x[i,k] - d[i,k]))) ) + sum{i in {1..n}} (x[i,m] * c [i,m]); | ||
+ | printf("From node To node Total cost\n"); | ||
+ | printf{(i,j) in E: x[i,j]} " %3d %3d %8g\n", | ||
+ | i, j, c[i,j]; | ||
+ | |||
+ | |||
+ | data; | ||
+ | </code> | ||
~~DISCUSSION~~ | ~~DISCUSSION~~ | ||
+ | - Nevite nekdo, jak na to? | ||
+ | - Ano, ale kdo odevzdá plagiát, žene do záhuby! | ||
+ | - Zatím přepisuju podle komentářů a až na jiné názvy proměnných se mi to shoduje na 80% s původní verzí. Jinak se to moc vymyslet nedá, nechcu-li zabřednout do syntaxe zápisu, což je jinak jen "obfuscation". (Uvedený kód nějak narušil wiki syntax, myslím tím, že nejde odrážkovat, diskuze se nezobrazí) | ||
+ | - V "Upravil stránku" je původní kód bez wiki-syntaxe. Ještě jsem unkomentoval podmínku s R. | ||
+ | |||
+ | - Trocha přidání do vstupních dat (h proměnná) pro domácí úlohu malinko zpřehlední výpočet optimalizační funkce. Flow[] je x[] v původní verzi. | ||
+ | <code> | ||
+ | h.... | ||
+ | .... | ||
+ | 1 13 0 | ||
+ | 2 13 0 | ||
+ | 3 13 0 | ||
+ | 4 13 0 | ||
+ | 5 13 0 | ||
+ | 6 13 0 | ||
+ | 7 13 0 | ||
+ | 8 13 0 | ||
+ | 9 13 0 | ||
+ | 10 13 0 | ||
+ | |||
+ | minimize total: sum{(product,season) in E}(flow[product,season] * c[product,season]) + sum{(product,season) in E}( h[product,season] * sum{k in {1..season}} ((flow[product,k] - d[product,k]))) ; | ||
+ | </code> | ||