Nous sommes actuellement le 28 Mars 2024, 11:37

Le fuseau horaire est UTC+1 heure [Heure d’été]



Publier un nouveau sujet Répondre au sujet  [ 28 message(s) ]  Aller vers la page 1, 2  Suivant
Auteur Message
Message Publié : 24 Novembre 2013, 18:08 
Hors-ligne Shazamm !
Avatar de l’utilisateur

Inscription : Oct 2013
Message(s) : 1849
Le générateur aléatoire utilisé pour les dés s'appuie sur l'algorithme de MersenneTwister a priori réputé pour ses qualités statistiques.
Donc, oui, j'opterai plutôt pour « les dieux du hasard te détestent » :twisted: .
Haut
 Profil  
 
Message Publié : 24 Novembre 2013, 18:12 
Hors-ligne Incube/Succube
Avatar de l’utilisateur

Inscription : Oct 2013
Message(s) : 1942
@ Keyradin qu'est pas content de la balise dice (c'te môôôdite !) :
Je sais bien que ça te fera pas moins mal, mais... sache quand même que t'es pas le seul...
A la tienne, collègue ! :biere:

pî le jour où on le rencontrera, c't'algorithmedeMersenneTwister, on va te le rééduquer activement à grands coups de chope (vide, faut quand même pas gâcher...) :lol:
Haut
 Profil  
 
Message Publié : 24 Novembre 2013, 21:38 
Hors-ligne Administrateur
Avatar de l’utilisateur

Inscription : Oct 2013
Message(s) : 20394
Rhajzad a écrit :
pî le jour où on le rencontrera, c't'algorithmedeMersenneTwister, on va te le rééduquer activement à grands coups de chope (vide, faut quand même pas gâcher...) :lol:

Personnellement, j'utiliserai pas de chope...


On dirait pas mais j'utilise des balises quand même!
Haut
 Profil  
 
Message Publié : 24 Novembre 2013, 22:28 
Hors-ligne Uruk
Avatar de l’utilisateur

Inscription : Nov 2013
Message(s) : 203
Florimel a écrit :
Le générateur aléatoire utilisé pour les dés s'appuie sur l'algorithme de MersenneTwister a priori réputé pour ses qualités statistiques.
Donc, oui, j'opterai plutôt pour « les dieux du hasard te détestent » :twisted: .
Si tu veux vérifier qu'il fonctionne bien j'ai réalisé un script qui vérifie le biais de manière visuelle, certaines versions de PHP en ont un qui se traduit par des motifs sur l’exécution du script.

Exemple sur mon serveur:
http://www.planeteroliste.com/test/image-mtrand.php

Code :
<?php
header
("Content-type: image/png");
$im imagecreatetruecolor(512512)
    or die(
"Pad de GD");
$white imagecolorallocate($im255255255);
for (
$y=0$y<512$y++) {
    for (
$x=0$x<512$x++) {
        if (
mt_rand(0,1) === 1) {
            
imagesetpixel($im$x$y$white);
        }
    }
}        
imagepng($im);
imagedestroy($im);
?>
Haut
 Profil  
 
Message Publié : 25 Novembre 2013, 22:21 
Hors-ligne Shazamm !
Avatar de l’utilisateur

Inscription : Oct 2013
Message(s) : 1849
Merci. Pas de biais apparent...
http://donjonsetdragons.net/test/image-mtrand.php
http://donjonsetdragons.net/test/image-mtrand-d20.php

Edité : 25 Novembre 2013, 22:38 par Florimel
Haut
 Profil  
 
Message Publié : 25 Novembre 2013, 22:36 
Hors-ligne Uruk
Avatar de l’utilisateur

Inscription : Nov 2013
Message(s) : 203
Yep ça roule.
Par contre il peut potentiellement demeurer des problèmes d'entropie s'il y a beaucoup d'accès au /dev/urandom, ce qui limite de fait la variabilité des jets.
Haut
 Profil  
 
Message Publié : 25 Novembre 2013, 22:53 
Hors-ligne Shazamm !
Avatar de l’utilisateur

Inscription : Oct 2013
Message(s) : 1849
J'ai l'impression que contrairement à la fonction rand qui l'appuie effectivement sur le générateur de l'OS, la fonction mt_rand quant à elle possède une implémentation spécifique qui n'en fait pas usage. Donc j'ai tendance à croire qu'on n'aura pas ce problème de /dev/urandom.
Voir code source php de mt_rand.

Edité : 25 Novembre 2013, 23:00 par Florimel
Haut
 Profil  
 
Message Publié : 25 Novembre 2013, 23:32 
Hors-ligne Uruk
Avatar de l’utilisateur

