Re: A me non sembra corretto

From: Chenickname <che.nickname_at_gmail.com>
Date: Fri, 30 Nov 2012 04:11:55 -0800 (PST)

On 29 Nov, 23:31, marcofuics <marcofu..._at_netscape.net> wrote:
> http://it.wikipedia.org/wiki/Problema_di_Monty_Hall
>
> dice cosi':
>



> "...Nel gioco vengono mostrate al concorrente tre porte chiuse; dietro ad una si trova un'automobile, mentre ciascuna delle altre due nasconde una capra. Il giocatore pu scegliere una delle tre porte, vincendo il premio corrispondente. Dopo che il giocatore ha selezionato una porta, ma non l'ha ancora aperta, il conduttore dello show che conosce ci che si trova dietro ogni porta apre una delle altre due, rivelando una delle due capre, e offre al giocatore la possibilit di cambiare la propria scelta iniziale, passando all'unica porta restante..."
>
> Ora ci si chiede
>
> <<Cambiare porta migliora le chance del giocatore di vincere l'automobile?>>
>
> �La risposta s : cambiando le probabilit di successo passano da 1/3 a 2/3

Dato che anche a me sembra paradossale, come prima cosa faccio una
simulazione in VisualBasic5.0 (questo passa il convento) con 100.000
esperimenti:

Private Sub Command13_Click()
Dim C(3) As Boolean 'contenuti
Dim P(3) As Boolean 'porte
Dim D As Integer 'disposizione iniziale dell'auto 0,1,2
Dim S As Integer 'scelta iniziale del concorrente 0,1,2
Dim EP 'esperimenti positivi

EP = 0

For esperimento = 1 To 100000
    For n = 0 To 2
        C(n) = False
        P(n) = False
    Next n

    D = Int(Rnd * 3) 'scelta casuale della posizione dell'auto.
    C(D) = True

    S = Int(Rnd * 3) 'scelta del concorrente

    'Ora il presentatore apre una porta:
    If Not C(S) Then 'nella scelta iniziale del concorrente non c'�
l'auto
        For j = 0 To 2
            If S <> j And Not C(j) Then P(j) = True 'apre l'altra dove
non c'� l'auto
        Next j
    Else 'nella scelta iniziale del concorrente c'� l'auto
        For j = 0 To 2 'il presentatore apre a caso una delle altre
due
            If S <> j Then
                If Rnd < 0.5 Then
                    P(j) = True
                Else
                    For k = 0 To 2
                        If S <> k And k <> j Then
                            P(k) = True
                        End If
                        Exit For
                    Next k
                End If
                Exit For
            End If
        Next j
    End If

    'Allora il concorrente sceglie la rimanente:
    For j = 0 To 2
        If Not P(j) And j <> S Then
            S = j
            Exit For
        End If
    Next j

    'risultato incrementale
    If C(S) Then EP = EP + 1

Next esperimento

'uscita:
Text1 = Str(EP) + Str(EP / esperimento * 100) + "%"

End Sub

RISULTATI:
 66725 66.7%

Oh cacchio! E' vero! :-)

Ciao
Livio
Received on Fri Nov 30 2012 - 13:11:55 CET

This archive was generated by hypermail 2.3.0 : Thu Nov 21 2024 - 05:10:44 CET