Riktero manuál
Jak to funguje algoritmicky
Praktický popis toho, jak Riktero vybírá řidiče pro objednávku. Není to jen nejbližší auto: do výběru vstupuje dostupnost, kategorie, vozidlo, fronta, oblíbení řidiči, blokace, platby a stav řidiče.
Aktivní řidič
Řidič musí mít čerstvý heartbeat nebo aktivní background lease, nesmí být OFF/OFFLINE a musí mít aktivní e-main session nebo background lease.
FREE
Řidič je volný a může dostat objednávku okamžitě.
HALF_BUSY
Řidič dokončuje jízdu a může dostat další objednávku jen tehdy, když zákazník povolil čekání a řidič už nemá jinou čekající objednávku.
Zóna/fronta
Místo vyzvednutí může spadnout do ruční nebo automatické zóny. Pokud má zóna zapnutou frontu, řidiči v této zóně mají přednost před běžným hledáním podle vzdálenosti.
11. Zákazník vidí dostupné kategorie
c-main se ptá na dostupné kategorie podle místa vyzvednutí, cíle, zastávek, typu zákazníka a dostupnosti řidičů v okolí.
- Nejdřív se berou kategorie od volných řidičů.
- Když není žádný volný řidič, ale jsou poblíž obsazení řidiči v režimu HALF_BUSY, mohou se ukázat jejich kategorie se žlutým upozorněním na čekání.
- Kategorie se ukáže jen tehdy, když ji má řidič zapnutou a jeho aktuální nebo přiřazené auto splňuje pravidla kategorie.
- Promo se zobrazí jen tehdy, když na trasu a zákazníka sedí promo pravidlo. Promo se nepřičítá do kategorie Kdokoli dostupný.
22. Vytvoření objednávky
Po odeslání objednávky server znovu spočítá trasu, cenu a rizikové signály. Cena z klienta není autorita, finální cenu určuje server.
- Server ověří trasu a podle ní znovu spočítá cenu.
- Cena se počítá z aktuálního nastavení kategorie: základ, Kč/km, minimální cena a násobek ceny.
- Promo pravidla mohou nastavit například minimální nebo maximální cenu.
- Když je cestující více než 100 m od zadaného místa vyzvednutí, objednávka se označí jako podezřelejší.
33. Základní filtry řidičů
Než systém začne řadit řidiče, vyhodí všechny kandidáty, kteří objednávku dostat nemají.
- Vypadnou řidiči offline, bez aktuálního stavu, bez aktivní řidičské obrazovky nebo bez background lease.
- Vypadnou řidiči, kteří už tuto objednávku odmítli, nebo jsou pro daného cestujícího blokovaní.
- Vypadnou řidiči s neodpovídající kategorií, vypnutou kategorií nebo autem mimo pravidla kategorie.
- U režimu Můj řidič se navíc kontrolují požadavky na jazyk a preferované sedadlo.
- U oblíbeného řidiče nebo oblíbené společnosti se hledá jen mezi odpovídajícími oblíbenými řidiči nebo řidiči dané společnosti.
44. Přímý nebo konkrétní řidič má první pokus
Pokud má objednávka konkrétního požadovaného řidiče, systém ho zkusí oslovit před běžným hledáním.
- Volný požadovaný řidič dostane nabídku rovnou.
- Obsazený požadovaný řidič ji může dostat jen v režimu HALF_BUSY, pokud zákazník povolil čekání a řidič nemá další objednávku ve frontě.
- U konkrétního oblíbeného řidiče se při nedostupnosti nehledá náhrada, ale objednávka skončí důvodem podle situace.
55. Kategorie Kdokoli dostupný
Kdokoli dostupný není vlastní ceníková kategorie. Je to zkratka pro nejrychlejší vhodnou reálnou kategorii.
- Server pro každého kandidáta hledá nejlevnější reálnou kategorii, kterou má řidič zapnutou a kterou splňuje jeho auto.
- Konkrétní seznam reálných kategorií se může měnit podle nastavení v administraci. Algoritmus proto pracuje s aktuálně povolenými kategoriemi a jejich pravidly.
- Promo se do tohoto výběru nepočítá.
- Když se objednávka skutečně nabídne řidiči, může se interně přepsat z Kdokoli dostupný na vybranou reálnou kategorii a cena se přepočítá.
66. Pořadí ve frontové zóně
Pokud je místo vyzvednutí ve frontové zóně, nejdřív se řeší řidiči v této zóně. Tady nejde primárně o nejbližší auto, ale o spravedlivé pořadí fronty.
- Rozhoduje čas ve frontě pro danou kategorii. Používá se pozdější čas z dvojice vstup do zóny a vstup do kategorie.
- Při shodě rozhoduje stabilně ID řidiče, aby algoritmus nebyl náhodný.
77. Hledání mimo frontu
Když zóna kandidáta nedá, systém přejde na běžné hledání.
- Nejdřív hledá volné řidiče v jejich pickup radiusu.
- Řidič ve stejné pickup zóně může projít i tehdy, když by vzdálenost nebyla ideální.
- Volní kandidáti se řadí podle vzdálenosti k vyzvednutí a potom podle ID.
- Když pořád existuje volný řidič v kategorii, systém ho může použít jako fallback.
88. Čekání na obsazeného řidiče
HALF_BUSY řidiči přichází na řadu až tehdy, když systém nemá žádného vhodného volného řidiče, který objednávku ještě neodmítl.
- Zákazník musí mít povolené čekání.
- Řidič nesmí mít jinou objednávku ve frontě.
- Obsazení řidiči se řadí podle ETA, potom podle vzdálenosti a nakonec podle ID.
99. Nabídka řidiči a odpověď
Vybranému řidiči se objednávka nastaví jako OFFERED a zobrazí se v e-main.
- Server uloží assignedDriverId a pokusí se spočítat trasu řidič -> vyzvednutí.
- Řidiči se pošle push/web-push pro příchozí objednávku.
- Po přijetí se objednávka změní na ACCEPTED a řidič na BUSY.
- Po odmítnutí se řidič zapíše mezi odmítnuté kandidáty a objednávka se vrací do PENDING pro další dispatch.
- Časový timeout nabídky je v aktuálním kódu vypnutý, takže odmítnutí řeší hlavně řidičská akce.
1010. Když nikdo nevyjde
Pokud se nenajde vhodný řidič, objednávka přejde do stavu NO_DRIVER a c-main zobrazí důvod.
- no_match znamená, že systém nenašel odpovídajícího řidiče.
- busy_only znamená, že existují jen obsazení vhodní řidiči.
- all_declined znamená, že vhodní řidiči objednávku odmítli.
- Krátce po vytvoření má objednávka dispatch grace, aby systém neukázal nedostupnost dřív, než se stihne propsat první hledání.
Co bychom měli společně rozhodnout
- Chceme frontovou zónu vždy nadřadit vzdálenosti, nebo má mít vzdálenost v některých případech větší váhu?
- Má mít Kdokoli dostupný opravdu vždy nejlevnější reálnou kategorii, nebo spíš nejbližšího řidiče bez ohledu na cenu?
- Má se HALF_BUSY nabízet agresivněji, když má nízké ETA, nebo až po odmítnutí všech volných řidičů?
- Mají mít některé frontové zóny vlastní pravidla, nebo má být pořadí všude stejné?
← Zpět na manuál