Krautkanal.com

Veröffentlicht am 2017-02-07 05:05:5 in /prog/

/prog/ 9888: LUA / ISO/IEC 9899 / RNG / LCG

eduardostuart Avatar
eduardostuart:#9888

There are no guarantees as to the quality of the random sequence produced and some implementations
are known to produce sequences with distressingly non-random low-order bits. Applications with
particular requirements should use a generator that is known to be sufficient for their needs.

krdesigndotit Avatar
krdesigndotit:#9889

>>9888
local value = math.random(1, 6)

areus Avatar
areus:#9890

>>9888
>>9889
Es geht um ein Spiel, relativ simpel. Jetzt möchte Bernd natürlich gewinnen. Wie stellt er das am besten an?

tereshenkov Avatar
tereshenkov:#9892

>>9888
Also m = 2^32, weil das Spiel eben relativ alt ist und damals für eine 32-Bit-Architektur geschrieben wurde.

gmourier Avatar
gmourier:#9893

>>9890
>>9892
Das Spiel geht wie folgt: Man hat einen Würfel (1, 6) und kann jetzt auf das zu erwartende Ergebnis wetten. Entweder man setzt auf eine beliebige Zahl oder auf große Zahlen (4, 5, 6) oder eben kleine (1, 2, 3). Der Betrag den man setzen kann ist begrenzt von 1 - 5000. Bei der ersten Variante bekommt man 450 % und bei der zweiten 98 % des Einsatzes als Gewinn ausgeschüttet. Wie gesagt, ganz simpel.

ma_tiax Avatar
ma_tiax:#9894

>>9893
Es soll jetzt nicht um den Spielerfehlschluss oder das Gesetz der großen Zahlen gehen, sondern um das Aufbohren des Kongruenzgenerators mithilfe eine entsprechenden Programmes!

kershmallow Avatar
kershmallow:#9895

>>9894
>>9892
Man kennt bereits m, a = 1103515245 und c = 12345.

guischmitt Avatar
guischmitt:#9896

>>9888
>>9890
>Wie stellt er das am besten an?
Was ich mir vorstelle ist, das Programm mit kleinen Einsätzen zu füttern, bis man sehr nahe am nächsten Ergebnis ist und dann den Einsatz erhöhen. Somit sollte man, jedenfalls theoretisch, die Abhängigkeit von aufeinanderfolgenden Zahlen ausnutzen können.

thinkleft Avatar
thinkleft:#9900

Also man kann das wahrscheinlich mit irgendwelchen Methoden aus der Theorie endlicher abelscher Gruppen oder so lösen, da wäre es sehr hilfreich, wenn Bernd die genauen Spezifikationen des Algorithmus und was er weiß bekanntgeben würde und das nicht nur häppchenweise raushaut. Gilt hier m = 6, a = 1103515245 und c = 12345, oder ist m nur allgemein bekannt und für das Würfelergebnis wird am Ende modulo 6 genommen? Wenn man eh schon alle Informationen hat, kann man ja einfach selber ausrechnen, was als nächstes kommt, mit r_n+1 = a* r_n + c und das ganze dann halt modulo m. Wenn man noch nicht alles weiß, kann das schwer oder leicht sein, den Rest auszurechnen. Wenn m, a, und c wie oben sind, kann man auch mit a = 9 und c =3 rechnen.

karalek Avatar
karalek:#9902

>>9900
>local value = math.random(1, 6)
Das wird vom Server verwendet. Die Funktion math.random gehört zu Lua und Lua setzt eigentlich nur auf ISO/IEC 9899, von daher weiß man wie der Algorithmus aufgebaut ist.

https://en.wikipedia.org/wiki/Linear_congruential_generator#Parameters_in_common_use

kiwiupover Avatar
kiwiupover:#9903

>>9900
>>9902
>m = 2^32
Ganz so leicht ist es dann doch wieder nicht. Was ich mir vorstelle ist ein Lua-Skript, welches für mich würfelt und anhand des Ergebnises dann Vorhersagen trifft, um letztendlich mit einer Strategie langfristig und relativ konstante Gewinne abzuschöpfen. Es wird nicht möglich sein, die Zahlen exakt vorherzusagen, aber mit einer sehr hohen Wahrscheinlichkeit. Mit einer gewissen Fehlertoleranz muss gerechnet werden.

freddetastic Avatar
freddetastic:#9904

Bernd sollte sich wahrscheinlich mal Gedanken machen, was da mathematisch passiert, anstatt irgendwelche Bruchstücke hinzuklatschen und davon zu labern, das er irgendwie irgendwas machen will.

Es gibt eine offensichtliche Methode, wie man den Pseudozufallsgenerator ausnutzen kann, um beim Setzen auf eine beliebige Zahl profit zu machen, aber die soll sich Bernd bitte selber überlegen.

karlkanall Avatar
karlkanall:#9905

>>9904
>aber die soll sich Bernd bitte selber überlegen
Genau dafür bin ich ja hier.

pjnes Avatar
pjnes:#9907

>>9888
Für einen alleine ist es schwieriger als gedacht.

Neuste Fäden in diesem Brett: