Jak powinienem wymienić A *?

10

Mam wroga bossa szukającego ścieżki, który szuka gracza za pomocą algorytmu A *. Jest to dość złożone środowisko i robię to we Flashu, więc wyszukiwanie może być nieco wolniejsze, gdy przeszukuje duże odległości. Gdyby odtwarzacz był nieruchomy, mógłbym wyszukać tylko raz, ale w tej chwili szukam każdej klatki. Trwa to wystarczająco długo, że cierpi mój klatek na sekundę.

Jakie jest zwykle to rozwiązanie? Czy istnieje sposób na „przeplanowanie” A * bez ponawiania całego wyszukiwania? Czy powinienem po prostu przeszukiwać trochę rzadziej (co pół sekundy lub sekundę) i zaakceptować, że na ścieżce będzie trochę niedokładności?

Gregory Avery-Weir
źródło

Odpowiedzi:

13

Nie musisz przeszukiwać całej ścieżki w jednej ramce, zrobiłem to, ograniczając pętlę wyszukiwania, sztuczna inteligencja zacznie wtedy podążać za niewielkimi informacjami, które ma, a następną ramkę przeszukam jeszcze , znalezienie ścieżki może zająć 3 klatki. Może wyglądać dość przekonująco, ponieważ wygląda na to, że sztuczna inteligencja faktycznie szuka.

PhilCK
źródło
+1. Tak też opisuje Mat Buckland w swojej książce AI. Nazywa to „planowaniem ścieżek czasowych” ( books.google.ch/… ). Dobry towar.
bummzack
8

Możesz użyć wykrywania bliskości, aby uruchomić algorytm co kilka klatek, jeśli odległość jest bardzo duża (ponieważ w większości przypadków, jeśli odległość jest duża, ścieżka docelowa nie zmieni się drastycznie z klatki na klatkę). Na przykład:

      Distance > 100, run A* every 2 seconds
100 > Distance >  50, run A* every 1 second
50  > Distance >  25, run A* every 10 frames
25  > Distance <  25, run A* every frame

Zakłada się, że istnieje odległość, w której uruchomienie A * każdej klatki ma wydajność, która jest nadal akceptowalna. Krótko mówiąc, wybrałbym drugą opcję. Zwłaszcza jeśli to, co masz, działa, unikałbym ponownego wdrożenia czegoś innego, gdybym mógł po prostu przeskalować to, co działa dobrze. Najważniejsze jest to, że musisz go wypróbować, aby sprawdzić, czy działa w twojej grze.

Nate
źródło
8

Nie odpowiadając dokładnie na twoje pytanie, ale ... jeśli chcesz „oszukiwać”, możesz sprawić, że gracz opuści „bułkę tartą” i poprosi szefa, by za nimi podążał. Jeśli ścieżka bułki tartej przecina się sama, postępuj zgodnie z najnowszą (powoduje to, że boss omija pętle i inne ścieżki, które mogą być za długie, nie wspominając o tym, że nie podąża dokładnie ścieżką gracza)

To by działało dobrze, gdyby szef był jakimś zwierzęciem o dobrym węchu. To działałoby podobnie jak podążanie za zapachem odtwarzacza :)

ggambett
źródło
5

Twoja sprawa jest w zasadzie tym, czym HPA * został wymyślony. Jeśli jednak wydaje się to przesadne, zwykle uważam, że odnajdywanie ścieżek co pół sekundy powinno się udać.

chaos
źródło
4

Jeśli jest to środowisko statyczne, możesz wstępnie obliczyć najkrótszą ścieżkę dla wszystkich par.

Peter Taylor
źródło
2
Jeśli jest to małe środowisko statyczne.
Zależy od dostępnej platformy i pamięci.
Nate
@Joe, @Nate, true.
Peter Taylor,
2

Stworzyłem grę na 48 rozgrywek, w której postać A * podąża za graczem wokół poziomu. Ponieważ moja implementacja A * była powolna (nie mogła uruchomić każdej ramki), ustawiłem interwał z 3-sekundowym opóźnieniem. Miało to niezamierzony efekt polegający na tym, że gracz mógł „oszukać” sztuczną inteligencję przez kilka chwil. To sprawiło, że gra była przyjemniejsza.

Później poprawiłem wydajność implementacji A * i próbowałem uruchomić ją na każdej ramce. Gra przestała być zabawna, ponieważ wróg zawsze doskonale szukał gracza.

To było nieoczekiwane i dobre doświadczenie edukacyjne.

GloryFish
źródło
1
Trafne spostrzeżenie. Pamiętam, jak czytałem o znajdowaniu ścieżek w pac-man, gdzie celowo zastosowali niedoskonały algorytm, pozwalając graczowi przechytrzyć duchy. Każdy duch miał nieco inną niedoskonałość, dzięki czemu zyskał więcej charakteru. Jedyną zaletą jest to, że w grach zabawa> wszystko inne.
Nick Van Brunt
0

O ile absolutnie nie chcesz (lub nie potrzebujesz) używać A *, możesz także zapoznać się z Zachowaniami Sterowania . Ponieważ nie ma pełnego planowania ścieżki dla każdej klatki, przetwarzanie powinno być znacznie lżejsze.


źródło
Używam zachowań sterujących (szczególnie Poszukiwania) w przypadkach, gdy nie ma przeszkód między agentem a jego celem. Niestety moje środowisko zawiera takie rzeczy, jak kręte korytarze, w których konieczne jest inteligentniejsze rozwiązanie.
Gregory Avery-Weir