Daje inteligentne rozmieszczenie bomb AI Bomberman

13

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.

Paul Manta
źródło
Trudno wymyślić coś, co działa w 100% nieoczekiwanie. Ale może dodając algorytm, który obecnie masz, wszyscy możemy pomóc w stopniowym ulepszaniu go. Prawdopodobnie nie jesteś pierwszym hobbystą, który próbuje wdrożyć sztuczną inteligencję Bomberman, a znalazłem sporo konkursów AI Bomberman z losową wyszukiwarką Google, która może okazać się dla ciebie nieocenionym źródłem informacji.
Roy T.
Myślę, że możesz uogólnić sztuczną inteligencję bombermana na dwie rzeczy: 1) próbując uchronić się przed bombardowaniem przez bomby innych graczy 2) umieszczanie bomb na planszy, aby spowodować śmierć innych (zachowując zasadę 1): aby uniknąć wybuchu / uwięziony przez własne bomby).
tigrou
Prawdopodobnie byłoby lepiej, gdybyś opublikował przynajmniej ogólny przegląd swojej obecnej implementacji (zakładając, że jest to dużo kodu), a być może pomożemy Ci rozwiązać problem polegający na nadgorliwym rozmieszczaniu bomb.
Tetrad
@Tetrad Jestem w trakcie wdrażania nowego algorytmu. Zobaczę, jak to działa, i opublikuj tutaj algorytm, jeśli to konieczne.
Paul Manta,
chociaż nie jest to prawdziwa wskazówka, ale możesz spojrzeć na kod clanbomber . jest to gra na wiele sposobów podobna do bombermana.
Ali1S232,

Odpowiedzi:

4

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:

  • Czy to jest w pobliżu? (aby nie przechodził do ukośnego przeciwnego rogu mapy za każdym razem, gdy chce umieścić bombę)
  • Czy jest miejsce, w którym mogę ukryć się przed wybuchem - i czy mogę się tam dostać, zanim bomba wybuchnie?
  • Czy eksplozja wysadzi płytki i da mi wzmocnienia?
  • Czy potencjalnie zaatakuje gracza? (łatwiejsza sztuczna inteligencja może tego uniknąć we wczesnej fazie gry, agresywna sztuczna inteligencja będzie dążyć do tego - nie zapominając o ulepszeniach)

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ć.

doppelgreener
źródło
Zapomniałem podać kilka istotnych szczegółów na temat gry. To uproszczona wersja Bombermana: bez ulepszeń, gracze zawsze mogą umieszczać nieograniczoną liczbę bomb, a bomby zawsze mają maksymalny zasięg (od jednego końca mapy do drugiego). System punktów też jest inny ... [kont.]
Paul Manta
[cd.] Dostajesz 1 punkt za umieszczenie bomby, ale 0 punktów za zniszczenie ściany. Dostajesz także 30 punktów za zabicie, 15 za asystę i -20 za samobójstwo. [kont.]
Paul Manta
] Trzeba uważać, aby zawsze mieć bezpieczne miejsce, do którego można się udać. [kont.]
Paul Manta
[cd.] Czy uważasz, że wybierając kierunek, wystarczy wybrać ten, który prowadzi do bezpiecznego obszaru . Zamiast szukać bezpiecznej komórki, szukałbym największej bezpiecznej strefy, dzięki czemu mógłbym ukryć się przed bombami również innych graczy, nie tylko moich. Czy dobrym pomysłem byłoby faworyzowanie wskazówek, które przybliżą mnie do jednego z pozostałych graczy?
Paul Manta
3
Więc nie mówimy wcale o Bombermanie i jego sztucznej inteligencji! Chodzi o grę z bombami, która na pozór przypomina Bombermana, ale pod maską jest zupełnie inna i zachęca do bycia wyzwalaczem. Szczęśliwy szaleńca , a ja mam znacznie mniejsze doświadczenie w tej grze.
doppelgreener