TAS:Pokročilé/Kurýr

Z Solvertech
Verze z 11. 8. 2022, 13:02, kterou vytvořil FuzzyBot (diskuse | příspěvky) (Stránka aktualizována, aby odpovídala nové verzi zdrojové stránky)
(rozdíl) ← Starší verze | zobrazit aktuální verzi (rozdíl) | Novější verze → (rozdíl)
Skočit na navigaci Skočit na vyhledávání
Jiné jazyky:

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 “&gt;” )

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).