Projektowanie sztucznej inteligencji Snake'a


9

Jestem nowy w tej zmianie stosu gamedev, ale wcześniej korzystałem ze stron matematyki i cs.

Tak więc biorę udział w konkursie na stworzenie sztucznej inteligencji dla węża, który będzie konkurował z czterema innymi wężami w 5-minutowych rundach, w których zasady są bardzo podobne do tradycyjnej gry w węża Nokia, z tym wyjątkiem, że jest pięć węży, plansza ma wymiary 30 x 30 i są wiele małych przeszkód na polu.

Podobnie jak gra Nokia, twój wąż rośnie, gdy dojdziesz do owocu, a jeśli wpadniesz na siebie, kolejnego węża lub ścianę, umrzesz. Gra działa z 30 ms opóźnieniem między ruchami, a serwer wysyła nowy stan gry co 50 ms, który kod musi przeanalizować, a co nie, i wyprowadzić następny ruch.

Zwycięzcą zostaje wąż, który miał najdłuższą długość w dowolnym momencie gry. Przerwanie remisu zależy od zabójstw.

Do tej pory zaimplementowałem wyszukiwanie wykresów A * z każdego węża, aby ustalić, czy mój wąż jest najbliżej jabłka, a jeśli tak, to idzie po jabłko. W przeciwnym razie stworzyłem drobny algorytm, aby określić najbardziej opróżniony obszar planszy, do którego dąży mój wąż, aby przewidzieć następne jabłko.

Poza tym mam kilka drobnych testów przeżycia, aby upewnić się, że mój wąż nie wpadnie w pułapkę, której nie może wydostać się, a jeśli utknie, mam coś, co da mu większą szansę na wydostanie się.

...

W każdym razie przetestowałem mojego węża na serwerze testowym i robi to całkiem dobrze. Ogólnie rzecz biorąc, moja strategia polegająca na szukaniu jabłka tylko wtedy, gdy jest to pewne i znajdowaniu przestrzeni, gdy nie jest, sprawia, że ​​rośnie szybciej niż jakiekolwiek inne węże (niektóre węże robią coś podobnego, ale często po prostu przechodzą do środka lub rogu), czasami wygrywa te gry próbne, ale częściej niż ten sam wąż, który wydaje się mieć przewagę nad przeżywalnością (mój wąż rośnie szybciej, ale potem umiera, a ten inny wąż powoli miota i wygrywa z konsekwencją.

Zastanawiałem się więc nad pomysłami, które ktoś mógłby spróbować ulepszyć mojego węża. A może pomysły na nowe podejście. Moje funkcje i klasy są dobre, więc zmiany, które mogą wydawać się drastyczne, nie powinny być takie złe. Zachęcam do wszystkich pomysłów.

jakieś pomysły?

Odpowiedzi:


5

Dobrą strategią obronną może być zrobienie idealnego kształtu (więc twoja głowa i tyłek są zawsze o 1 pole od siebie, a ty wykonujesz pełny kwadrat lub cokolwiek jest możliwe do uformowania na danej długości), to sprawiłoby, że prawie wszystko nieśmiertelny, ponieważ żaden wąż nigdy nie mógłby dostać się do twojego zamkniętego obszaru i nigdy nie wpadniesz na siebie (chyba że jabłko jakoś pojawiło się w twoich ustach, ale wyobrażam sobie, że to niemożliwe, jeśli nie ma miejsca).

To sprawiłoby, że jeśli jabłko rzeczywiście pojawi się w twoim zamkniętym obszarze, możesz zostać zaprogramowany, aby nie iść po niego, a inne węże prawdopodobnie umrą, próbując je zdobyć, a następnie po pewnym czasie możesz dostać to w taki sposób, aby przejść wrócić do swojego kształtu tak dobrze, jak to możliwe (może to być trochę skomplikowany algorytm, ale wydaje się wykonalny)

Kiedy zdecydować się na jabłka, zależy tylko od tego, jak daleko są, być może jeśli jesteś najbliżej z dobrym marginesem, możesz to zrobić, ale w przeciwnym razie zachowaj ostrożność, trudno powiedzieć, że prawdopodobnie trzeba by go poprawić na podstawie prób i błędów , ale myślę, że byłaby to dobra strategia.


1
Zasadniczo jego „wąż” powinien „żółw”. xD +1 dobry pomysł.
Cypher

Dobry. Ale na pokładzie są przeszkody. Zatem inni programiści węży musieli zrobić węże, aby sprawdzić, czy nie ma przeszkody (ściany lub innego węża otaczającego jabłko). Nie mogą przyjść i po prostu umrzeć. Jedną rzeczą, którą można zrobić, aby uniknąć tego problemu, jest znaczne odstępy między głową a ogonem.
Shashwat

hmm ciekawy pomysł, myślę, że mógłbym wdrożyć coś takiego, gdy mój wąż po prostu kręci się wokół i czeka na pojawienie się następnego jabłka. haha, trochę się martwię, że jabłko pojawi się w moich ustach, co spowodowałoby pewne Śmierć i o tych grach często decyduje jedna przedwczesna śmierć
Rawb

@ Ronald Właściwie, jeśli wykryjesz w tarle jabłko w ustach, możesz po prostu obrócić się do wewnątrz, wycofać na zewnątrz i kontynuować, ponieważ AI ma doskonały odruch, tak naprawdę powinno być łatwo go naprawić (a nawet naprawić) na podstawie tego, jak go zaimplementujesz.
Kevin DiTraglia,

0

Wąż powinien dostosować swoją strategię do obecnej długości.

Bardzo długi wąż może wykorzystywać swoje ciało do ogrodzenia przeciwników. Oznacza to, że powinien wykonać pieczęć ze ścianą.

Jeśli wąż podróżuje na wschód, z jabłkiem na północny wschód od niego, powinien jechać aż do ściany, zanim skręci na północ, więc możliwe trasy dla innych węży są poważnie ograniczone.

  0123456789
a ··········
b ··········
c ········A·
d ··········
e ooooooC···
f o·········
g o·········
h oooooooo··
i ··········
j ··········

Ten wąż z głową C powinien skręcić na północ na e9, a nie na e8, aby każdy przeciwnik pod nim został uwięziony i nie był w stanie zjeść żadnych jabłek, które pojawią się powyżej linii „e”.

Im większy obszar, który można odciąć i im dłużej można go trzymać, tym lepiej.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.