2026. június 13., szombat

Monty Hall-paradoxon

A valószínűségszámításban az egyik leghíresebb és legnehezebben átlátható klasszikus feladvány a Monty Hall-paradoxon. Ez egy olyan valószínűségi fejtörő, amely még a matematikusokat is zavarba ejti, de Python segítségével könnyen bebizonyítható a helyes stratégia.A feladat a következő: adott 3 ajtó. Az egyik mögött egy autó van (fődíj), a másik kettő mögött kecske. Te választasz egy ajtót. Monty (a műsorvezető, aki tudja, mi van a zárt ajtók mögött) kinyitja az egyik olyan ajtót, am mögött kecske van. Ezután megkérdezi: „Meg akarod változtatni a választásodat a másik csukott ajtóra?”A válasz: Igen, mindig érdemes váltani, mert így a nyerési esélyed 33%-ról 66%-ra nő.Az alábbi Python program szimulálja ezt a folyamatot több ezer lejátszással, hogy bizonyítsa a fenti állítást.
-----------
import random

def monty_hall_sim(jatekok_szama):
    valtoztatassal_nyert = 0
    nem_valtoztatassal_nyert = 0

    for _ in range(jatekok_szama):
        # Az autó helye (1, 2 vagy 3)
        auto_helye = random.randint(1, 3)
        
        # A játékos kezdeti választása
        jatekos_valasztasa = random.randint(1, 3)
        
        # Monty kinyit egy ajtót (nem a nyertes, és nem a játékos által választott)
        monty_altal_nyitott = [ajto for ajto in [1, 2, 3] if ajto != auto_helye and ajto != jatekos_valasztasa][0]
        
        # A megmaradó ajtó, amit a játékos választhatna, ha vált
        megmarado_ajto = [ajto for ajto in [1, 2, 3] if ajto != jatekos_valasztasa and ajto != monty_altal_nyitott][0]
        
        # Eredmény, ha nem változtat
        if jatekos_valasztasa == auto_helye:
            nem_valtoztatassal_nyert += 1
            
        # Eredmény, ha változtat
        if megmarado_ajto == auto_helye:
            valtoztatassal_nyert += 1

    # Eredmények kiíratása
    print(f"Összes játék: {jatekok_szama:,}")
    print(f"Győzelmek váltás nélkül:  {nem_valtoztatassal_nyert:,} alkalommal (~{nem_valtoztatassal_nyert / jatekok_szama * 100:.1f}%)")
    print(f"Győzelmek váltással:       {valtoztatassal_nyert:,} alkalommal (~{valtoztatassal_nyert / jatekok_szama * 100:.1f}%)")

# A szimuláció futtatása 100 000 játékkal
monty_hall_sim(100000)
--------------
Output:
Összes játék: 100,000
Győzelmek váltás nélkül:  33,333 alkalommal (~33.3%)
Győzelmek váltással:       66,667 alkalommal (~66.7%)
-----------------
https://onecompiler.com/python#draft-zge8

Nincsenek megjegyzések:

Megjegyzés küldése