Joagamer Skrevet 26. november 2011 Del Skrevet 26. november 2011 (endret) Hey, jeg leter fælt etter en matematisk funksjon med disse trekkene: Kaotisk: Inneholder en konstant som er ekstremt sensitiv (chaos theory / butterfly effect) Tilfeldig: Gir en tilsynelatende tilfeldig y-verdi for hver x-verdi. Funksjonen skal altså kunne brukes som en slags "random number generator", hvor konstanten er et seed, og man får et tilfeldig tall for hver x-verdi. Eksempel: k=123 f(x)=blablabla*k f(1)=4 f(2)=11 f(3)=10 Edit: Et alternativt spørsmål, siden det over er ganske merkelig: Det jeg egentlig trenger er en uendelig rekke tilfeldige tall, som blir generert ut ifra et seed. Og tallrekka må bli helt annerledes om seed'et forandres bare bittelitt. Endret 26. november 2011 av Joagamer Lenke til kommentar
BlueEAGLE Skrevet 26. november 2011 Del Skrevet 26. november 2011 Hva er galt med å bruke randomize(k); echo rand(); echo rand(); Nå vil syntaksen variere fra programmeringsspråk til programmeringsspråk men felles for de fleste (alle) har en generator for tilfeldige tall som ikke genererer tilfeldige tall men som alle trenger en startverdi. Det som gjør generatoren tilsynelatende tilfeldig er at startverdien beregnes ut fra flere variabler, deriblandt klokken. For mer informasjon om hvordan dette virker i .net sjekk http://www.techrepublic.com/article/working-with-random-numbers-in-net-applications/5663283 Hvis du er mer interessert i funksjonen bak denne funksjonaliteten så er wikipedia et fint sted å begynne. Lenke til kommentar
☀ ❄ Skrevet 26. november 2011 Del Skrevet 26. november 2011 (endret) Funksjonen skal altså kunne brukes som en slags "random number generator", hvor konstanten er et seed, og man får et tilfeldig tall for hver x-verdi. Reuse is a wonderful thing: Mersenne twister Edit: Gjorde linken litt mer lesbar. Endret 26. november 2011 av Lstor Lenke til kommentar
Joagamer Skrevet 26. november 2011 Forfatter Del Skrevet 26. november 2011 Hva er galt med å bruke randomize(k); echo rand(); echo rand(); Nå vil syntaksen variere fra programmeringsspråk til programmeringsspråk men felles for de fleste (alle) har en generator for tilfeldige tall som ikke genererer tilfeldige tall men som alle trenger en startverdi. Det som gjør generatoren tilsynelatende tilfeldig er at startverdien beregnes ut fra flere variabler, deriblandt klokken. For mer informasjon om hvordan dette virker i .net sjekk http://www.techrepublic.com/article/working-with-random-numbers-in-net-applications/5663283 Hvis du er mer interessert i funksjonen bak denne funksjonaliteten så er wikipedia et fint sted å begynne. Kan ikke bruke rand() pga. jeg trenger en serie med tall for hvert seed. rand(seed) gir bare ett tall. Lenke til kommentar
Joagamer Skrevet 26. november 2011 Forfatter Del Skrevet 26. november 2011 Funksjonen skal altså kunne brukes som en slags "random number generator", hvor konstanten er et seed, og man får et tilfeldig tall for hver x-verdi. Reuse is a wonderful thing: Mersenne twister Edit: Gjorde linken litt mer lesbar. Men jeg skjønner ingenting av den.. xD Hvordan skriver jeg den som en funksjon? Lenke til kommentar
torbjørn marø Skrevet 26. november 2011 Del Skrevet 26. november 2011 (endret) Kaotisk: Inneholder en konstant som er ekstremt sensitiv (chaos theory / butterfly effect) Tilfeldig: Gir en tilsynelatende tilfeldig y-verdi for hver x-verdi. Funksjonen skal altså kunne brukes som en slags "random number generator", hvor konstanten er et seed, og man får et tilfeldig tall for hver x-verdi. Her er den orginale pseudo-random-generatoren i C (kopert fra boken The C Programming Language): unsigned long int next = 1; /* returns random int between 0..32767 */ int rand(void) { next = next * 1103515245 + 12345; return (unsigned int)(next/65536) % 32768; } /* set seed for rand */ void srand(unsigned int seed) { next = seed; } Endret 26. november 2011 av torbjørn marø Lenke til kommentar
Joagamer Skrevet 26. november 2011 Forfatter Del Skrevet 26. november 2011 Det er også det at den må være kaotisk, slik at et seed på 1.0000 gir et helt annet resultat enn et seed på 1.0001 Lenke til kommentar
Joagamer Skrevet 26. november 2011 Forfatter Del Skrevet 26. november 2011 (endret) unsigned long int next = 1; /* returns random int between 0..32767 */ int rand(void) { next = next * 1103515245 + 12345; return (unsigned int)(next/65536) % 32768; } /* set seed for rand */ void srand(unsigned int seed) { next = seed; } Takk. Men det er ikke akkurat det jeg trenger. Edit: Uansett kjekt å ha ihvertfall. Edit2: skrev om tenkefeil.. Endret 26. november 2011 av Joagamer Lenke til kommentar
BlueEAGLE Skrevet 26. november 2011 Del Skrevet 26. november 2011 (endret) Vær snill og les dokumentasjonen til Random. Endret 26. november 2011 av BlueEAGLE Lenke til kommentar
Joagamer Skrevet 26. november 2011 Forfatter Del Skrevet 26. november 2011 Vær snill og les dokumentasjonen til Random. Har jeg driti meg ut? :!: Lenke til kommentar
Joagamer Skrevet 26. november 2011 Forfatter Del Skrevet 26. november 2011 (endret) Jeg kan prøve å forklare på en litt annen måte; Det jeg egentlig trenger er en uendelig rekke tilfeldige tall, som blir generert ut ifra et seed. Edit: Og tallrekka må bli helt annerledes om seed'et forandres bare bittelitt. Endret 26. november 2011 av Joagamer Lenke til kommentar
☀ ❄ Skrevet 26. november 2011 Del Skrevet 26. november 2011 Jeg kan prøve å forklare på en litt annen måte; Det jeg egentlig trenger er en uendelig rekke tilfeldige tall, som blir generert ut ifra et seed. Edit: Og tallrekka må bli helt annerledes om seed'et forandres bare bittelitt. Nå vet jeg ikke hvordan seed-funksjonen til implementasjonen/plattformen din er... Så hvis den ikke fungerer slik du ønsker, kan du ikke bruke en kryptografisk hash-funksjon, f.eks. MD5 eller SHA1, på seeden, og konvertere resultatet til en tallstrøm? Lenke til kommentar
Joagamer Skrevet 26. november 2011 Forfatter Del Skrevet 26. november 2011 Jeg kan prøve å forklare på en litt annen måte; Det jeg egentlig trenger er en uendelig rekke tilfeldige tall, som blir generert ut ifra et seed. Edit: Og tallrekka må bli helt annerledes om seed'et forandres bare bittelitt. Nå vet jeg ikke hvordan seed-funksjonen til implementasjonen/plattformen din er... Så hvis den ikke fungerer slik du ønsker, kan du ikke bruke en kryptografisk hash-funksjon, f.eks. MD5 eller SHA1, på seeden, og konvertere resultatet til en tallstrøm? Det blir vel ikke en uendelig tallrekke? MD5 har f.eks. en lengde på 32. Et eksempel på uendelig er en sinus-bølgefunksjon, men den har like verdier hele veien, og er heller ikke kaotisk. Er ikke lett det her. Lenke til kommentar
Joagamer Skrevet 26. november 2011 Forfatter Del Skrevet 26. november 2011 (endret) Men nå fant jeg en annen løsning, så det er ikke så farlig. Uansett; Tusen takk for svar! Og om noen finner ut av det så er jeg fortsatt interessert. Edit: skriveleif Endret 26. november 2011 av Joagamer Lenke til kommentar
BlueEAGLE Skrevet 26. november 2011 Del Skrevet 26. november 2011 int seed = 10000; random generator = new random(seed); for (int cnt = 0; cnt < 10; ++cnt) { echo generator.next() } random generator2 = new random(seed+1); for (int cnt = 0; cnt < 10; ++cnt) { echo generator2.next() } Cluet er at en seed-verdi alltid gir den samme rekken med tilfeldige tall. En liten endring i seed-verdien vil endre utfallet av random. Se også http://msdn.microsoft.com/en-us/library/system.random.aspx ...og koden er ikke testet men det skal ikke være langt unna sannheten. ...når jeg tenker meg om så er vel ikke echo man vil bruke men printf eller noe i C#. Lenke til kommentar
Joagamer Skrevet 29. desember 2011 Forfatter Del Skrevet 29. desember 2011 int seed = 10000; random generator = new random(seed); for (int cnt = 0; cnt < 10; ++cnt) { echo generator.next() } random generator2 = new random(seed+1); for (int cnt = 0; cnt < 10; ++cnt) { echo generator2.next() } Cluet er at en seed-verdi alltid gir den samme rekken med tilfeldige tall. En liten endring i seed-verdien vil endre utfallet av random. Se også http://msdn.microsoft.com/en-us/library/system.random.aspx ...og koden er ikke testet men det skal ikke være langt unna sannheten. ...når jeg tenker meg om så er vel ikke echo man vil bruke men printf eller noe i C#. Ja, det skjønner jeg. Men mitt clue er at jeg trenger en uendelig random tallrekke for hvert seed, ikke bare ett tall. Lenke til kommentar
BlueEAGLE Skrevet 29. desember 2011 Del Skrevet 29. desember 2011 (endret) ...og det får du så lenge du ikke destruerer de generatorene som er opprettet. Så lenge generatorene lever så vil de produsere sin fulle psudotilfeldige rekke for sitt seed. Edit for å klargjøre: int seed = 10000; random generator = new random(seed); random generator2 = new random(seed+1); for (int cnt = 0; cnt < 10; ++cnt) { echo generator.next() echo generator2.next() } Her er samme koden bare med to randomgeneratorer som hver generererer 10 tall. Hvis du øker fra 10 til uendelig (while(true)) så vil du få en uendelig rekke fra begge generatorene. Endret 29. desember 2011 av BlueEAGLE Lenke til kommentar
Joagamer Skrevet 29. desember 2011 Forfatter Del Skrevet 29. desember 2011 ...og det får du så lenge du ikke destruerer de generatorene som er opprettet. Så lenge generatorene lever så vil de produsere sin fulle psudotilfeldige rekke for sitt seed. Edit for å klargjøre: int seed = 10000; random generator = new random(seed); random generator2 = new random(seed+1); for (int cnt = 0; cnt < 10; ++cnt) { echo generator.next() echo generator2.next() } Her er samme koden bare med to randomgeneratorer som hver generererer 10 tall. Hvis du øker fra 10 til uendelig (while(true)) så vil du få en uendelig rekke fra begge generatorene. Ah, jeg beklager. Men kan man gjøre det samme i PHP? Lenke til kommentar
BlueEAGLE Skrevet 29. desember 2011 Del Skrevet 29. desember 2011 PHP har kun en tilgjengelig generator for psudotilfeldige tall. For å gjøre noe tilsvarende i PHP så må du lage din egen psudorandomgenerator i PHP som en klasse hvor konstruktøren tar et seed og funksjonen bruker dette seedet til å lage en gitt rekke. For å få dette til så må du lese deg opp på måter å generere tilfeldige tall i linker postet over og skrive dette som en PHP-klasse. Lenke til kommentar
Joagamer Skrevet 29. desember 2011 Forfatter Del Skrevet 29. desember 2011 PHP har kun en tilgjengelig generator for psudotilfeldige tall. For å gjøre noe tilsvarende i PHP så må du lage din egen psudorandomgenerator i PHP som en klasse hvor konstruktøren tar et seed og funksjonen bruker dette seedet til å lage en gitt rekke. For å få dette til så må du lese deg opp på måter å generere tilfeldige tall i linker postet over og skrive dette som en PHP-klasse. Challenge accepted. tyty! Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå