Testa o Croce

Il forum di Base5, dove è possibile postare problemi, quiz, indovinelli, rompicapo, enigmi e quant'altro riguardi la matematica ricreativa e oltre.

Moderatori: Gianfranco, Bruno

Lucignolo
Livello 4
Livello 4
Messaggi: 169
Iscritto il: mar apr 14, 2020 8:47 am

Testa o Croce

Messaggio da Lucignolo »

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

Gianfranco
Supervisore del sito
Supervisore del sito
Messaggi: 1708
Iscritto il: ven mag 20, 2005 9:51 pm
Località: Sestri Levante
Contatta:

Re: Testa o Croce

Messaggio da Gianfranco »

Lucignolo ha scritto:
mer mag 06, 2020 9:08 am
nel lancio della monetina quante volte consecutive può ritardare una facciata?
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

Lucignolo
Livello 4
Livello 4
Messaggi: 169
Iscritto il: mar apr 14, 2020 8:47 am

Re: Testa o Croce

Messaggio da Lucignolo »

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

delfo52
Livello 9
Livello 9
Messaggi: 1556
Iscritto il: mer mag 25, 2005 4:19 pm
Località: bologna

Re: Testa o Croce

Messaggio da delfo52 »

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?
Enrico

Lucignolo
Livello 4
Livello 4
Messaggi: 169
Iscritto il: mar apr 14, 2020 8:47 am

Re: Testa o Croce

Messaggio da Lucignolo »

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

delfo52
Livello 9
Livello 9
Messaggi: 1556
Iscritto il: mer mag 25, 2005 4:19 pm
Località: bologna

Re: Testa o Croce

Messaggio da delfo52 »

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
Enrico

Gianfranco
Supervisore del sito
Supervisore del sito
Messaggi: 1708
Iscritto il: ven mag 20, 2005 9:51 pm
Località: Sestri Levante
Contatta:

Re: Testa o Croce

Messaggio da Gianfranco »

Lucignolo ha scritto:
mer mag 06, 2020 2:57 pm
aspetto vostri test coi vostri pc con codice vostro per confermare se accade anche a voi
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

Questi sono i risultati.
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

delfo52
Livello 9
Livello 9
Messaggi: 1556
Iscritto il: mer mag 25, 2005 4:19 pm
Località: bologna

Re: Testa o Croce

Messaggio da delfo52 »

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
Enrico

franco
Livello 9
Livello 9
Messaggi: 1438
Iscritto il: mar dic 12, 2006 12:57 pm
Località: Bèrghem (Sardegna)

Re: Testa o Croce

Messaggio da franco »

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.
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

Gianfranco
Supervisore del sito
Supervisore del sito
Messaggi: 1708
Iscritto il: ven mag 20, 2005 9:51 pm
Località: Sestri Levante
Contatta:

Re: Testa o Croce

Messaggio da Gianfranco »

delfo52 ha scritto:
mer mag 06, 2020 4:53 pm
...invece che cercare il numero di lanci senza il risultato cercato, si riprogrammasse per cercare le sequenze di ripetizione dello stesso segno?
Sono d'accordo.
franco ha scritto:
mer mag 06, 2020 5:58 pm
...mi sono accorto che per ogni singolo valore casuale in colonna A ce n'era un altro identico!
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

Lucignolo
Livello 4
Livello 4
Messaggi: 169
Iscritto il: mar apr 14, 2020 8:47 am

Re: Testa o Croce

Messaggio da Lucignolo »

dovro imparare il decimal basic per fare questi test :)

Gianfranco
Supervisore del sito
Supervisore del sito
Messaggi: 1708
Iscritto il: ven mag 20, 2005 9:51 pm
Località: Sestri Levante
Contatta:

Re: Testa o Croce

Messaggio da Gianfranco »

Lucignolo ha scritto:
mer mag 06, 2020 7:39 pm
dovro imparare il decimal basic per fare questi test :)
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

Lucignolo
Livello 4
Livello 4
Messaggi: 169
Iscritto il: mar apr 14, 2020 8:47 am

Re: Testa o Croce

Messaggio da Lucignolo »

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

delfo52
Livello 9
Livello 9
Messaggi: 1556
Iscritto il: mer mag 25, 2005 4:19 pm
Località: bologna

Re: Testa o Croce

Messaggio da delfo52 »

facci vedere una sequenza con la coda! e con la riga 24!!!!
Enrico

Lucignolo
Livello 4
Livello 4
Messaggi: 169
Iscritto il: mar apr 14, 2020 8:47 am

Re: Testa o Croce

Messaggio da Lucignolo »

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

Rispondi