Wpis z mikrobloga

#matematyka #python

zabijając potwora w grze, mam k % szans na to, że wypadnie mi pożądany przedmiot.
Chcę policzyć ile razy średnio trzeba zabić potwora, żeby dostać ten przedmiot.
Wyszło mi że jest to szansa = logarytm o podstawie (1-k) z 0.5
ponieważ mam (1-k) szans na to że mi przedmiot nie wypadnie, i licze ile razy pod rząd przedmiot mi nie wypadnie.

czyli przykładowo:
szansa na drop - 2%
log_(1-0.02) (0.5) = 34.31

a zatem jeżeli zabiję tego potwora w zaokrągleniu 35 razy, mam większą szansę na to że mi ten przedmiot do tej pory wypadnie, niż na to że nie wypadnie.

i teraz dlaczego taguję to #naukaprogramowania
napisałem kod w pythonie, który 100 razy losuje liczby tak długo, aż przedmiot mi nie wypadnie, natomiast zamiast w przybliżeniu 35, wychodzi mi ponad 112.
Czy ktoś jest w stanie wskazać mi błąd?

mój kod:
https://www.toptal.com/developers/hastebin/ejizobirop.apache
  • 11
  • Odpowiedz
@huggus: a raczej moje obliczenia są poprawne, bo (1-0.02)^35 jest mniejsze niż 0.5
a więc szansa że mi przedmiot nie wypadnie przez 35 prób, jest mniejsza niż na to że mi wypadnie
  • Odpowiedz
@huggus: szansa na to że ci przedmiot nie wypadnie przy założeniu 2% szans na drop, to 98%.
szansa na to że nie wypadnie po 1 próbie to (0.98)^1
szansa na to samo po 2 próbie to (0.98) * (0.98) = (0.98)^2 = ~0.96
.
.
.

szansa na to że nie wypadnie po 35 to (0.98)^35 = 0.49
szansa że wypadnie + szansa że nie wypadnie = 1.0 (100% szans że
  • Odpowiedz
@RedveKoronny: bo ty liczysz dwie różne rzeczy:
1) ze schematu Bernoulliego, liczysz kiedy szansa na to, że wypadło jest większa od 50%
2) w programowaniu liczysz zdarzenie, że już wypadło na pewno.

Jak chcesz dostać wynik taki jak teoretyczny to musisz w pythonie losować 35 razy zmienną i zobaczysz, że w około połowie przypadków będzie sukces a w połowie nie
  • Odpowiedz
@RedveKoronny: Trzymaj sobie taki kod sklecony na szybko z ciekawości:
https://pastebin.com/zubAgSRu
W praktyce zapisuje do listy wartość próby w której dany przedmiot został znaleziony. I tak robi 10000 razy. Na koncu zwraca Ci środkową wartosć z posortowanej listy. Odpaliłem parę razy i wychodziło mi zwykle 35, raz 34. Więc zgodnie z tymi symulacjami Twoja matematyka była jak najbardziej prawdziwa.
Oznacza to, że w połowie przypadków 35 lub mniej prób wystarczyło na
  • Odpowiedz
via Wykop Mobilny (Android)
  • 3
@RedveKoronny: @huggus: @venomik: kurde, powinni tak w szkole uczyć. Kazać napisać prosty program, który losuje, potem bierze średnią i wychodzi ileś. A potem pokazać jak to obliczyć matematyczne, żeby nie trzeba było robić symulacji za każdym razem tylko sobie z wzoru policzyć. I to nie liczyć na kartce tylko w Excelu albo od razu w Pythonie zrobić program do obliczania.

Ile przyjemniej by się tak uczyło. Wiadomo by było
  • Odpowiedz