Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/mihaimaruseac/hsmaze
A robot trying to escape from a maze using GA
https://github.com/mihaimaruseac/hsmaze
Last synced: 2 months ago
JSON representation
A robot trying to escape from a maze using GA
- Host: GitHub
- URL: https://github.com/mihaimaruseac/hsmaze
- Owner: mihaimaruseac
- License: mit
- Created: 2011-05-19T16:05:38.000Z (over 13 years ago)
- Default Branch: master
- Last Pushed: 2020-06-21T04:28:22.000Z (over 4 years ago)
- Last Synced: 2023-03-11T06:42:33.386Z (almost 2 years ago)
- Language: Haskell
- Homepage:
- Size: 43 KB
- Stars: 8
- Watchers: 3
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.ro
- License: LICENSE
- Security: SECURITY.md
Awesome Lists containing this project
README
Mihai Maruseac, 341C3
INVA, Tema 4.7
Algoritmi genetici1. Mod rulare
^^^^^^^^^^^^^Se rulează
./maze
după construirea executabilului utilizând
make
Se pot rula ambii pași simultan, rulând
make run
Se setează parametrii înainte de generarea unui labirint nou și apoi se
observă evoluția. Sunt scrise statistici în fișierul "trace", se poate folosi./plot.sh
pentru a le afișa.
2. Descriere generală
^^^^^^^^^^^^^^^^^^^^^Implementarea este realizată în Haskell.
Labirintul este generat aleator la începutul fiecărei simulări. S-a ales o
generare utilizând algoritmul Sidewinder pentru a putea obține labirinturi
destul de complicate într-un timp cât mai rapid.Deoarece labirintul generat are prima linie fără pereți, robotul se va deplasa
mereu de la celula (1, 1) a labirintului până în colțul diametral opus. Dacă
s-ar fi deplasat în sus, ar fi fost mult prea ușor de găsit o soluție simplă:
mergi dreapta/stânga până la prima deschidere sus și repetă.Cromozomii reprezintă secvența de direcții în care va merge robotul. În cazul
în care o direcție nu este validă, se încearcă următoarea în sens orar pentru
a nu bloca robotul prea mult pe aceeași poziție.Evaluarea se face pe baza apropierii de celula țintă și pe baza numărului
total de celule vizitate din labirint. Pentru a sparge simetria, se punctează
și cea mai de jos linie pe care ajunge robotul.Deoarece planurile au o rată mare de insucces, mutația are efecte majore în
evoluție. De cele mai multe ori, o rată de mutație sub 20% nu va genera
soluția optimă (decât după un număr foarte mare de iterații, de multe ori
posibilele avansuri fiind distruse la generația următoare).Pentru a asigura o convergență mai rapidă, se propagă de la o generație la
următoarea primii doi indivizi. Celelalte sloturi se umplu cu algoritmul
clasic.Selecția indivizilor se face pe baza metodei ruletei. Astfel, va conta doar
ordinea relativă în funcție de fitness, nu și valoarea lui absolută.Estimativ, fitness-ul maxim care poate fi obținut pentru un labirint de
dimensiune n este100 * (n^2 - t) + 50 * t + 20 * n
unde t este lungimea drumului minim de la intrare la ieșire.
3. Conținut arhivă
^^^^^^^^^^^^^^^^^^Arhiva conține:
* sursele implementării și Makefile corespunzător în directorul Maze/
și în directorul părinte
* folder-ul res/ conținând resursele aplicației
* fișierul README: acest fișier---