Testa o Croce
Moderatori: Gianfranco, Bruno
Questo forum è una sezione del PORTALE DI BASE CINQUE
Testa o Croce
nel lancio della monetina quante volte consecutive può ritardare una facciata?
ho fatto un loop di un miliardo di lanci con la funzione Rnd e mi viene fuori una cosa strana, che presumo sia un difetto del Random
fino al 20esimo ritardo i valori decrescono in modo uniforme, poi no... addirittura il ritardo di 24 non avviene mai! (cosa impossibile)
ho ripetuto più volte il test ed è sempre cosi:
(non mi supera mai i 25 ritardi, provate anche voi per favore a fare una procedura simile? )
1 = 124999361
2 = 62502816
3 = 31242699
4 = 15629522
5 = 7815686
6 = 3904789
7 = 1953198
8 = 973971
9 = 489095
10 = 242574
11 = 127285
12 = 59126
13 = 30164
14 = 15487
15 = 7986
16 = 3871
17 = 1609
18 = 476
19 = 297
20 = 120
21 = 59
22 = 119
23 = 120
24 = 0
25 = 60
26 = 0
27 = 0
28 = 0
29 = 0
30 = 0
ho fatto un loop di un miliardo di lanci con la funzione Rnd e mi viene fuori una cosa strana, che presumo sia un difetto del Random
fino al 20esimo ritardo i valori decrescono in modo uniforme, poi no... addirittura il ritardo di 24 non avviene mai! (cosa impossibile)
ho ripetuto più volte il test ed è sempre cosi:
(non mi supera mai i 25 ritardi, provate anche voi per favore a fare una procedura simile? )
1 = 124999361
2 = 62502816
3 = 31242699
4 = 15629522
5 = 7815686
6 = 3904789
7 = 1953198
8 = 973971
9 = 489095
10 = 242574
11 = 127285
12 = 59126
13 = 30164
14 = 15487
15 = 7986
16 = 3871
17 = 1609
18 = 476
19 = 297
20 = 120
21 = 59
22 = 119
23 = 120
24 = 0
25 = 60
26 = 0
27 = 0
28 = 0
29 = 0
30 = 0
-
- Supervisore del sito
- Messaggi: 1714
- Iscritto il: ven mag 20, 2005 9:51 pm
- Località: Sestri Levante
- Contatta:
Re: Testa o Croce
Bisogna definire cosa si intende per "ritardo".
Consideriamo il lancio di una moneta (T,C) e l'uscita della faccia T (testa).
Il tempo di attesa di T è 2 lanci. Ogni 2 lanci, in media, esce T.
Potremmo allora dire che T "ritarda rispetto alla media" quando NON esce da più di 2 lanci.
Per quanti lanci consecutivi può NON uscire T?
Illimitati.
Infatti, la probabilità che T NON esca per
3 lanci di seguito è: $p(3)={(\frac{1}{2}})^3$
4 lanci di seguito è: $p(4)={(\frac{1}{2}})^4$
5 lanci di seguito è: $p(5)={(\frac{1}{2}})^5$
100 lanci di seguito è: $p(100)={(\frac{1}{2}})^{100}= 0,00000000000000000000000000000079$ circa
…
n lanci di seguito è: $p(n)={(\frac{1}{2}})^n$
Come vedi, la probabilità è sempre più bassa ma non è mai uguale a 0.
Per "vedere" un "ritardo" di 30 lanci dovresti fare una simulazione di oltre 10 miliardi di prove
Se chiedi di fare una prova come le tue potresti inviare il programma che hai usato?
Pace e bene a tutti.
Gianfranco
Gianfranco
Re: Testa o Croce
ho sviluppato un po di codice in visual basic, posso anche incollare il codice,
ma ho visto che ci son altri programmatori qua che usano il basic,
e sarebbe bello provare se anche a loro esce questo errore, che salta il 24
Dim x As Integer
Dim c As Long
Dim a As Integer
Dim Classifica(30) As Long
Randomize Timer
Do
x = Int(1 + Rnd() * 2)
c = c + 1
If c = 100000000 Then Exit Do
If x = 1 Then a = a + 1
' aggiorno la classifica quando spezza il ritardo '
If x = 2 Then
Classifica(a) = Classifica(a) + 1
a = 0
End If
Loop
' rem: scrivo i risultati in un campo di testo multilinea
Text1 = ""
For x = 1 To 30
Text1 = Text1 & x & " = " & Classifica(x) & vbNewLine
Next
ma ho visto che ci son altri programmatori qua che usano il basic,
e sarebbe bello provare se anche a loro esce questo errore, che salta il 24
Dim x As Integer
Dim c As Long
Dim a As Integer
Dim Classifica(30) As Long
Randomize Timer
Do
x = Int(1 + Rnd() * 2)
c = c + 1
If c = 100000000 Then Exit Do
If x = 1 Then a = a + 1
' aggiorno la classifica quando spezza il ritardo '
If x = 2 Then
Classifica(a) = Classifica(a) + 1
a = 0
End If
Loop
' rem: scrivo i risultati in un campo di testo multilinea
Text1 = ""
For x = 1 To 30
Text1 = Text1 & x & " = " & Classifica(x) & vbNewLine
Next
Re: Testa o Croce
in effetti, guardando la simulazione, si vede che, correttamente, ogni riga il valore è sostanzialmente la metà del precedente.
Spannometricamente, questo fatto, che corrisponde alla teoria, sembra ragionevolmente indicare una buona randomizzazione per un certo numero di righe. Verso la fine, pare fuori controllo.
Ma, se fosse un difetto del randomizzatore, perché il baco viene fuori solo per "ritardi" di 20 o più?
In un mondo randomizzato ideale, si potrebbe costruire la sequenza a partire dal basso. e le ultime righe dovrebbero, più o meno, essere 8-4-2-1
Perché, nelle simulazioni fatte, non compaiono valori sotto 50?
Spannometricamente, questo fatto, che corrisponde alla teoria, sembra ragionevolmente indicare una buona randomizzazione per un certo numero di righe. Verso la fine, pare fuori controllo.
Ma, se fosse un difetto del randomizzatore, perché il baco viene fuori solo per "ritardi" di 20 o più?
In un mondo randomizzato ideale, si potrebbe costruire la sequenza a partire dal basso. e le ultime righe dovrebbero, più o meno, essere 8-4-2-1
Perché, nelle simulazioni fatte, non compaiono valori sotto 50?
Enrico
Re: Testa o Croce
stranissimo, sto pensando che non sia un bug del generatore casuale, che si manifesta solo in casi estremi, come questo di milioni di random
la cosa impressionante è la sparizione costante del ritardo 24 anche ripetendo il test, anche cambiando il random invece che 1 su 2
ho provato 50 su 100 ma stessi risultati
IL MISTERO DELLA SCOMPARSA DEL 24
aspetto vostri test coi vostri pc con codice vostro per confermare se accade anche a voi
la cosa impressionante è la sparizione costante del ritardo 24 anche ripetendo il test, anche cambiando il random invece che 1 su 2
ho provato 50 su 100 ma stessi risultati
IL MISTERO DELLA SCOMPARSA DEL 24
aspetto vostri test coi vostri pc con codice vostro per confermare se accade anche a voi
Re: Testa o Croce
non sono capace di decifrare i comandi dei programmi di simulazione, ma chiedo (forse stupidamente):
il testo del programma cambierebbe se, invece che cercare il numero di lanci senza il risultato cercato, si riprogrammasse per cercare le sequenze di ripetizione dello stesso segno?
Lo so: è la stessa cosa, nella vita reale, considerare quante volte di fila NON viene testa, o quante volte di fila viene croce.
Ma magari per la malsana mentalità di un computer fa differenza
il testo del programma cambierebbe se, invece che cercare il numero di lanci senza il risultato cercato, si riprogrammasse per cercare le sequenze di ripetizione dello stesso segno?
Lo so: è la stessa cosa, nella vita reale, considerare quante volte di fila NON viene testa, o quante volte di fila viene croce.
Ma magari per la malsana mentalità di un computer fa differenza
Enrico
-
- Supervisore del sito
- Messaggi: 1714
- Iscritto il: ven mag 20, 2005 9:51 pm
- Località: Sestri Levante
- Contatta:
Re: Testa o Croce
Anche se non ho capito bene cosa intendi testare con il tuo programma, l'ho trascritto fedelmente in DECIMAL BASIC e i risultati da un certo punto in poi sono diversi.
Tieni conto che il vettore a(x) contiene anche a(0).
Io però preferirei testare le sequenze in cui compare sempre la stessa faccia piuttosto che i "ritardi" non ben definiti.
Questo è il programma.
Codice: Seleziona tutto
OPTION BASE 0
DIM Classifica(30)
LET a=0
RANDOMIZE
DO
LET x = Int(1 + Rnd * 2)
LET c = c + 1
IF c = 10^9 THEN EXIT DO
If x = 1 Then LET a = a + 1
!' aggiorno la classifica quando spezza il ritardo '
If x = 2 Then
LET Classifica(a) = Classifica(a) + 1
LET a = 0
End If
Loop
!' rem: scrivo i risultati in un campo di testo multilinea
For x = 0 To 30
PRINT x;" = ";Classifica(x)
NEXT x
END
0 = 249992819
1 = 124997941
2 = 62494394
3 = 31247028
4 = 15625795
5 = 7817036
6 = 3905277
7 = 1955094
8 = 975782
9 = 489057
10 = 243947
11 = 122332
12 = 61164
13 = 30534
14 = 15103
15 = 7658
16 = 3737
17 = 1861
18 = 923
19 = 511
20 = 225
21 = 133
22 = 70
23 = 24
24 = 14
25 = 7
26 = 5
27 = 3
28 = 1
29 = 1
30 = 0
Pace e bene a tutti.
Gianfranco
Gianfranco
Re: Testa o Croce
la sequenza generata da Gianfranco sembra pienamente allineata con le "previsioni".
immagino che, ripetendo la simulazione, gli scostamenti tra una serie e l'altra, saranno sicuramente (in termini percentuali) limitatissimi finchè avremo a che fare con numeri di 6 o 7 cifre. Per poi aumentare fino a possibili valori molto differenti (sempre in %)
per esempio, se alla riga 27, invece di 3 troviamo 6; o alla riga 28 invece di 1, un bello zero, non dovremo stupirci.
Anzi, penso che l'analisi di questo tipo di varianze sia uno dei pochi strumenti per valutare la randomicità delle procedure random.
Di sicuro una istruzione come quella proposta da Lucignolo, proprio per la presenza della anomali del 24 e la mancanza della "coda" era da considerare non buona, anche se, per le prime 15 o 20 righe, sembrava più che decente
immagino che, ripetendo la simulazione, gli scostamenti tra una serie e l'altra, saranno sicuramente (in termini percentuali) limitatissimi finchè avremo a che fare con numeri di 6 o 7 cifre. Per poi aumentare fino a possibili valori molto differenti (sempre in %)
per esempio, se alla riga 27, invece di 3 troviamo 6; o alla riga 28 invece di 1, un bello zero, non dovremo stupirci.
Anzi, penso che l'analisi di questo tipo di varianze sia uno dei pochi strumenti per valutare la randomicità delle procedure random.
Di sicuro una istruzione come quella proposta da Lucignolo, proprio per la presenza della anomali del 24 e la mancanza della "coda" era da considerare non buona, anche se, per le prime 15 o 20 righe, sembrava più che decente
Enrico
Re: Testa o Croce
Ho avuto anche io qualche dubbio sulla capacità di generazione di numeri casuali da parte di Excel (software con cui lavoro tantissimo, anche utilizzando Visual Basic).
Non ricordo più per quale motivo, avevo utilizzato la funzione RAND() su qualche migliaio di celle della colonna A e nella cella accanto in colonna B avevo inserito una formula che utilizzava appunto quel numero casuale.
Per fare un grafico con tutti questi valori, li avevo prima bloccati (copia+incolla valori) e poi ordinati.
Sin qui, nessun problema.
Per avere però un grafico un po' meno spezzettato, ho aumentato notevolmente il numero di righe e, con grande sorpresa, mi sono accorto che per ogni singolo valore casuale in colonna A ce n'era un altro identico!
E' come se Excel fosse in grado di generare un numero limitato di numeri casuali per poi ripetere la stessa sequenza.
Non escludo che Visual Basic per Excel non abbia limitazioni simili.
Comunque non avevo approfondito l'argomento perchè per quanto mi serve la cosa non mi ha mai generato problemi.
N.B. non ricordo l'ordine di grandezza, ma escludo di aver superato le 100.000 celle.
Non ricordo più per quale motivo, avevo utilizzato la funzione RAND() su qualche migliaio di celle della colonna A e nella cella accanto in colonna B avevo inserito una formula che utilizzava appunto quel numero casuale.
Per fare un grafico con tutti questi valori, li avevo prima bloccati (copia+incolla valori) e poi ordinati.
Sin qui, nessun problema.
Per avere però un grafico un po' meno spezzettato, ho aumentato notevolmente il numero di righe e, con grande sorpresa, mi sono accorto che per ogni singolo valore casuale in colonna A ce n'era un altro identico!
E' come se Excel fosse in grado di generare un numero limitato di numeri casuali per poi ripetere la stessa sequenza.
Non escludo che Visual Basic per Excel non abbia limitazioni simili.
Comunque non avevo approfondito l'argomento perchè per quanto mi serve la cosa non mi ha mai generato problemi.
N.B. non ricordo l'ordine di grandezza, ma escludo di aver superato le 100.000 celle.
Franco
ENGINEER
noun. (en-juh-neer)
someone who does precision guesswork based on unreliable data provided by those of questionable knowledge.
See also wizard, magician
ENGINEER
noun. (en-juh-neer)
someone who does precision guesswork based on unreliable data provided by those of questionable knowledge.
See also wizard, magician
-
- Supervisore del sito
- Messaggi: 1714
- Iscritto il: ven mag 20, 2005 9:51 pm
- Località: Sestri Levante
- Contatta:
Re: Testa o Croce
Sono d'accordo.
Forse ne avevamo già parlato nel Forum, ma gli algoritmi che generano numeri PSEUDOcasuali sono deterministici, cioè:
a) se ricevono lo stesso seme generano la stessa sequenza di numeri;
b) hanno un periodo, cioè la sequenza di numeri generati si ripete periodicamente.
Il DECIMAL BASIC e altri sistemi usano il cosiddetto Mersenne Twister che ha il periodo gigantesco di $2^{19937}-1$. In base 10 è un numero di circa 6000 cifre.
Non so quale generatore usano Excel e Vb, forse ce ne sono diverse versioni...
Pace e bene a tutti.
Gianfranco
Gianfranco
Re: Testa o Croce
dovro imparare il decimal basic per fare questi test
-
- Supervisore del sito
- Messaggi: 1714
- Iscritto il: ven mag 20, 2005 9:51 pm
- Località: Sestri Levante
- Contatta:
Re: Testa o Croce
Passare da un BASIC a un altro BASIC è molto facile, si impara presto.
A me il BASIC piace molto, sono più datato di lui, e per le mie personali investigazioni numeriche il DECIMAL BASIC è il migliore (per ora).
Ma se desideri imparare un nuovo linguaggio, chiediti cosa vuoi fare e scegli quello più adatto.
In genere tutto ciò che puoi fare con un linguaggio lo puoi fare anche con un altro, ma a seconda del linguaggio usato, l'impresa può essere più semplice o più complicata.
Per farti un'idea di come si implementano algoritmi nei vari linguaggi puoi esplorare Rosetta code, la stele di Rosetta dei linguaggi di programmazione.
Rosetta code: http://www.rosettacode.org/wiki/Rosetta_Code
Per farti un'idea dei linguaggi più usati in questo momento puoi dare un'occhiata a Tiobe.
Tiobe: https://www.tiobe.com/tiobe-index/
Pace e bene a tutti.
Gianfranco
Gianfranco
Re: Testa o Croce
grazie
mi son messo a fare ricerche ed ho trovato una funzione API che posso richiamare dal VB6 che finalmente non ha Bug
Function RtlGenRandom Lib "AdvAPI32"
è un po più lenta a generare numeri, ma almeno genera sequenze realistiche! yeaaaahhhhhhhhh
mi son messo a fare ricerche ed ho trovato una funzione API che posso richiamare dal VB6 che finalmente non ha Bug
Function RtlGenRandom Lib "AdvAPI32"
è un po più lenta a generare numeri, ma almeno genera sequenze realistiche! yeaaaahhhhhhhhh
Re: Testa o Croce
yeaaaaaaaaaa
1 = 12497351
2 = 6249342
3 = 3126075
4 = 1562593
5 = 782088
6 = 389983
7 = 195678
8 = 97693
9 = 48818
10 = 24498
11 = 12122
12 = 6097
13 = 3048
14 = 1541
15 = 782
16 = 370
17 = 200
18 = 99
19 = 40
20 = 29
21 = 15
22 = 6
23 = 4
24 = 2
25 = 0
26 = 0
27 = 0
28 = 0
29 = 0
30 = 0
1 = 12497351
2 = 6249342
3 = 3126075
4 = 1562593
5 = 782088
6 = 389983
7 = 195678
8 = 97693
9 = 48818
10 = 24498
11 = 12122
12 = 6097
13 = 3048
14 = 1541
15 = 782
16 = 370
17 = 200
18 = 99
19 = 40
20 = 29
21 = 15
22 = 6
23 = 4
24 = 2
25 = 0
26 = 0
27 = 0
28 = 0
29 = 0
30 = 0