Inscription : Nov 2013
Message(s) : 203
Florimel a écrit :
J'ai l'impression que contrairement à la fonction rand qui l'appuie effectivement sur le générateur de l'OS, la fonction mt_rand quant à elle possède une implémentation spécifique qui n'en fait pas usage. Donc j'ai tendance à croire qu'on n'aura pas ce problème de /dev/urandom.
Voir code source php de mt_rand.

Oui et non... si tu fais confiance au mt_srand tu vas rencontrer des problèmes au niveau de la génération du biais qui est codé de cette manière:
Code :
GENERATE_SEED() (((long) (time(0) * getpid())) ^ ((long) (1000000.0 * php_combined_lcg(TSRMLS_C))))
En gros si tu vas suffisamment vite et que tu appelles systématiquement le mt_srand a chaque appel tu vas retomber sur la même valeur de seed donc la même suite de nombres. Je peux t'assurer que le problème est réel... c'est du vécu.
Il est préférable d'utiliser le urandom ou autre source avec une entropie suffisante pour l'initialiser ou l'initialiser une seule fois pour toute la séquence de jets.
Haut
 Profil  
 
Message Publié : 26 Novembre 2013, 01:19 
Hors-ligne Shazamm !
Avatar de l’utilisateur

Inscription : Oct 2013
Message(s) : 1849
butch2k a écrit :
Il est préférable d'utiliser le urandom ou autre source avec une entropie suffisante pour l'initialiser ou l'initialiser une seule fois.
Je crois bien que c'est déjà comme ça que ça fonctionne, il n'est initialisé qu'une seule fois. En tout cas, je n'ai pas rajouté de mt_srand quand j'ai codé la balise dice... :sifflote:

Enfin bon, merci du conseil. A l'occasion, je traquerai les occurrences abusives de mt_srand qui pourraient traîner ailleurs dans le code, et y mettrai une pincée de /dev/urandom si je trouve le temps...
Haut
 Profil  
 
Message Publié : 26 Novembre 2013, 01:23 
Hors-ligne Uruk
Avatar de l’utilisateur

Inscription : Nov 2013
Message(s) : 203
En fait le problème, si problème il y a, se traduira par des suites de tirages identiques dans un même message, si tu lances 1d20 et 1d6 dans le même message deux fois, il est tout a fait possible que tu obtiennes deux fois la même série de jets. La chance est infime mais elle se produit suffisamment souvent pour que ce soit remarquable.
Haut
 Profil  
 
Message Publié : 22 Janvier 2014, 01:16 
Hors-ligne Shazamm !
Avatar de l’utilisateur

Inscription : Oct 2013
Message(s) : 1849
butch2k a écrit :
Il va arriver (rarement) de tomber sur des suites de tirages identiques du fait du générateur de seed php.
Je ne regénère pas le "seed" entre les tirages d'un même message; le même générateur unique est utilisé séquentiellement sur chacune des balises du message sans être réinitialisé.

Donc, pour le coup, Le_kepon, si tu fais référence à ce message, je ne crois pas que tu sois tombé dans le cas de figure mentionné par butch. En effet, tes quatre lancers étaient bien dans le même message, donc issus d'un seul et même générateur initialisé une seule fois avec un seul "seed", et c'est donc très certainement juste de la chance.

