Följ Black Week på SweClockers

Hur fungerar egentligen en randomgenerator?

Permalänk
Medlem

Hur fungerar egentligen en randomgenerator?

Jag hamnade i en hetlevrad diskussion igår om huruvida en dator kan göra något totalt slumpartat eller inte eftersom den väl bara följer direkta kommandon.

Så om man använder sig av en helt vanlig randomfunktion som finns i typ alla grafräknare eller programmeringsspråk som tex ska slumpa fram en siffra mellan 1 och 10 och den tex väljer 7. Hur "tänker" datorn då när den väljer 7?

Med andra ord: exakt vad har han som skapade själva randomfunktionen bett datorn att göra när den ska slumpa ut en siffra? Datorn kan väl inte bara "blunda och peka på någonting"? Jag kollade lite på wikipedia efter svar men fattade typ ingenting, är det nån avancerad jävla mattematik det är frågan om eller?

Permalänk
Moderator
Forumledare
Skrivet av gummangr:

Jag hamnade i en hetlevrad diskussion igår om huruvida en dator kan göra något totalt slumpartat eller inte eftersom den väl bara följer direkta kommandon.

Så om man använder sig av en helt vanlig randomfunktion som finns i typ alla grafräknare eller programmeringsspråk som tex ska slumpa fram en siffra mellan 1 och 10 och den tex väljer 7. Hur "tänker" datorn då när den väljer 7?

Med andra ord: exakt vad har han som skapade själva randomfunktionen bett datorn att göra när den ska slumpa ut en siffra? Datorn kan väl inte bara "blunda och peka på någonting"? Jag kollade lite på wikipedia efter svar men fattade typ ingenting, är det nån avancerad jävla mattematik det är frågan om eller?

Wow, ja antingen matematik eller djup filosofi med tanke på att datorn är programmerad av en människa.
Då är vi inne på människans förmåga att generera slumpmässiga tal då vi styrs av vårt undermedvetna

Visa signatur

Forumets regler | Har du synpunkter på hur vi modererar? Kontakta SweClockers/moderatorerna

Jag stavar som en kratta

Gillar lök på discord

Permalänk

Datorer har väldigt komplexa algoritmer för att slumpa ut saker. De räknar ofta med tid för att få konstant varierande seeds.

Visa signatur

Insert funny joke here

Permalänk
Medlem

En dator kan inte göra någonting slumpartat. Den kan däremot göra någonting "oförutsägbart" i den bemärkelse att du med siffror i handen och alla algoritmer i bakgrunden ändå kan förutsäga vilken siffra som dyker upp, men ofta har man en slumpgenerator som alltså generera en bestämd siffra per millisekund men beroende på vilken ögonblick human input klickar på knappen så kommer ett för användaren upplevt slumpmässigt (eller bättre sagt "oförutsägbart") värde. Det finns olika varianter på lösning till slumpgenerator, men en dator kan inte ge sann slump. Filosofer kan diskutera om det överhuvudtaget existerar sann slump, men för en dator existerar det över huvud taget inte. Man kan alltså bara hitta olika sätt som härmar idén olika bra.

Visa signatur

Asus M5A99X EVO | AMD PhenomII x6 1100T @3.3GHz | Hyper 212+ EVO | Corsair DDR3 1600MHz @16GB | Asus GeForce GTX 1060 @1GB | Crucial M4 SSD @128GB | OCZ Solid 3 SSD @60GB | Seagate barracuda HDD @2TB | Corsair TX650 @650W | benQ 24" @2ms | Logitech X-540 @70W 5.1-surround | Corsair Gaming K95 RGB

Permalänk

Här är en bra video som förklarar lite enkelt om random numbers
http://www.youtube.com/watch?v=SxP30euw3-0

Visa signatur

Var snäll och tänk på miljön innan du väljer att skriva ut svaret ovan

Permalänk
Medlem

Slumptalsgeneratorerna som används i datorer är oftast så kallade pseudoslumptalsgeneratorer, dvs. de är egentligen inte slumpartade utan ser bara så ut. De brukar vara konstruerade så att man börjar med ett start-tillstånd, och använder sedan en algoritm för att beräkna nästa tillstånd. En av de enklaste är en linjär kongruensgenerator, där man börjar med ett tal (t.ex. klockslaget angivet i millisekunder), och beräknar sedan nästa slumptal från det med en liten formel. Sedan beräknar man nästa slumptal från föregående slumptal, etc. Resultat ser därmed slumpartat ut, men är i verkligheten bara en matematisk talföljd.

Det finns även "riktiga" slumpgenerator som använder fysikaliska fenomen för att generera slumptal, lite på samma sätt som när en människa slår en tärning. Du kan läsa mer om såna på Wikipedia.

Permalänk
Medlem

Det enklaste sättet är att säga att "det beror lite på". Ett tal kan aldrig vara totalt slumpmässigt, då det fortfarande måste beräknas och påverkas av någonting. Däremot finns det olika grader av slumpmässighet.

Vissa funktioner drar fram ett tal beroende på tid, andra med hjälp av atomer, sen finns det även några som pysslar med kvantmekanik. Allt kan egentligen användas för att få fram ett någorlunda slumpmässigt tal, sen beror det helt på ändamålet vad graden av slumpmässighet måste vara.

Korta svaret: Ja, det är nån jävla avancerad matematik som styr

Permalänk
Medlem

Intressant fråga egentligen. Hur funkar det med t ex Casinon på internet. Är korlekarna i nätpoker slumpmässigt blandade eller blandade utifrån någon algoritm? Går det att fuska?

Permalänk
Medlem

Jag tänkte också att det hade med tid att göra, tex att den kör någon matematisk funktion i ett antal millisekunder och sen får den se var svaret hamnar. Men då måste väl också själva "körstiden" vara slumpad för att svaret ska bli slumpat på riktigt?

Permalänk
Medlem

Slumptal i onlinespel hämtas oftast från en USB/serie dongel som lyssnar på bakgrundbruset (radioaktiviteten) som sedan feedar systemet med slumptal.

Permalänk
Medlem

Det beror helt på vad man har använt för algoritm,men såvitt jag vet kan datorn aldrig slumpa en helt slumpmässig siffra. Den första man lär sig i programmeringen t.ex. är totalt värdelös vilket man märker om man slumpar mer än en siffra. Eftersom att den använder tiden så får man fram samma siffra flera gånger i rad om man slumpar snabbt efter varandra, och värdet blir linjärt större.

Mersenne twister är såvitt jag vet en riktigt bra algoritm för att slumpa fram tal.

http://en.wikipedia.org/wiki/Mersenne_twister

Här kan du läsa kod för den: http://www.bedaux.net/mtrand/

Visa signatur

| Fractal Design XL R2| 2x Gigabyte 680 Gtx@1254/7300mhz | Asrock Z77 OC Formula | 3570k@4.5ghz(1.36v) & Phanteks PH-TC14PE | 16gig hyperx beast series@2133mhz | Fractal Design Newton R2, 1000W 80+ | Samsung SSD Basic 840-Series 512GB | 2TB Toshiba 7200rpm SATA6 | 9x Scythe Glide Stream 2000rpm | 2x Bitfenix Recon Fan Controller | BenQ 27'' XL2720T 120Hz + Dell UltraSharp 27" U2713HM IPS 2560x1440 | Sennheiser HD595

Permalänk
Medlem
Skrivet av Knarra:

Intressant fråga egentligen. Hur funkar det med t ex Casinon på internet. Är korlekarna i nätpoker slumpmässigt blandade eller blandade utifrån någon algoritm? Går det att fuska?

Det går att fuska om du vet vilken algoritm de använder och vilket frö (seed) algoritmen startar på.
Rent praktiskt är algoritmen är knappast något större problem att ta reda på, men det är förmodligen praktiskt taget omöjligt att komma över frövärdet då det säkerligen baseras på många olika värden som ändras väldigt ofta.

Permalänk
Medlem

