Piotr Rychlicki - RAPORT
This commit is contained in:
parent
445b6098ee
commit
464e085ecd
61
geneticalgorithm.md
Normal file
61
geneticalgorithm.md
Normal file
@ -0,0 +1,61 @@
|
||||
# Sztuczna Inteligencja - Raport 3
|
||||
|
||||
**Członkowie zespołu:** Marcin Kwapisz, Kamila Matysiak, Piotr Rychlicki, Justyna Zarzycka
|
||||
|
||||
**Temat podprojektu:** Szukanie najkrótszej trasy za pomocą algorytmu genetycznego
|
||||
|
||||
**Autor podprojektu:** Piotr Rychlicki
|
||||
|
||||
|
||||
### Algorytm genetyczny
|
||||
|
||||
**Algorytm genetyczny** jest jednym z algorytmów służących do optymalizacji rozwiązania pewnego problemu. Sprawdza się on najlepiej wówczas, gdy nie jest znany lub ściśle określony prosty sposób rozwiązania problemu, a także gdy stosunkowo trudno otrzymać najlepsze rozwiązanie, lecz gdy łatwo można ocenić jakość otrzymanego rozwiązania i je zaakceptować.
|
||||
Ogólna zasada działania algorytmu (który w kolejnej części zostanie dokładniej omówiony) polega na wygenerowaniu zbioru potencjalnych rozwiązań, które następnie podlegają ocenie. Spośród nich wybierane są te najlepsze, by potem za pomocą operacji genetycznych stworzyć nową grupę, które ponownie przejdzie przez ten cykl. Wynikiem działania takiego algorytmu powinno być otrzymanie optymalnego rozwiązania, spełniającego warunek zakończenia działania algorytmu.
|
||||
|
||||
### Problem
|
||||
|
||||
W tym podprojekcie algorytm genetyczny został użyty do szukania optymalnej trasy przejazdu agenta (dalej zwanego traktorem) przez wszystkie pola danego typu począwszy i skończywszy na polu startowym (o współrzędnych **(0,0)**).
|
||||
Po uruchomieniu programu, w swoim środowisku traktor zastaje określoną konfigurację pól, z których każde (pole nienawodnione, zachwaszczone, niezasadzone, gotowe do zbiorów) występuje określoną liczbę razy. Naturalnym jest, by traktor wykonując określone zadanie (np. zebranie plonu z pola), przemieszczając się między różnymi polami, zrobił to jak najmniejszym kosztem. Stąd też idea i potrzeba właśnie takiego zastosowania algorytmu genetycznego.
|
||||
Ten problem, nazywany problemem komiwojażera, należy do problemów NP-zupełnych, czyli takich, które pomimo prostego ich zdefiniowania, są bardzo czasochłonne do rozwiązania. Dla liczby pól z warzywami, na których testowałem swój algorytm i których jest w środowisku testowym 13, liczba potencjalnych rozwiązań wynosi 12!, czyli 479001600 możliwych tras.
|
||||
Algorytm genetyczny, z powodów wymienionych na początku raportu, jako rodzaj algorytmu heurystycznego (oferującego rozwiązanie przybliżone do idealnego), sprawdza się przy problemie komiwojażera bardzo dobrze.
|
||||
|
||||
### Pojęcia
|
||||
|
||||
* Osobnik - pojedyncze rozwiązanie problemu
|
||||
* Populacja - zbiór osobników, którymi operuje algorytm
|
||||
* Pokolenie - populacja przetwarzana w jednej iteracji algorytmu
|
||||
* Genotyp - to informacja dziedziczna, którą zawiera pojedynczy osobnik
|
||||
* Gen - to najmniejszy element informacji zawarty w genotypie
|
||||
|
||||
### Algorytm
|
||||
|
||||
```
|
||||
def main(self):
|
||||
self.algorytm_genetyczny()
|
||||
self.wykonanie_trasy()
|
||||
```
|
||||
|
||||
Cały algorytm jest wykonywany w funckji self.algorytm_genetyczny, natomiast funkcja self.wykonanie_trasy odpowiada integrację podprojektu w projekcie, realizując wyznaczoną przez algorytm trasę wraz z odpowiednią akcją agenta.
|
||||
|
||||
```
|
||||
self.pola_buraczane = self.wspolrzedne()
|
||||
```
|
||||
|
||||
Pierwszy krokiem całego programu jest wyznaczenie współrzędnych pól, przez które będziemy chcieli przejść w najkrótszej trasie. Współrzedne te są reprezentowane macierzą zawierającą liczby dwucyfrową [0,99]: np. pole 32 oznacza współrzędne [2,3].
|
||||
|
||||
```
|
||||
self.koszt_trasy = self.koszt_przejazdu(self.znalezione_pola)
|
||||
```
|
||||
|
||||
Następnie wyznaczany jest pierwotny koszt trasy wiodącej przez wszystkie pola danego typu w porządku rosnącym (z góry na dół i z prawa na lewo).
|
||||
|
||||
Poniżej przestawiony został już właściwy algorytm:
|
||||
|
||||
```
|
||||
|
||||
```
|
||||
|
||||
|
||||
```
|
||||
|
||||
```
|
Loading…
Reference in New Issue
Block a user