TAS:Situace/Vozidla/Ceny/Penalizace za nedodržení délky směny

Z Solvertech
Verze z 20. 10. 2023, 13:42, kterou vytvořil Solvertech (diskuse | příspěvky) (příklad)
Skočit na navigaci Skočit na vyhledávání

Penalizace se počítá z celkového času každé směny podle funkce zadané ve sloupci. Funkce se zadává výrazem v jediné proměnné x. Povoleny jsou závorky a operace:

  • Sčítání +
  • Odčítání -
  • Násobení *
  • Dělení /
  • Mocnina ^

Desetinná čísla se zde zapisují s tečkou, tedy 1.5, nikoliv 1,5.

Funkci lze zadat po částech ve tvaru piecewise(výraz1, hranice1, výraz2, hranice2, výraz3). Vyhodnotí se jako:

  • výraz1 pokud x < hranice1
  • výraz2 pokud x < hranice1 < hranice2
  • výraz3 pokud harnice2 < x

Seznam vstupů piecewise v závorkách začíná a končí výrazem, může být libovolně dlouhý. Hranice musí být konstantní a zapsány od nejmenší po největší. Například piecewise(x, 2, x , 1 , x) tedy není zapsáno správně. Naopak piecewise(x, 1, x, 2, x) je zapsáno správně a ekvivalentní x.

Dále lze ve výrazech používat funkce sin, cos, exp, ln. Jejich argumenty musí být vždy v závorkách, například exp(x).

Příklad použití

Chceme vyrovnat směny řidičů tak, aby byly v rozmezí 4 až 5 hodin. Budeme počítat například penalizaci 1 za každou minutu pod 240 minut a 4 za každou minutu nad 300. Mezi 204 a 300 minutami nechceme penalizovat vůbec.
Zadáváme tedy funkci po částech jako piecewise(240 - x, 240, 0, 300, 4 * (x - 300)).

Pokud se ukáže, že solver nevyrovnává směny dostatečně, můžeme zvolit rychleji rostoucí funkci, například 10 * piecewise(240 - x, 240, 0, 300, 4 * (x - 300)) nebo piecewise((240 - x) ^ 2, 240, 0, 300, 4 * (x - 300) ^ 2).