Som du säger kan en dator inte "blunda och peka". Den måste bli tillsagd precis hur den ska göra allting, via algoritmer. Många slumpgeneratorer i datorer använder, som redan nämnts, tid för att få en ny seed väldigt ofta, men tid går att förutspå och är med andra ord inte slumpmässig.

Så en "äkta" slumpgenerator kan du inte få ur en dator, SÅVIDA du inte använder externa källor. "White noise" eller "cosmic noise" används ibland för att öka på slumpmässigheten med något externt som inte går att förutspå. Även elektroners positioner på atomer används, men det kan jag för lite om för att uttala mig om. Finns även annat som går att använda som externa källor, men det var ett par exempel.

Försökte själv bygga en slumpalgoritm för ett par år sedan där den externa källan var avläsning från varvtalet på en av chassifläktarna i datorn. Det visade sig inte alls vara lyckat då varvtalet var förvånansvärt konstant...

Visa signatur

[ Derp ]

Permalänk

På gymnasiet berättade en av mina lärare hur en typ av slumptalsgenerator kunde fungera (ganska primitiv och förutsägbar, men ändå):

N := seed (något tal mellan 0 och 1) function getRandom N = fraction(147*N) return N

Som du ser kan implementationen vara oerhört enkel, och ändå ge relativt bra resultat. Vad som ger olika tal vid olika körningar är alltså vart du startar (din seed)

Permalänk
Medlem
Skrivet av deadich:

Den första man lär sig i programmeringen t.ex. är totalt värdelös vilket man märker om man slumpar mer än en siffra. Eftersom att den använder tiden så får man fram samma siffra flera gånger i rad om man slumpar snabbt efter varandra, och värdet blir linjärt större.

Det där är ett vanligt nybörjarfel där man seedar slumpgeneratorn före varje anrop till den, då kan man lika gärna använda tiden som slumptal direkt. Det korrekta är istället att endast seeda slumpgeneratorn en gång, så att den istället använder föregående slumptal för att beräkna nästa. Då spelar det ingen roll hur ofta man anropar slumpgeneratorn, eftersom tiden endast används för att initiera den.

Permalänk
Medlem
Skrivet av perost:

Det där är ett vanligt nybörjarfel där man seedar slumpgeneratorn före varje anrop till den, då kan man lika gärna använda tiden som slumptal direkt. Det korrekta är istället att endast seeda slumpgeneratorn en gång, så att den istället använder föregående slumptal för att beräkna nästa. Då spelar det ingen roll hur ofta man anropar slumpgeneratorn, eftersom tiden endast används för att initiera den.

Jag har för mig att jag bara gjorde det en gång, men det är möjligt att jag gjorde det misstaget eftersom att jag skrev programmet när jag inte programmerat på 5 år.

Skrivet av Maldergho:

På gymnasiet berättade en av mina lärare hur en typ av slumptalsgenerator kunde fungera (ganska primitiv och förutsägbar, men ändå):

N := seed (något tal mellan 0 och 1) function getRandom N = fraction(147*N) return N

Som du ser kan implementationen vara oerhört enkel, och ändå ge relativt bra resultat. Vad som ger olika tal vid olika körningar är alltså vart du startar (din seed)

Oerhört enkel vettetusan eftersom att den använder två funktioner som kanske är avancerade och kräver bibliotek.

Visa signatur

| Fractal Design XL R2| 2x Gigabyte 680 Gtx@1254/7300mhz | Asrock Z77 OC Formula | 3570k@4.5ghz(1.36v) & Phanteks PH-TC14PE | 16gig hyperx beast series@2133mhz | Fractal Design Newton R2, 1000W 80+ | Samsung SSD Basic 840-Series 512GB | 2TB Toshiba 7200rpm SATA6 | 9x Scythe Glide Stream 2000rpm | 2x Bitfenix Recon Fan Controller | BenQ 27'' XL2720T 120Hz + Dell UltraSharp 27" U2713HM IPS 2560x1440 | Sennheiser HD595

