Kezdőoldal » Számítástechnika » Programozás » Genetikus algoritmust szeretné...

Genetikus algoritmust szeretnék írni, ami megoldja a snakehez hasonló játékomat, de nem tanul semmit. Mit tegyek, hogy menjen?

Figyelt kérdés

Szóval a játék annyi, hogy van egy mátrixom(pályám) 0-osal és 1-essel feltöltve és megvan a karakter poziciója(x és y). Ha a karakter poziciója 1-es akkor meghalt, mivel falnak ütközött, ha 0 éli tovább életét, ha viszont 2 (amiből egy van a mátrixba) akkor kapott egy pontot és random megint a pályára kerül egy kettes(tehát egy pont).


Neuron hálozatom már van, nyolc bemeneti paraméter, a négy irányba a faltól(tehát egyestől) való távolsága és a ponttól való távolsága. Van valamennyi rejtett réteg valamennyi neuronnal rétegenként(nem tudom mennyi kéne pontosan) és 4 kimeneti neuron, ami a négy irányt jelzi.


Ugyebár a genetikus algoritmus annyiból áll, hogy populáció mérete szerint létrehozok x hálozatot random súlyokkal - Ez megvan.

Lefuttatom az összeset míg meg nem hal(akkor is meghalt ha 50-et lépett pont nékül) - Ez is megvan.


Fitness function egyelőre csak annyi, hogy amelyik több pontot szerez az megmarad.


Hogyan alkotom meg a következő generációt?:

Hány legjobb egyedet kell kiválasztani, pl ha 100 egyedből kiválasztom a legjobb 10-et, páronként kereszteznem kell őket, majd mutálnom kis eséllyel az összeset? De akkor mi lesz a többi kilencvennel?

Keresztezésnél jól értettem ,hogy a súlyokat cserélgetem össze? Ha igen akkor ezt az összes párnál ugyanazon minta alapján kell(pl sulyok elso fele mara, masadik fele cserélődik), vagy mindig véletlenszerűen?


Tudom sok kérdés, lehet fele teljesen nonsens, de kb egy hónapja még neuron hálozatotról sem tudtam semmit, mégis sikerült megértenem és megírnom még a backpropagationt is(amit itt nem tudok használni, de nem is akarok). Nagyon szeretnék már egy saját ilyen kezdetleges AI-t és ezért kérem a segítségeteket.


Előre is köszönöm minden válaszolónak!



2020. ápr. 22. 10:09
1 2
 11/13 A kérdező kommentje:

Köszönöm szépen, sokat segítettél. Szerintem azt fogom csinálni hogy nem párosítom az összeset, hanem csak a felét, akik nem parosodtak azok kiesnek (természetes kiválasztódás) és az új generációba a kivalasztott szülők és utódai maradnak, ha véletlenül az utódok eleg felresikerultek lettek akkor a szulok ne vesszenek el(de letesztelem majd mindkét módszert).

Viszont van még egy probléma, ha a súlyokat veszem az egyed dns-ének és azokat keresztezem akkor elég nagy zavar lesz a hálózatba, szinte mintha újabb random halozatot hoztam volna létre. Erre nincs valami más módszer? (Lehet hogy rosz nagyságrendű súlyokat használok, de elozo crossoveres kiserletembe 10000 generacio utan se tanult semmit)

2020. ápr. 24. 08:28
 12/13 anonim ***** válasza:

Az a modszer is valoszinuleg mukodik, ha a populacio fele marad, es a masik fele uj.

Azt mar irtam, hogy a crossovernel a dns-nek mindig egy folytonos szakaszat masold! Igy a mar mukodo halozatdarabkak tobbe-kevesbe egyben maradnak, es igy nem lesz teljesen random uj halozatod.

Ha nagyon nem tanul, akkor a halozatmerettel lehet gond, vagy a sulyokkal, a nemlinearis fuggvenyeddel, a kimenettel, vagy barmi massal. Van a programnak valami kimenete, ahol latszik, hogy mit csinal az AI szimulacio kozben?


Ja, es igen, van jobb modszer, de eleg bonyolult algoritmusrol van szo: ilyen a NEAT ( [link] ). [link]

2020. ápr. 24. 13:24
Hasznos számodra ez a válasz?
 13/13 A kérdező kommentje:
Nemsokára befejezem a programot a javaslataid alapján. Megjelenítettem az elején az szimulációt, hogy leellenőrizzem, hogy azt csinálja-e amit kell. Ezt később kivettem, és csak pl 500 generáció után jelenítem meg(hanem nagyon lassu lenne). Későbbiekben megcsinálom, hogy ha pl nyomva tartom a spacet akkor ne mutassa, futassa le a generációkat jó gyorsan s ha elengedem akkor mutatja meddig jutott.
2020. ápr. 24. 15:09
1 2

Kapcsolódó kérdések:




Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!