Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Genetické algoritmy - Find Your Way

Find Your Way je aplikace, která ukazuje možnosti genetických algoritmů. Na hracím poli se entity musí dostat ze startu do cíle kolem uživatelem vytvořených překážek. Entity jsou naprogramované pomocí genetického algoritmu, dokáží se tedy samy učit.

Znamená to to, že entity se pokoušejí dostat do cíle nejdříve naprosto náhodným chováním, poté se učí a přejímají vlastnosti těch entit, které se dostaly nejdále. Jakmile se tedy nějaká entita dostane dostatečně daleko, ostatní se od ní začnou učit. Díky tomuto učení se dříve či později adaptují na jakoukoli trasu. Jakmile se naučí trasu procházet, uživatel může trasu kompletně změnit a entity se přeučí na novou trať.

Můžete si to zkusit sami, níže dávám program ke stažení. Kdyby někoho zajímaly zdrojové kódy, dal jsem je na GitHub.

Zdrojákoviště C# .NET - Okenní aplikace Windows Forms

Ovládání

Každá generace lze spustit kliknutím na tlačítko Next Generation, nebo se bude spouštět automaticky, když je zaškrtnutý checkbox Automatically next gen.

Když zrovna neběží generace, jsou odemčená ostatní tlačítka. Po kliknutí na Set Obstacles se uživatel dostane do edit módu, kde uživatel může překážku vymazat tím, že na ni klikne. Novou vytvoří tak, že klikne na dvě místa na hrací ploše, kde se vytvoří obdélníková překážka.

Uživatel ještě může buďto vymazat vše, co se entity naučily, nebo uložit (a v hlavním menu znovu načíst) stav aplikace.

Draw : Move ratio je v podstatě rychlost ticků, kolik jich uběhne na jedno vykreslení. Delay between frames jsou FPSka, od 15 do 100 (méně je více FPS)

Jak to funguje?

Každá entita (ten červený čtvereček) má genetickou informaci (reprezentována polem čísel dlouhým 2000). Tato genetická informace určuje, jak se bude entita chovat. Každý tick (jejichž počet je omezen na 2000) se entita podle čísla v genetické informaci buďto pootočí kousek nahoru, dolů, nebo se o kousek vyrovná.

Po uplynutí 2000 ticků, nebo když všechny entity do něčeho narazí, skončí generace. Entity jsou seřazeny podle toho, jak dobré jsou. Část entit (třeba polovina) je vymazána, zatímco ty ostatní se mezi sebou zkříží a vytvoří tolik potomků, kolik entit bylo zničeno. Křížení se děje tímto způsobem: Vždy se vyberou 2 různé entity (náhodně, a to pokud možno tak, že lepší entity mají větší šanci být vybrány). Následně se vybere náhodné číslo X, a to od 1 do (délka genomu - 1). Nový potomek bude mít X genů od prvního rodiče, zbytek od druhého. U každé přenesené části genomu je šance X% na mutaci, tedy na nahrazení genu náhodným.

Tímto způsobem se entity vyvíjí a samostatně se učí. Nezapomeňte si stáhnout program a vyzkoušet si to :)


Galerie

Program byl vytvořen v roce 2017.

 

Stáhnout

Stažením následujícího souboru souhlasíš s licenčními podmínkami

Staženo 38x (34.31 kB)
Aplikace je včetně zdrojových kódů v jazyce C#

 

Všechny články v sekci
Zdrojákoviště C# .NET - Okenní aplikace Windows Forms
Program pro vás napsal Petr Šťastný
Avatar
Uživatelské hodnocení:
6 hlasů
Autor se věnuje především Rustu a Haskellu, a navíc zbožňuje linux, i když původně začínal na C#.
Aktivity