Permalänk
Medlem
Skrivet av =JoNaZ=:

Slumptal i onlinespel hämtas oftast från en USB/serie dongel som lyssnar på bakgrundbruset (radioaktiviteten) som sedan feedar systemet med slumptal.

Så teoretiskt sett kan man rikta någon kontrollerad radioaktivitetsstråle mot den här USB-dongeln och påverka den exakt som man vill att utgången ska bli?

Om man tex bryter sig in till stället där Blizzards usb-dongel finns och riktar just rätt radioaktivitet mot den så kan man säga till den att en boss i Diablo 3 ska droppa det bästa itemet i spelet? (för drops o sånt e väl också random?)

Permalänk
Medlem
Skrivet av gummangr:

Så teoretiskt sett kan man rikta någon kontrollerad radioaktivitetsstråle mot den här USB-dongeln och påverka den exakt som man vill att utgången ska bli?

Om man tex bryter sig in till stället där Blizzards usb-dongel finns och riktar just rätt radioaktivitet mot den så kan man säga till den att en boss i Diablo 3 ska droppa det bästa itemet i spelet? (för drops o sånt e väl också random?)

Betydligt lättare att hacka någons konto eller nåt.

Visa signatur

| Fractal Design XL R2| 2x Gigabyte 680 Gtx@1254/7300mhz | Asrock Z77 OC Formula | 3570k@4.5ghz(1.36v) & Phanteks PH-TC14PE | 16gig hyperx beast series@2133mhz | Fractal Design Newton R2, 1000W 80+ | Samsung SSD Basic 840-Series 512GB | 2TB Toshiba 7200rpm SATA6 | 9x Scythe Glide Stream 2000rpm | 2x Bitfenix Recon Fan Controller | BenQ 27'' XL2720T 120Hz + Dell UltraSharp 27" U2713HM IPS 2560x1440 | Sennheiser HD595

Permalänk
Medlem
Skrivet av gummangr:

Så teoretiskt sett kan man rikta någon kontrollerad radioaktivitetsstråle mot den här USB-dongeln och påverka den exakt som man vill att utgången ska bli?

Om man tex bryter sig in till stället där Blizzards usb-dongel finns och riktar just rätt radioaktivitet mot den så kan man säga till den att en boss i Diablo 3 ska droppa det bästa itemet i spelet? (för drops o sånt e väl också random?)

Om du kunde göra det så skulle du vara så upptagen med att ta emot nobelpriser och liknande, så du skulle inte ha tid att spela Diablo 3 Själva idéen bakom hårdvaruslumpgeneratorer är ju att de utnyttjar fenomen som åtminstone i teorin anses vara omöjliga att förutsäga, annars är de ju inte slumpmässiga.

Permalänk
Medlem

Vi brukar lösa slumpgeneratorer med att tex läsa av signalfluktueringar i styrspakar (finns alltid en svag punkt där signalen ligger och dallrar) eller så använder man fraktaler, men fraktaler är ganska mycket mer avancerat. Blir dock aldrig äkta slump, då det i slutändan krävs att ett chip som går på programmerade instruktioner måste göra ett val.

Man kan också bygga en robot med en kamera som filmar rakt ner i en burk, i burken ligger ett gäng tärningar och roboten skakar burken när den ska få fram ett slumptal och använder mjukvara för att läsa tärningarna genom kameran, detta är dock ganska otympligt i 99 fall av 100.

Permalänk
Medlem
Skrivet av fagballs:

Man kan också bygga en robot med en kamera som filmar rakt ner i en burk, i burken ligger ett gäng tärningar och roboten skakar burken när den ska få fram ett slumptal och använder mjukvara för att läsa tärningarna genom kameran, detta är dock ganska otympligt i 99 fall av 100.

Blir det verkligen en perfekt slumpning? roboten skakar väl burken på ett ganska kontrollerat sätt varje gång som gör att tärningarna går att förutspå lite? och i verkligheten slits väl tärningarnas kanter lite ojämnt vilket gör att efter många skakningar blir chansen lite lite större att tärningen rullar åt ett visst håll?

Och vad hade skillnaden varit att i en fysikmotor i en dator skapa samma scenario digitalt med en robot som skakar tärningar med hjälp av de modeller av fysikens lagar vi känner till? Kollisioner mellan materialen, gravitation osv. de borde väl bli lika slumpartat som i verkligheten om inte bättre?

Permalänk
Medlem

SGI använde en lavalampa en gång i tiden för att få fram slumptal.
http://en.wikipedia.org/wiki/Lavarand

Sen får man ta och skilja på pseudoslump och slump.

Permalänk
Inaktiv

Slumpen existerar inte inom vetenskapen sägs det ju, men det mest slumpmässiga jag sett är iallafall med quantum computing; http://qrng.anu.edu.au/

Den mäter skillnader i quantum fluctuations eller något liknande spexxat.

Permalänk
Hedersmedlem
Skrivet av MrMadMan:

Det går att fuska om du vet vilken algoritm de använder och vilket frö (seed) algoritmen startar på.
Rent praktiskt är algoritmen är knappast något större problem att ta reda på, men det är förmodligen praktiskt taget omöjligt att komma över frövärdet då det säkerligen baseras på många olika värden som ändras väldigt ofta.

De stora seriösa spelsidorna använder dock inte pseudo-RNGs, alternativt så kanske de kombinerar dem med riktiga RNGs som använder fysiska fenomen som grund, på ett sätt som gör att det ändå är omöjligt att förutse slumpvärden.
Se t ex Full Tilt.

Skrivet av gummangr:

Så teoretiskt sett kan man rikta någon kontrollerad radioaktivitetsstråle mot den här USB-dongeln och påverka den exakt som man vill att utgången ska bli?

Om man tex bryter sig in till stället där Blizzards usb-dongel finns och riktar just rätt radioaktivitet mot den så kan man säga till den att en boss i Diablo 3 ska droppa det bästa itemet i spelet? (för drops o sånt e väl också random?)

Kontrollerad radioaktivitet är lite av en självmotsägelse, eftersom atomsönderfall till synes är totalt slumpmässigt.

Skrivet av anon214934:

Slumpen existerar inte inom vetenskapen sägs det ju, men det mest slumpmässiga jag sett är iallafall med quantum computing; http://qrng.anu.edu.au/

Den mäter skillnader i quantum fluctuations eller något liknande spexxat.

Hmm, vem säger det? Vad jag vet så finns det många slumpfenomen inom vetenskapen, kanske framför allt QM som sagt, men även saker som värmestrålning, atomsönderfall m.m. anses väl vara 100% oförutsägbart?

Visa signatur

Asus ROG STRIX B550-F / Ryzen 5800X3D / 48 GB 3200 MHz CL14 / Asus TUF 3080 OC / WD SN850 1 TB, Kingston NV1 2 TB + NAS / Corsair RM650x V3 / Acer XB271HU (1440p165) / LG C1 55"
NAS: 6700K/16GB/Debian+ZFS | Backup (offsite): 9600K/16GB/Debian+ZFS

Permalänk
Medlem
Skrivet av gummangr:

Blir det verkligen en perfekt slumpning? roboten skakar väl burken på ett ganska kontrollerat sätt varje gång som gör att tärningarna går att förutspå lite? och i verkligheten slits väl tärningarnas kanter lite ojämnt vilket gör att efter många skakningar blir chansen lite lite större att tärningen rullar åt ett visst håll?

Och vad hade skillnaden varit att i en fysikmotor i en dator skapa samma scenario digitalt med en robot som skakar tärningar med hjälp av de modeller av fysikens lagar vi känner till? Kollisioner mellan materialen, gravitation osv. de borde väl bli lika slumpartat som i verkligheten om inte bättre?

Tycker du svarar på din egen fråga där rätt bra.
Blir ett moment 22 där, för hur ska du slumpa fram skakningarna av tärningarna som behövs för att slumpa...ja, som sagt.

Visa signatur

[ Derp ]

Permalänk
Permalänk
Medlem
Skrivet av Thomas:

Hmm, vem säger det? Vad jag vet så finns det många slumpfenomen inom vetenskapen, kanske framför allt QM som sagt, men även saker som värmestrålning, atomsönderfall m.m. anses väl vara 100% oförutsägbart?

Allt är förutsägbart, det är bara en fråga om att känna till alla variabler.
Ett tärningskast kan verka random men vet du krafter som påverkar, viktfördelning, yta, vinkel osv. (dvs allt som påverkar) så kan du med 100% säkerhet förutspå resultatet, principen går även att applicera på allt annat, problematiken är att vissa faktorer är praktiskt sett "unknowable" där kommer saker som QM och liknande in.

Sedan glider det över i mer filosofiska frågor om "fri vilja" och dylikt och om det verkligen existerar samt hur det isf påverkar m.m. så jag tror datorers sätt att ta fram "random" är lagom komplext för det mesta.

Visa signatur

"One is always considered mad, when one discovers something that others cannot grasp."
- Ed Wood

Permalänk

Vilken random tråd...

Visa signatur

Citera för lättare svar!
Main: Core i7 3820 3,6GHz @ Corsair H50 - Asus P9X79 - Corsair Vengance 4x4GB 1600mhz -
80GB Intel X25-M G2 - 240GB Corsair Force GS - 3TB HGST HDD - Corsair HX 1000W - Sapphire Radeon R9 290x Tri-X
NAS: Lagring: 6TB RaidZ - Backup: 3TB Raid 1 - FreeNAS 9.3 Uplink: Telia Fiber 100/100

Permalänk
Datavetare

Finns CPUer som har kretsar för att generera "äkta" slump i bemärkelsen att talet är ett resultat av något som är lika slumpmässigt som bakgrundsbrus. De sista CPUerna som VIA gjorde samt Ivy Bridge och Haswell innehåller en sådan krets.

Att generera tillsynes slumpmässiga tal på en dator utan speciell HW är väldigt lätt att göra på fel sätt... Det man vill uppnå är en funktion som genererar tal från N till M där alla tal kommer genereras innan serien börjar om + alla tal är ungefär lika sannolika + medelvärdet är medelvärdet av N och M.

Funktionen rand() i standard C gör detta via följande ekvation på de flesta plattformar

X(0) = seed X(n+1) = (a * X(n) + c) mod m

Är väldigt viktigt att välja "rätt" a och c givet m. Man får ett tal mellan 0..(m-1) och "rätt" i detta fall är att dessa tre uppfyller vissa matematiska kriterier, i.e. givet m är det bara vissa a och c som är tillåtna.

Visa signatur

Care About Your Craft: Why spend your life developing software unless you care about doing it well? - The Pragmatic Programmer

Permalänk
Inaktiv

Det beror lite på. De flesta slumpgeneratorer kan generera tal i olika fördelningar etc. De innehåller en del matte. Gemensamt för alla slumpgeneratorer är att de behöver något slags tal att jobba med, kallat "seed" eller frö på svenska. De kommer då att manipulera talet på något vis, det behöver inte vara särskilt svårt. Det skulle kunna vara något så enkelt som att ta (((tal + 7) / 6)/tal) % 10), det hade nog blivit ganska så slumpämssigt.

Gemensamt för algoritmerna skall vara att det är svårt att lista ut random(x+1) även om man känner random(x). Kallas låg kollisionsrisk.

Det kluriga är att hitta ett bra "seed". Vad vill man räkna egentligen?
Tid? Inte så bra då tiden är samma överallt och man kan gissa vad tiden är i framtiden
Tid sedan datorn startade? Inte så slumpmässigt.
Antal bitar datorn skickat de senaste 20 sekunderna. Detta är bra och varier mycket mellan datorerna
Översätt en viss plats i minnet till siffror, detta är också bra, mycket svårt att veta vad en annan dator gör.
Räkna osynliga partiklar med en webbkamera, också bra. Mycket svårt att veta när och hur de inträffar.