Domácí úkol na předmět eko413
 - Kvantitativní ekonomie

Vypracoval: Martin Šlouf
Rodné číslo: 781023/0692
Datum: 23.11. 2000


Reálný problém

Rád bych předem uvedl, že jsem si příklad zcela kompletně vymyslel. Nemám nejmenší představu, kolik metrů čtverečních látky se spotřebuje na šaty, popř. kolik stojí, avšak na tom tolik nezáleží. Zřejmě ani názvy materiálů a výrobků nejsou zcela korektní, věřím ale, že jsou snadno pochopitelné.

Vybral jsem si jakési hypotetické krejčovství, které šije několikero druhů (dámských) šatů - z pytloviny (na pole), svatební (z přírodních materiálů, umělé) a pracovní kostýmy. Používá různé materiály. Pro jednoduchost žije pouze jednu velikost (tzv. univerzální). Má různé zakázky a musí vyrobit určité minimální množství šatů.  Když jich ovšem vyrobí příliš mnoho, nemusí je vůbec prodat. Navíc, k dovršení všeho zmatku zaměstnalo nového "správce skladu" a ten, protože tomu vůbec nerozumí (já), objednal určité množství látek různých druhů - může klidně nastat situace, kdy krejčovství neušije ani to, co slíbilo. Cílem je samozřejmě prodat co největší počet šatů (a uspokojit objednávky), ale už předem se ví, že od jistého vyrobeného množství šatů zisk neporoste, ale bude klesat (vyrobí, ale neprodají).


Ekonomický model

Cílem je maximalizovat zisk z prodeje šatů. Protože se může stát, že po zásahu nového správce skladu nebude moci splnit ani ty zakázky, které by mělo, bude se v takovém případě snažit (pochopitelně) vyrobit takové množství šatů, které nejlépe (nejdráže) prodá.

Procesy, které v krejčovství probíhají - šití šatů:
 

Typ šatů
(výrobek)
Spotřeba látky (materiálu) [m2]
Cena za jedny šaty [Kč]
pytlovina
umělotina
hedvábí
satén
bavlna
zbytek [g]
Polní 3,0 0,0 0,0 0,0 0,0 20 100
Pracovní kostým 0,0 0,5 0,0 0,0 2,5 30 1000
Svatební 1 (umělé) 0,0 1,5 0,5 0,5 0,5 40 1500
Svatební 2 (přír. mat.) 0,0 0,0 0,5 1,5 0,5 50 3000

Je vidět, že na "univerzální" velikost se spotřebují 3 m2 látky. Kdybych uvažoval různé velikosti, bral bych je jako různé typy výrobků (jeden druh šatů by se rozpadl na více výrobků, podle počtu velikostí). Surovina zbytek představuje všechno ostatní od nití a jehel až po knoflíky (znovu pro jednoduchost abstrahuji od množství surovin).

Činitelé, jež ovlivlují procesy v krejčovství.  Jde o omezenou kapacitu látek a ostatního materiálu (zbytek). Vzájemné vztahy mezi činiteli a procesy je patrné z tabulek. První udává, kolik materiálu je k dispozici. Z druhé je patrné, kolik musí být ušito (minimální a maximální) šatů - tato čísla byla získána dlouhodobou praxí - krejčovství je schopno prodat po uspokojení objednávek prostě jen omezené množství šatů, jež ušije navíc.
 

Surovina Množství [m2]
pytlovina 90
umělotina 16
hedvábí 10
satén 16
bavlna 30
zbytek [g] 5000 [g]
Šaty Min Max
Polní 15 20
Pracovní kostým 30 35
Svatební 1 6 8
Svatební 2 7 8


Matematický model

Jde o úlohu lineárního programování. Budu se snažit maximalizovat zisk. Úloha se může rozpadnout na dvě:
  1. Krejčovství se v prvé řadě bude snažit uspokojit své objednávky.  Pokud bude mít dost materiálu, bude potom vyrábět ty šaty, jež přinesou největší profit.
  2. Pakliže se nepodaří uspokojit objednávky (nebude dost materiálu) bude se muset rozhodnout, které z objednávek uspokojit, aby získalo maximální zisk. Vedlejším efektem tohoto případu bude podání výpovědi skladníkovi. Tato úloha bude úplně stejná, jako první, až na to, že se odstraní minimální požadované hodnoty (viz níže).
