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í).
Procesy, které v krejčovství probíhají - šití šatů:
(výrobek) |
|
Cena za jedny šaty [Kč] | |||||
---|---|---|---|---|---|---|---|
|
|
|
|
|
|
||
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.
|
|
Kriteriální funkce: z = f(x) = 100 * polní + 1500 * pracovní_kostým + 1600 * svatební_1 + 3000 * svatební_2.
Omezení:
vlastní omezení:Formulace matematického modelu v programu LINGO:
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 <= 5000další 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
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.
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
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ě.
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.