Pytanie:
Czy Angry Birds jest deterministyczne?
Thomas Bonini
2011-12-29 22:30:31 UTC
view on stackexchange narkive permalink

Próbując zdobyć 3 gwiazdki na bardziej złożonych poziomach (tych z wieloma możliwymi do zniszczenia bytów) zauważyłem, że nawet po zagraniu tego samego poziomu ponad 50 razy, robiąc zawsze to samo, nigdy nie widziałem tego samego ostateczny wynik. Coś zawsze idzie inaczej.

Czy te same dane wejściowe zawsze dają te same dane wyjściowe, czy też jest tam jakiś czynnik losowy?

Jak możesz mieć pewność, że dane wejściowe są w 100% identyczne?
Doskonałe wejście można uzyskać poprzez emulację telefonu, specjalne programy lub po prostu wersję gry na komputer za pomocą myszy, tak jak zrobił to agent86.
Pięć odpowiedzi:
agent86
2011-12-29 22:47:10 UTC
view on stackexchange narkive permalink

Algorytm jest deterministyczny, ale można się spierać, że ogólny wynik wypuszczenia ptaka jest faktycznie niedeterministyczny , ponieważ opiera się na (niezwykle wrażliwym) wejściu użytkownika.

Aby przetestować algorytm i wpływ, jaki ma na niego wejście użytkownika, zastosowałem następującą procedurę:

  • Załaduj wersję Angry Birds dla Google Chrome
  • Poziom obciążenia 1-1
  • Pociągnij mysz z powrotem do określonej współrzędnej XY. (To już minęło punkt „pełnego losowania” ptaka).
  • Wypuść ptaka i poczekaj, aż gra się ustabilizuje.

Aby zmierzyć moją współrzędną XY, otworzyłem działające w tle okno przeglądarki Chrome i przeszedłem na tę stronę. Ustawiłem oba okna tak, że mogłem widzieć pozycje X i Y myszy, a jednocześnie mogłem spowodować coś, co się wydarzyło, gdy wypuściłem ptaka. Ustawiłem kursor myszy w lewym dolnym rogu ramki wokół tych dwóch liczb, a następnie puściłem. Zanotowałem wtedy pozycję mojego kursora myszy (ponieważ wyświetlacz aktualizuje się tylko wtedy, gdy mysz nie jest zwolniona, a kursor znajduje się nad tym oknem), a następnie zanotowałem wynikowy wynik w Angry Birds. Jeśli masz problemy z dokładnym pozycjonowaniem myszy, możesz wypróbować opcję ułatwień dostępu oferowaną przez Twój system operacyjny, na przykład klawisze myszy w systemie Windows.

Otrzymałem ten sam wynik, tak długo, jak mój kursor znajdował się w dokładnie tym samym miejscu , co w poprzednich iteracjach.

Przed opracowaniem ulepszonego urządzenia testowego, które pozwoliło mi zmierzyć pozycję mojego kursora do piksel, przeprowadziłem ten eksperyment około 10 razy, używając punktu odniesienia na obrazku tła gry. Otrzymałem wyniki, strzelając pierwszym ptakiem, który wahał się od 8 000 do 11 000 punktów. Korzystając z ulepszonej strategii testowania, gdybym wypadł o jeden piksel, mógłbym spodziewać się różnic w wynikach od 150 do 500 punktów.

Zwracam uwagę, że kursor znajdował się poza krawędzią obszaru gry , poza oknem przeglądarki, daleko poza maksymalną odległością, na jaką można cofnąć ptaka, i nadal zauważyłem różnice podczas przesuwania mojego kursor nawet pojedynczy piksel.

