Gdzie warto stawiać hotele w grze Eurobiznes? Metoda Monte Carlo w R

5 lat temu
Od czego zależy sukces w grze Eurobiznes? Z tego, co pamiętam, gdy kilkanaście lat temu grywałem w tę grę dość często, głównie od talentu negocjacyjnego. jeżeli zdarzy ci się jeszcze, czytelniku, w tę grać zagrać, niniejszy artykuł może wzmocnić twoją pozycję negocjacyjną. Spróbujemy policzyć, z jakim prawdopodobieństwem gracze zatrzymują się na każdym z pól, co jest ważnym czynnikiem wpływającym na wartość kupowanych nieruchomości.

Do oszacowania tych prawdopodobieństw użyjemy metody Monte Carlo. W artykule postaram się pokazać:

* na czym polega metoda Monte Carlo i dlaczego jest piękna,
* jak ją zaprogramować w R,
* jak sprawdzić, czy wyniki mają sens,
* jak ocenić, czy liczba symulacji jest wystarczająca.

Najpierw przypomnijmy sobie, jak wygląda plansza do gry Eurobiznes (rys. 1). Składa się ona z 40 pól numerowanych od 1 (pole "Start") do 40 ("Wiedeń"). Mamy jedno pole, które zmienia położenie (31, "Idziesz do więzienia") i sześć, które potencjalnie zmieniają położenie (karty szans: 16 niebieskich i 16 czerwonych). Będziemy je dalej nazywać polami specjalnymi. Oprócz tego, jeżeli w wyniku rzutu kostkami otrzymamy na obu taką samą liczbę oczek, rzucamy jeszcze raz, przemieszczając się o tyle pól, ile w sumie wypadło oczek w obu rzutach. jeżeli jednak ponownie coś takiego się wydarzy, idziemy do więzienia, czyli na pole 11.

![euro.webp](/uploads/euro_e8b422e3ed.webp)

Jak policzyć prawdopodobieństwa zatrzymania się na poszczególnych polach? Możemy rzucać kostką i zapisywać, gdzie stanęliśmy. jeżeli się uprzemy i zrobimy to naprawdę dużo razy, szukane prawdopodobieństwo otrzymamy, dzieląc liczbę przypadków zatrzymania się na danym polu przez liczbę wszystkich rzutów. To jest istota metody Monte Carlo. Chodzi tylko o to, by zamiast samemu rzucać kostką, zmusić do tego komputer.

Napiszmy pseudokod, który coś takiego zrealizuje. Dla prostoty będziemy grali sami ze sobą, gdyż interakcje między graczami i tak nie zmieniają położenia.

```r
# ustaw się na polu start
# powtarzaj N razy:
# rzuć dwiema kostkami
# jeżeli liczba oczek nie jest taka sama, przesuń się o sumę oczek
# w przeciwnym wypadku rzuć jeszcze raz
# jeżeli liczba oczek nie jest taka sama, przesuń się o sumę oczek z obu rzutów
# w przeciwnym wypadku idziesz do więzienia
# jeżeli trafiłeś na pole specjalne, zmień pozycje
# zapamiętaj, w jakim polu się znalazłeś
```

Zacznijmy od uproszczonej wersji, która nie będzie uwzględniać pól specjalnych. Pamiętajmy, iż chodzimy w kółko, także po polu 40 następuje pole 1, a nie 41 (dlatego będziemy dzielić modulo 40). Trzeba jeszcze uważać, gdyż `40 %% 40 = 0`, zatem pozycję 0 należy zmienić na 40. W poniższym kodzie tworzymy 40-elementowy wektor wypełniony zerami i jeżeli staniemy na przykład na polu 10, zwiększymy o jeden 10. element tego wektora. Uwaga, poniższy kod nie jest napisany optymalnie (to znaczy tak, by całość wykonała się jak najszybciej), ale nacisk został położony na czytelność.


```r
N
Idź do oryginalnego materiału