Le cas de figure théorique mentionné par butch concerne davantage le scénario où deux messages distincts auraient des "seed" identiques (par exemple s'ils sont publiés simultanément dans la même microseconde exactement) : dans ce cas, il peuvent en effet produire chacun la même série de résultats.
Haut
 Profil  
 
Message Publié : 22 Janvier 2014, 02:52 
Hors-ligne Uruk
Avatar de l’utilisateur

Inscription : Nov 2013
Message(s) : 203
En 7 ans sur PR j'ai vu trop de séries identiques pour que ce soit juste le simple hasard, quand tu vas te retrouver avec des séries de 3 dés identiques dans le même message tu vas finir par te poser des questions toi aussi. C'est rare mais c'est plus courant que ce que ne le voudrait la simple statistique.

Je peux t'assurer a 100% qu'il y a vraiment un truc qui cloche, j'ai quelques pistes mais rien de définitif pour le moment. En gros c'est probablement lié au fait que le seed est liée au process et que le moteur PHP utilise cette variable mémoire pour ses propres besoins tout autant que pour ceux de ton script.
Haut
 Profil  
 
Message Publié : 05 Février 2014, 20:38 
Hors-ligne Shazamm !
Avatar de l’utilisateur

Inscription : Oct 2013
Message(s) : 1849
butch2k a écrit :
[...] se traduira par des [...] tirages identiques dans un même message, si tu lances 1d20 [...] dans le même message deux fois [...]

Par acquis de conscience, j'ai quand même fait quelques requêtes dans la base de données, spécifiquement sur les messages qui contiennent plusieurs lancers de 1d20 au sein de ce même message, pour voir si ce cas particulier introduirait un quelconque biais.

L'espérance que deux lancers d'1d20 (au sein d'un même message) soient identiques est mathématiquement de 1 sur 20. La mesure montre que ça s'est produit dans la réalité environ 1 fois sur 19 (analyse toujours restreinte au cas de dés dans un même message). Cette valeur me semble tout à fait raisonnable compte tenu que l'échantillon reste quand même assez faible (l'ordre de grandeur est seulement de 3000 dés analysés dans cette configuration précise).

Moralité, pas de biais flagrant constaté pour le moment.

butch2k a écrit :
j'ai vu trop de séries identiques

J'ai également regardé si on avait des occurrences de "séries identiques" qui seraient anormales. Je me suis pour cela intéressé au cas particulier des jets de 3d6 et de 4d6, simplement parce que ce sont des lancers assez fréquents et que du coup, on peut se dire que l'échantillonnage est déjà statistiquement relativement représentatif.

Là encore, pas de biais constaté pour le moment. Il y a effectivement eu des tirages identiques, mais bien dans une proportion conforme à l'espérance mathématique (1 chance sur 216 que deux tirages 3d6 soient identiques, et 1 chance sur 1296 pour que deux tirages de 4d6 soient identiques).
Haut
 Profil  
 
Message Publié : 06 Février 2014, 18:31 
Hors-ligne Uruk
Avatar de l’utilisateur

Inscription : Nov 2013
Message(s) : 203
Perso j'ai constaté une occurrence grosso-modo deux-trois fois supérieure a l'espérance normale. Le truc qu'on ne contrôle pas c'est l'utilisation du générateur de seed par PHP lui même, or si tu regarde le code il utilise le même que celui du user space. Donc potentiellement si un module requière une régen du seed entre deux jets ça peut poser un problème. Il n'est pas impossible que chez moi ce soit effectivement le cas lors de la sérialisation du jet dans Mongo, un autre facteur peut être le SAPI employé, dans mon cas c'est le FPM.
Pour info j'ai 500k jets unitaires, soit environ 100k jets complexes réalisés sous PHP. En comparaison je ne constate pas de biais pour les jets effectués au travers du générateur de formules Lua (mais là y en a beaucoup moins). Là les résultats sont conformes aux attentes, je penche donc sérieusement sur un problème au niveau d'un module (lors d'un régen de connexion sécurisée ?).
Haut
 Profil  
 
Message Publié : 06 Février 2014, 20:00 
Hors-ligne Faiseur de miracle
Avatar de l’utilisateur

Inscription : Nov 2013
Message(s) : 2121
butch2k a écrit :
Perso j'ai constaté une occurrence grosso-modo deux-trois fois supérieure a l'espérance normale. Le truc qu'on ne contrôle pas c'est l'utilisation du générateur de seed par PHP lui même, or si tu regarde le code il utilise le même que celui du user space. Donc potentiellement si un module requière une régen du seed entre deux jets ça peut poser un problème. Il n'est pas impossible que chez moi ce soit effectivement le cas lors de la sérialisation du jet dans Mongo, un autre facteur peut être le SAPI employé, dans mon cas c'est le FPM.
Pour info j'ai 500k jets unitaires, soit environ 100k jets complexes réalisés sous PHP. En comparaison je ne constate pas de biais pour les jets effectués au travers du générateur de formules Lua (mais là y en a beaucoup moins). Là les résultats sont conformes aux attentes, je penche donc sérieusement sur un problème au niveau d'un module (lors d'un régen de connexion sécurisée ?).

:applaudit:
C'est joli, une dirai un poème dans une langue étrangère !

:jesors:
Haut
 Profil  
 
Message Publié : 06 Février 2014, 22:31 
Hors-ligne Uruk
Avatar de l’utilisateur

Inscription : Nov 2013
Message(s) : 203
Oui c'est le tag Lang=geek :biere:
Haut
 Profil  
 
Message Publié : 07 Février 2014, 00:34 
Hors-ligne Incube/Succube
Avatar de l’utilisateur

Inscription : Oct 2013
Message(s) : 1942
Y'a pas d'offense, butch2k...
Tu nous aides, et c'est sympa ! :sage:
Haut
 Profil  
 
×9 Message Publié : 10 Octobre 2017, 01:37 
Hors-ligne Shazamm !
Avatar de l’utilisateur

Inscription : Oct 2013
Message(s) : 1849
Rien cassé ?
test 1: Florimel lance 3d8+6 et obtient 20 (6, 1, 7) test 2: Florimel lance 1d20 et obtient 14 (14) test 3: Florimel lance 2*(2d10)-2 et obtient 30 (9, 7)

Nouveautés :
test 4: Florimel lance 10d10e6 et obtient 4 (5, 2, 9, 9, 3, 6, 7, 2, 2, 3) test 5: Florimel lance 10d10f6 et obtient 6 (10, 10, 10, 2, 7, 7, 4, 6, 6, 1) test 6: Florimel lance 10d10s6 et obtient 3 (7, 8, 8, 1, 1, 2, 3, 4, 10, 3)
3 dés effacés.
Haut
 Profil  
 
Message Publié : 10 Octobre 2017, 15:45 
En ligne Administrateur
Avatar de l’utilisateur

Inscription : Oct 2013
Message(s) : 32849
Localisation : Limousin
Florimel a écrit :
Bon, voilà, c'est fait.

Trois nouvelles syntaxes :
Code :
[dice]10d10e6[/dice]
Lance 10 dés à 10 faces et compte un succès pour chaque dé supérieur ou égal à 6

Code :
[dice]10d10f6[/dice]
Lance 10 dés à 10 faces, compte un succès pour chaque dé supérieur ou égal à 6 et retranche 1 succès pour chaque dé valant 1

Code :
[dice]10d10s6[/dice]
Lance 10 dés à 10 faces, compte un succès pour chaque dé supérieur ou égal à 6, compte 1 succès supplémentaire (donc 2 succès) pour chaque dé maximum (donc valant 10) et retranche 1 succès pour chaque dé valant 1

Je vous laisse tester, me dire si ça vous convient, et ce qu'il faut changer ou améliorer, le cas échéant.
Haut
 Profil  
 
×9 Message Publié : 10 Octobre 2017, 15:47 
En ligne Administrateur
Avatar de l’utilisateur

Inscription : Oct 2013
Message(s) : 32849
Localisation : Limousin
Test pour compter les succès à 4+, 5+ et 6+
avec « e », compte les succès sans décompter les « 1 »
Souricette lance 12d6e4 et obtient 9 (6, 6, 5, 4, 1, 3, 5, 6, 5, 4, 4, 3)
Souricette lance 12d6e5 et obtient 3 (2, 2, 5, 4, 2, 1, 6, 3, 4, 3, 5, 3)
Souricette lance 12d6e6 et obtient 3 (5, 1, 6, 2, 1, 1, 6, 5, 2, 6, 4, 5)

avec « f », compte les succès mais enlève un succès par « 1 » sorti dans le tirage
Souricette lance 12d6f4 et obtient 2 (2, 4, 3, 4, 1, 2, 3, 3, 3, 6, 1, 5) ; 4 succès - 2 échecs = 2
Souricette lance 12d6f5 et obtient -1 (3, 1, 3, 4, 4, 1, 4, 5, 6, 2, 1, 3) ; 2 succès - 3 échecs = -1
Souricette lance 12d6f6 et obtient 2 (6, 4, 1, 3, 1, 6, 6, 3, 6, 4, 2, 4) ; 4 succès - 2 échecs = 2

avec « s », compte les succès, ajoute un succès supplémentaire par valeur max (« 6 » sur un d6, « 10 » sur un d10, ...) et enlève un succès par « 1 » sorti dans le tirage
Souricette lance 12d6s4 et obtient 5 (2, 6, 4, 3, 3, 3, 1, 3, 2, 6, 6, 1) ; 4 succès + 3 succès bonus (« 6 ») - 2 échecs = 5
Souricette lance 12d6s5 et obtient 5 (4, 5, 5, 5, 1, 6, 2, 5, 2, 3, 2, 4) ; 5 succès + 1 succès bonus (« 6 ») - 1 échec = 5
Souricette lance 12d6s6 et obtient 2 (2, 3, 5, 3, 1, 4, 2, 1, 3, 6, 3, 6) ; 4 succès + 3 succès bonus (« 6 ») - 2 échecs = 5
Haut
 Profil  
 
Afficher les messages publiés depuis :  Trier par  
Publier un nouveau sujet Répondre au sujet  [ 28 message(s) ]  Aller vers la page 1, 2  Suivant

Le fuseau horaire est UTC+1 heure [Heure d’été]


Qui est en ligne ?

Utilisateur(s) parcourant ce sujet : Aucun utilisateur inscrit


Vous ne pouvez pas publier de nouveaux sujets dans ce forum
Vous ne pouvez pas répondre aux sujets dans ce forum
Vous ne pouvez pas éditer vos messages dans ce forum
Vous ne pouvez pas supprimer vos messages dans ce forum
Vous ne pouvez pas insérer de pièces jointes dans ce forum

Aller vers :  
Propulsé par phpBB® Forum Software © phpBB Group
Traduction et support en français • Utiliser phpBB avec un certificat SSL