/ Forside / Karriere / Uddannelse / Højere uddannelser / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Højere uddannelser
#NavnPoint
Nordsted1 1588
erling_l 1224
ans 1150
dova 895
gert_h 800
molokyle 661
berpox 610
creamygirl 610
3773 570
10  jomfruane 570
"tilfældigt" normalfordelt tal.
Fra : Anders Wegge Keller


Dato : 02-05-09 14:43

Jeg har været for længe væk fra skolebænken til at jeg helt kan huske
hvordan det er det hænger sammen med normalfordelinger. Så bær over
med at jeg muligvis stiller et indlysende spørgsmål, eller tåger rundt
i begreberne.

Jeg har brug for en metode til at transformere et tilfældigt tal i
intervallet [0..1] til en værdi, der vil være normalfordelt med
maksimum omkring 9 til 10 med en spredning på ca 1. Derudover skal
fordelingen være skæv, sådan at sandsynligheden for værdien 5 er den
samme som sandsynligheden for 28. Jeg har googlet lidt rundt, og har
fundet noget, der kan lave en symmetrisk normalfordeling her:
<http://www.taygeta.com/random/gaussian.html> Desværre er jeg så
rusten, så jeg ikke lige kan gennemskue hvordan jeg kan manipulere den
algoritme til at give mig et asymmetrisk resultat.

--
/Wegge

 
 
TA (02-05-2009)
Kommentar
Fra : TA


Dato : 02-05-09 20:27

"Anders Wegge Keller" <wegge@wegge.dk> wrote in message
news:87vdojmxij.fsf@huddi.jernurt.dk...
>
> Jeg har brug for en metode til at transformere et tilfældigt tal i
> intervallet [0..1] til en værdi, der vil være normalfordelt med
> maksimum omkring 9 til 10 med en spredning på ca 1. Derudover skal
> fordelingen være skæv, sådan at sandsynligheden for værdien 5 er den
> samme som sandsynligheden for 28. Jeg har googlet lidt rundt, og har
> fundet noget, der kan lave en symmetrisk normalfordeling her:
> <http://www.taygeta.com/random/gaussian.html> Desværre er jeg så
> rusten, så jeg ikke lige kan gennemskue hvordan jeg kan manipulere den
> algoritme til at give mig et asymmetrisk resultat.

Fordelingsfunktionen for en normalfordeling N(0,1) er givet ved Erf(x).

1. generer et ligefordelt tilfældigt tal, x, i intervallet [0..1]

2. find fordelingsfunktionens værdi for x, dvs X = F(x)

3. anvend X som nøgle i Y = F(y), hvor Y er Erf(0,1)

4. find y som inv(Erf(Y)) (oftest vha lookup og interpolation)

5. korriger evt for mean og std med y = (y - mean)/std

Tallet x er nu transformeret til et normalfordelt tal y.


Asymmetrien i en normalfordelingsfunktion benævnes 'skewness', se
<http://en.wikipedia.org/wiki/Skewness>,
<http://en.wikipedia.org/wiki/Skew_normal_distribution>, og
<http://en.wikipedia.org/wiki/Inverse_transform_sampling>.

Du kan så indregne skewness ved at anvende en anden version af Erf(x)
(i step 4), eller ved at foretage en anden korrektion (i step 5).

--
TA



Edward Jensen (02-05-2009)
Kommentar
Fra : Edward Jensen


Dato : 02-05-09 21:28

"Anders Wegge Keller" <wegge@wegge.dk> wrote in message
news:87vdojmxij.fsf@huddi.jernurt.dk...
> Jeg har brug for en metode til at transformere et tilfældigt tal i
> intervallet [0..1] til en værdi, der vil være normalfordelt med
> maksimum omkring 9 til 10 med en spredning på ca 1.

Maksimum? Mener du modus som i tilfældet med normalfordelingen er lig
middelværdien?

> Derudover skal
> fordelingen være skæv, sådan at sandsynligheden for værdien 5 er den
> samme som sandsynligheden for 28.

En normalfordeling er aldrig skæv. Den er symmetrisk omkring middelværdien.

> Desværre er jeg så
> rusten, så jeg ikke lige kan gennemskue hvordan jeg kan manipulere den
> algoritme til at give mig et asymmetrisk resultat.

Jeg ved stadigvæk ikke, hvad du mener med asymmetrisk. Hvis du mener en
normalfordelt sample med en middelværdi forskellig fra 0, er det ikke ret
svært. Genererer en standardiseret normalfordelt variabel med middelværdi 0
og varians 1 og læg 9 (eller 10 afhængig af hvad du mener) til.




Anders Wegge Keller (02-05-2009)
Kommentar
Fra : Anders Wegge Keller


Dato : 02-05-09 23:18

"Edward Jensen" <edward@jensen.invalid> writes:

> "Anders Wegge Keller" <wegge@wegge.dk> wrote in message
> news:87vdojmxij.fsf@huddi.jernurt.dk...
>> Jeg har brug for en metode til at transformere et tilfældigt tal i
>> intervallet [0..1] til en værdi, der vil være normalfordelt med
>> maksimum omkring 9 til 10 med en spredning på ca 1.

> Maksimum? Mener du modus som i tilfældet med normalfordelingen er
> lig middelværdien?

Hvis det var en rigtig normalfordelingskurve jeg var ude efter, så
ja. Men nu er jeg som sagt på jagt efter en assymetrisk kurve, der
Ã¥benbart hedder en skewed gaussian, efter hvad TA forklarer. Det jeg
mener med maksimum er at jeg vil have et histogram hvor værdien 9 har
den hyppigste forekomst.

>> Derudover skal fordelingen være skæv, sådan at sandsynligheden for
>> værdien 5 er den samme som sandsynligheden for 28.

> En normalfordeling er aldrig skæv. Den er symmetrisk omkring
> middelværdien.

Ja, det er jeg blevet klar over. Det er så bare en anden ting jeg er
på jagt efter.

>> Desværre er jeg så rusten, så jeg ikke lige kan gennemskue hvordan
>> jeg kan manipulere den algoritme til at give mig et asymmetrisk
>> resultat.

> Jeg ved stadigvæk ikke, hvad du mener med asymmetrisk. Hvis du mener
> en normalfordelt sample med en middelværdi forskellig fra 0, er det
> ikke ret svært. Genererer en standardiseret normalfordelt variabel
> med middelværdi 0 og varians 1 og læg 9 (eller 10 afhængig af hvad
> du mener) til.

Tjahh ... Det er 17 år siden jeg havde Mat-alpha, så det med at
generere en standardiseret normalfordelt variabel ryger hen over
hovedet på mig.

--
/Wegge

Edward Jensen (03-05-2009)
Kommentar
Fra : Edward Jensen


Dato : 03-05-09 01:44

"Anders Wegge Keller" <wegge@wegge.dk> wrote in message
news:87r5z7m9my.fsf@huddi.jernurt.dk...
> "Edward Jensen" <edward@jensen.invalid> writes:
>
>> "Anders Wegge Keller" <wegge@wegge.dk> wrote in message
>> news:87vdojmxij.fsf@huddi.jernurt.dk...
>>> Jeg har brug for en metode til at transformere et tilfældigt tal i
>>> intervallet [0..1] til en værdi, der vil være normalfordelt med
>>> maksimum omkring 9 til 10 med en spredning på ca 1.
>
>> Maksimum? Mener du modus som i tilfældet med normalfordelingen er
>> lig middelværdien?
>
> Hvis det var en rigtig normalfordelingskurve jeg var ude efter, så
> ja. Men nu er jeg som sagt på jagt efter en assymetrisk kurve, der
> åbenbart hedder en skewed gaussian, efter hvad TA forklarer.

Okay. Jeg kender ikke noget til en skewed gaussian, og jeg kan umiddelbart
ikke forestille mig hvilke hendelser, man skulle ønske at modellere med en
sådan. I hvilken sammenhæng skal den bruges, og er du sikker på,. at det er
den rigtige fordeling? Måske hvis du fortalte lidt om, hvad det er, du
ønsker at modellere, kan vi bedre guide dig i en egnet fordelig.

> Det jeg
> mener med maksimum er at jeg vil have et histogram hvor værdien 9 har
> den hyppigste forekomst.

Altså modus.

> Tjahh ... Det er 17 år siden jeg havde Mat-alpha, så det med at
> generere en standardiseret normalfordelt variabel ryger hen over
> hovedet på mig.

Well... En standard metode består i, at man allerede er i stand til at
generere en sample fra en kontinuert uniform fordeling, kald den X, med
støtte [0;1]. Hvis du allerede kan det (der findes en hoben metoder til det
på nettet og i diverse API'er), er det en smal sag at transformere den til
en sample fra en arbitræt kontinuert fordeling, lad os kalde den Y, givet at
du kender fordelingsfunktionen, altså F(y) = P(Y <= y). Givet at F(y) er en
bijektiv funktion kan du finde dens invers, der er defineret på intervallet
[0;1] grundet Kolmogorov-aksiomerne. Hvis du har et analysisk udtryk for
F(y)^-1 og en kontinuert uniform fordelt sample mellem 0 og 1, kald den x,
kan du transformere x til at være en sample fra fordelingen Y ved at udregne
F(x)^-1.

Hvis der ikke findes et udtryk for kvantilfunktionen, må du ty til monte
carlo algoritmer eller andre former for rejection metoder. Der findes tykke
bøger skrevet om den slags og universitetskuser alene omhandlende emnet, så
metoderne er omfangsrige.

Jeg håber, at det er intuitivt; ellers må du sige til.



Anders Wegge Keller (03-05-2009)
Kommentar
Fra : Anders Wegge Keller


Dato : 03-05-09 10:25

"Edward Jensen" <edward@jensen.invalid> writes:

> "Anders Wegge Keller" <wegge@wegge.dk> wrote in message

>> Hvis det var en rigtig normalfordelingskurve jeg var ude efter, så
>> ja. Men nu er jeg som sagt på jagt efter en assymetrisk kurve, der
>> åbenbart hedder en skewed gaussian, efter hvad TA forklarer.

> Okay. Jeg kender ikke noget til en skewed gaussian, og jeg kan
> umiddelbart ikke forestille mig hvilke hendelser, man skulle ønske
> at modellere med en sådan. I hvilken sammenhæng skal den bruges, og
> er du sikker på,. at det er den rigtige fordeling? Måske hvis du
> fortalte lidt om, hvad det er, du ønsker at modellere, kan vi bedre
> guide dig i en egnet fordelig.

Ja, det ville nok egentlig være på sin plads. Jeg sidder og brygger
på noget software, der kan lave kakuro-opgaver. Det jeg skal bruge den
skæve normalfordeling til er i første omgang at bestemme størrelsen af
opgaven. Mindre end 5x5 er der ikke ret meget udfordring i, og bliver
de større end 15x15, bliver det rimeligt tungt at regne på. Men jeg
vil stadig gerne have at der indimellem kommer en af de store ud af
det, så der bliver noget med ekstra udfordring i.

I dette tilfælde, ville jeg naturligvis kunne komme forholdsvist let
ud af det, ved hjælp af tabelopslag. Men da jeg i forvejen pusler med
at bruge genetisk søgning efter en række andre parametre, der tuner
udseendet, ville det være smart, hvis jeg kunne få størrelsen med ind
i den.

...

> Jeg håber, at det er intuitivt; ellers må du sige til.

Jeg bliver nok nødt til at støve min Calculus af, inden jeg forstår
det helt, men det ser ikke totalt tåget ud.

--
/Wegge

TA (04-05-2009)
Kommentar
Fra : TA


Dato : 04-05-09 17:52

"Anders Wegge Keller" <wegge@wegge.dk> wrote in message
news:87ab5umtcj.fsf@huddi.jernurt.dk...
>
> <snip>
>
> Ja, det ville nok egentlig være på sin plads. Jeg sidder og brygger
> på noget software, der kan lave kakuro-opgaver. Det jeg skal bruge den
> skæve normalfordeling til er i første omgang at bestemme størrelsen af
> opgaven. Mindre end 5x5 er der ikke ret meget udfordring i, og bliver
> de større end 15x15, bliver det rimeligt tungt at regne på. Men jeg
> vil stadig gerne have at der indimellem kommer en af de store ud af
> det, så der bliver noget med ekstra udfordring i.
>
> I dette tilfælde, ville jeg naturligvis kunne komme forholdsvist let
> ud af det, ved hjælp af tabelopslag. Men da jeg i forvejen pusler med
> at bruge genetisk søgning efter en række andre parametre, der tuner
> udseendet, ville det være smart, hvis jeg kunne få størrelsen med ind
> i den.

Du kan jo overveje at skræddersy en tæthedsfunktion (á et histogram),
som opfylder dine krav. Du 'mapper' så dit ligefordelte tal til din
skræddersyede fordeling via det kumulerede histogram.

--
TA



Carsten Svaneborg (08-05-2009)
Kommentar
Fra : Carsten Svaneborg


Dato : 08-05-09 14:21

Anders Wegge Keller wrote:
> Ja, det ville nok egentlig være på sin plads. Jeg sidder og brygger
> på noget software, der kan lave kakuro-opgaver. Det jeg skal bruge den
> skæve normalfordeling til er i første omgang at bestemme størrelsen af
> opgaven. Mindre end 5x5 er der ikke ret meget udfordring i, og bliver
> de større end 15x15, bliver det rimeligt tungt at regne på.

Ahå. En normal fordeling er for reale tal P(x), du ønsker
blot at generere tilfældige heltal der reproducerer et bestemt
histogram.

Lad os sige du har 4 udfald karakteriseret ved
sandsyneligeheder Pa,Pb,Pc,Pd. Der gælder Pa+Pb+Pc+Pd = 1
fordi de er sandsyneligheder.

Vælg et tilfældigt tal x i intervallet mellem [0:1[ f.eks.
med x=1.0*rand()/RAND_MAX hvor rand() giver dig et heltal
mellem 0 og RAND_MAX-1.

Er 0 <= x < Pa så udskriv a
Er Pa <= x < Pa+Pb så udskriv b
Er Pa+Pb <= x < Pa+Pb+Pc så udskriv c
Er Pa+Pb+Pc <= x < 1 så udskriv d

Histogrammet for udfaldene a,b,c,d vil reproducerer det histogram
du har defineret med sandsynelighederne.

Det er trivielt at generaliserer til mange flere udfald.

--
Mvh. Carsten

Anders Wegge Keller (02-05-2009)
Kommentar
Fra : Anders Wegge Keller


Dato : 02-05-09 23:26

"TA" <not@active.invalid> writes:

> "Anders Wegge Keller" <wegge@wegge.dk> wrote in message

>> Jeg har brug for en metode til at transformere et tilfældigt tal i
>> intervallet [0..1] til en værdi, der vil være normalfordelt med
>> maksimum omkring 9 til 10 med en spredning på ca 1. Derudover skal
>> fordelingen være skæv, sådan at sandsynligheden for værdien 5 er den
>> samme som sandsynligheden for 28. Jeg har googlet lidt rundt, og har
>> fundet noget, der kan lave en symmetrisk normalfordeling her:
>> <http://www.taygeta.com/random/gaussian.html> Desværre er jeg så
>> rusten, så jeg ikke lige kan gennemskue hvordan jeg kan manipulere den
>> algoritme til at give mig et asymmetrisk resultat.
>
> Fordelingsfunktionen for en normalfordeling N(0,1) er givet ved Erf(x).
>
> 1. generer et ligefordelt tilfældigt tal, x, i intervallet [0..1]
>
> 2. find fordelingsfunktionens værdi for x, dvs X = F(x)
>
> 3. anvend X som nøgle i Y = F(y), hvor Y er Erf(0,1)
>
> 4. find y som inv(Erf(Y)) (oftest vha lookup og interpolation)
>
> 5. korriger evt for mean og std med y = (y - mean)/std
>
> Tallet x er nu transformeret til et normalfordelt tal y.

Jovel... Den matematik her ligger 17 år tilbage i tiden for mig, så
jeg er reelt set totalt uvidende på området. Kæden hopper af allerede
ved 2, så hvis jeg må være så fri, vil jeg gerne have skåret det lidt
mere konkret ud.

> Asymmetrien i en normalfordelingsfunktion benævnes 'skewness', se
> <http://en.wikipedia.org/wiki/Skewness>,
> <http://en.wikipedia.org/wiki/Skew_normal_distribution>, og
> <http://en.wikipedia.org/wiki/Inverse_transform_sampling>.

> Du kan så indregne skewness ved at anvende en anden version af Erf(x)
> (i step 4), eller ved at foretage en anden korrektion (i step 5).

Det ligner næsten noget jeg kan forstå, så jeg har ihvertfald noget
at arbejde videre med. Jeg takker for referencerne.

--
/Wegge

Torben Ægidius Mogen~ (04-05-2009)
Kommentar
Fra : Torben Ægidius Mogen~


Dato : 04-05-09 12:56

Anders Wegge Keller <wegge@wegge.dk> writes:

> Jeg har været for længe væk fra skolebænken til at jeg helt kan huske
> hvordan det er det hænger sammen med normalfordelinger. Så bær over
> med at jeg muligvis stiller et indlysende spørgsmål, eller tåger rundt
> i begreberne.
>
> Jeg har brug for en metode til at transformere et tilfældigt tal i
> intervallet [0..1] til en værdi, der vil være normalfordelt med
> maksimum omkring 9 til 10 med en spredning på ca 1. Derudover skal
> fordelingen være skæv, sådan at sandsynligheden for værdien 5 er den
> samme som sandsynligheden for 28. Jeg har googlet lidt rundt, og har
> fundet noget, der kan lave en symmetrisk normalfordeling her:
> <http://www.taygeta.com/random/gaussian.html> Desværre er jeg så
> rusten, så jeg ikke lige kan gennemskue hvordan jeg kan manipulere den
> algoritme til at give mig et asymmetrisk resultat.

Jeg kan forstå på dine senere kommentarer, at det ikke er vigtigt at
du har en fordeling, der er præcis en skewed gaussian, men blot en
fordeling, der "ligner".

En simple metode til at få en tilnærmet gaussfordeling er, at lægge et
antal lineært fordelte variabler sammen. Allerede ved tre variabler
er resultatet tilpas "klokkeformet" til de fleste anvendelser. Det
giver dog en symmetrisk fordeling.

For at få en assymmetrisk fordeling, kan du finde N lineært fordelte
tal og lægge de M største (eller mindste) af dem sammen.

Hvis du for eksempel genererer 5 tal mellem 1 og 20 (begge inklusive)
og lægger de to mindste af dem sammen, får du en fordeling, der ser
således ud:

Value 4.0 bars per %
2 : |||||||||
3 : ||||||||||||||||
4 : |||||||||||||||||||||
5 : |||||||||||||||||||||||||
6 : |||||||||||||||||||||||||||
7 : ||||||||||||||||||||||||||||
8 : |||||||||||||||||||||||||||||
9 : ||||||||||||||||||||||||||||
10 : |||||||||||||||||||||||||||
11 : |||||||||||||||||||||||||
12 : ||||||||||||||||||||||||
13 : |||||||||||||||||||||
14 : |||||||||||||||||||
15 : |||||||||||||||||
16 : |||||||||||||||
17 : |||||||||||||
18 : |||||||||||
19 : |||||||||
20 : ||||||||
21 : ||||||
22 : |||||
23 : ||||
24 : |||
25 : |||
26 : ||
27 : ||
28 : |
29 : |
30 : |
31 :
32 :
33 :
34 :
35 :
36 :
37 :
38 :
39 :
40 :

Average = 11.02084375 Spread = 5.76626177979 Mean deviation = 4.62735148994

   Torben


P.S.

Grafen er lavet med Troll (http://www.diku.dk/~torbenm/Troll), som kan
beregne sandsynlighedsfordelinger for kombinationer af terninger af
forskellig størrelse. Den ovenstående fordeling er specificeret som
"sum least 2 5d20", altså summen af de to mindste af 5 tyvesidede
terninger. Du kan downloade programmet og eksperimentere med
forskellige kombinationer, indtil du finder noget, der giver en
fordeling, du kan lide.

Axel Hammerschmidt (04-05-2009)
Kommentar
Fra : Axel Hammerschmidt


Dato : 04-05-09 13:36

Torben Ægidius Mogensen <torbenm@pc-003.diku.dk> wrote:

<snip>

> Hvis du for eksempel genererer 5 tal mellem 1 og 20 (begge inklusive)
> og lægger de to mindste af dem sammen, får du en fordeling...

Og simuleringen ta'r jo 5 gange så lang tid.


--
"I believe in having an open mind, but not so open that your brains fall
out." Grace Hopper.

Torben Ægidius Mogen~ (05-05-2009)
Kommentar
Fra : Torben Ægidius Mogen~


Dato : 05-05-09 10:18

hlexa@hotmail.com (Axel Hammerschmidt) writes:

> Torben Ægidius Mogensen <torbenm@pc-003.diku.dk> wrote:
>
> <snip>
>
>> Hvis du for eksempel genererer 5 tal mellem 1 og 20 (begge inklusive)
>> og lægger de to mindste af dem sammen, får du en fordeling...
>
> Og simuleringen ta'r jo 5 gange så lang tid.

Det er ikke sikkert, at det er spor hurtigere at lave et enkelt
lineært fordelt tal og så bruge en kompleks og dyr funktion bagefter
for at få den ønskede fordeling.

Desuden kan du sagtens lave fem ligeligt fordelte heltal mellem 1 og
20 ud fra et enkelt lineært fordelt reelt tal mellem 0 og 1:

x = prng(); /* 0 <= x < 1 */
a = (int) (20.0*x);
x = 20.0*x-(double)(a++);
b = (int) (20.0*x);
x = 20.0*x-(double)(b++);
c = (int) (20.0*x);
x = 20.0*x-(double)(c++);
d = (int) (20.0*x);
x = 20.0*x-(double)(d++);
e = (int) (20.0*x);

Så du kan betragte dette som en del af funktionen, der konverterer x
til et skævt fordelt heltal.

   Torben

Axel Hammerschmidt (06-05-2009)
Kommentar
Fra : Axel Hammerschmidt


Dato : 06-05-09 15:24

Torben Ægidius Mogensen <torbenm@pc-003.diku.dk> wrote:

> hlexa@hotmail.com (Axel Hammerschmidt) writes:

<snip>

> > Og simuleringen ta'r jo 5 gange så lang tid.
>
> Det er ikke sikkert, at det er spor hurtigere at lave et enkelt
> lineært fordelt tal og så bruge en kompleks og dyr funktion bagefter
> for at få den ønskede fordeling.
>
> Desuden kan du sagtens lave fem ligeligt fordelte heltal mellem 1 og
> 20 ud fra et enkelt lineært fordelt reelt tal mellem 0 og 1:
>
> x = prng(); /* 0 <= x < 1 */
> a = (int) (20.0*x);
> x = 20.0*x-(double)(a++);
> b = (int) (20.0*x);
> x = 20.0*x-(double)(b++);
> c = (int) (20.0*x);
> x = 20.0*x-(double)(c++);
> d = (int) (20.0*x);
> x = 20.0*x-(double)(d++);
> e = (int) (20.0*x);

Hvordan har så'en bette PRNG rutine det med periodicitet?


--
"I believe in having an open mind, but not so open that your brains fall
out." Grace Hopper.

Henrik Christian Gro~ (06-05-2009)
Kommentar
Fra : Henrik Christian Gro~


Dato : 06-05-09 18:07

hlexa@hotmail.com (Axel Hammerschmidt) writes:

> Torben Ægidius Mogensen <torbenm@pc-003.diku.dk> wrote:

>> Desuden kan du sagtens lave fem ligeligt fordelte heltal mellem 1 og
>> 20 ud fra et enkelt lineært fordelt reelt tal mellem 0 og 1:
>>
>> x = prng(); /* 0 <= x < 1 */
>> a = (int) (20.0*x);
>> x = 20.0*x-(double)(a++);
>> b = (int) (20.0*x);
>> x = 20.0*x-(double)(b++);
>> c = (int) (20.0*x);
>> x = 20.0*x-(double)(c++);
>> d = (int) (20.0*x);
>> x = 20.0*x-(double)(d++);
>> e = (int) (20.0*x);
>
> Hvordan har så'en bette PRNG rutine det med periodicitet?

Det er ikke en PRNG-rutine Torben har skrevet der, han bruger faktisk
ganske eksplicit en funktion der hedder prng. Det Torbens kode gør er
stort set at tage fem dele af "decimal"-fremstillingen og ophæve dem til
at være fem forskellige tal (gåseøjne, fordi det er i 20-talssystemet,
og "stort set" fordi han lægger 1 til hvert tal, for at få dem til at
være mellem 1 og 20 i stedet for mellen 0 og 19).

..Henrik

--
.... applications which need to address vast amounts of memory
(e.g., big scientific crankers, large databases, emacs) ...
-- fra en artikel i LWN

Axel Hammerschmidt (06-05-2009)
Kommentar
Fra : Axel Hammerschmidt


Dato : 06-05-09 22:49

Henrik Christian Grove <usenet@3001.dk> wrote:

> hlexa@hotmail.com (Axel Hammerschmidt) writes:

<snip>

> > Hvordan har så'en bette PRNG rutine det med periodicitet?
>
> Det er ikke en PRNG-rutine Torben har skrevet der, han bruger faktisk
> ganske eksplicit en funktion der hedder prng.

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

Forkortes PRNG eller prng.

> Det Torbens kode gør er stort set at tage fem dele af
> "decimal"-fremstillingen og ophæve dem til at være fem forskellige tal
> (gåseøjne, fordi det er i 20-talssystemet, og "stort set" fordi han lægger
> 1 til hvert tal, for at få dem til at være mellem 1 og 20 i stedet for
> mellen 0 og 19).

Det interessante spørgsmål var, hvor kort bliver periodiciteten?


--
"I believe in having an open mind, but not so open that your brains fall
out." Grace Hopper.

Martin Andersen (07-05-2009)
Kommentar
Fra : Martin Andersen


Dato : 07-05-09 07:35

Axel Hammerschmidt wrote:
> Henrik Christian Grove <usenet@3001.dk> wrote:
>
>> hlexa@hotmail.com (Axel Hammerschmidt) writes:
>
> <snip>
>
>>> Hvordan har så'en bette PRNG rutine det med periodicitet?
>> Det er ikke en PRNG-rutine Torben har skrevet der, han bruger faktisk
>> ganske eksplicit en funktion der hedder prng.
>
> http://en.wikipedia.org/wiki/Pseudorandom_number_generator
>
> Forkortes PRNG eller prng.
>
Det tror jeg Henrik er klar over.

>> Det Torbens kode gør er stort set at tage fem dele af
>> "decimal"-fremstillingen og ophæve dem til at være fem forskellige tal
>> (gåseøjne, fordi det er i 20-talssystemet, og "stort set" fordi han lægger
>> 1 til hvert tal, for at få dem til at være mellem 1 og 20 i stedet for
>> mellen 0 og 19).
>
> Det interessante spørgsmål var, hvor kort bliver periodiciteten?
>
PRNG funktionen er ikke defineret i af algoritmen hvorfor eventuelle
svagheder i implementationen ikke kan vurderes. Derfor Henriks forklaring.

Axel Hammerschmidt (07-05-2009)
Kommentar
Fra : Axel Hammerschmidt


Dato : 07-05-09 12:02

Martin Andersen <dur@ikke.nu> wrote:

> Axel Hammerschmidt wrote:

<snip>

> > Det interessante spørgsmål var, hvor kort bliver periodiciteten?
> >
> PRNG funktionen er ikke defineret i af algoritmen hvorfor eventuelle
> svagheder i implementationen ikke kan vurderes. Derfor Henriks forklaring.

Det var periodiciteten i denne "rutine" jeg efterlyste

: Det Torbens kode gør er stort set at tage fem dele af
: "decimal"-fremstillingen og ophæve dem til at være fem forskellige tal
: (gåseøjne, fordi det er i 20-talssystemet, og "stort set" fordi han
: lægger 1 til hvert tal, for at få dem til at være mellem 1 og 20 i
: stedet for mellen 0 og 19).


--
"I believe in having an open mind, but not so open that your brains fall
out." Grace Hopper.

Martin Andersen (07-05-2009)
Kommentar
Fra : Martin Andersen


Dato : 07-05-09 13:40

Axel Hammerschmidt wrote:
> Martin Andersen <dur@ikke.nu> wrote:
>
>> Axel Hammerschmidt wrote:
>
> <snip>
>
>>> Det interessante spørgsmål var, hvor kort bliver periodiciteten?
>>>
>> PRNG funktionen er ikke defineret i af algoritmen hvorfor eventuelle
>> svagheder i implementationen ikke kan vurderes. Derfor Henriks forklaring.
>
> Det var periodiciteten i denne "rutine" jeg efterlyste

Der er ingen periodicitet i det du citerede, da "b" til "e" ikke bruger
dele af x's bit-repræsentation, som allerede er brugt til at finde
tidligere variablers værdi.

Hvis nu der skulle findes 5 tal mellem 0 og 9 og x tilfældigvis blev
0,12345, så ville a være 1, b=2, c=3, d=4 og e=5. Hvis x var en hvilken
som helst anden streng ville a til e på samme måde blive fundet
uafhængigt af hinanden ud fra x's decimalrepræsentation. Der er altså
ingen periodicitet når der abstraheres fra eventuelle svagheder i
prng()-funktionen.

Axel Hammerschmidt (07-05-2009)
Kommentar
Fra : Axel Hammerschmidt


Dato : 07-05-09 13:43

Martin Andersen <dur@ikke.nu> wrote:

> Axel Hammerschmidt wrote:
>
> > Martin Andersen <dur@ikke.nu> wrote:
> >
> >> Axel Hammerschmidt wrote:
> >
> > <snip>
> >
> >>> Det interessante spørgsmål var, hvor kort bliver periodiciteten?
> >>>
> >> PRNG funktionen er ikke defineret i af algoritmen hvorfor eventuelle
> >> svagheder i implementationen ikke kan vurderes. Derfor Henriks forklaring.
> >
> > Det var periodiciteten i denne "rutine" jeg efterlyste
>
> Der er ingen periodicitet i det du citerede, ...

Jeg tror ikke vi kommer det nærmere.


--
"I believe in having an open mind, but not so open that your brains fall
out." Grace Hopper.

Anders Wegge Keller (07-05-2009)
Kommentar
Fra : Anders Wegge Keller


Dato : 07-05-09 08:10

torbenm@pc-003.diku.dk (Torben Ægidius Mogensen) writes:

> Anders Wegge Keller <wegge@wegge.dk> writes:

> Jeg kan forstå på dine senere kommentarer, at det ikke er vigtigt at
> du har en fordeling, der er præcis en skewed gaussian, men blot en
> fordeling, der "ligner".

Ja, det er korrekt.

> En simple metode til at få en tilnærmet gaussfordeling er, at lægge
> et antal lineært fordelte variabler sammen. Allerede ved tre
> variabler er resultatet tilpas "klokkeformet" til de fleste
> anvendelser. Det giver dog en symmetrisk fordeling.

> For at få en assymmetrisk fordeling, kan du finde N lineært fordelte
> tal og lægge de M største (eller mindste) af dem sammen.

> Hvis du for eksempel genererer 5 tal mellem 1 og 20 (begge
> inklusive) og lægger de to mindste af dem sammen, får du en
> fordeling, der ser således ud:

Og den er jo pænt tæt på at se ud som det jeg er ude
efter. Umiddelbart tror jeg det er en nemmere forståeligt metode at
benytte, fremfor at rode rundt med skewed gaussian.

> Grafen er lavet med Troll (http://www.diku.dk/~torbenm/Troll), som
> kan beregne sandsynlighedsfordelinger for kombinationer af terninger
> af forskellig størrelse. Den ovenstående fordeling er specificeret
> som "sum least 2 5d20", altså summen af de to mindste af 5
> tyvesidede terninger. Du kan downloade programmet og eksperimentere
> med forskellige kombinationer, indtil du finder noget, der giver en
> fordeling, du kan lide.

Det lyder spændende, men hvad er det lige for et sprog den er skrevet
i?

--
/Wegge

Martin Larsen (07-05-2009)
Kommentar
Fra : Martin Larsen


Dato : 07-05-09 10:25

"Anders Wegge Keller" <wegge@wegge.dk> skrev i meddelelsen
news:87ljp9gzi0.fsf@huddi.jernurt.dk...
> torbenm@pc-003.diku.dk (Torben Ægidius Mogensen) writes:
>
>> Anders Wegge Keller <wegge@wegge.dk> writes:
>
>> Jeg kan forstå på dine senere kommentarer, at det ikke er vigtigt at
>> du har en fordeling, der er præcis en skewed gaussian, men blot en
>> fordeling, der "ligner".
>
> Ja, det er korrekt.
>
>> En simple metode til at få en tilnærmet gaussfordeling er, at lægge
>> et antal lineært fordelte variabler sammen. Allerede ved tre
>> variabler er resultatet tilpas "klokkeformet" til de fleste
>> anvendelser. Det giver dog en symmetrisk fordeling.
>
>> For at få en assymmetrisk fordeling, kan du finde N lineært fordelte
>> tal og lægge de M største (eller mindste) af dem sammen.
>
>> Hvis du for eksempel genererer 5 tal mellem 1 og 20 (begge
>> inklusive) og lægger de to mindste af dem sammen, får du en
>> fordeling, der ser således ud:
>
> Og den er jo pænt tæt på at se ud som det jeg er ude
> efter. Umiddelbart tror jeg det er en nemmere forståeligt metode at
> benytte, fremfor at rode rundt med skewed gaussian.
>
>> Grafen er lavet med Troll (http://www.diku.dk/~torbenm/Troll), som
>> kan beregne sandsynlighedsfordelinger for kombinationer af terninger
>> af forskellig størrelse. Den ovenstående fordeling er specificeret
>> som "sum least 2 5d20", altså summen af de to mindste af 5
>> tyvesidede terninger. Du kan downloade programmet og eksperimentere
>> med forskellige kombinationer, indtil du finder noget, der giver en
>> fordeling, du kan lide.
>
> Det lyder spændende, men hvad er det lige for et sprog den er skrevet
> i?
>

Det kan du finde i nævnte link
Troll is implemented as an interpreter written in Standard ML (specifically,
Moscow ML)
http://www.itu.dk/~sestoft/mosml.html

Mvh
Martin


Torben Ægidius Mogen~ (07-05-2009)
Kommentar
Fra : Torben Ægidius Mogen~


Dato : 07-05-09 16:48

Anders Wegge Keller <wegge@wegge.dk> writes:

> torbenm@pc-003.diku.dk (Torben Ægidius Mogensen) writes:
>
>> Grafen er lavet med Troll (http://www.diku.dk/~torbenm/Troll), som
>> kan beregne sandsynlighedsfordelinger for kombinationer af terninger
>> af forskellig størrelse. Den ovenstående fordeling er specificeret
>> som "sum least 2 5d20", altså summen af de to mindste af 5
>> tyvesidede terninger. Du kan downloade programmet og eksperimentere
>> med forskellige kombinationer, indtil du finder noget, der giver en
>> fordeling, du kan lide.
>
> Det lyder spændende, men hvad er det lige for et sprog den er skrevet
> i?

Troll er skrevet i Standard ML (og bruger Moscow ML implementationen
af Standard ML). Troll er i sig selv et sprog, hvor sprogprimitiverne
er operationer på terningeslag. Troll kan bruges både til at lave
tilfældige slag og til at beregne sandsynlighedsfordelinger.

   Torben

N/A (04-05-2009)
Kommentar
Fra : N/A


Dato : 04-05-09 17:52



Søg
Reklame
Statistik
Spørgsmål : 177438
Tips : 31962
Nyheder : 719565
Indlæg : 6408047
Brugere : 218879

Månedens bedste
Årets bedste
Sidste års bedste