Simulace automobilových závodů (Netlogo)

=Definice problému= Název simulace: Simulace automobilových závodů

Autor: Jinv00 (talk) 20:41, 11 June 2019 (CET)

Typ modelu: Multiagentní

Modelovací nástroj: NetLogo

Popis modelu: Simulace pohybu závodních vozů po okruhu. Vozy jsou na začátku závodu seřazeny na startovní rovince, a po odstartování krouží po okruhu. Každý vůz má náhodně přidělenou rychlost z předem zadaného rozmezí. Rychlost vozů je kromě základní přidělené rychlosti závislá i na míře opotřebení pneumatik (opotřebovanější pneumatiky jsou pomalejší než méně opotřebované), na aktuální zvolené směsi pneumatik (měkčí směs pneumatik je rychlejší než tvrdší) a na jízdním stylu řidiče (agresivní jízdní styl je rychlejší než konzervativní). Rychlost opotřebovávání pneumatik je závislá na zvolené směsi pneumatik (měkčí směs pneumatik se opotřebovává rychleji než tvrdší) a na jízdním stylu řidiče (agresivním jízdním stylem se pneumatiky opotřebovávají rychleji než konzervativním jízdním stylem). Přezouvání pneumatik se provádí v boxové uličce, ve které musí vozy jezdit pomaleji než po samotném závodním okruhu. Zároveň pro přezouvání pneumatik platí pravidlo, že vůz nemůže přezout pneumatiky na stejnou směs pneumatik, na jaké momentálně přijel do boxů. Projede-li vůz za jiným detekční zónou pro DRS s odstupem menším než 1 sekundu (v simulaci je možné tento čas změnit), může potom v následující DRS zóně využít DRS pro krátkodobé zvýšení rychlosti.

Cíl simulace: Účelem této simulace je vytvořit zjednodušený model pohybu závodních vozů po okruhu. Z vytvořeného modelu by se dala odhadnout optimální strategie zastávek v boxech (počet zastávek, načasování zastávek, použité sady pneumatik (a jejich počet)) a optimální jízdní styl (agresivní/konzervativní). Dále simulace může sloužit k otestování různých technických pravidel a parametrů pneumatik. Například se z modelu může otestovat, jaký má vliv systém DRS (vzdálenost vozů v detekční zóně a zároveň vliv DRS na rychlost vozu) na "atraktivitu" závodů (jak moc se předjíždí). Stejně tak je možné díky modelu navrhnout takové parametry jednotlivých směsí pneumatik, aby byly jednotlivé směsi výkonnostně co nejvíce vyrovnané a aby tím pádem týmy mohly volit různé strategie. Například v současné Formuli 1 je problematika pneumatik poměrně ožehavé téma - většina týmů obvykle volí totožnou strategii a uchyluje se jen ke dvěma ze tří dostupných směsí pneumatik, protože ta třetí je v závodech z různých důvodů prakticky nepoužitelná. Nalezení správného vyvážení jednotlivých směsí pneumatik je tak pro výrobce pneumatik vyzývavý úkol.

=Metoda= Model je vytvořen v softwaru NetLogo, který je určen především pro modelování multiagentních systémů. Díky grafickému zobrazení a množství různých monitorů a grafů nám také umožňuje měnit situaci modelu v průběhu času. K nastavení modelu posloužily především data o závodní trati Bahrain International Circuit a data z oficiální videohry Formule 1 2018. Většina proměnných v modelu je parametrizovatelná. Data o trati se nahrávají z externího souboru, je tedy poměrně snadné model otestovat i s daty jiného závodního okruhu.

=Model= Model umožňuje načíst soubor s libovolným závodním okruhem (požadavky na formát souboru a styl zapsání jednotlivých částí okruhu do souboru viz níže). Po nastavení všech parametrů (viz parametry modelu níže) je třeba simulaci připravit tlačítkem setup (tím se načte a vykreslí okruh, vytvoří závodní vozy (agenti) a následně se vozy umístí na startovní rovinku). Samotné spuštění simulace je navázáno na tlačítko go, které závod odstartuje. Vozy budou následně kroužit po okruhu a v případě potřeby zajedou do boxů pro nové pneumatiky.

Pro lepší přehled o tom, co se v závodě momentálně děje je možné zapnout poměrně výřečné logování do konzole (přepnutím přepínače fancy-logs do polohy On ). Jednotlivé aktuální důležité hodnoty u jednotlivých vozů je možné sledovat v řadě monitorů. Pro každý vůz (s maximálním počtem 10) je připraveno celkem sedm monitorů, které pro daný vůz ukazují následující hodnoty: aktuální kolo, které vůz jede (při jistých konfiguracích modelu je možné docílit situace, ve které jsou některé vozy natolik rychlé, že jiné vozy předjedou o kolo, proto je vhodné tento parametr sledovat pro každý vůz zvlášť), aktuální nasazenou směs pneumatik, aktuální jízdní styl řidiče, celkový počet uskutečněných zastávek v boxech, aktuální opotřebení pneumatik, výchozí rychlost (náhodně přidělená, vybraná z intervalu minimální až maximální možné) a aktuální rychlost, která je vypočtena z výchozí rychlosti a aktuálních parametrů platných pro daný vůz (například dostupnost systému DRS, opotřebení pneumatik, nasazená směs pneumatik, jízdní styl řidiče, atd.).

Dalším velmi užitečným prvkem simulace je graf znázorňující změny pořadí v průběhu kol závodu. Na vodorovné ose jsou zobrazena jednotlivá kola závodu, svislá osa reprezentuje pořadí. Bohužel jsem v NetLogu nenašel možnost "otočit" svislou osu tak, aby nižší hodnoty začínaly nahoře a vyšší šly směrem dolů, proto je třeba tento graf číst "odspodu" - vůz na prvním místě je zobrazen dole, vůz na druhém místě je nad ním (na pozici s "funkční" hodnotou 2), a tak dále. Každý vůz má přiřazenou unikátní barvu, touto barvou je pak daný vůz v grafu reprezentován. Z tohoto grafu se dají velmi dobře vyčíst změny pořadí, v kombinaci s logy v konzoli se pak dá zjistit, zda ke změnám došlo například při zastávkách v boxech nebo čistě na trati.

Parametry modelu
Zde je seznam všech parametrů modelu včetně jejich popisu a výchozí hodnoty.

Trať
Překvapivě jedním z nejnáročnějších úkolů při tvorbě simulace byl návrh zápisu dat o závodním okruhu do souboru. Formu zápisu dat právě do souboru jsem zvolil z toho důvodu, že je takto možné v budoucnu v simulaci pouze vyměnit vstupní soubor a simulaci tak lze provést znovu na zcela nových datech. Data o trati musejí ctít velmi specifický formát. Zde je ukázka dvou různých řádků ze souboru s daty o okruhu:

[9 1 1]

[49 1 8 10 270]

Hodnoty musí být vždy v hranatých závorkách a oddělené mezerou. Každé pole s hodnotami musí být na samostatném řádku. První, druhá i třetí hodnota pole se do souboru s daty o okruhu zapisují vždy, ostatní (čtvrtá a pátá) jsou volitelné. Nyní tedy k významu jednotlivých hodnot.

První hodnota vždy reprezentuje x-ovou souřadnici políčka (patch), druhá hodnota vždy reprezentuje y-ovou souřadnici políčka. Třetí hodnota vždy reprezentuje vlastnosti pole. Seznam vlastností s jejich číselnou reprezentací, která se do pole zapisuje, je v následující tabulce. Zároveň jsou zde zaneseny i hodnoty pole na 4. a 5. pozici, pokud se pro danou vlastnost vyplňují. Pokud se pro danou vlastnost tyto hodnoty nevyplňují, je v tabulce prázdná buňka.

