TAS:Pokročilé/Kurýr: Porovnání verzí
značka: revertováno |
|||
Řádek 1: | Řádek 1: | ||
<languages /> | <languages /> <translate> | ||
<!--T:1--> | <!--T:1--> | ||
Řádek 173: | Řádek 173: | ||
Pokud je použit výpočet podle vzdálenosti, je nezbytné po načtení zakázek (a správném spočtení matice vzdáleností) kliknout na "Výpočty zakázek".<br /> | Pokud je použit výpočet podle vzdálenosti, je nezbytné po načtení zakázek (a správném spočtení matice vzdáleností) kliknout na "Výpočty zakázek".<br /> | ||
Pokud má Tasha určovat optimálního dopravce, je třeba porovnat ceny různých dopravců a tu nejnižší propsat do job.notservedpenalty (pokud je použit PostImportJobsCompute, je třeba porovnání a přiřazení dělat tam). V průběhu řešení pak tasha rozhodne, zda je finančně výhodnější zásilku obsloužit, nebo zda ji ponechá neobslouženou (tedy notservedpenalty bude menší než cena závozu). | Pokud má Tasha určovat optimálního dopravce, je třeba porovnat ceny různých dopravců a tu nejnižší propsat do job.notservedpenalty (pokud je použit PostImportJobsCompute, je třeba porovnání a přiřazení dělat tam). V průběhu řešení pak tasha rozhodne, zda je finančně výhodnější zásilku obsloužit, nebo zda ji ponechá neobslouženou (tedy notservedpenalty bude menší než cena závozu). | ||
</translate> |
Verze z 29. 8. 2022, 07:28
Modul kurýr není "klasický" modul, jde úpravu ScenarioImporteru a případně i PostImportJobsCompute tak, aby Tasha zjistila ceny jednotlivých dopravců, našla nejlevnějšího (většinou) a toho porovnala s cenou závozu.
Obecně
V rámci ScenarioImporteru je třeba přidat dynamické sloupce, potřebné pro výpočet. Lze jen doporučit "civilizované" pojmenování sloupců tak, aby bylo zřejmé, co je ve sloupci obsaženo. Sloupec "cena1" toho pravděpodobně moc nenapoví, slupec "geis1zona" je lepší.
Komentujte kód. Kurýr patří k těm složitějším výpočtům a když se ke kódu budete po delší době vracet (nebo se jím bude muset zabývat kolega), komentáře oceníte.
Určení ceny dopravce při použití hmotnosti zásilky
Jeden z nejběžnějších výpočtů.
Vycházejme z dopravce DPD s následujícím ceníkem:
Hmotnost | Cena |
do 15 kg | 79 Kč |
16 - 50 kg | 119 Kč |
51 - 100 kg | 159 Kč |
V rámci ScenarioImporteru bude třeba následjuící kód (demand1 je hmotnost zásilky a je již definována):
<ColumnsCalculated> <string>dynamic;dpdcena;dynamic;dpdcena;stop1;demand1;;stop1demand1<101?159:dynamicdpdcena</string> <string>dynamic;dpdcena;dynamic;dpdcena;stop1;demand1;;stop1demand1<51?119:dynamicdpdcena</string> <string>dynamic;dpdcena;dynamic;dpdcena;stop1;demand1;;stop1demand1<16?79:dynamicdpdcena</string> </ColumnsCalculated>
Kód říká, že pokud je hmotnost zásilky menší než 101 kg, do sloupce dpdcena se propíše hodnota 159. Při vyhodnocování podmínek je nezbytné postupovat buď od nejvyšší možné váhy, nebo od nejnižší možné váhy (pak se použije “>” )
Určení ceny dopravce při použití zón
Vycházejme z dopravce Geis s následujícím ceníkem:
do 15 kg | do 50 kg | do 100 kg | |
Praha | 59 | 119 | 159 |
Čechy | 69 | 159 | 199 |
Morava | 79 | 199 | 259 |
Ve ScenarioImporteru bude třeba následující kód:
<ColumnsCalculated> <string>dynamic;geiszona;dynamic;geiszona;dynamic;psc;;dynamicpsc>59999?3:dynamicgeiszona</string> <string>dynamic;geiszona;dynamic;geiszona;dynamic;psc;;dynamicpsc<60000?2:dynamicgeiszona</string> <string>dynamic;geiszona;dynamic;geiszona;dynamic;psc;;dynamicpsc<20000?1:dynamicgeiszona</string>
<string>dynamic;geis1zona;dynamic;geis1zona;stop1;demand1;;stop1demand1<101?159:dynamicgeis1zona</string> <string>dynamic;geis1zona;dynamic;geis1zona;stop1;demand1;;stop1demand1<51?119:dynamicgeis1zona</string> <string>dynamic;geis1zona;dynamic;geis1zona;stop1;demand1;;stop1demand1<16?59:dynamicgeis1zona</string>
<string>dynamic;geis2zona;dynamic;geis2zona;stop1;demand1;;stop1demand1<101?199:dynamicgeis2zona</string> <string>dynamic;geis2zona;dynamic;geis2zona;stop1;demand1;;stop1demand1<51?159:dynamicgeis2zona</string> <string>dynamic;geis2zona;dynamic;geis2zona;stop1;demand1;;stop1demand1<16?69:dynamicgeis2zona</string>
<string>dynamic;geis3zona;dynamic;geis3zona;stop1;demand1;;stop1demand1<101?259:dynamicgeis3zona</string> <string>dynamic;geis3zona;dynamic;geis3zona;stop1;demand1;;stop1demand1<51?199:dynamicgeis3zona</string> <string>dynamic;geis3zona;dynamic;geis3zona;stop1;demand1;;stop1demand1<16?79:dynamicgeis3zona</string>
<string>dynamic;cenageis;dynamic;cenageis;dynamic;geiszona;dynamic;geis1zona;;dynamicgeiszona==1?dynamicgeis1zona:dynamiccenageis</string> <string>dynamic;cenageis;dynamic;cenageis;dynamic;geiszona;dynamic;geis2zona;;dynamicgeiszona==2?dynamicgeis2zona:dynamiccenageis</string> <string>dynamic;cenageis;dynamic;cenageis;dynamic;geiszona;dynamic;geis3zona;;dynamicgeiszona==3?dynamicgeis3zona:dynamiccenageis</string> </ColumnsCalculated>
Určení ceny při použití vzdáleností
Vycházejme z dopravce TopTrans s následujícím ceníkem:
do 100 km | do 300 km | do 700 km | |
do 15 kg | 59 | 119 | 159 |
16 - 50 kg | 69 | 159 | 199 |
51 - 100 kg | 79 | 199 | 259 |
V tomto případě je nutné počítat jak ve ScenarioImporteru, tak i v PostImportJobsCompute.
Ve ScenarioImporteru bude třeba následující kód:
<ColumnsCalculated> <string>dynamic;toptrans100km;dynamic;toptrans100km;stop1;demand1;;stop1demand1<101?79:dynamictoptrans100km</string> <string>dynamic;toptrans100km;dynamic;toptrans100km;stop1;demand1;;stop1demand1<51?69:dynamictoptrans100km</string> <string>dynamic;toptrans100km;dynamic;toptrans100km;stop1;demand1;;stop1demand1<16?59:dynamictoptrans100km</string>
<string>dynamic;toptrans300km;dynamic;toptrans300km;stop1;demand1;;stop1demand1<101?199:dynamictoptrans300km</string> <string>dynamic;toptrans300km;dynamic;toptrans300km;stop1;demand1;;stop1demand1<51?159:dynamictoptrans300km</string> <string>dynamic;toptrans300km;dynamic;toptrans300km;stop1;demand1;;stop1demand1<16?119:dynamictoptrans300km</string>
<string>dynamic;toptrans700km;dynamic;toptrans700km;stop1;demand1;;stop1demand1<101?259:dynamictoptrans700km</string> <string>dynamic;toptrans700km;dynamic;toptrans700km;stop1;demand1;;stop1demand1<51?199:dynamictoptrans700km</string> <string>dynamic;toptrans700km;dynamic;toptrans700km;stop1;demand1;;stop1demand1<16?159:dynamictoptrans700km</string> </ColumnsCalculated>
V PostImportJobsCompute bude třeba následující kód:
<Equations> <string>cenatoptrans;cenatoptrans;toptrans700km;distance;;distance<701?toptrans700km:cenatoptrans</string> <string>cenatoptrans;cenatoptrans;toptrans300km;distance;;distance<701?toptrans300km:cenatoptrans</string> <string>cenatoptrans;cenatoptrans;toptrans100km;distance;;distance<701?toptrans100km:cenatoptrans</string> </Equations>
Pokud je použit výpočet podle vzdálenosti, je nezbytné po načtení zakázek (a správném spočtení matice vzdáleností) kliknout na "Výpočty zakázek".
Pokud má Tasha určovat optimálního dopravce, je třeba porovnat ceny různých dopravců a tu nejnižší propsat do job.notservedpenalty (pokud je použit PostImportJobsCompute, je třeba porovnání a přiřazení dělat tam). V průběhu řešení pak tasha rozhodne, zda je finančně výhodnější zásilku obsloužit, nebo zda ji ponechá neobslouženou (tedy notservedpenalty bude menší než cena závozu).