FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC

Développement d'applications avec le langage Panoramic
 
AccueilAccueil  FAQFAQ  RechercherRechercher  S'enregistrerS'enregistrer  MembresMembres  GroupesGroupes  Connexion  
Derniers sujets
» Pourquoi le compilateur stagne
par papydall Hier à 23:23

» Immortaliser les photos de famille
par jjn4 Hier à 18:29

» Concours de Morpions
par jjn4 Hier à 18:11

» Compilateur FBPano
par jean_debord Hier à 10:12

» Tout est tranquille
par Jean Claude Ven 22 Sep 2017 - 21:41

» Texte en gif animé
par JL35 Ven 22 Sep 2017 - 13:29

» BasicEditor
par Yannick Mer 20 Sep 2017 - 17:17

» Simuler l’appui d'une touche ou combinaison de touches.
par pascal10000 Lun 18 Sep 2017 - 19:30

» Utilisation de HVIEWER pour afficher des images
par papydall Lun 18 Sep 2017 - 17:43

» Panoramic et les gifs animés.
par papydall Lun 18 Sep 2017 - 16:32

» recover source
par pascal10000 Dim 17 Sep 2017 - 14:21

» Recent dans vos menu
par Jean Claude Sam 16 Sep 2017 - 11:41

» Comment centrer un texte 3D.
par pascal10000 Ven 15 Sep 2017 - 20:20

» Carte interface 16 entrées et 16 sorties
par Jicehel Ven 15 Sep 2017 - 16:30

» Version instantanée V 0.9.28i9 possédant l'objet SYNEDIT
par pascal10000 Ven 15 Sep 2017 - 16:20

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Septembre 2017
LunMarMerJeuVenSamDim
    123
45678910
11121314151617
18192021222324
252627282930 
CalendrierCalendrier

Partagez | 
 

 Générateur de nombres pseudo-aléatoires

Voir le sujet précédent Voir le sujet suivant Aller en bas 
AuteurMessage
papydall

avatar

Nombre de messages : 5533
Age : 67
Localisation : Moknine (Tunisie) Entre la chaise et le clavier
Date d'inscription : 03/03/2012

MessageSujet: Générateur de nombres pseudo-aléatoires   Sam 3 Oct 2015 - 20:54

Je me suis amusé à coder un générateur de nombres pseudo-aléatoires.
Puis j’ai généré une série de 10000 nombres aléatoires et j’ai vérifié le caractère aléatoire de la série en calculant la moyenne et l’écart-type.
En effet, pour une distribution aléatoire uniforme entre 0 et 1, la moyenne de la distribution doit être de ½ (0.5) et son écart-type de 1/12 (0.289).

Mon générateur s’est avéré conforme à la théorie, ce qui m’a fait plaisir comme si j’étais un gosse! Razz

NB : Pour avoir des valeurs aléatoires correctes, le temps entre deux appels doit être au minimum de 1s.

Code:

rem ============================================================================
rem          Générateur de nombres pseudo-aléatoires
rem                      Par Papydall
rem ============================================================================
rem Génération de nombres pseudo-aléatoires distribués uniformément entre 0 et 1
rem selon la formule de Lehmer et l algorithme et les paramètres de
rem Parker and Miller (1988):
rem
rem              ____________________________
rem             |                            |
rem             | x(i+1) = a * x(i) modulo c |
rem             |____________________________|
rem
rem
rem Avec :
rem    a = 7^5      = 16807
rem    c = 2^31 - 1 = 2147483647
rem Sa période est fixée par c
rem ============================================================================

