Black Friday = Pricewatch Bekijk onze selectie van de beste Black Friday-deals en voorkom een miskoop.

[C#/.NET] Randomizer faalt na 2 a 3 miljoen trekkingen

Pagina: 1
Acties:

  • Knakker
  • Registratie: April 2000
  • Laatst online: 19:45
Voor een gedeelte van een statistisch programma dat ik aan het ontwikkelen ben gebruik ik de standaard randomizer van .NET.

Echter na ongeveer 2 à 3 miljoen trekkingen (wat vrij gewoon is in mijn programma) faalt de randomizer, dat wil zeggen dat deze louter nog maar nullen retourneert. Als ik 'm dan opnieuw initialiseer krijg ik weer resultaten.

Dit is echter een behoorlijk probleem, aangezien het gebruik van seed-values een belangrijke optie is:
- Als ik de randomizer opnieuw initialiseer met dezelfde seed value, krijg ik vanaf dat punt dus dezelfde waarden als in het begin. Dat is vanuit theoretisch oogpunt niet wenselijk.
- Maar zelfs als ik daarmee akkoord zou gaan, kan ik nog geen consistente trekkingen realiseren: de randomizer houdt er steeds op een ander punt mee op (soms na 2.6 miljoen trekkingen, dan weer na 3.3 miljoen, het lijkt wat willekeurig). Het punt van reinitialisatie is derhalve steeds verschillend en de totale trekking dus ook.

Iemand een idee wat de oorzaak hiervan zou kunnen zijn? Of is het überhaupt wenselijk dat ik gebruik maak van een aparte randomizer voor statistische doeleinden ipv de standaard C# randomizer? Alvast bedankt! :)

[ Voor 29% gewijzigd door Knakker op 26-10-2008 13:21 ]

Geef mij maar een Warsteiner.


  • pedorus
  • Registratie: Januari 2008
  • Niet online
Ik zou eerder kijken naar het werk van Marsaglia voor de snelheid. Sowieso is het een goed idee om meerdere randomizers uit te proberen. In principe kun je voor elke pseudo-randomizer altijd een algoritme bedenken waarbij het niet goed zal werken.

Vitamine D tekorten in Nederland | Dodelijk coronaforum gesloten


  • Sebazzz
  • Registratie: September 2006
  • Laatst online: 15:42

Sebazzz

3dp

Als laatste optie kan je natuurlijk ook na 1 miljoen trekkingen de randomizer opnieuw seeden met de tijd plus, min, maal of gedeeld door het laatste getal verkregen van de randomizer.

[Te koop: 3D printers] [Website] Agile tools: [Return: retrospectives] [Pokertime: planning poker]


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Sebazzz schreef op zondag 26 oktober 2008 @ 15:46:
Als laatste optie kan je natuurlijk ook na 1 miljoen trekkingen de randomizer opnieuw seeden met de tijd plus, min, maal of gedeeld door het laatste getal verkregen van de randomizer.
Seed 'm dan gewoon met de waarde van die 1 miljoenste 'trekking'; dat is stukken betrouwbaarder dan tijd + vage formule... Het gaat de TS er juist om dat een initiële seed telkens dezelfde sequence oplevert; dus ook na 10m "trekkingen".

[ Voor 12% gewijzigd door RobIII op 26-10-2008 16:20 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • Knakker
  • Registratie: April 2000
  • Laatst online: 19:45
Nu ik er zo over nadenk is het inderdaad wel logisch dat dat soort algoritmes op een gegeven moment "op" kunnen zijn.

Ik heb de code van Marsaglia bekeken; daarmee lukt tot 10 miljoen zonder problemen dus dat gebruik ik voorlopig maar als vervanging. Ontzettend bedankt voor de moeite!

Geef mij maar een Warsteiner.


  • pedorus
  • Registratie: Januari 2008
  • Niet online
Knakker schreef op zondag 26 oktober 2008 @ 17:31:
Nu ik er zo over nadenk is het inderdaad wel logisch dat dat soort algoritmes op een gegeven moment "op" kunnen zijn.
Ik heb het vermoeden dat dit toch een foutje van MS is. Bij mono hadden ze een versie die redelijk compatibel was met .NET (zelfde seed=zelfde getallen). Ze hebben later de constante inextp toch verandert om meer compatibel te zijn met de originele versie van Knuth. Ik vraag me trouwens af waarom ze toen niet gelijk MBIG ook hetzelfde hebben gemaakt voor de zekerheid.
RobIII schreef op zondag 26 oktober 2008 @ 16:19:
Seed 'm dan gewoon met de waarde van die 1 miljoenste 'trekking'; dat is stukken betrouwbaarder dan tijd + vage formule... Het gaat de TS er juist om dat een initiële seed telkens dezelfde sequence oplevert; dus ook na 10m "trekkingen".
Voor statistische toepassingen zou ik 'tussendoor reseeden' sowieso sterk afraden. Dat kan er goed voor zorgen dat je dezelfde getallen in dezelfde volgorde opnieuw tegenkomt. Dan krijg je onzinnige resultaten.

Vitamine D tekorten in Nederland | Dodelijk coronaforum gesloten

Pagina: 1