Zaktualizuj 'LechT.md'

This commit is contained in:
Tomasz Lech 2020-05-19 19:23:17 +00:00
parent 2d98954114
commit cef5c23ed0

View File

@ -4,12 +4,12 @@
### Omówienie projektu ### Omówienie projektu
Celem projektu jest znalezienie najoptymalniejszej drogi między zajętymi regałami a miejscami odbioru paczki. Celem projektu jest znalezienie najbardziej optymalnej drogi między zajętymi regałami a miejscami odbioru paczki.
Projekt wykorzystuje wcześniej opracowany algorytm AStar, który jest opisany w pliku [route-planning](https://git.wmi.amu.edu.pl/s444399/AI/src/master/route-planning.md). Projekt wykorzystuje wcześniej opracowany algorytm AStar, który jest opisany w pliku [route-planning](https://git.wmi.amu.edu.pl/s444399/AI/src/master/route-planning.md).
Moduł podprojektu uruchamia się po uruchomieniu programu oraz kliknięciu **g** na klawiaturze. Omawiany moduł genetyczny podprojektu w dalszej części raportu będzie się pojawiał w skrócie jako **mdg**. Moduł podprojektu uruchamia się po uruchomieniu programu oraz naciśnięciu **g** na klawiaturze. Omawiany moduł genetyczny podprojektu w dalszej części raportu będzie się pojawiał w skrócie jako **mdg**.
### Opis składowych elementów wykorzystanych w **mdg** ### Opis składowych elementów wykorzystanych w **mdg**
* Gen - jest to najmniejszy wykorzystywany obiekt, reprezentujący zajęty regał, kóry ma określony koszt do danego miejsca odbioru * Gen - jest to najmniejszy wykorzystywany obiekt, reprezentujący zajęty regał, kóry ma określony koszt do danego miejsca odbioru paczki.
* Chromosom - jest to uporządkowany zbiór Genów, który reprezentuje kolejność odbioru paczek, końcowa długość wynika z ilości paczek na magazynie. * Chromosom - jest to uporządkowany zbiór Genów, który reprezentuje kolejność odbioru paczek, końcowa długość wynika z ilości paczek na magazynie.
* Populacja - jest to zbiór chromosomów. * Populacja - jest to zbiór chromosomów.
* Funkcja fitness - funkcja obliczająca całkowity koszt chromosomu. * Funkcja fitness - funkcja obliczająca całkowity koszt chromosomu.
@ -20,11 +20,11 @@ Moduł podprojektu uruchamia się po uruchomieniu programu oraz kliknięciu **g*
### Dane wejściowe ### Dane wejściowe
Podane przez urzydkownika przed uruchomieniem programu: Podane przez użytkownika przed uruchomieniem programu:
* ileGeneracji - wartość, która definiuje ile generacji ma się wykonać po uruchomieniu modułu **mdg**, * ileGeneracji - wartość, która definiuje ile generacji ma się wykonać po uruchomieniu modułu **mdg**,
* ileWPopulacji - wartość, która definiuje ile chromosomów ma się znajdować w Populacji * ileWPopulacji - wartość, która definiuje ile chromosomów ma się znajdować w Populacji
* fragment - wartość z zakresu (0,1), która względnie do długości chromosomu określa fragment, który będzie dziedziczony, przy tworzeniu nowego chromosomu. * fragment - wartość z zakresu (0,1), która zależnie do długości chromosomu określa część, która będzie dziedziczon. przy tworzeniu nowego chromosomu.
* mutacja - wartość z zakresu (0,1), która określa jaka część nowo tworzonego chromosomu, po dziedziczeniu, ma zostać losowo zmieniona. * mutacja - wartość z zakresu (0,1), która określa jaka część nowo tworzonego chromosomu, po dziedziczeniu, ma zostać losowo zmieniona.
* unbox - wartość określająca do jakiego miejsca odbioru ma się kierować wózek * unbox - wartość określająca do jakiego miejsca odbioru ma się kierować wózek
<br/> <br/>
@ -35,7 +35,7 @@ Podane przez urzydkownika przed uruchomieniem programu:
<br/><br/> <br/><br/>
Po uruchomieniu programu: Po uruchomieniu programu:
* generowanie losowo rozmieszczonych paczek na regałach - za przycisku **r** na klawiaturze. * generowanie losowo rozmieszczonych paczek na regałach - po naciśnięciu **r** na klawiaturze.
### Integracja ### Integracja
@ -48,7 +48,7 @@ Uruchomienie **mdg**:
if event.key == pygame.K_g: if event.key == pygame.K_g:
start(self.data,self.wheel) start(self.data,self.wheel)
Po zakończeniu algorytmu, uruchaminy modul który rozwiezie paczki do miejsca odbioru: Po zakończeniu algorytmu, uruchamiamy moduł, który rozwiezie paczki do miejsca odbioru:
for gen in self.data.best[0]: for gen in self.data.best[0]:
if(gen.unboxWczesniejszegoGenu == None): if(gen.unboxWczesniejszegoGenu == None):
@ -85,7 +85,7 @@ Po zakończeniu algorytmu, uruchaminy modul który rozwiezie paczki do miejsca o
rysujWykres(data, ileGeneracji, 0, 2000) rysujWykres(data, ileGeneracji, 0, 2000)
W celu modyfikacji danych wejściowych należy zmienić wartości zmiennych, pamiętając o podanych powyrzej ograniczeniach. W celu modyfikacji danych wejściowych należy zmienić wartości zmiennych, pamiętając o podanych powyżej ograniczeniach.
Powyżej fragment kodu reprezentujący działanie pętli, której iteracje odpowiadają tworzeniom nowych generacji. Powyżej fragment kodu reprezentujący działanie pętli, której iteracje odpowiadają tworzeniom nowych generacji.
@ -169,7 +169,7 @@ Odpowiednio:
populacja.append(genRandomChromosome(data)) populacja.append(genRandomChromosome(data))
return populacja return populacja
Odpowiednio: Odpowiednio:
* Dla podanej wartości *ileWPopulacji* funkcja generuje losową populację wykorzystując metodę losowego chromosomu, wykonując tyle iteracji ile wynosi wartość. * Dla podanej wartości *ileWPopulacji* funkcja generuje losową populację, wykonując tyle iteracji ile wynosi wartość.
#### Selekcyjny wybór najlepszych chromosomów z pośród populacji na podstawie funkcji fitness #### Selekcyjny wybór najlepszych chromosomów z pośród populacji na podstawie funkcji fitness
*W pliku genetyczne.py* *W pliku genetyczne.py*
@ -201,7 +201,7 @@ Odpowiednio:
Odpowiednio: Odpowiednio:
* Zmienna *koszt* jest sumą całkowitą kosztów przejechania trasy. * Zmienna *koszt* jest sumą całkowitą kosztów przejechania trasy.
* Pętla *for* iteruje się tyle razy ile jest genów w chromosomie. * Pętla *for* iteruje się tyle razy ile jest genów w chromosomie.
* W pierwszej iteracji koszt jest liczony dla pierwszego genu w chromosomie wywołując AStar, z pozycji początkowej wózka do miejsca regału. * W pierwszej iteracji koszt jest liczony dla pierwszego genu w chromosomie wywołując AStar, z pozycji początkowej wózka, do miejsca regału.
* Dla reszty iteracji jest sprawdzane do którego unboxa będzie jechać wózek, i taka wartość kosztu jest dodawana co całkowitej sumy oraz koszt przejechania od unboxa poprzedniego genu do regału (zmienna *unboxPoprzedniegoGenu*) * Dla reszty iteracji jest sprawdzane do którego unboxa będzie jechać wózek, i taka wartość kosztu jest dodawana co całkowitej sumy oraz koszt przejechania od unboxa poprzedniego genu do regału (zmienna *unboxPoprzedniegoGenu*)