Jakub Mateusz Marcowski
Mateusz Łukasz Krakowski
Stworzyliśmy aplikację realizującą ewolucję sztucznych pojazdów. W tym celu skorzystaliśmy z algorytmu ewolucyjnego z selekcją turniejową i mutacją gaussowską. Samochód składa się z dwóch kół oraz szkieletu.
W skład genomu pojazdu wchodzi:
- rozmiar kół
- rozstawienie wierzchołków w szkielecie samochodu
- gęstość kół
- gęstość szkieletu samochodu
Funkcjonalność w pełni zrealizowana, hiperparametry mutacji możemy zmienić w pliku config/EvolutionaryAlgorithmConfig.cc. Jeśli chcemy wymusić przejście do następnej generacji, możemy kliknąć przycisk "N".
Generator samochodzików z możliwością zmiany parametrów samochodzika (prędkość zadana, maksymalna gęstość, minimalna gęstość)
Samochodziki generowane są na podstawie chromosomu jaki podamy do generatora samochodzików. Maksymalne i minimalne wartości atrybutów chromosomu możemy zmieniać w config/EvolutionaryAlgorithmConfig.cc, natomiast prędkość zadaną samochodzika można zmienić w config/CarConfig.cc.
Mapa jest generowana losowo, hiperparametry generatora można zmieniać w pliku config/EvolutionaryAlgorithmConfig.cc.
Do realizacji tej funkcjonalności wybraliśmy algorytm ewolucyjny z mutacją gaussowską i selekcją turniejową. Hiperparametry algorytmu takie jak maksymalne i minimalne wartości atrybutów chromosomu, parametry inicjalizacji i mutacji chromosomu, liczbę uczestników turnieju itd. możemy zmieniać w config/EvolutionaryAlgorithmConfig.cc.
Funkcjonalność włączamy lub wyłączamy zmieniając stałą SAVE_TO_FILE w pliku config/Config.cc, możemy również zmienić ścieżkę pliku, w którym zapisywane mają być dane chromosomów.
Dodatkowo postanowiliśmy wprowadzić do programu rysowanie wykresu prędkości i obecnej pozycji samochodzików.
Postępuj zgodnie z tym, co zawarte w pliku README.md.
Następujące klawisze odpowiadają za:
- "Q" - wyjdź z programu
- "N" - wymuś przejście do następnej generacji
- "P" - zatrzymaj symulację, ponowne kliknięcie wznawia symulację
EvolutionaryAlgorithm to klasa odpowiedzialna za ewolucję chromosomów. Do populacji dostajemy się przez funkcję getPopulation(), gdy kończymy iterację symulacji to podajemy fitness każdego z chromosomów przez funkcję setFitness(), a następnie wykonujemy nextStep().
W pliku Shape.h zdefiniowane są struktury potrzebne do symulacji, takie jak Box, Circle i Polygon.
Po lewej planowany czas, po prawej czas faktycznie spędzony
-
Planowanie (10h -> 10h):
- Wybór odpowiednich bibliotek 2h -> 2h
- Rozpisanie zadań 6h -> 6h
- Podział odpowiedzialności 2h -> 2h
-
Szkielet aplikacji (24h -> 36h):
- Zapoznanie się z biblioteką 2DBox 8h -> 12h
- Stworzenie dema aplikacji 16h -> 24h
-
Implementacja samochodzika (24h -> 36h):
- Klasa samochodzika 12h -> 18h
- Koło 4h -> 6h
- Szkielet 4h -> 6h
- Generator samochodzików na podstawie podanego genomu 4h -> 6h
- Klasa samochodzika 12h -> 18h
-
Implementacja mapy (20h -> 28h):
- Mapa 8h -> 12h
- Podłoże 4h -> 4h
- Generator mapy 8h -> 12h
- Mapa 8h -> 12h
-
Implementacja algorytmu ewolucyjnego (32h -> 31h):
- Klasa przechowująca populację 8h -> 12h
- Funkcja inicjalizująca populację 2h -> 3h
- Funkcja oceniająca samochód 6h -> 8h
- Mechanizm selekcji 8h -> 4h
- Mechanizm mutacji (mutacja gaussowska) 8h -> 4h
- Mechanizm eksportowania danych samochodzików do zewnętrznego pliku 8h -> 10h
- Rysowanie wykresów 0h -> 16h
Według naszych pozytywnych estymacji, projekt powinien potrwać 118 godzin, po 59 godzin na członka zespołu. Faktycznie nad projektem spędziliśmy 167 godzin.
sh install_packages.sh
mkdir build
cd build
cmake ..
make
./EvoRacer
./Test
test coverage: sh test_coverage.sh (plik index.html w CodeCoverageReport)
Przyciski:
- 'Q' - wyjście z programu
- 'P' - pauza
- 'N' - następna generacja
najlepiej użyć skryptu sh install_packages.sh (z tego katalogu)
Aby zainstalować paczki użyj komendy sudo apt-get install <package_name>
Potrzebne będą:
- Box2d -
libbox2d-dev(2.4.1-2ubuntu1) - Gtest -
libgtest-dev(1.8.0-6) - cmake -
cmake(3.22.1-1ubuntu1) - build-essential -
build-essential(12.8ubuntu1)ls - ImGui -
libimgui-dev - sfml -
libsfml-dev - udev -
libudev-dev - freetype -
libfreetype-dev - xrandr
libxrandr-dev - x11
libx11-dev
wykonaj skrypt sh fresh_build.sh (z tego katalogu)
- Upwenij się że pobrałeś wszystkie paczki
mkdir buildcd buildcmake ..make- Plik wykonawczy:
./EvoRacer - Testy:
./Test
Ostatni test coverage znajdue się w katalogu CodeCoverageReport, plik index.html Aby stowrzyć raport z pokrycia testami należy:
-
zaisntalować lcov
sudo apt-get install lcov -
Użyć skryptu z tego katalogu
sh test_coverage.sh -
Otworzyć plik
index.htmlw przeglądarce internetowej, znajdujący się w katalogu CodeCoverageReport
