View Single Post
Jeg prøver å lage et program som simulerer en roulette. Målet med programmet er å estimere sannsynligheten for å tape X antall ganger på rad i løpet av N antall spins på rouletten.

Problemet mitt er at i følge wikipedia, overestimerer programmet mitt denne sannsynligheten med et par prosent.
For 73 spinns skal det være 50,3 % sjanse for å tape 6 ganger på rad minst en gang. Min kode gir rundt 52,3%.
Programmet mitt ligger generelt 2-4% (ikke prosentpoeng) over det som er forventet ut i fra eksemplene på wikipedia.
Har kjørt en del millioner spins, og får konsistent ut denne overestimeringen.

Merk: koden bærer preg av noen timer med prøving og knoting så den er litt rotete.

Kode

def main():
    import random

    N = eval(input("Angi hvor mange spins som skal utføres i hver runde: "))
    X = eval(input("Angi hvor mange tap på rad som definerer \"suksess\": "))
    R = eval(input("Angi hvor mange ganger prosessen skal gjentas: "))
    print()

    #Vinnertall 21 22 23 24 25 26 27 28 29 30 21 32 33 34 35 36 37 38
    #Tapertall  1  2  3  4  5  6  7  8  9  10 11 12 13 14 15 16 17 18 19 20  


    suksess = 0
    res = 0
    delsuksess = 0
    vinn =0
    spins = 0
    runder = 0


    for i in range(R):                  #Ytre løkke, hvor mange ganger skal runden simuleres
        runder += 1
        delsuksess = 0
        
       
        for j in range(N):               #Indre løkke, hvor mange spins i hver runde
            spins += 1

            res = random.randint(1,38)  #Generer tilfeldig tall fra 0 til 37
            
            if res >= (21):             #Sjansen for å vinne er 18/38,for å tape 20/38, vinn definerers derfor som et tall større enn 20 (21-38)
                delsuksess = 0          #Hvis runden er en vinnerrunde settes delsuksess til null
                vinn += 1
                

            if res <= 20:
                delsuksess = delsuksess + 1       #Hvis runden er en taperrunde legges 1 til delsuksess

            if delsuksess >= X:                   #Hvis man har fått 6 tap på rad defineres dette som suksess og løkken avbrytes
                suksess += 1
                delsuksess = 0
                break            
     
    print("Vinnere", vinn, "antall totale spins" ,spins, round(((vinn*100)/spins),3),"%" )
    print()
    print("suksesser(tap", X, "ganger på rad):" , suksess)
    print("Repetisjoner av prosessen ", runder)
    print("I løpet av", N, "spins er det" ,round((suksess*100)/runder,3),"%","sannsynlig å tape", X, "ganger på rad minst en gang")


Jeg har følgende hypoteser for hva som kan være feilen:

1. Koden min teller i noen tilfeller to suksesser på en runde.
2. Tallene fra random funksjonen har en eller annen form for korrellasjon når man bruker de som en sekvens.
3. Tallene fra wikipedia er feil.

Har bare kodet i python i to uker så jeg anser nr.1 for å være mest sannsynlig.

Så, er det noen som ser noen feil i koden min?
Eventuelt har noen kjørt en slik simulering selv, og har noen tall jeg kunne sammenliknet med?
Sist endret av strutsefar; 19. januar 2012 kl. 11:05.