Pro pojmenování identifikátorů budu používat celé slovo, aby bylo na první pohled zřejmé, jaký činitel zastupuje. Hodnota identifikátoru vyjadřuje úroveň procesu (kolik toho tedy nakonec ušijí).

Kriteriální funkce: z = f(x) = 100 * polní + 1500 * pracovní_kostým + 1600 * svatební_1 + 3000 * svatební_2.

Omezení:

vlastní omezení:
Spotřeba pytloviny: 3,0 * polni <= 50
Spotřeba umělotiny: 0,5 * pracovni_kostym + 1,5 svatebni_1 <= 60
Spotřeba hedvábí: 0,5 * svatebni_1 + 0,5 * svatebni_2 <= 20
Spotřeba saténu: 0,5 * svatebni_1 + 1,5 * svatebni_2 <= 20
Spotřeba bavlny:  2,5 * pracovni_kostym + 0,5 * svatebni_1 + 0,5 * svatebni_2 <= 70
Spotřeba zbytku: 20 * polni + 30 * pracovni_kostym + 40 * svatebni_1 + 50 * svatebni_2 <= 5000

další omezení:
Nezápornost (nelze vyrobit záporné množství šatů)
Celočíselnost (nevyrobím polovinu šatů - to je raději nezačnu ani šít)
15 <= polní <= 20
30 <= pracovni_kostým <= 35
6 <= svatební_1 <= 8
7 <= svatební_2 <= 8

Formulace matematického modelu v programu LINGO:

MAX = 100 * polni + 1000 * pracovni_kostym + 1500 * svatebni_1 + 3000 * svatebni_2;

! vlastni omezeni

3.0 * polni <= 90;
0.5 * pracovni_kostym + 1.5 * svatebni_1 <= 16;
0.5 * svatebni_1 + 0.5 * svatebni_2 <= 10;
0.5 * svatebni_1 + 1.5 * svatebni_2 <= 16;
2.5 * pracovni_kostym + 0.5 * svatebni_1 + 0.5 * svatebni_2 <= 60;
20 * polni + 30 * pracovni_kostym + 40 * svatebni_1 + 50 * svatebni_2 <= 5000;

! dalsi omezeni

! nezapornost je default
@GIN(polni); @GIN(pracovni_kostym); @GIN(svatebni_1); @GIN(svatebni_2);
 polni <= 20;
 polni >= 15;
 pracovni_kostym <= 35;
 pracovni_kostym >= 30;
 svatebni_1 <= 8;
 svatebni_1 >= 6;
 svatebni_2 <= 8;
 svatebni_2 >= 7;

Pozn.: Narazil jsem na jednu skutečnost, kterou nevím, jak si mám vysvětlit - při zadání modelu s komentáři a prázdnými řádky do LINGA, jsem dostával špatné výsledky?! Při odstranění komentářů a prázdných řádek, to bylo lepší. Budete-li to po mě přepočítávat, můžete to zkusit.


Řešení a jeho interpretace

Výsledky programu LINGO

Bohužel, správce skladu objednal materiál velmi špatně - materiál nestačí k ušití všech objednaných šatů.  To je zlé.  Krejčovství se tedy musí soustředit na uspokojení těch objednávek, které mu přinesou největší zisk (mohl bych sice uvažovat snížení limitů - např. ušít určitý počet šatů pro stálé zákazníky, ale pro jednoduchost toto neuvažuji - model by se nijak nelišil - místo abych dolní limity zrušil, příslušně bych je upravil).  Řešení je na snadě - zruším dolní limity výroby šatů. Upravený vstup do LINGA vypadá takto:

MAX = 100 * polni + 1000 * pracovni_kostym + 1500 * svatebni_1 + 3000 * svatebni_2;
3.0 * polni <= 90;
0.5 * pracovni_kostym + 1.5 * svatebni_1 <= 16;
0.5 * svatebni_1 + 0.5 * svatebni_2 <= 10;
0.5 * svatebni_1 + 1.5 * svatebni_2 <= 16;
2.5 * pracovni_kostym + 0.5 * svatebni_1 + 0.5 * svatebni_2 <= 60;
20 * polni + 30 * pracovni_kostym + 40 * svatebni_1 + 50 * svatebni_2 <= 5000;
@GIN(polni); @GIN(pracovni_kostym); @GIN(svatebni_1); @GIN(svatebni_2);
polni <= 20;
pracovni_kostym <= 35;
svatebni_1 <= 8;
svatebni_2 <= 8;