rem Appel :
rem Aleat() <===  retourne un nombre pseudo-aléatoire [0..1[ dans la variable globale RAND

rem ============================================================================
dim i
Application_Title "Générateur aléatoire Par Papydall"
list 10 : top 10,50 : left 10,100 : height 10,380 : item_add 10,"RND Papydall" : item_add 10,""
list 20 : top 20,50 : left 20,300 : height 20,380 : item_add 20,"RND Panoramic": item_add 20,""
font_bold 10 : font_bold 20 : width 10,150 : width 20,150
for i = 1 to 25 : Aleat() : item_add 10,rand : item_add 20,rnd(1) : pause 1000 : next i
Verif_Aleat(10000)
terminate
end
rem ============================================================================

SUB Random()
    dim_local a,c,x,y
    a = 16807 : c = 2147483647 : x = a * seed : seed = mod(x,c)
    y = seed/c : '  normalisation par c
    rand = y
END_SUB
rem ============================================================================
' Génération de la constante d'initialisation du générateur Random
' à partir de la date courante selon Anderson (1990)
SUB GenerationSeed()
    if variable("ret") = 0 then dim ret
    dim_local t0,t1,t2,t3,t4,t5,lseed,t$,d$

    t$ = time$  : ' Récupération de l'heure actuelle
    d$ = date$  : ' Récupération de la date actuelle

    t0 = val(mid$(t$,7,8)) : ' secondes
    t1 = val(mid$(t$,4,2)) : ' minutes
    t2 = val(mid$(t$,1,2)) : ' heures

    t3 = val(mid$(d$,1,2)) : ' Jour
    t4 = val(mid$(d$,4,2)) : ' Mois
    t5 = val(mid$(d$,7,4)) : ' année

' calcul du seed d'après l'algo d'Anderson (seed varie entre 0 et 2^31-1
    lseed = t5 + 70*(t4 + 12*(t3 + 31*(t2 + 23*(t1 + 59*t0))))
' s'assurer que seed est impair
    if even(lseed) = 1 then lseed = lseed - 1
    ret =  lseed
END_SUB
rem ============================================================================
SUB Aleat()
    if variable("rand") = 0 then dim rand
    if variable("seed") = 0 then dim seed
    GenerationSeed() : seed = ret : Random()
END_SUB
rem ============================================================================
SUB Verif_Aleat(NbTirage)
    dim_local i,Serie(NbTirage),Somme, Moyenne, EcartType,tex$
    print "  ..... Veuillez patienter, je calcule ....."
' Génération d'une série aléatoire de distribution uniforme
    for i = 0 to NbTirage : Aleat() : Serie(i) = rand : display : next i
' Vérification du caractère aléatoire de la série
' Pour une distribution aléatoire uniforme entre 0 et 1, la moyenne de
' la distribution doit être de 0.5 et son écart 0,289 (1/12)
    Somme = 0
    for i = 0 to NbTirage : Somme = Somme + Serie(i) : next i
    Moyenne = Somme / NbTirage

    Somme = 0
    for i = 0 to NbTirage : Somme = Somme + (Serie(i) - Moyenne)*(Serie(i) - Moyenne) : next i
    EcartType = sqr(Somme/Nbtirage)
    
    tex$ = "Moyenne : " + str$(Moyenne) + " pour " + str$(NbTirage) + " tirages" + chr$(13)
    tex$ = tex$ + "Ecart type : " + str$(EcartType) + " pour " + str$(NbTirage)+" tirages"+ chr$(13)+chr$(13)
    tex$ = tex$ + "Pour une distribution aleatoire uniforme entre 0 et 1," +chr$(13)
    tex$ = tex$ + "pour un nombre infini de tirages" + chr$(13)
    tex$ = tex$ + "- la moyenne vaut 0.5" + chr$(13)
    tex$ = tex$ + "- l'ecart-type vaut 1/12 soit 0.289"
    message tex$

END_SUB
rem ============================================================================

Edit :
Pour obtenir une série d’entiers  aléatoires entre 0 et 100, modifier la ligne 30 comme ceci et comparez

Code:
 for i = 1 to 25 : Aleat() : item_add 10,int(rand*100) : item_add 20,int(rnd(100)) : pause 1000 : next i
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://papydall-panoramic.forumarabia.com/
Marc37



Nombre de messages : 447
Age : 56
Localisation : TOURS
Date d'inscription : 18/03/2014

MessageSujet: Re: Générateur de nombres pseudo-aléatoires   Dim 4 Oct 2015 - 10:13

Merci Papydall !

Testé avec succès.
Idem pour la sortie du programme qui ne fait pas BEEP ! (Sic)
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Yannick

avatar

Nombre de messages : 7992
Age : 46
Localisation : Bretagne
Date d'inscription : 15/02/2010

MessageSujet: re   Dim 4 Oct 2015 - 12:49

Testé et approuvé !
Laughing

Voilà qui pourrait faire l' objet d' un petit cours sur les nombres aléatoires
dans une rubrique mathématiques ou d' un petit article.....


Dernière édition par ygeronimi le Lun 5 Oct 2015 - 5:37, édité 1 fois
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
JL35



Nombre de messages : 5951
Localisation : 77
Date d'inscription : 29/11/2007

MessageSujet: Re: Générateur de nombres pseudo-aléatoires   Dim 4 Oct 2015 - 16:23

Un petit court mais pas trop long...
Bon, eh bien je corrige moi aussi, parce que du coup ce que j'ai dit ne veut plus rien dire...


Dernière édition par JL35 le Lun 5 Oct 2015 - 10:50, édité 1 fois
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
papydall

avatar

Nombre de messages : 5533
Age : 67
Localisation : Moknine (Tunisie) Entre la chaise et le clavier
Date d'inscription : 03/03/2012

MessageSujet: Re: Générateur de nombres pseudo-aléatoires   Dim 4 Oct 2015 - 18:12

Ygeronimi a troqué son té contre une esse.
On peut être dessinateur (T) ou boucher (S), personne n’est parfait !

C'est la faute à JL35, moi je sors.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://papydall-panoramic.forumarabia.com/
Klaus

avatar

Nombre de messages : 10062
Age : 68
Localisation : Ile de France
Date d'inscription : 29/12/2009

MessageSujet: Re: Générateur de nombres pseudo-aléatoires   Lun 5 Oct 2015 - 4:35

En voyant ton excellent générateur de nombres aléatoires, je me pose la question de la comparaison entre ta procédure, la fonction RND(V) de Panoramic et la fonction res% = DLL_call1("RandomValue",maxi%) de KGF.dll. Laquelle de ces 2 solutions est la "meilleure" sur le plan de la nature aléatoire des résultats ? j'avais l'impression que RandomValue est meulleure que Rnd, mais je peux me tromper. Pourrais-tu faire un comparatif de ces 3 solution ?
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Yannick

avatar

Nombre de messages : 7992
Age : 46
Localisation : Bretagne
Date d'inscription : 15/02/2010

MessageSujet: re   Lun 5 Oct 2015 - 5:39

J' ai corrigé mais que ce soit un cours court ou un article long
je suis preneur.
Laughing
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
jean_debord

avatar

Nombre de messages : 751
Age : 63
Localisation : Limoges
Date d'inscription : 21/09/2008

MessageSujet: Re: Générateur de nombres pseudo-aléatoires   Lun 5 Oct 2015 - 10:17

Voici un tutoriel que j'ai fait il y a longtemps :

http://www.unilim.fr/pages_perso/jean.debord/math/random/random.htm

Voir également l'article n° 3 sur mon compilateur, avec un exemple de DLL pour Panoramic et une évaluation du générateur avec un test de khi-2
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://www.unilim.fr/pages_perso/jean.debord/index.htm
papydall

avatar

Nombre de messages : 5533
Age : 67
Localisation : Moknine (Tunisie) Entre la chaise et le clavier
Date d'inscription : 03/03/2012

MessageSujet: Re: Générateur de nombres pseudo-aléatoires   Mar 6 Oct 2015 - 1:11

Klaus a écrit:
En voyant ton excellent générateur de nombres aléatoires, je me pose la question de la comparaison entre ta procédure, la fonction RND(V) de Panoramic et la fonction res% = DLL_call1("RandomValue",maxi%) de KGF.dll. Laquelle de ces 2 solutions est la "meilleure" sur le plan de la nature aléatoire des résultats ? J’avais l'impression que RandomValue est meulleure que Rnd, mais je peux me tromper. Pourrais-tu faire un comparatif de ces 3 solutions ?

En ce moment, j’ai deux problèmes et j’espère que le proverbe « jamais deux sans trois » ne soit pas vrai !
1er problème :
Aujourd’hui j’ai consulté mon ophtalmo pour une détérioration sensible de ma vue : diagnostic : nécessité d’une opération chirurgicale dans un mois.
2ème problème :
Difficulté de navigation sur internet : une lenteur exaspérante, comme si ma mauvaise vision ne suffisait pas !

Bon, ce sont des soucis personnels et je vous en fais grâce.

Pour revenir au générateur pseudo-aléatoire, je commence à faire des tests sur celui de Panoramic RND() , sur  le générateur que j’ai posté ci-haut  ALEAT() et sur celui de Klaus « DLL_call1("RandomValue",maxi%) de KGF.dll. ».

1ère constatation :
DLL_call1("RandomValue",maxi%) de KGF.dll. fournit toujours la même série.

Code:

dim i
list 10 : top 10,10 : left 10,020 : height 10,400 : item_add 10,"RandomValue,100" : item_add 10,""
dll_on "kgf.dll"
for i = 1 to 25
    item_add 10,DLL_call1("RandomValue",100)
    ' On obtient toujours la même série : 1 , 4 , 87 , 21 , 28 , 68 , 32 , 17 etc.
next i



Par contre RND() et ALEAT() fournissent toujours des séries différentes.
Je ne peux rien conclure, pour le moment sans pousser les tests.
Je coderais les tests suivants ( dans le(s) jour(s) à venir)

• Test d’équidistribution
• Test de répartition bidimensionnelle
• Test de l’analyse graphique de la répartition bidimensionnelle
• Les statistiques suivantes
1- Moyenne des tirages pairs
2- Moyenne des tirages impairs
3- Ecart type des tirages impairs
4- Ecart type des tirages pairs
5- La Covariance
6- Le Coefficient de corrélation


Je posterais peut-être d’autres codes pour d’autres générateurs.

Affaire à suivre ...
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://papydall-panoramic.forumarabia.com/
Klaus

avatar

Nombre de messages : 10062
Age : 68
Localisation : Ile de France
Date d'inscription : 29/12/2009

MessageSujet: Re: Générateur de nombres pseudo-aléatoires   Mar 6 Oct 2015 - 1:24

Merci, Papydall, ça donne déjà une première idée, et j'ai de quoi réfléchir sur mon code. J'ai pourtant pris soin d'initialiser la racine à chaque appel, mais j'ai dû faire une erreur? Ceci dit, la routine retourne évidemment une valeur arrondie à l'entier le plus proche, étant donné que dll_callx ne sait retourner que des entiers. Je vais revoir ça...

Les yeux, c'est embêtant, et je te souhaite sincèrement de passer ce mauvais moment le mieux possible, pour constater une amélioration après la convalescence ! Courage !
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
papydall

avatar

Nombre de messages : 5533
Age : 67
Localisation : Moknine (Tunisie) Entre la chaise et le clavier
Date d'inscription : 03/03/2012

MessageSujet: Re: Générateur de nombres pseudo-aléatoires   Mar 6 Oct 2015 - 1:28

Merci Klaus.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://papydall-panoramic.forumarabia.com/
Klaus

avatar

Nombre de messages : 10062
Age : 68
Localisation : Ile de France
Date d'inscription : 29/12/2009

MessageSujet: Re: Générateur de nombres pseudo-aléatoires   Mar 6 Oct 2015 - 1:57

J'ai constaté qu'il y a un oubli dans la doc de RandomValue ! Si tu passes un paramètre négatif (-1 par exemple), la racine aléatoire sera randomisée. Donc, pour le test, je te suggère de procéder comme suit:
Code:
label start
dim i, m1%
m1% = 0 - 1
list 10 : top 10,10 : left 10,020 : height 10,400
button  1 : left 1,200 : caption 1,"Start" : on_click 1,start
dll_on "kgf.dll"
end
start:
clear 10
item_add 10,"RandomValue,100" : item_add 10,""
i = DLL_call1("RandomValue",m1%)
for i = 1 to 25
    item_add 10,DLL_call1("RandomValue",100)
    ' On obtient toujours la même série : 1 , 4 , 87 , 21 , 28 , 68 , 32 , 17 etc.
next i
return

Je vais corriger la doc de cette fonction !
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
papydall

avatar

Nombre de messages : 5533
Age : 67
Localisation : Moknine (Tunisie) Entre la chaise et le clavier
Date d'inscription : 03/03/2012

MessageSujet: Re: Générateur de nombres pseudo-aléatoires   Mar 6 Oct 2015 - 3:43

J’ai remarqué pour le 1er appel :
resultat = DLL_call1("RandomValue",n%)
Si n% < 0 , alors resultat  vaut 0
Si n% >= 0, alors resultat vaut 1

Le  1er appel est un RANDOMIZE
Donc, on appelle RANDOMIZE() puis Random(n%)

Code:

rem ============================================================================
list 10 : top 10,10 : left 10,020 : height 10,400
dll_on "kgf.dll"
 Randomize()
 Random(100)
end
rem ============================================================================
SUB Random(n%)
    dim_local i
    item_add 10,"RandomValue,"+str$(n%) : item_add 10,""
    for i = 1 to 25
        item_add 10,DLL_call1("RandomValue",n%)
    next i
END_SUB
rem ============================================================================
SUB Randomize()
    dim_local bidon
    bidon = DLL_call1("RandomValue",0-1)
END_SUB
rem ============================================================================
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://papydall-panoramic.forumarabia.com/
Klaus

avatar

Nombre de messages : 10062
Age : 68
Localisation : Ile de France
Date d'inscription : 29/12/2009

MessageSujet: Re: Générateur de nombres pseudo-aléatoires   Mar 6 Oct 2015 - 3:56

Citation :
Si n% < 0 , alors resultat vaut 0
Si n% >= 0, alors resultat vaut 1
C'est presque ça... Il faut lire:
Citation :
Si n% < 0 , alors resultat vaut 0
Si n% >= 0, alors resultat vaut la valeur aléatoire
d'ailleurs, dans ton code (procedure Random), tu l'utilises bien comme ça.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Laurent (Minibug)

avatar

Nombre de messages : 2353
Age : 50
Localisation : Vienne (86)
Date d'inscription : 10/02/2012

MessageSujet: Re: Générateur de nombres pseudo-aléatoires   Mar 6 Oct 2015 - 8:42

Bon courage pour ces moments difficiles Papydall !

Quand a la lenteur sur internet, je crois que l'on y est tous confronté, plus ou moins a un moment ou a un autre.
Chez moi, ça revient de manière cyclique. et c'est très désagréable.... Suspect
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
papydall

avatar

Nombre de messages : 5533
Age : 67
Localisation : Moknine (Tunisie) Entre la chaise et le clavier
Date d'inscription : 03/03/2012

MessageSujet: Re: Générateur de nombres pseudo-aléatoires   Mar 6 Oct 2015 - 10:54

Merci Minibug pour ton soutien.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://papydall-panoramic.forumarabia.com/
Jicehel

avatar

Nombre de messages : 5855
Age : 45
Localisation : 77500
Date d'inscription : 19/04/2011

MessageSujet: Re: Générateur de nombres pseudo-aléatoires   Mar 6 Oct 2015 - 11:13

Les opérations aux yeux ... Pfff ... ça veut dire que pendant plusieurs jours tu risques de ne plus pouvoir programmer... inadmissible !!! Bon sérieusement, bon courage, moi j'ai eu aussi très jeune et ce n'est pas le genre de trucs que l'on souhaite faire trop souvent ...
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
papydall

avatar

Nombre de messages : 5533
Age : 67
Localisation : Moknine (Tunisie) Entre la chaise et le clavier
Date d'inscription : 03/03/2012

MessageSujet: Re: Générateur de nombres pseudo-aléatoires   Mar 6 Oct 2015 - 11:57

Merci Jicehel

J’ai toujours appris à faire avec le peu de choses  que j’ai. Je m’y adapterai.
"Mieux vaut allumer une bougie que maudire les ténèbres."
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://papydall-panoramic.forumarabia.com/
Laurent (Minibug)

avatar

Nombre de messages : 2353
Age : 50
Localisation : Vienne (86)
Date d'inscription : 10/02/2012

MessageSujet: Re: Générateur de nombres pseudo-aléatoires   Mar 6 Oct 2015 - 19:37

@Papydall :

Citation :
J’ai toujours appris à faire avec le peu de choses que j’ai. Je m’y adapterai.
"Mieux vaut allumer une bougie que maudire les ténèbres."

L'idéal c'est d'utiliser des anti-brouillards longue portée
lol! lol! lol! lol!
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Jean Claude

avatar

Nombre de messages : 5019
Age : 63
Localisation : 83 Var
Date d'inscription : 07/05/2009

MessageSujet: Re: Générateur de nombres pseudo-aléatoires   Mar 6 Oct 2015 - 20:53

Du coté obscur, passer, il ne faut pas. Grande est la médecine.

Bon courage Papydall.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
papydall

avatar

Nombre de messages : 5533
Age : 67
Localisation : Moknine (Tunisie) Entre la chaise et le clavier
Date d'inscription : 03/03/2012

MessageSujet: Re: Générateur de nombres pseudo-aléatoires   Mer 7 Oct 2015 - 0:07

Merci Minibug.
Merci Jean Claude.

Nous avons d'excellents chirurgiens ophtalmologues, Dieu merci. Cool
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://papydall-panoramic.forumarabia.com/
Yannick

avatar

Nombre de messages : 7992
Age : 46
Localisation : Bretagne
Date d'inscription : 15/02/2010

MessageSujet: re   Mer 7 Oct 2015 - 10:12

Si cela est nécessaire, mieux vaut faire une pause écran
que de se retrouver avec un écran noir.

Je te souhaite de nous revenir avec un regard tout neuf.


Ps : Attention les gars, plus une faute n' échappera à Papydall.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Contenu sponsorisé




MessageSujet: Re: Générateur de nombres pseudo-aléatoires   

Revenir en haut Aller en bas
 
Générateur de nombres pseudo-aléatoires
Voir le sujet précédent Voir le sujet suivant Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» [Staff Amour Sucré] Les modérateurs du jeu
» Pseudo-objet - Générateur de code
» Améliorer mon générateur de texte pour les membres.
» comment faire apparaître le mot modérateur sous un speudo
» Affichage pseudo modérateur

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC :: PANORAMIC :: Vos sources, vos utilitaires à partager-
Sauter vers: