Random

nato_pigro1
Mi chiedevo come funziona questa funzione, che si trova dalle calcolatrici tascabili (genera un numero definito "casuale") ai lettori mp3 che mescolano in modo "casuale" la successione delle canzoni.
Qual è quella formula, quall'algoritmo (non so cosa ci sia...), che genera questi numeri? e poi ce ne saranno di più complicati e di meno, immagino.
E poi: quanto può essere effettivamente casuale un qualcosa dato da una macchina?

Risposte
tony19
ottimo lavoro, desko! (io a suo tempo l'avevo fatto in basic)

e, per continuare a criticare questo metodo di generazione, aggiungo:
- la più lunga catena parte dal seme 6239 (non dal 5182 dell'esempio del manualetto citato da ntn) ed è di 111 elementi, compresi i 4 dell'anello in cui va ad impastarsi.
- quindi partendo da 6239 non si può sperare in più di 111 numeri, dopodichè isistendo si resta in un anello di 4 numeri
- c'è solo una trentina di semi che iniziano una catena lunga 104 o più
- passando da 4 cifre a 6 l'andazzo migliora, ma ritiene le stesse pecche.

queste restrizioni dovrebbero essere scritte in grassetto sul manuale, per non illudere l'utente

io, a suo tempo, cercai un algoritmo diverso.

tony

P.S. non ho mai analizzato la sequenza dei 111 numeri di cui sopra (o quella del seme "ufficiale" 5182) per controllarne l'uniformità della distribuzione; potrebbero esserci delle sorprese

desko
Ho giocato un po' con Excel.
Ho provato tutti i numeri da 0000 a 9999, per 256 iterazioni (la larghezza del foglio di Excel)
Ho trovato che:
    6291 semi finiscono nella catena 6100, 2100, 4100, 8100;
    1360 semi finiscono nella catena 5600, 3600, 9600, 1600;
    86 semi finiscono nella catena 2916, 5030, 3009, 0540;
    60 semi convergono a 7600;
    130 semi convergono a 2500;
    104 semi convergono a 100;
    1968 semi convergono a 0;
    1 solo seme (escludendo quelli compresi già nei casi precedenti) rimane sempre se stesso, il già citato 3792.[/list:u:1tb79mdd]
    Quindi i numeri che citava ntn sono i soli a rimanere costanti, ma tutti gli altri o convergono su questi, o entrano in una di quele tre catene.
    Mi incuriosisce moltissimo questo 3792: chi è? perché è l'unicissimo (esclusi i multipli di 100) a comportarsi così?

    PS: ho usato questa formula:
    =RESTO(TRONCA(NumPrec^2/100;0);10000)

    dove NumPrec sta a indicare l'iterazione precedente.

tony19
"ntn":
Tony hai ragione con quei semi "il frutto non è comestibile", questa sera ne parlerò con la mia calcolatrice! se del caso proverò a farle scaricare i micro programmi interni :!: ne riparliami saluti antonio

grazie per l'attenzionw, ntn; e, visto che la cosa t'interessa, rincaro la dose.
i seguenti semi iniziano "catene" rispettivam. di soli 1, 2 e 3 elementi
(quelli da 1 li avevo già elencati nel mio msg. prec.)
level 1 :
    0  100 2500 3792 7600
level 2 :
    1    2    3    4    5    6    7    8    9  500 1000 1005 1500 2000
 2400 2600 3000 3500 3743 4000 4500 4717 4900 5000 5001 5100 5500 6000
 6245 6500 7000 7400 7500 8000 8500 9000 9500 9900
level 3 :
   10   11   12   13   14   15   16   17   18   19   20   21   22   23
   24   25   26   27   28   29   30   31  700  922  995 1245 1533 1578
 1800 2064 2429 2498 2502 3200 3387 3755 3821 3873 4300 4359 4899 4995
 4999 5005 5245 5436 5700 5831 6241 6249 6253 6257 6800 7064 7245 7746
 8200 8747 8755 8775 9300 9434 9798 9995
tantini, no?
mi sa che la bufala non è poi così piccola.
tony

ntn2
"tony":
grazie, ntn, di questo tuffo nel passato
[quote="ntn"]... secondo il manuale il seme è di 4 cifre e il risultato della troncatura è pure di 4 cifre.L' esempio è seme=5182 al quadrato 26853124 ed 8531 sono i numeri centrali che estrae come pseudo csuali e riutilizza come seme se deve continuare. ...
[/quote]
il giochino di quadrare e prender la parte centrale mi aveva riempito di speranza quando volevo generar numeri a caso con linguaggi di computer privi di quell'algoritmo.

Ma mi sono rapidamente ricreduto: almeno come lo hanno presentato a me (e, mi pare, anche a te) è praticamente inutilizzabile se non si parte da un seme "DOC"

Che voglio dire?
provate (vi costerà solo una moltiplicazione) ad applicare l'algoritmo cominciando da uno dei seguenti semi:
0 (troppo banale, escludiamolo pure), 100, 2500, 7600 (sospetti perchè multipli di 100), 3792 !!
qual'è il numero pseudocasuale generato? e quello successivo?

Se non sbaglio quell'algoritmo è una piccola bufala.
o no?

Tony hai ragione con quei semi "il frutto non è comestibile", questa sera ne parlerò con la mia calcolatrice! se del caso proverò a farle scaricare i micro programmi interni :!:

ne riparliami saluti antonio

tony19
grazie, ntn, di questo tuffo nel passato
"ntn":
... secondo il manuale il seme è di 4 cifre e il risultato della troncatura è pure di 4 cifre.L' esempio è seme=5182 al quadrato 26853124 ed 8531 sono i numeri centrali che estrae come pseudo csuali e riutilizza come seme se deve continuare. ...

il giochino di quadrare e prender la parte centrale mi aveva riempito di speranza quando volevo generar numeri a caso con linguaggi di computer privi di quell'algoritmo.

Ma mi sono rapidamente ricreduto: almeno come lo hanno presentato a me (e, mi pare, anche a te) è praticamente inutilizzabile se non si parte da un seme "DOC"

Che voglio dire?
provate (vi costerà solo una moltiplicazione) ad applicare l'algoritmo cominciando da uno dei seguenti semi:
0 (troppo banale, escludiamolo pure), 100, 2500, 7600 (sospetti perchè multipli di 100), 3792 !!
qual'è il numero pseudocasuale generato? e quello successivo?

Se non sbaglio quell'algoritmo è una piccola bufala.
o no?

tony

ntn2
Mi stai dando del vecchio??? :x





:D :D :D
No, mai usata. La mia uica calcolatrice scientifica è sempre stata una Texas Instruments TI-35X, ma tutto un altro livello rispetto a quelle di cui parli: non ha neanche i complessi...
PS: sono un '78[/quote]

No tutt'altro, intendevo che chi non ha usato a suo tempo una calcolatrice ormai fuori produzione da molti anni, (anche il suo linguaggio è in disuso) non prova emozione oggi ad usare un realistico simulatore per Pc della calcolatrice che usava quando era giovane.
Io sono del '54 e l' ho resuscitata quando mio figlio faceva i calcoli con gli schemi a blocchi alle elementari.

saluti

desko
"ntn":
Ma se non l' hai usata quando eri giovane (aimè molti anni addietro) :roll: potrebbe non avere significato.

saluti antonio

Mi stai dando del vecchio??? :x





:D :D :D
No, mai usata. La mia uica calcolatrice scientifica è sempre stata una Texas Instruments TI-35X, ma tutto un altro livello rispetto a quelle di cui parli: non ha neanche i complessi...
PS: sono un '78

ntn2
Lieto di esserti utili sull' argomento, secondo il manuale il seme è di 4 cifre e il risultato della troncatura è pure di 4 cifre.L' esempio è seme=5182 al quadrato 26853124 ed 8531 sono i numeri centrali che estrae come pseudo csuali e riutilizza come seme se deve continuare. Essendo quadrati di interi non hanno parti decimali.In vero una versione dei programmi proposti nel manuale usa formati decimali ma per una necessita di artificio tecnico relativo alla troncatura per estrarre i quattro numeri centrali. Devi considerare che stiamo parlando di una calcolatrice,che se anche funziona ancora, è degli anni 70/80 per lo piu' numerica e che nella versione base non dispone di funzioni per manipolare stringhe alfanumeriche in base alla loro lunghezza.Questo costringe ad esempio ad usare formati decimali per separare con la virgola i giorni dall' indicazione del mese attraverso la funzione numerica "considera la sola parte intera o la sola parte decimele, per sopstarsi all'interno delle cifre di un numero si usa la divisione per multipli di 10 così da spostare la , ed usarla come indice o marcatore di separazione che dir si voglia.

Se Ti interessa trovi un simulatore della 41cv per windows da scaricare sul sito museo dell' hp, è molto ben fatto anche graficamente,Ti sembra di avere in mano l' oggetto.
Ma se non l' hai usata quando eri giovane (aimè molti anni addietro) :roll: potrebbe non avere significato.

saluti antonio

desko
"ntn":
Riporto brevemente lo schema del prog. della 41: prendi il seme,lo elevi al quadrato, prendi la parte centrale delle cifre, elevi anche queste al quadrato, e ricominci. Se serve posto la fotocopia dello schema a blocchi.

Dopo aver imparato a postare una scansione :P

antonio

Ci sono vincoli, del tipo che il seme deve essere compreso fra 0 e 1?
quante cifre decimali vengono restituite?
cosa intendi esattamente per "parte centrale delle cifre?
Grazie mille, veramente interessante.

ntn2
La Dea della matematica non gioca a dadi e neppure le Sue ancelle Calcolatrici lo fanno.

Come avevo promesso ho consultato i manuali delle vecchie calcolatrici (hp 41c e 27) entrambe parlano di numeri pseudocasuali non casuali,come già li ha chiamati anche Toni, la 41 piu vecchia non ha la funzione built-in pertanto indica un senplice programma per generarli, chiede solo che si inserisca un seme numerico,da questo genera una sequenza ( o serie?) di numeri che sono difficilmente riconducibili al seme e di cui non si riconosce la legge di dipendenza dalla posizione nella serie.
La 27 che dispone di un orologio ricava il seme da sola ogni volta che viene attivata la f.rand ed incomincia a generare i numeri pseudo causali. Accetta anche l' inserimento di un seme stabilito dall' utente, a conferma di quanto hai detto nei post precedenti, se inserisci il medesimo seme ottieni la stessa serie di numeri.

Mi sembra a questo punto che se si vuole una serie di numeri effettivamente casuali nel significato corrente della parola, occorre attingere a fenomeni fisici caotici, forse le calcolatrici od i Pc potrebbero usare il rumore dei segnali elettrici dei loro transistor, o pescare a caso qualche segnale numerico tra tutti quelli che attualmente invadono l' etere. Oppure....... i vecchi buoni dadi.

Riporto brevemente lo schema del prog. della 41: prendi il seme,lo elevi al quadrato, prendi la parte centrale delle cifre, elevi anche queste al quadrato, e ricominci. Se serve posto la fotocopia dello schema a blocchi.

Dopo aver imparato a postare una scansione :P

antonio

tony19
Se non li conoscete già, i "Numerical Recipes" disponibili in rete per C, Fortan, Basic hanno un intero capitolo dedicato a vari algoritmi di generazione di numeri pseudocasuali, dai più semplici (e ce ne sono di semplicissimi) ai più evoluti.
Mettono anche in luce le magagne degli algoritmi normalmente contenuti nei programmi applicativi e nei compilatori di uso comune.
Inoltre danno molti sorgenti nei linguaggi di cui sopra.
E hanno capitoli su tanti altri argomenti matematici.
Roba da leggere.
tony

nato_pigro1
"ntn":
Se avete pazienza domani Vi posto la spiegazione della funzione random della mia fedele portatile, un hp 41cv che essendo piuttosto vecchia dispone di un mauale molto dettagliato.
Spero che sia all' altezza del suo mito.
antonio


grazie :P

ntn2
Se avete pazienza domani Vi posto la spiegazione della funzione random della mia fedele portatile, un hp 41cv che essendo piuttosto vecchia dispone di un mauale molto dettagliato.
Spero che sia all' altezza del suo mito.
antonio

Sk_Anonymous
Oggi qualsiasi macchina da calcolo elettronica possiede un orologio interno che scandisce parecchi milioni di cicli al secondo. Volendo generare numeri casuali compresi tra 0 e 1 con tre cifre significative una soluzione acettabile potrebbe essere quella di misurare, in multipli del periodo di orologio, il tempo in cui l'operatore tiene premuto il tasto 'random'. Il numero fornito in questo caso sarebbe il resto della divisione della misura divisa per mille, divisa a sua volta per mille. Questo non è certo l'unico modo per generare un numero 'casuale', ha però il vantaggio di essere assai semplice...

cordiali saluti

lupo grigio



An old wolf may lose his teeth, but never his nature

nochipfritz
Però devo dire che questo problema è molto interessante.
Anche perchè a volte si ha a che fare con algoritmi probabilistici. Quelli si che si possono definire algoritmi....perchè anche se fanno uso di valori generati da una funzione del tipo =RANDOM() l'output è univocamente determinabile in relazione al valore random restituito.

Però....è nata una definizione. Dio = entità divina ricorsivamente indefinibile.

nochipfritz
Secondo me...non ha senso parlare di algoritmi nell'ambito della generazione dei numeri casuali. L'algoritmo presuppone che ci sia un input e un output. Ma l'algoritmo non sa mai: da dove arriva e che significa l'input. E' come se si chiede ad un informatico di creare un algoritmo per capire chi è il creatore della terra. Dio ha creato la terra....ma chi ha creato Dio? Non si può costruire una ricorsione senza un caso base.
La spiegazione che mi sono dato è questa. Io ho fatto 1 materia(fisica 3) di cui mi è rimasto poco (anzi, niente...essendo uno studente di informatica...mi scocciavo anche a farla!) . Però ho capito che il funzionamento dei nostri dispositivi (calcolatrici, computer ecc...) a livello di microelettronica è legato a fenomeni aleatori (mi viene in mente, come esempio, la funzione di Fermi-Dirac). Pertanto agli ingegneri, risulta semplice effettuare la misura di una grandezza fisica e affidandosi alla casualità delle misure, trovare un caso base per la ricorsione dei numeri casuali. A quel punto basterebbe applicare a quel valore una funzione hash, per rendere più ristretto e personalizzato l'universo di estrazione dei numeri e il gioco è fatto.
Cioè, secondo me , noi nn consideriamo che abbiamo a che fare con dispositivi che (per volere divino) sono casuali. E' il nostro cervello che riesce (a livello macroscopico) a produrre una macchina discreta, da una macchina casuale. Per noi uomini è più facile ragionare nell'ordine, che nel disordine. Immaginate di eseguire un algoritmo in una macchina casuale....Nessuno sarebbe in grado di stabilire di fronte ad 1 certo input, un output ben preciso. Ma questa è la tecnica che si usa giorno per giorno. Un utente di internet non sa che nello stesso istante in cui sta inviando 1 email....ci sono centinaia di bit errati che viaggiano sulla rete. Un informatico lo sa, e sa che questi bit errati sono corretti, ad esempio, con il CRC. Probabilmente l'ingegnere è in grado di individuare la variazione fisica che ha generato l'errore. Ma a livello microscopico solo Dio (o quell' entità divina ricorsiva indefinibile) sa il perchè di quella variazione.

desko
"nato_pigro":
ma questo non spiega come le calcolatrici, dopo essere state resettate mi diano risultati diversi.

Hai perfettamente ragione: non lo spiega. Non ho idea del come, anzi una ce l'ho ma bisognerebbe provare.
Potrebe essere che ogni volta che si usa la funzione random rimane in memoria il risultato che viene usato per l'utilizzo successivo.
Questo potrebbe essere verificato togliendo le batterie, rimettendole e lanciando il random, ripetere il tutto e vedere se i risultati sono uguali. Se invece sono diversi vuol dire che il funzionamento è un altro o che c'è una memoria autonoma rispetto alla batteria.

nato_pigro1
"carlo23":
[quote="nato_pigro"]non me ne capisco di informatica...
posso immaginare però che la casualità, o pseodo-casualità, come la chiamano in quel link, sia più complessa quante più variabili prende in considerazione.
Ma una calcolatrice tascabile con la fuzione random, se la spengo, mi faccio dare un numero casuale, poi la rispengo - resetto - e la riaccendo, e mi faccio dare un'altro numero, perchè i due numeri sono diversi? cosa è cambiato dalla situazione 1 alla situazione 2?


Non so, ma sicuramente la calcolatrice deve avere qualche componente che prenda una variabile esterna o che misuri il tempo... in effetti il tuo esperimento ha dimostrato che deve essere così.

Ad esempio se non erro gli orologi digitali al quarzo misurano il tempo contando le vibrazioni di un cristallo di quarzo sollecitato da una corrente elettrica, se la calcolatrice appena accesa attivasse un componente simile e misurasse gli intervalli di tempo modulo 100, cioè conta gli intervalli 1,2,3...98,99,0,1,2... ecc. appena verrebbe premuto il tasto RANDOM la calcolatrice potrebbe restituire il tempo passato diviso 1000 ottenendo un buon numero pseudo-casuale.[/quote]

è un'idea, il fatto è che mi sembra strano che una calcolatrice tascabile, tutto sommato semplice abbia un meccanismo che tiene conto del tempo. E poi se premo il tasto nello stesso momento (da una volta all'altra) dovrebbe darmi lo stesso risultato? boh... non saprei, anche perchè provando fisicamente non ho la certezza di premerlo nello stesso isatante.

carlo232
"nato_pigro":
non me ne capisco di informatica...
posso immaginare però che la casualità, o pseodo-casualità, come la chiamano in quel link, sia più complessa quante più variabili prende in considerazione.
Ma una calcolatrice tascabile con la fuzione random, se la spengo, mi faccio dare un numero casuale, poi la rispengo - resetto - e la riaccendo, e mi faccio dare un'altro numero, perchè i due numeri sono diversi? cosa è cambiato dalla situazione 1 alla situazione 2?


Non so, ma sicuramente la calcolatrice deve avere qualche componente che prenda una variabile esterna o che misuri il tempo... in effetti il tuo esperimento ha dimostrato che deve essere così.

Ad esempio se non erro gli orologi digitali al quarzo misurano il tempo contando le vibrazioni di un cristallo di quarzo sollecitato da una corrente elettrica, se la calcolatrice appena accesa attivasse un componente simile e misurasse gli intervalli di tempo modulo 100, cioè conta gli intervalli 1,2,3...98,99,0,1,2... ecc. appena verrebbe premuto il tasto RANDOM la calcolatrice potrebbe restituire il tempo passato diviso 1000 ottenendo un buon numero pseudo-casuale.

nato_pigro1
"desko":
[quote="nato_pigro"]non me ne capisco di informatica...
posso immaginare però che la casualità, o pseodo-casualità, come la chiamano in quel link, sia più complessa quante più variabili prende in considerazione.

In realtà non è proprio così.
O meglio, non c'è bisogno di prendere un sacco di variabili per avere una sufficiente complessità. Ne basta 1 ed anche la funzione può essere tuttto sommato abbastanza semplice; la complessità nasce dall'iterazione di questa funzione un elevato numero di volte.
È quello che avviene per i frattali, che nascono da operazioni semplicissime iterate all'infinito.
O pensa anche al computer: essenzialmente non può fare altro che una manciata di operazioni banalissime, ma combinate opportunamente insieme un numero enorme (ma stavolta finito) di volte permettono di fare tutto quello che fanno i computer.
Purtroppo ora non ne ho esempi a portata di mano, appena ne recupero uno lo posto.[/quote]

ok, premetto che ne sai più di me di sicuro, e le mie domande non mettono in dubbio la tua conoscenza in materia ma è per capire...
ma questo non spiega come le calcolatrici, dopo essere state resettate mi diano risultati diversi.
Poi, per i frattali: appunto perchè le operazioni che li generano sono semplici, dato un dato iniziale e le operazioni fissate il risultato sarà sempre quello... o sbaglio?

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.