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
» TourD Version 2
par Minibug Aujourd'hui à 1:50

» La métamatière et le peuple
par JL35 Hier à 21:18

» Capture d'une zone de l'écran total
par JL35 Hier à 18:41

» Logiciel de soutien scolaire en langues.
par Pedro Alvarez Hier à 11:49

» qui peut résoudre mon prb
par pascal10000 Jeu 16 Nov 2017 - 17:30

» évènements et objets système : listage automatique
par Jean Claude Jeu 16 Nov 2017 - 11:15

» Panoramic et la reconnaissance vocale.
par papydall Jeu 16 Nov 2017 - 3:45

» Bizzarerie dans Edge
par Marc 37 Mer 15 Nov 2017 - 17:45

» KGF_dll - nouvelles versions
par Klaus Mer 15 Nov 2017 - 2:08

» Analyser un code Panoramic
par JL35 Lun 13 Nov 2017 - 18:38

» Un bonjour en passant...
par Minibug Dim 12 Nov 2017 - 19:57

» mise a jour calculatrice
par joeeee2017 Dim 12 Nov 2017 - 4:20

» comment accèder à l'heure et à la date d'un fichier
par Klaus Sam 11 Nov 2017 - 0:53

» Compilateur FBPano
par Jicehel Mer 8 Nov 2017 - 15:22

» Mon adresse e-mail
par treehouse Mer 8 Nov 2017 - 14:36

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Novembre 2017
LunMarMerJeuVenSamDim
  12345
6789101112
13141516171819
20212223242526
27282930   
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 : 5587
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/
Marc 37



Nombre de messages : 505
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 : 7997
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 : 5979
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 : 5587
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 : 10112
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 : 7997
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 : 759
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 : 5587
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 : 10112
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 : 5587
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 : 10112
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 : 5587
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 : 10112
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
Minibug

avatar

Nombre de messages : 2357
Age : 51
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 http://gpp.panoramic.free.fr
papydall

avatar

Nombre de messages : 5587
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 : 5859
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 : 5587
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/
Minibug

avatar

Nombre de messages : 2357
Age : 51
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 http://gpp.panoramic.free.fr
Jean Claude

avatar

Nombre de messages : 5056
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 : 5587
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 : 7997
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

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: