Próbuję zaimplementować algorytm AI dla Bomberman. Obecnie mam działającą, ale niezbyt inteligentną, podstawową implementację (obecna sztuczna inteligencja jest nadgorliwa w rozmieszczaniu bomb).
To jest pierwsza sztuczna inteligencja, jaką kiedykolwiek próbowałem wdrożyć i jestem trochę utknięty. Bardziej wyrafinowane algorytmy, które mam na myśli (te, które spodziewam się podejmować lepsze decyzje), są zbyt skomplikowane, by stanowić dobre rozwiązania.
Jakie masz ogólne wskazówki na temat wdrażania sztucznej inteligencji Bomberman? Czy istnieją radykalnie różne podejścia do uczynienia bota bardziej defensywnym lub ofensywnym?
Edycja: bieżący algorytm
Mój obecny algorytm wygląda mniej więcej tak (pseudo-kod):
1) Spróbuj umieścić bombę, a następnie znajdź komórkę bezpieczną od wszystkich bomb, w tym właśnie właśnie umieszczoną. Aby znaleźć tę komórkę, iteruj w czterech kierunkach; jeśli możesz znaleźć bezpieczną rozbieżną komórkę i dotrzeć do niej na czas (np. jeśli kierunek jest w górę lub w dół, poszukaj komórki znajdującej się po lewej lub prawej stronie tej ścieżki), to bezpiecznie jest umieścić bombę i przenieść w tym kierunku.
2) Jeśli nie możesz znaleźć i bezpiecznie rozbieżnych komórek, spróbuj NIE umieszczać bomby i spójrz ponownie. Tym razem musisz poszukać bezpiecznej komórki tylko w jednym kierunku (nie musisz się od niej odchylać).
3) Jeśli nadal nie możesz znaleźć bezpiecznej komórki, nie rób nic.
for $(direction) in (up, down, left, right):
place bomb at current location
if (can find and reach divergent safe cell in current $(direction)):
bomb = true
move = $(direction)
return
for $(direction) in (up, down, left, right):
do not place bomb at current location
if (any safe cell in the current $(direction)):
bomb = false
move = $(direction)
return
else:
bomb = false
move = stay_put
Ten algorytm sprawia, że bot jest bardzo szczęśliwy z wyzwalaczem (bardzo często umieszcza bomby). Nie zabija się, ale ma zwyczaj narażania się na niebezpieczeństwo, przechodząc w ślepe zaułki, gdzie może zostać zablokowany i zabity przez innych graczy.
Czy masz jakieś sugestie dotyczące ulepszenia tego algorytmu? A może powinienem spróbować czegoś zupełnie innego?
Jednym z problemów związanych z tym algorytmem jest to, że ma on tendencję do opuszczania bota z bardzo małą liczbą (często tylko jedną) bezpiecznych komórek, na których może on stać. Wynika to z faktu, że bot pozostawia za sobą ślad bomb, o ile sam się nie zabije.
Jednak pozostawienie śladu bomb pozostawia niewiele miejsc, w których można się schować. Jeśli jeden z pozostałych graczy lub botów zdecyduje się na umieszczenie bomby gdzieś w pobliżu, często zdarza się, że nie ma się gdzie ukryć i umrzeć.
Potrzebuję lepszego sposobu, aby zdecydować, kiedy umieścić bomby.
Odpowiedzi:
Problem, przed którym stoisz, polega na tym, że twoja sztuczna inteligencja nigdy nie przestaje podejmować inteligentnej decyzji, gdzie powinna umieścić następną bombę, co powoduje, że po prostu zrzuca bomby, kiedy tylko jest to możliwe, a następnie wypracowuje „cholera, cholera, co mam teraz robić! ?
Zatrzymuję się, by pomyśleć
W tej chwili twoja sztuczna inteligencja po prostu wędruje do nikąd. Czasami jednak powinno faktycznie zmierzać do celu. Na przykład, jeśli zobaczy ulepszenie i myśli, że może go dosięgnąć przed graczem, być może powinien znaleźć bezpieczną ścieżkę do tego kafelka i przenieść się tam, uważając na bomby i unikając ich po drodze.
To samo zachowanie przejścia do celu można zastosować, gdy zastanawia się, gdzie umieścić następną bombę .
Kiedy twoja sztuczna inteligencja może umieścić bombę, zamiast zrobić to natychmiast, powinna krótko skorzystać z algorytmu wyszukiwania, aby wybrać z dostępnych miejsc do umieszczenia bomby na podstawie kryteriów takich jak:
Po podjęciu tej decyzji AI wybrało miejsce do umieszczenia bomby i miejsce, w którym mógł się ukryć przed eksplozją. Może teraz podejść do miejsca, umieścić bombę, a następnie przejść do kryjówki. Gdy dotrze do swojej kryjówki, może chcieć iść dalej i znajdować lokalizacje bomb (jeśli ma wiele bomb), pod warunkiem, że pamięta, aby trzymać się z daleka od bomby, którą tutaj chodził.
Podczas chodzenia i znalezienia bezpiecznej ścieżki
Możesz opracować dla swojej AI pojedynczą metodę walk-to-point i używać jej za każdym razem, gdy chcesz, aby gdzieś chodziła. Ta metoda może wykorzystać algorytm wyszukiwania A * do znalezienia swojej ścieżki.
Aby zabezpieczyć AI, możesz sprawić, by sprawdzała swoją ścieżkę za każdym razem, gdy umieszczana jest nowa bomba. Aby uniknąć eksplozji, może sprawdzić czas do wybuchu bomby i rozważyć potencjalną bezpieczną płytkę wybuchu, jeśli bomba nie wybuchnie podczas przechodzenia przez tę płytkę - i jeśli nie jest bezpieczna, potraktuj ją jako płytkę nieprzejezdną .
Aby podać swoje błędy AI (aby czasami mogły zostać wysadzone w powietrze), powinien popełniać błędy obliczeniowe: zapomnieć o bombie bezmyślnie, nie doceniać wielkości eksplozji lub czasu wybuchu bomby itp.
Uwaga dodatkowa: Możesz również sprawić, że losowe chodzenie wydaje się bardziej celowe, losowo wybierając miejsca, do których chcesz iść, lub zawsze mając na uwadze nowe miejsce umieszczenia bomby, do którego chcesz iść, zamiast po prostu losowo wybrać sąsiadującą płytkę, do której wędrujesz. W ten sposób nie będzie błąkać się tam iz powrotem w tym samym miejscu, jakby nie mógł się zdecydować.
źródło