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.