Ponadto zrobiłem zrzuty ekranu z ekstremalnego przypadku, gdy mój kursor znajdował się na innym monitorze niż okno gry, i uruchomiłem kilka iteracji, w których utrzymywałem kursor w tym samym miejscu lub nieznacznie go przesuwałem. Według moich obliczeń (na podstawie pomiaru odległości od zrzutów ekranu) gra była w stanie wygenerować inny wynik (wynik 32960 vs 31520) na podstawie różnicy wysokości jednego piksela (544 vs 545 pikseli) na dystansie około 1284 pikseli szerokości. Okazuje się, że jest to różnica kątowa wynosząca 0,03 stopnia.

Powiedziałbym, że z praktycznych powodów można spodziewać się wielokrotnego stosowania tej samej ogólnej strategii na tym samym poziomie i oczekiwać bardzo różnych wyników. Poziom czułości elementów sterujących jest tak ekstremalny, że nie ma praktycznego sposobu, aby zrobić to samo dwa razy. Sytuację pogarsza fakt, że jeśli grasz na ekranie dotykowym, odtworzenie tych samych ruchów do pojedynczego piksela byłoby niezwykle trudne.

Jeden piksel * może * łatwo oznaczać dużą różnicę w punktacji. To nie jest odpowiedź na pytanie, czy jest deterministyczna, czy nie; musisz mieć pewność, że wprowadzone dane są identyczne.
Nawet w scenariuszach deterministycznych niewielka różnica w stanie początkowym może spowodować ogromną różnicę w stanie końcowym. Nazywa się [teoria chaosu] (http://en.wikipedia.org/wiki/Chaos_theory).
@MyrddinEmrys, Jak wspomniałem, planowałem zrobić, ponownie przeprowadziłem eksperyment z dokładnością do pikseli. Odkryłem, że wyrządzone szkody były takie same, jeśli byłem tak dokładny. Powiedziałbym, że dla jakichkolwiek praktycznych celów grania w grę sterowanie jest tak dokładne, że można oczekiwać, że końcowe zachowanie systemu będzie skutecznie niedeterministyczne dla każdego „normalnego” scenariusza użycia danych wejściowych przez człowieka. Sama gra jest jednak deterministyczna.
Warto zauważyć, że ze względu na proste, ciągłe drgania ręki, człowiek praktycznie nie jest w stanie wygenerować dokładnie takiego samego wejścia dotykowego. Rzeczywistość jest czynnikiem losowym, a nie Angry Birds, jak odkryłeś.
Angry Birds: gra milimetrowa na urządzeniu centymetrowym. Szalony.
Jeśli chcesz wypróbować ten eksperyment, możesz [zainstalować mój skrypt użytkownika] (https://gist.github.com/raw/1536489/angrierbird.user.js). Dodaje pola, które śledzą dokładną pozycję kursora na stronie Angry Birds. Podgląd skryptu jest dostępny [tutaj] (https://gist.github.com/1536489).
@splatteredbits to prawie moje wrażenie
Drogi agencie86, napisałeś: „Zdobyłem punkty za wystrzelenie pierwszego ptaka, który wahał się od 8 000 do 11 000 punktów”. Czy można uruchomić test z aktualną wersją i sprawdzić, czy wyniki są systematycznie wyższe?
@GilKalai Nie możesz porównywać różnych poziomów w ten sposób, to całkowicie zależy od tego, dokąd był skierowany test.
Teraz pytanie brzmi ... na poziomach z półdynamicznymi bytami (jak działka laserowe i ruchome platformy w * Angry Birds Star Wars *), w jakim sensie jest to deterministyczne?
Ta odpowiedź graniczy z eksperymentem naukowym.
Czekaj, zrobiłeś to wszystko dla Arquade ?!+342!
Uważam, że natura tej gry jest chaotyczna.System chaotyczny jest systemem deterministycznym, ale niewielkie zmiany warunków początkowych powodują ogromne zmiany wyniku.
Pubby
2011-12-30 01:32:07 UTC
view on stackexchange narkive permalink

Angry Birds używa biblioteki Box2D do celów fizycznych.

Czy Box2D jest deterministyczny? Dla tego samego wejścia i tego samego binarnego Box2D odtworzy dowolną symulację. Box2D nie używa żadnych liczb losowych ani nie opiera żadnych obliczeń na zdarzeniach losowych (takich jak liczniki czasu itp.).

Jednak ludzie często chcą bardziej rygorystycznego determinizmu. Ludzie często chcą wiedzieć, czy Box2D może generować identyczne wyniki na różnych plikach binarnych i na różnych platformach. Odpowiedź brzmi nie. Przyczyną tej odpowiedzi jest to, jak matematyka zmiennoprzecinkowa jest implementowana w wielu kompilatorach i procesorach. Jeśli jesteś ciekawy, polecam przeczytanie tego artykułu: http://www.yosefk.com/blog/consistency-how-to-defeat-the-purpose-of-ieee-floating-point.html

http://code.google.com/p/box2d/wiki/FAQ#Determinism

To świetnie (dzięki za sprawdzenie źródła); Gwoli ścisłości, czy masz wzmiankę, że Angry Birds używa Box2D? A skąd wyciągnąłeś ten cytat?
@MarkTrapp http: // www.geek.com / Articles / mobile / box2d-creator-asks-rovio-for-angry-birds-credit-at-gdc-2011032 / i http://en.wikipedia.org/wiki/Box2D
I założę się, że fizyka FPS również się różni, z powodu wielu czynników (niewystarczająca ilość procesora, przegrzanie, błędy strony itp.), Co wpływa na `` dokładność '' symulacji. :)
Drugie stwierdzenie jest niejasne; zakładam, że jeśli uruchomisz tę samą symulację na wielu architekturach, możesz nie uzyskać dokładnie tego samego wyniku, ale każda symulacja dla każdej platformy będzie przebiegać w ten sam sposób za każdym razem.
@muntoo, co niekoniecznie jest prawdą, ponieważ programiści mogą sprawić, że gra będzie wykonywała tę samą liczbę kroków symulacji, nawet przy niższych częstotliwościach klatek. Jeśli chodzi o rzeczywiste błędy procesora, taka możliwość jest zwykle ignorowana w grach, ponieważ jest tak rzadka. Jeśli interesuje Cię temat deterministycznych symulacji, możesz przeczytać więcej na [blogu gamesfromwithin] (http://gamesfromwithin.com/casey-and-the-clearly-deterministic-contraptions) lub po prostu google. :)
@agent86 Zmieniłbym twoje sformułowanie na „[...] ale na platformę i ** na wersję Box2D ** każda symulacja będzie przebiegać w ten sam sposób za każdym razem”. (ta „ta sama binarna” część w pierwszym akapicie wydaje się to wskazywać).
@JoãoPortela, słuszna uwaga. Założyłem, że „zwolnienie” nie jest zmienną, której można zmienić w tym przypadku.
Nie rozumiem pierwszego akapitu pytania. Czy więc Box2D jest deterministyczny, czy nie?
@Jake Tak, jest deterministyczny, ale z ograniczeniami wymienionymi w drugim akapicie.
Wciąż zdezorientowany. Dlaczego jest napisane, że „Box2D odtworzy KAŻDĄ symulację”, a nie „TA SAMĄ” symulację? Piszę symulację lockstep klienta serwera i uruchamianie 2 tego samego client.exe daje taką samą symulację tylko wtedy, gdy nie ma kolizji.
@Jake Nie jestem pewien, może spróbuj przepełnienia stosu.
Matthew Read
2011-12-30 00:26:43 UTC
view on stackexchange narkive permalink

Niektóre poziomy są narażone na losowe eksplozje wkrótce po rozpoczęciu poziomu, a niektóre cegły mogą spaść same, zanim rzucisz ptaka. Te wydarzenia zdarzają się rzadko, ale zanim zdobędziesz trzy gwiazdki na każdym poziomie w każdej grze, prawdopodobnie zobaczysz to kilka razy, tak jak ja.

Spodziewałbym się, że dzieje się tak z powodu czasu problemy, prawdopodobnie związane z gwintowaniem. Jestem całkiem pewien, że gdybyś zrobił test, w którym ładowałeś każdy poziom kilkanaście razy i czekałeś trzydzieści sekund, co najmniej raz skończyłbyś z wynikiem niezerowym. W świetle odpowiedzi Pubby'ego mogę tylko założyć, że aplikacja Angry Birds nie zawsze zapewnia te same dane wejściowe do funkcji Box2D na początku poziomu.

Joseph KaraokeGuy Holtzinger
2014-12-22 02:26:47 UTC
view on stackexchange narkive permalink

Grałem na Facebooku przy użyciu rejestratora makr. Uruchomiłem flet prosty, podszedłem do okna Angry Birds, potem oddaliłem się i zagrałem pierwsze dwa ptaki. Następnie zatrzymałem rejestrator. ZA KAŻDYM razem mysz trafiała do dokładnych pikseli i wypuszczała z dokładnie taką samą mocą itp. Musiała, ponieważ zarejestrowany ruch myszy robi to samo za każdym razem, piksel po pikselu. Za każdym razem otrzymywałem inny wynik, a nie za każdym razem taką samą liczbę zabitych świń itp. Ta gra JEST niespójna

Myrddin Emrys
2011-12-29 23:08:26 UTC
view on stackexchange narkive permalink

Zrobiłem 10 testów, ciągnąc za każdym razem do tego samego punktu (także Chrome Angry Birds, poziom 1, jak w testach agenta86).

Red Crosshair of test spot

Nigdy nie otrzymałem ten sam wynik dwa razy, pomimo tego, że uważnie przyciąga się do tego samego miejsca i robi to zaraz po rozpoczęciu poziomu. Uważam, że Angry Birds jest bardzo mało deterministyczne.

Jest to raczej łatwe do wyjaśnienia: został zaprojektowany do pracy na małych ekranach dotykowych. Gdyby był deterministyczny, użytkownicy mogliby z łatwością powtarzać ruchy ze względu na ograniczoną precyzję urządzenia wejściowego. Może to być złe, ponieważ ich urządzenie może dosłownie nie mieć precyzji niezbędnej do celowania pod dokładnym kątem i mocą, jaką chcą. Dzięki lekkiemu wahaniu wyników i wprowadzeniu „palca” użytkownicy nie zauważyliby braku precyzji, a także nie byliby sfrustrowani tym, że nigdy nie byliby w stanie wykonać pożądanego ujęcia.

Dodatkowy test agent86 wskazuje, że mogłem się mylić. Ponownie przetestuję po powrocie do domu, ponieważ byłem pewien, że precyzyjnie ustawiałem kursor.
Myślę, że jesteś w błędzie. Ekran dotykowy w rzeczywistości bardzo utrudnia uzyskanie tego samego wejścia za każdym razem. Na przykład iPhone ma 614400 pikseli. Każdy z nich dałby inny wynik.
@Daenyth: czy na pewno dokładność rozdzielczości wejściowej wynosi 1 piksel? Może tak, ale mówię, że niekoniecznie.
@Daenyth niekoniecznie _ każdy_ z nich. Gdy przekroczysz maksymalną odległość, może istnieć zestaw pikseli pod tym samym kątem od środka, co można rozsądnie założyć, że powodują identyczne
@AndreasBonini, Dalsze testy wydają się wskazywać, że jest tak precyzyjny, że pojedynczy piksel może powodować różnice w wynikach, nawet na szalonych odległościach - zobacz najnowsze zmiany w mojej odpowiedzi.
Jest to raczej przykład chaosu (drobne zmiany danych wejściowych prowadzące do ogromnych zmian w wyniku) niż niedeterminizmu


To pytanie i odpowiedź zostało automatycznie przetłumaczone z języka angielskiego.Oryginalna treść jest dostępna na stackexchange, za co dziękujemy za licencję cc by-sa 3.0, w ramach której jest rozpowszechniana.
Loading...