Výsledek již byl uspokojivější. Úloha má optimální řešení - zapsáno vektorově: X = (polni, pracovni_kostym, svatebi_1, svatebni_2) = (20, 20, 4, 8).
Hodnota účelové funkce: z = 52000 [Kč].

Jen pro úplnost - v polních šatech byly objednávky splněny (dokonce bylo dosaženo max. počtu), pracovních kostýmů nebylo vyrobeno dost. Zajímavá je situace u svatebních šatů. Svatební šaty umělé (svatebni_1) nedosáhly požadovaného počtu, kdežto svatebních šatů z přírodních materiálů (svatební_2) bylo vyrobeno více, než bylo objednávek - bylo dosaženo maximálního množství. Otázkou zůstává, zda je to ekonomické, nicméně to vyhovuje podmínkám úlohy, jak jsem si je definoval (vím, že jich jsou prostě 8 schopni prodat).

Příslušný výstup z LINGA:

 Rows=     11 Vars=      4 No. integer vars=      4  ( all are linear)
 Nonzeros=     32 Constraint nonz=    18(     4 are +- 1) Density=0.582
 Smallest and largest elements in abs value=   0.500000        5000.00
 No. < :  10 No. =:   0 No. > :   0, Obj=MAX, GUBs <=   4
 Single cols=    0

 Global optimal solution found at step:            11
 Objective value:                            52000.00
 Branch count:                                      2

                       Variable           Value        Reduced Cost
                          POLNI        20.00000           -100.0000
                PRACOVNI_KOSTYM        20.00000           -1000.000
                     SVATEBNI_1        4.000000           -1500.000
                     SVATEBNI_2        8.000000           -3000.000

                            Row    Slack or Surplus      Dual Price
                              1        52000.00            1.000000
                              2        30.00000           0.0000000
                              3       0.0000000           0.0000000
                              4        4.000000           0.0000000
                              5        2.000000           0.0000000
                              6        4.000000           0.0000000
                              7        3440.000           0.0000000
                              8       0.0000000           0.0000000
                              9        15.00000           0.0000000
                             10        4.000000           0.0000000
                             11       0.0000000           0.0000000

Diskuse

Připomenu řešení: X = (20, 20, 4, 8), z = 52000 [Kč].

Jak již bylo uvedeno, přijaté řešení je typu "z nouze ctnost", protože kvůli špatnému skladníkovi nebylo možné uspokojit všechny zákazníky a podnik musel volit strategii takovou, aby vyrobil co nejrentabilnější sortiment.

Mohlo by mě například zajímat, kolik materiálu zbylo:
 

Materiál Zbytek [m2]
zbytek [g] 3440 [g]
bavlna 4
satén 2
hedvábí 4
umělotina 0
pytlovina 0

Mohl bych z toho vyrobit sice ještě jedny šaty, ale už bych je nemusel prodat a materiál bych spotřeboval zbytečně.

Stínové ceny

Stínové ceny (Dual Price) vyjadřují, jakou měrou se na celkovém zisku podílí určitá jednotka zdroje - vyjadřuje cenu zdroje - o co by se mi zvedl zisk, kdybych zvýšil kapacitu (za jinak stejných podmínek)? Je nutné ovšem uvažovat tyto hodnoty v rámci intervalu - to proto, že při výrazném zvýšení kapacit (tj. překročení určité hodnoty) dojde k přeplánování celé výroby - změní se celá výrobní struktura.

V mém modelu je to celkem zajímavé.  Já v mnoha případech výrobu zvýšit nemohu - šaty bych neprodal. Proto je u mě většina stínových cen nulová - zvýšení kapacit nebude mít vliv na výši zisku.

Redukované ceny

Je vidět, že bych teoreticky mohl zvýšit zisk další produkcí (nějaký materiál mi zbývá, omezení ohledě maximálního počtu také porušují rovnováhu - kdybych je neuvažoval, struktura výroby by byla tato: X = (30, 21, 2, 10), z = 57000 [Kč]), faktem ale je, že by nebyly splněny podmínky úlohy.