Ciao, ho trovato uno sketch riguardo il paradosso di MH.
Non sembra funzionare, mi da sempre 33%.
Sembra che cambiare scelta sia più conveniente, e che
porta le probabilità di vincere al 66%.
Grazie
*/
const bool change = false; // whether or not to switch doors
const int seed = 1234;
const unsigned long rounds = 2000;
unsigned long wins;
void doOneRound ()
{
bool car [3];
for (byte i = 0; i < 3; i++)
car [i] = false;
// choose which door has the car
car [random (0, 3)] = true;
// contestant makes a random choice
byte choice = random (0, 3);
// host chooses another door
byte hosts_choice;
// don't choose contestant's door
// also don't reveal the car
do
{
hosts_choice = random (0, 3);
} while (hosts_choice == choice || car [hosts_choice]);
// change choice if desired
if (change)
{
if (choice != 0 && hosts_choice != 0)
choice = 0;
else if (choice != 1 && hosts_choice != 1)
choice = 1;
else
choice = 2;
} // end if
// did we win the car?
if (car [choice])
wins++;
} // end of doOneRound
void setup ()
{
Serial.begin (115200);
Serial.println ();
randomSeed (seed);
// do as many rounds as desired
for (unsigned long round = 0; round < rounds; round++)
doOneRound ();
Serial.print ("You won ");
Serial.print (100UL * wins / rounds);
Serial.println ("% of the time");
} // end of setup
void loop () { }
infatti...secondo me si dovrebbe fare una valutazione doppia...cioè data scelta iniziale comune dare risultato su vittoria sia che si cambi sia no...dando i relativi risultati.
È un periodo che non riesco a concentrarmi, altrimenti avrei provato a farlo io di sana pianta.
Magari usando la funzione random con libreria di Leo, e iterando almeno un migliaio di volte.
Ero curioso di sperimentare la veridicità del fatto che cambiando aumentano le probabilità.
Quindi ho trovato lo sketch che ho postato, ma vedo che ha dei problemi.
Ciao.
Stilita:
Quindi ho trovato lo sketch che ho postato, ma vedo che ha dei problemi.
Onestamente non capisco, il programma serve solo a"dimostrare" che cambiando la porta (change=true) le probabilità passano al 66% e non al 50%, come ci si aspetterebbe.
fabpolli:
proprio per verificare il paradosso, a false ci si aspetta un risultato del 33%, a true dovresti verificare il paradosso ottenendo un 66%
Va bene, cambio quello che dici è quindi mi verrà sempre 66%.
Ma nella realtà se si simulano un numero alto di scelte mica verrà sempre 66%?
Verrà un numero che si avvicina al 66 , ma a volte più alto a volte più basso
Lo scostamento dipenderà dal numero delle "estrazioni".
Ed era questo che volevo vedere.
tutta la discussione/logica del 33%, 66% o del 50% gira attorno al fatto di considerare o meno una scelta iniziale...allego schema copiato da Wikipedia...da qui si crea il relativo programma per verificare.
Va bene, cambio quello che dici è quindi mi verrà sempre 66%.
Ma nella realtà se si simulano un numero alto di scelte mica verrà sempre 66%?
Verrà un numero che si avvicina al 66 , ma a volte più alto a volte più basso
Lo scostamento dipende dal numero delle "estrazioni".
Ed era questo che volevo vedere.
dovrebbe essere appunto il numero elevato di "test" che dovrebbe farti avvicinare al 33% ed al 66%...se valuti un numero ristretto od addirittura il test singolo i risultati potrebbero (sicuramente) essere molto diversi.
ORSO2001:
dovrebbe essere appunto il numero elevato di "test" che dovrebbe farti avvicinare al 33% ed al 66%...se valuti un numero ristretto od addirittura il test singolo i risultati potrebbero (sicuramente) essere molto diversi.
Probabilmente lo sketch esegue asetticamente una funzione matematica e quindi da sempre
lo stesso risultato.
Non fa una serie di scelte, alte, come vorrei fare io.
Appena riesco provo a farlo di sana pianta .
Ciao
Ma assolutamente no, ci sono dei random (per quello che può voler dire matematicamente un generatore di pseudocasuali su Arduino) pertanto le scelte di porta, se cambiare o meno possono essere frutto di casualità. Nel programma che hai tu sotto mano la scelta di cambiare o meno è fissa ma nessuno ti vieta di cambiare da costante a variabile e calcolare anche quella con un random zero o uno e ottenere anche la scelta casuale di cambiare porta oppure no.
Ciò non toglie che con tutte le dovute limitazioni derivanti dal generatore di numeri pseudocasuali scomodando la legge dei grandi numeri quanto più elevato è il numero di giocate tanto più ci si avvicinerà alla media ideale attesa.
Anche un semplice lancio di moneta se fatto dieci volte si discosterà molto dal 50% (o forse no ), fatto un numero spropositato di volte la percentuale testa/croce sarà del 50%
La funzione random la userei solo per posizionare la macchina dietro una porta a caso
per poi dopo simulare tante volte il cambiamento di scelta o il non cambiamento
e rendermi conto che il paradosso è vero.
Che è quello che suggeriva @ORSO2001 nel post #3.
Detto ciò che sia random, fisso, con entrambe i valori (cambio e non cambio) o cambiato secondo logiche varie iterando molto molte volte si arriva a verificare il paradosso.
Buone prove e modifiche al programma per renderlo adatto all'obiettivo che ti sei posto!
P.S. = Rileggendo potrei sembrare sarcastico, non è quello il tono sia chiaro!
fabpolli:
P.S. = Rileggendo potrei sembrare sarcastico, non è quello il tono sia chiaro!
Non lo avevo pensato.
La dimostrazione matematica che si trova in rete l'ho capita
ma nessuna persona che frequento ci crede, credono che le probabilità siano
del 50% una volta aperta una porta perdente
e quindi faccio 100/200 tentativi manuali per dimostrarlo? NO! Troppo tempo.
Quindi delegherei la dimostrazione al buon Arduino
Ciao