Vlastnosti jednotlivých částí trati jsou poměrně samovysvětlující. Pokud je daná část okruhu pouze obyčejná trať, na třetí pozici v poli s daty o daném políčku (patchi) bude hodnota 1. Pokud je zde boxová ulička, bude zde hodnota 2. Pokud je na nějakém místě trati vjezd a výjezd z boxů, trať se de facto dělí na dvě cesty, a je třeba specifikovat, ve kterém směru se kam pokračuje. Dorazí-li vůz po trati na pole s hodnotou 3 (trať a vjezd do boxů), vidí před sebou dvě cesty. Pokud potřebuje zajet do boxů, vydá se směrem, který je zadán v poli s daty na čtvrté pozici. Pokud nepotřebuje jet do boxů, pokračuje směrem, který na čtvrté pozici v poli s daty pro daný patch není. Obdobná situace nastává u výjezdu z boxové uličky. Vůz vyjíždějící z boxů potřebuje vědět, kterým směrem vede trať, aby při výjezdu z boxů náhodou nezačal kroužit v protisměru. Při tvorbě trati je dále z pochopitelných důvodů vědět, kde se nachází detekční bod DRS, DRS zóna a cílová páska (včetně cílové pásky v boxové uličce). Konečně hodnota 8 reprezentuje navíc vlastnost "startovní rošt". Na 4. pozici je třeba do pole uvést startovní pozici daného patche a na pátou pozici směr okruhu. Tyto dvě hodnoty (pro celkem až deset vozů) se využijí při umisťování vozů na startovní rošt a při jejich počáteční orientaci na okruhu.

=Výsledky a závěr= Model je z pochopitelných důvodů pouhým zjednodušením reality. Skutečné automobilové závody samozřejmě závisí i na celé řadě dalších, v tomto modelu neuvažovaných, faktorů. I přesto nám model při různých konfigurací poskytuje zajímavé výsledky a umožňuje sledovat a porovnávat různé strategie a vliv naprogramovaných parametrů na ně. Například lze vypozorovat, že ne vždy musí závod zvítězit vůz s nejrychlejší výchozí rychlostí - může se stát, že ho porazí vůz s nižší výchozí rychlostí a optimálnější strategií. Dále je zajímavé pozměnit nastavení modelu například tak, aby měly všechny vozy totožnou výchozí rychlost. Stejně tak lze parametry modelu nastavit takovým způsobem, aby se při dostatečně dlouhém závodu ukázaly jednotlivé sady pneumatik jako vyrovnané. V neposlední řadě lze z modelu vypozorovat, jak obrovský vliv může mít na výsledek závodu systém DRS, který byl do Formule 1 přidán pouze z důvodu zatraktivnění závodů. Pokud se atraktivita závodů měří pouze počtem úspěšných předjetí, pak tento systém plní svůj účel. Zároveň je však do jisté míry smutné vidět, jak například pomalejší vůz, který si brilantní strategií vydobyl průběžné první místo, o toto první místo přichází jen proto, že jako jediný nemá možnost využít DRS, neboť je na prvním místě a není před ním nikdo, kdo by mu ho "aktivoval".

Z modelu lze při vhodné konfiguraci vytvořit i paralela ke skutečným automobilovým závodům (konkrétně k závodům vozů Formule 1). Jde o konfiguraci, při které se na trati s výjimkou prvního kola prakticky nepředjíždí, a kdy jsou veškeré změny pořadí dány zastávkami v boxech. Často pak lze vidět různé shluky aut, které mají obdobnou strategii - ani jedno z nich není rychlejší než ostatní, a i do boxů jezdí společně.

Model jako takový skromně hodnotím za povedený. Cíle se naplnit podařilo - je možné provádět nespočet různých simulací a z monitorů, grafu a logů se dají vyčíst někdy zajímavé, někdy však i očekávané výsledky. Z modelu se dá vyčíst přínosnost různých strategií a při modifikaci některých parametrů se dá nalézt správné vyvážení pro jednotlivé směsi pneumatik. Model je dokonce i zajímavé jen sledovat, "závodění" je často napínavé. Programování tohoto projektu v NetLogu pro mě bylo přínosné, bylo zajímavé učit se v tomto jazyce psát algoritmy a přemýšlet v něm. Samozřejmě by model šlo vylepšit - například by nebylo od věci pokusit se optimalizovat algoritmus pro hledání cesty nebo rekurzivní algoritmus pro ukládání průběžného pořadí vozů. Zároveň by bylo zajímavé vidět nějaké rozšíření tohoto modelu, především rozšíření o kolize, různé pravděpodobnosti předjetí v různých částí tratě, simulaci spalování paliva, aj.

=Obrázky=

=Kód=
 * Zdrojový kód simulace: [[File:jinv00_racing_simulation.nlogo]]
 * Data o okruhu Bahrain International Circuit: [[File:bahrain.zip]]

=Zdroje=
 * Codemasters, F1 2018 - The Official Videogame. http://www.codemasters.com/game/f1-2018/
 * NetLogo 6.1.0 User Manual. http://ccl.northwestern.edu/netlogo/docs/