Cum se creează un generator aleatoriu
On februarie 10, 2021 by adminCum ar putea fi implementat un generator aleatoriu?
Nu vorbesc despre invocarea unei limbi metoda mathRandom () , dar implementarea rutinelor care conduc la generarea de numere total aleatorii.
Comentarii
- I ‘ m-am aventurat să spun că adevărata întâmplare nu este posibilă în prezent.
- @Dinamic Cred că același lucru este de părere, totuși am avut întotdeauna am invocat funcția aleatorie atunci când este necesar, dar nu am ‘ ideea despre cum ar trebui implementată o metodă aleatorie.
- ” total aleatoriu ” este o gaură de iepure foarte profundă.
- @Dinamic: este de fapt banal să obții o secvență care nu se distinge de datele cu adevărat aleatorii, atâta timp cât tu priviți către lumea exterioară cu suport hardware. Fizica atomică și subatomică, (dezintegrarea atomică, evenimentele de tip senzori care lovesc fotonii) este (în extindere f teoria științei actuale) cu adevărat aleatorie și ușor de măsurat. Termodinamica pe scară largă este atât de haotică încât o putem considera aleatorie atunci când inspectăm sistemul macro la scara micro etc. Zgomotul de la un senzor al camerei digitale este un bun exemplu …..
Răspuns
Cheia pentru un număr cu adevărat aleatoriu este sursa de date aleatorie. Uneori, acestea sunt informații, cum ar fi întârzieri în evenimentele de pe tastatură sau evenimente de rețea. Acolo unde se doresc date aleatorii de înaltă calitate, acestea pot fi dezintegrare radioactivă . SGI a implementat lavarand care și-a extras sămânța pentru un generator de numere aleatorii dintr-o imagine digitalizată a unei lămpi de lavă. Acest lucru a fost suficient pentru a fi considerat un generator de numere aleatorii.
În afara datelor cu adevărat aleatorii, se poate lucra cu un sistem determinist, dar haotic. De exemplu, mersenne twister . În aceste situații, se generează generatorul cu un număr și apoi îl rulează înainte pentru a obține numere pseudo-aleatorii. Acestea sunt suficiente pentru jocuri și altele asemenea, în cazul în care nu este „critic dacă cineva poate determina sămânța (și următorul număr din secvență).
Luați în considerare citirea brevetului 5.732.138 și http://www.lavarnd.org/ pentru detaliile implementării despre cum se face un număr.
Comentarii
- +1 Aș lua în considerare diferite surse de date, cum ar fi măsurători meteo pentru semințele dvs. wiki.cdyne .com /? title = CDYNE_Weather
- @ emeraldcode.com provocarea măsurătorilor meteo este că nu sunt complet aleatorii. Există un câmp întreg despre prezicerea vremii. Temperatura tinde să crească atunci de-a lungul unei zile. Iarna este mai rece decât vara. Sistemul hotbits folosește aleatoriu de sincronizare a două evenimente de decădere care sunt imprevizibile (măsurați timpul de la evenimentul 1 la evenimentul 2 și timpul de la evenimentul 3 la evenimentul 4 – dacă 1 : 2 == 3: 4, aruncați datele. Dacă 1: 2 3: 4, bitul aleator este 0. Dacă 1: 2 > 3: 4, bitul aleator este 1.
- ‘ vorbesc despre viteza vântului, presiunea barometrică, temperatura, umiditatea etc. Puteți lua un eșantion de măsurători și vă puteți argumenta cu greu împotriva aleatoriei în această privință. De asemenea, temperatura luată la o precizie suficientă este foarte aleatorie.
Răspuns
Ce fel de întâmplare vorbești despre?
Există două proprietăți principale care definesc aleatoriu în sens matematic: prima este imprevizibilitate , iar al doilea este distribuție uniformă .
Dacă vorbiți despre prima, în general, este aproape imposibil să o generezi în întregime în cadrul software-ului (și să o faci corect). Există câteva moduri, cum ar fi adunarea entropiei de pe dispozitivele de interfață umană, de ex. /dev/random
în Linux, dar generăm un nivel destul de scăzut de entropie pentru a fi utile. Alții au indicat deja unele implementări hardware. Toate au rădăcini adânci în teoria fizicii (cum ar fi convingerea noastră că momentul exact în care un foton va lovi un detector este cu adevărat aleatoriu). Există câteva algoritmi software pentru acest lucru, cum ar fi Blum-Blum-Shub . În general, nu „scrieți un PRNG dacă aveți nevoie de imprevizibilitate, ci mai degrabă utilizați una stabilită . Acest lucru este valabil mai ales cu cripto.
Cealaltă proprietate importantă a funcțiilor aleatorii este de fapt destul de ușor de satisfăcut. Există multe exemple din aceasta, la fel ca RNG din spatele RC4 , Registre de schimbare a feedback-ului liniar (acesta a fost de fapt folosit și pentru cripto, odată, dar a fost găsit insuficient de sigur) etc.Chiar și biblioteca standard C rand()
va funcționa probabil bine în acest scop.
Cel mai important: asigurați-vă că știți care dintre cele două proprietăți este fundamentală pentru nevoile dvs. Imprevizibil PRNG-urile sunt distribuite uniform, de asemenea, dar invers nu este adevărat. De asemenea, dacă expuneți întâmplarea în interiorul unui „motor” de un fel (cum ar fi un motor de joc), asigurați-vă că oamenii nu pot juca sistemul, deoarece ați putea fi surprins cât de ușor este de fapt. De exemplu, CSS (algoritmul de criptare DVD) a folosit 2 LSFR în scopuri de criptografie și a fost rupt destul de ușor.
Răspuns
Mai întâi , nu puteți genera numere cu adevărat aleatorii în software. Există o mulțime de algoritmi diferiți care vă permit să generați numere pseudo-aleatorii. În funcție de motivul pentru care aveți nevoie de numere pseudo-aleatorii (de exemplu, dacă le utilizați în criptografie, cerințele sunt mult mai mari diferit), ați folosi în general ceva de genul generatorului de numere aleatorii din biblioteca științifică GNU (pe care, desigur, îl puteți implementa în orice limbă preferați).
Răspuns
Hardware. Trebuie să vă conectați la hardware care poate aduna entropia de … oriunde. Citiți statica dintr-un radio, puneți o cameră web pe un lavalamp sau cereți utilizatorului să tastați gibberish sau să se joace cu mouse-ul. Fără un contact cu lumea reală, generarea aleatoriei adevărate este imposibilă. Este o zonă importantă f studiază și s-a pus multă muncă în el. Mă îndoiesc că veți aprinde orice traseu nou, așa că ar trebui să stați pe umerii giganților și să începeți să citiți intrările din Wikipedia.
„Generarea numerelor aleatoare este prea importantă pentru a fi lăsată șansă. „
-Robert R. Coveyou
EDIT
Deci, am” ve am aflat că hardware-ul pe care îl doriți este de fapt doar un cip CMOS . Genul în camerele foto ieftine. Doar păstrați-l în întuneric, setați sensibilitatea în sus și, aparent, variațiile minute pe care le observă au rădăcini în mecanica cuantică, de unde ne derivăm entropia în viața reală.
Răspuns
Ultima dată când m-am uitat, care a fost cu mult timp în urmă, referința canonică privind implementarea generatoarelor de numere pseudorandom (PRNG ) este Knuth, Vol. 2, „Algoritmi seminumerici” .
Nu vă gândiți nici măcar să încercați să vă implementați propriul PRNG până când nu veți fi privit cel puțin prin Knuth.
Lasă un răspuns