begin process at 2012 02 14 00:39:55
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Maths

 > FONCTION VRAIMENT ALÉATOIRE

FONCTION VRAIMENT ALÉATOIRE


 Information sur la source

Note :
5 / 10 - par 1 personne
5,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Maths Classé sous :hasard, aléatoire, probabilités, simulation Niveau :Débutant Date de création :25/02/2006 Vu / téléchargé :12 720 / 612

Auteur : Julien39

Ecrire un message privé
Site perso
Commentaire sur cette source (33)
Ajouter un commentaire et/ou une note

 Description

Cliquez pour voir la capture en taille normale
Comme vous le savez la fonction Random que propose Visual Basic n'est pas réellement aléatoire, c'est un algorithme qui respecte la loi des grands nombres. La raison est que faire une fonction qui retourne un nombre de façon aléatoire est très compliqué.
Voici une fonction qui renvoie un nombre qui est réellement imprévisible, l'astuce:utiliser le temps...

Source

  • 'Fonction générant le nombre aléatoire-------------------------'
  • Public Function Alea() As Double '
  • '
  • TempAlea = "0," 'comme rnd, 0<Alea<1, par conséquent seules les décimales importent
  • '
  • For k = 0 To 9 'il y a 10 décimales '
  • Call QueryPerformanceCounter(TimeStart) '
  • Randomize '
  • For i = 0 To 100000 * Rnd '
  • Next i '
  • 'action qui ralenti le processus (d'une facon psudo-aléatoire) '
  • Call QueryPerformanceCounter(TimeStop) '
  • '
  • Calctps = CStr(TimeStop - TimeStart) / Frequency * 1000 '
  • 'Nous avont ainsi un temps d'execution qui sera toujours différent
  • '
  • Randomize '
  • TempAlea = TempAlea & "" & Mid$(Calctps, 13 * Rnd + 3, 1) & "" '
  • Next k '
  • '
  • Alea = TempAlea 'Alea devient non pas une chaine mais un nombre à virgules
  • '
  • End Function '
  • '--------------------------------------------------------------'
'Fonction générant le nombre aléatoire-------------------------'
Public Function Alea() As Double                               '
                                                               '
TempAlea = "0," 'comme rnd, 0<Alea<1, par conséquent seules les décimales importent
                                                               '
For k = 0 To 9 'il y a 10 décimales                            '
          Call QueryPerformanceCounter(TimeStart)              '
Randomize                                                      '
For i = 0 To 100000 * Rnd                                      '
Next i                                                         '
'action qui ralenti le processus (d'une facon psudo-aléatoire) '
          Call QueryPerformanceCounter(TimeStop)               '
                                                               '
Calctps = CStr(TimeStop - TimeStart) / Frequency * 1000        '
'Nous avont ainsi un temps d'execution qui sera toujours différent
                                                               '
Randomize                                                      '
TempAlea = TempAlea & "" & Mid$(Calctps, 13 * Rnd + 3, 1) & "" '
Next k                                                         '
                                                               '
Alea = TempAlea 'Alea devient non pas une chaine mais un nombre à virgules
                                                               '
End Function                                                   '
'--------------------------------------------------------------'

 Conclusion

La fonction est dans le zip accompagnée d'un programme qui permet de vois si la loi des grands nombres est vérifiée. C'est le cas mais beaucoup moins bien qu'avec la fonction Random.

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Sources du même auteur

Source avec Zip GÉNÉRATEUR DE MOTS DE PASSE
Source avec Zip CARRÉ PAR MÉTHODE DE L'ABAQUE
Source avec Zip Source avec une capture ETUDE DE FONCTIONS ALÉATOIRES
Source avec Zip Source avec une capture MATHÉMATIQUES PÉDAGOGIQUES
Source avec Zip Source avec une capture DESSIN TYPE PAINT MAIS ORIENTÉ MATHS

 Sources de la même categorie

Source avec Zip Source avec une capture CONVERTISSEUR HEXAVIGÉSIMAL par shaeks
Source avec Zip Source avec une capture Source .NET (Dotnet) CRYPTOGRAPHIE AFFINE par Tigrou66
Source avec Zip Source avec une capture SCANNER FLEX par lajouad
Source avec Zip EQUATIONSECONDDEGRÉ,MATH,DEGRÉ par shadkitenge
Source avec Zip Source .NET (Dotnet) SOMME DE CHIFFRES CONTENUE DANS UN NOMBRE par alpha5

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture Source .NET (Dotnet) POKER - CALCUL DE PROBABILITES POUR VOS MAINS EN VB.NET par us_30
Source avec Zip GÉNÉRATEUR DE CHAINES PSEUDO-ALÉATOIRES par vegetalain
Source avec Zip Source avec une capture ETUDE DE FONCTIONS ALÉATOIRES par Julien39
Source avec Zip Source avec une capture DESORDONNEUR - BORDÉLISER UN TABLEAU par Alain Proviste
Source avec une capture FAIRE FAIRE QQUECHOSE AU HASARD AU PROG. par neo.tbc

Commentaires et avis

Commentaire de Elektordi le 26/02/2006 01:01:46

Plutot que de perdre du temps (ralentir le processus) tu peut te servir du nombre précédant généré (que tu stocke ds une var statique ou publique) pour avoir des nombres tjrs différents...

(exemple:

Alea = TempAlea
if OldAlea = Alea then
   Alea = Alea + OldAlea
   if Alea > 1 then Alea = Alea -1
end if
OldAlea = Alea

)

Commentaire de Egyde le 26/02/2006 09:40:25

Random utilise l'arithmétique des congruences. La valeur pseudo-aléatoire obtenue dépend de la "graine" du générateur, qu'il est possible d'initialiser selon l'heure du système par Randomize Timer...

Commentaire de bouv le 26/02/2006 11:47:30

Oui, je vois pas ce que cela a de plus aléatoire qu'un simple :
Randomize
Rnd
Puisque c'est bien c'est deux fonctions que tu utilise. Tes petits tours de passe-passe ne servent pas à grand chose à mon avis.
Si tu veux une fonction VRAIMENT aléatoire il te faudra reprogrammer Randomize et Rnd.

Commentaire de Julien39 le 26/02/2006 13:12:15 administrateur CS

Regarde mieux le code et demande toi si c'est aléatoire ou non puis, si tu trouves que sa ne l'est pas dit le moi et je t'expliquerai pourquoi tu te trompes...

Commentaire de Egyde le 26/02/2006 15:50:03

Julien39>Je crois que c'est plutôt à toi de prouver le caractère "aléatoire". Pas l'inverse! C'est à TOI de montrer la valeur ajoutée de ton code par rapport à un simple Randomize Timer+Rnd. Tu as des résultats sous la main? Chi-2 ou Kolgomorov peut-être? Je veux dire, c'est pas parce que Windaube est multi-tâche (je pense à ta boucle For...) que statistiquement, les valeurs que tu obtiens sont uniformément distribuées.

Commentaire de bouv le 26/02/2006 17:00:02

Je confirme, ce code n'apporte rien de plus.

'On se demande pourquoi faire
For i = 0 To 100000 * Rnd
Next i

De plus on l'as dit et répéter au moins 1000 fois : Il est inutile d'appeler Randomize 50 fois (20 fois désolé...).
Une fois au lancement du programme suffit !

Je me repête si tu veux une fonction VRAIMENT aléatoire reprogramme les fonctions Randomize et Rnd.

Commentaire de Julien39 le 26/02/2006 20:49:24 administrateur CS

La fonction n'apporte rien de plus que la fonction par défaut.
Mais nous sommes dans la catégorie Mathématiques et non Modules, je m'explique : pour un programme ne vous en servez pas, elle est moins pratique et moins rapide. Mais au niveau mathématiques il est interresant de voir comment programmer une fonction donne un nombre qui est réelement aléatoire.

Le fait qu'il soit aléatoire, je ne m'attendais pas à devoir le prouver, c'est relativement simple, on a 2 API qui donne un temps de procédure, les liges For i = 0 To 100000 * Rnd
                        Next i
servent à faire varier ce temps mais ne sont pas indispenssables, ensuite on choisit chaque décimale une à une de facon pseudo-aléatoire, ainsi on obtient une fonction aléatoire.

Une démonstration Mathématique rigoureuse, je n'en voit pas, il faudrait démontrer qu'il n'existe aucune suite de réels reliant les différents nombres générés, c'est très compliqué, c'est comme vouloir démontrer qu'il n'existe aucune suite reliant les différents résultats d'une épreuve de lancé de dé.

Nous sommes obligés de nous satisfaire de démonstrations qui ne sont pas totalement satisfaisantes. Même les test Chi-2 ou Kolmogorov ne sont pas rigoureux, pour le premier, on admet que la fonction est aléatoire si elle répond à certaines conditions, pour le deuxime, c'est un théoreme qui n'est pas une équivalence, on a SI la variables est aléatoire ALORS la somme...... La deuxieme partie ne prouve pas la premiere mais peut donner des soupcons.
J'ai préferé quelque chose de plus simple la vérification des loi de probabilités ce n'est pas rigoureux mais c'est suffisant je pense.

pour la phrase "reprogramme les fonctions Randomize et Rnd" c'est exactement ce que je fais ????

Commentaire de bouv le 26/02/2006 21:06:31

Je ne dis pas que l'idée n'est pas bonne. Mais ce qui me gêne, c'est le terme VRAIMENT dans le titre de ta source. Il laisse supposé que les fonctions Randomize et Rnd ne le sont PAS VRAIMENT.
De plus tu utilises ces 2 fonctions dans ta source.
Le résultat attendu est là et c'est très bien, mais...
Bref je pense que tu as compris où je veux en venir.

Commentaire de Julien39 le 26/02/2006 21:49:44 administrateur CS

Les fonctions Randomize et Rnd ne sont effet pas vraiment aléatoires parce que régies par un algorithme.

Le fait que je les utilise importe peu car le code n'est pas basé là dessus, je ne l'explique pas plus, il me semle que c'est assez clair dans la source mais si ce n'est pas le cas dites le moi.
J'ai beaucoup hésité à utiliser Rnd parce que cette utilisation pouvait porter à confusion, je me demande si je ne ferait pas mieux de retirer cette fonction du code...

Commentaire de UniCyclon le 27/02/2006 12:23:40

Clairement pas d'accord.
Déjà, qu'est-ce qu'une fonction réellement aléatoire ? Pour ma part c'est une fonction qui renvoie un nombre X d'un ensemble E choisi au hasard, chaque sortie étant strictement équiprobable. Or il a déjà été démontré mathématiquement qu'il est idiot de demander à un ordinateur de choisir un nombre aléatoire au sens le plus strict du terme. Une des méthodes les plus efficaces est d'obtenir l'heure exacte en microsecondes et d'y appliquer quelques transformations pour garantir une certaine imprédictabilité.

Or, de façon mathématique, il est trivial de démontrer qu'un algorithme basé sur des fonctions pseudo-aléatoires est nécessairement pseudo-aléatoire, et non aléatoire. Au final, je peux te dire que ton algorithme n'est pas équiprobable, et est loin de l'être, et de plus présente une lourdeur non négligeable à l'utilisation dans un programme ayant pour objectif d'être un minimum optimisé.

Maintenant, je te mets au défi de prouver mathématiquement que ton algorithme est plus aléatoire que celui du compilateur VB.
Tant que tu ne l'auras pas fait, je ne vois aucune raison de l'utiliser en raison de sa lourdeur.

Commentaire de Julien39 le 27/02/2006 14:12:33 administrateur CS

- "Maintenant, je te mets au défi de prouver mathématiquement que ton algorithme est plus aléatoire que celui du compilateur VB"

<MSDN> Remarque sur la sécurité   Du fait que l'instruction Random et que la fonction Rnd commencent par une valeur initiale et créent des nombres compris dans une plage finie, les résultats peuvent être prévus par toute personne connaissant l'algorithme utilisé pour les créer. L'instruction Random et la fonction Rnd ne doivent donc pas être utilisées pour créer des nombres aléatoires qui seront utilisés en cryptographie.

http://msdn.microsoft.com/library/fre/default.asp?url=/library/FRE/vblr7/html/vafctrnd.asp

Par exemple la fonction Randomize(1) Msgbox(Rnd) donne les valeurs
0,7648737
0,6820141
0,4617513
........
Si elles sont différentes chez vous, vous pourrez observer qu'elles sont malgré tout toujours identiques quand vous relancer l'application.

La question que je vous pose est "Peut on observer la même chose dans mon programme ?"
En bonus je vous donne la réponse NON.
CONCLUSION : mon programme retourne une valeur qui est plus aléatoire que la fonction par défaut.

Je te déconseille malgré tout de l'utiliser pour tes programmes car elle est bien trop lourde et moins pratique que la fonction classique.

- "Au final, je peux te dire que ton algorithme n'est pas équiprobable"
Je suis d'accord pour une centaine d'essais j'ai trouvé des proportions très déséquilibrées, mais je ne sais pas si l'algorithme est équiprobable car il faut tester avec de très grands nombres.
Assez de mauvaise foie, c'est vrai que c'est pas top, mais la comparaison avec la fonction Rnd est à l'avantage du second qui étant programmé pour sortira toujours des valeurs équiprobables.

- "il est trivial de démontrer qu'un algorithme basé sur des fonctions pseudo aléatoires est nécessairement pseudo aléatoire"
Je suis d'accord mais toutes les fonctions que j'utilise ne sont pas pseudo aléatoires.

- "il est idiot de demander à un ordinateur de choisir un nombre aléatoire au sens le plus strict du terme"
Cette assertion n'a pas été démontrée à ma connaissance, on peut le dire mais ce n'est qu'une intuition non une démonstration. On peut dire de même qu'il est idiot de chercher un nombre aléatoire car rien n'est aléatoire, même un lancé de dé, s'il est aléatoire c'est que nous sommes incapables de prévoir quel chiffre va sortir. En réalité le hasard n'existe pas. Mais là nous sommes plus proches de la philosophie que des mathématiques.

Commentaire de UniCyclon le 27/02/2006 14:57:56

Le hasard mathématique existe. Le hasard pratique non.
Et je t'en prie, trouve-moi une fonction utilisée dans ton programme qui soit totalement aléatoire.

Et une démonstration mathématique existe pour prouver que jamais une machine ne pourra donner un nombre choisi parmi un ensemble avec une équiprobabilité parfaite. Je l'ai assez étudiée pour te l'assurer.

Commentaire de Julien39 le 27/02/2006 15:04:59 administrateur CS

La fonction totalement aléatoire est celle qui donne une décimale du temps d'execution de la procédure.

Pour la démonstration  que jamais une machine ne pourra donner un nombre choisi parmi un ensemble avec une équiprobabilité parfaite je l'accepte si tu le dis.

Par conséquent ma fonction n'est pas totalement aléatoire je te l'accorde.

Commentaire de Egyde le 27/02/2006 15:30:54

Julien39>Concernant les propos que tu as tiré de MSDN, il est clair qu'un algorithme déterministe peut toujours être prédit.

Dans ton exemple, Randomize(1) suivi de Rnd te renverra effectivement toujours les valeurs que tu as obtenu. C'est un principe de base des générateurs de ce type (voir
http://www.apprendre-en-ligne.net/random/congrulin.html)

Là où je voulais en venir précédemment, c'est que "Randomize Timer" initialise le générateur en prenant pour "germe" la valeur courante de l'horloge. Dans ce cas, à chaque exécution de ton programme, tu obtiendras une séquence différente. Pourquoi donc s'embêter avec ton code (d'autant qu'il ne marche pas en l'état : QueryPerformanceCounter n'est pas déclaré et si on en croit la déclaration de cette API, "TimeStop - TimeStart" est la différence de 2 LARGE_INTEGER, ce que VB ne sait pas faire tout seul).

Commentaire de Egyde le 27/02/2006 15:55:13

J'ai trouvé ça qui devrait t'interesser julien39 :

http://www.pscode.com/vb/scripts/ShowCode.asp?lngWId=1&txtCodeId=58875

Y'a pas de boucle For comme toi mais je te laisse constater que le principe est le même. Lis bien les commentaires en fin de page, c'est très interessant.

Commentaire de bouv le 27/02/2006 16:11:56

Je sais pas comment vous faites les gars :

"Si elles sont différentes chez vous, vous pourrez observer qu'elles sont malgré tout toujours identiques quand vous relancer l'application"

FAUX et ARCHI-FAUX.
Faites des tests avant d'avancer un truc pareil.

La suite est la même uniquement si on ne commence pas le prog par un Randomize.

Prenez un feuille mettez un ListBox et placez ce code
Private Sub Form_Load()
    Dim i As Integer
    Randomize
    For i = 0 To 10
        List1.AddItem Rnd
    Next i
End Sub
Lancez plusieurs fois vous verrez.

Attention je me repettes mais Randomize ne doit être appeler qu'une seule fois au lancement du programme. Si vous utilisez de nouveau Rnd par la suite il ne faut pas rappeler Randomize !
Le mieux est de commencer le programme par un module (Sub Main) et d'appeler Randomize une fois pour toutes !!!

Commentaire de bouv le 27/02/2006 16:21:47

PS : Ne confondez pas aléatoire et equiprobable.

"La fonction totalement aléatoire est celle qui donne une décimale du temps d'execution de la procédure"
=> VRAI c'est aléatoire puisque cela depend de la machine, des autres processus qui tournent en même temps.

Est-ce équiprobable ?
=>FAUX puisqu'il faudrait définir une intervalle (meilleur exemple : zero ne sera jamais renvoyé) et que de toute façon les resultat se concentreront sur la moyenne.

Commentaire de Sebast91 le 27/02/2006 16:37:13

Bonjour,

encore une querelle de mathématiciens.

Mais pourquoi ?

Quel que soit le langage et donc le compilateur ou interpréteur, la fonction de génération doit être déterministe.
Heureusement pour les informaticiens ! Comment reproduire une situation si l'aléatoire "vraiment aléatoire" intervenait !

Tout ceci pour dire qu'il y a un malentendu sur le besoin initial:
Ce programme essaye de nous proposer une solution d'un point de vu mathématique qui ne convient pas aux informaticiens, tandis que la fonction par défaut convient aux informaticiens car déterministe mais pas aux mathématiciens.

Le monde des mathématiques et de l'informatique semblent proches mais les besoins et les objectifs ne sont pas les mêmes.

Commentaire de Egyde le 27/02/2006 17:48:53

Bouv>Si tu relis bien l'exemple de julien39, tu verras que la syntaxe est : Randomize(1) puis Rnd, ce qui a pour effet d'utiliser 1 pour seed du générateur Rnd. Dans ce cas, séquence identique si tu relances le prog! Donc, je te renvoi la balle :

VRAI et ARCHI-VRAI.
Test toi-même et tu verras!!

D'autre part, si tu mets pas Randomize, Rnd utilise la valeur précédemment généré pour seed. Avec Randomize, tu changes de seed à chaque appel. Et alors??? C'est plutôt positif tout ça :)

Commentaire de Egyde le 27/02/2006 18:06:20

Je précise que "Randomize" (sans arguments) est équivalent à "Randomize Timer", ce qui explique qu'en relançant ton prog, tu n'obtiennes pas la même séquence. Maintenant, tu sais le pourquoi du comment du kicékikafékoi...

Commentaire de Gobillot le 27/02/2006 18:20:20

pas tout à fait
Randomze(1) modifie le seed mais ne donne pas 1 pour seed
    Randomize 1:  MsgBox Rnd
    Randomize 1:  MsgBox Rnd
donne 2 valeurs différentes

pour réinitialiser le seed il faut un nombre négatif:
    Rnd -1234

à partir d'un seed donné (graine) tous les Rnd() qui suivent donne la même suite. 1677216 valeurs possibles ni plus ni moins.



Commentaire de bouv le 27/02/2006 18:23:18

Ouai effectivement j'ai survolé le code trop rapidement...
En fait je ne pensais pas que quelqu'un se servait de se parametre. Mais tu as bien fait de me reprendre.

Cela dit, lorsque je fais un Randomize Timer, qui peux prétendre qu'il est capable de determiner à l'avance qu'elle sera la suite des valeurs obtenues ???

Commentaire de Gobillot le 27/02/2006 18:43:11

à part la première valeur, oui, on peut retrouver toutes les valeurs qui suivent.
seul un Randomize (ou un Rnd négatif) peut briser la séquence
le premier seed de départ toujours le même pour tout le monde est 327680

fonction de la forme: (X0 * A * C) / M

X0 = 327680
A = 1140671485
C = 12820163
M = 16777216

la partie entière sert de nouveau seed
la partie décimale est le Rnd()

Randomize modifie la valeur X0, mais je sais pas comment.

Commentaire de Gobillot le 27/02/2006 18:47:27

correction:
désolé  C est une constante:

(X0 * A + C) / M

Commentaire de crenaud76 le 27/02/2006 23:52:11

Pour conclure, je vous propose de nous mettre d'accord sur les points suivant :
1- Le couple Randomize/Rnd fait du pseudo-aléatoire
2- La séquence des nombres est déterminable
3- Cela suffit largement à contenter un programmeur 'de base', ce que nous sommes tous ici
4- Cela fait hurler les mathématiciens 'pointilleux' de nature, quand nous oublions de préciser le "Pseudo-"
5- Le code proposer ne semble pas etre beaucoup plus du goût d'un mathématicien et rebute les programmeurs.
6- Mais c'est une belle figure de style ...

CR

Commentaire de crenaud76 le 28/02/2006 00:04:34

En guise d'extreme conclusion je dirais, comme l'un d'entre vous l'a noté mais je ne sais plus lequel -il se reconnaitra- :
L'aléatoire n'existe que d'un point de vu mathématique. Dans la réalité, ce que nous appelons le "hasard" n'est que la solution d'un système d'équation dont le nombre d'inconnus est bien trop important, pour que notre esprit puisse se représenter ce système d'équation lui-même. Alors qu'en a en trouver la solution !!! Voila ! Le "Hasard", c'est cela.
Je vous renvoi a toute la littérature qui concerne les théories du chaos -l'effet papillon notament, qui est édifiant !!- car cela correspond exactement à ce dont nous parlons en ce moment.
Notre ami Egyde a déposé un eautre source sur ce sujet -http://www.vbfrance.com/codes/OBTENIR-VRAIS-NB-ALEATOIRE_36293.aspx- ou il se base sur un service fourni par 1 site internet pour obtenir du "VRAI aléatoire". Si j'ai bien compris, ce site se base sur l'ambiance sonore dans une pièce pour donner un nombre aléatoire à un instant T. Cela n'est pas plus "non-reproductible" (=prévisible) que la source ci-dessus : Suffit de refaire exactement le même boucan au même rythme devant le micro et l'affaire est dans le sac.

CR

Commentaire de Egyde le 28/02/2006 08:12:47

crenaud76>J'ai répondu à ta dernière remarque sur la page que tu cites. Pour aller un peu plus loin : en traitement du signal, le signal utile (la voix par exemple), est toujours additionné avec une composante appelé bruit blanc... Contrairement à l'informatique, le monde électronique est loin d'être binaire!

Cela dit, comme cette source, ce que j'ai proposé est plutôt une "belle figure de style" comme tu l'a dit. Personnellement, je me contente de Randomize+Rnd

Commentaire de bouv le 28/02/2006 09:12:20

Et bien je viens d'apprendre quelques choses... et pas des moindres. Merci Gobillot.

Commentaire de zifnig le 10/03/2006 16:21:33

Un vrai signal aléatoire (en théorie du signal) est un bruit blanc.

En pratique il peut être obtenu en réupérant la tension sur l'émetteur d'un transistor (NPN ou PNP, peut importe) dont la base est en l'air (pas connectée), et en ayant amplifié le signal.

En récupérant le signal de l'entrée micro (non connectée) de la carte son, en l'amplifiant et en récupérant l'amplitude du signal à chaque appel de la fonction, on obtiendra, à priori, un nombre aléatoire (à tester).

Commentaire de toutancamon le 03/06/2006 12:02:11

Au lieu de discuter inutilement sur ce sujet je vous sugère de vous rencontrer et d'en d'écoudre avec des preuves à l'appui.

Commentaire de yohannc le 07/06/2006 22:57:06

Pour défendre Julien39
Donc voila déjà je me présente vite fais (mon premier post) je suis vraiment un faible en programmation, (j'ai commencé à apprendre à programmer en terminale sur une 10 aine d'heures) et je vais bientôt passer le bac.
Bon passons aux choses sérieuses.
J'ai décidé de créer un générateur de grilles de Sudoku, donc 81 nombre aléatoire de 1 à 9 logiquements. Mon programme c'est du vrai bricolage, et faut en moyenne 7 à 8 secondes pour générer une grille.
J'ai donc eu l'idée d'avoir la possibilité entre clicker sur un boutton pour générer une grille et un autre pour charger une grille dans un fichier texte contenant 10000 grilles. Il m'a donc fallu créer ce fichier text.
Avec randomize timer puis rnd je retrouve 43 ou 44 fois la même grille sur 10000.
En ce sens je trouve que le code de Julien39 est plutôt intéréssant, avec le temps j'imagine que cela me permettrait de ne jamais trouver la même grille, impossible de faire une suite correcte, le pc fait tourner pleins de processus qui ne sont pas régulier (j'ai pas encore testé il va me falloir du temps :) )
A mon goût le petit algorithme de Vb est insuffisant mais utiliser un code avec le temps comme celui de Julien39 l'est.

Enfin voila, mais faut pas me demander de poster une source ici, je n'apporterai rien d'intéréssant (il m'a fallut 700 lignes de code pour que je puisse créer une grille de 81 chiffre en respectant les règles du sudoku et avec randomize timer et rnd)

A+ et ces forum sont super utile, c'est vraiment une bonne aide !

Commentaire de _DoOmy_ le 17/09/2006 14:52:22

Le hasard n'est pas qu'une notion mathématique, il est aussi une réalité physique (Quantique), il est donc possible de générer une suite entièrement aléatoire, cependant ce moyen n'est pas à la porté de nos ordinateurs actuels. Il est donc clair que pour l'instant un programme "vraiment aléatoire" ne peut exister, toute fonction résultant du calcul pur ne pouvant etre que pseudo-aléatoire. Cependant cette fonction, au même titre que le "Randomize", sont largement suffisante pour les besoins d'un programme simple. En revanche, pour ce qui est de l'expérimentation mathématique, leur utilisation est inacceptable.
Merci de votre attention

Commentaire de Julien39 le 07/07/2009 14:29:30 administrateur CS

Je ne sais pas si quelqu'un viendra a nouveau sur cette source tres ancienne mais pour conclure les débats, nous devons constater que la notion de hasard et floue, comme tout les mots du sens commun, chacun d'entre nous a sa propre définition même si les sens sont proches.

En s'arrêtant a la définition donnée du hasard par Emiel Borel : le hasard, ce sont les loins que nous ne connaissons pas, la fonction ici programmée est bien une fonction vraiment aléatoire. Obn peut dire qu'il existe d'autres définistions mais, c'est un autre débat.

Cette fonction a une utilité, elle pourrait servir par exemple a des machines a sous ou a des jeux de hasard qui ont besoin d'avoir des algorithmes tres fiables. PAr conter, elle est nettement plus lente.

Pour terminer, il faut parler des mathématiques, en mathématiques, on définit une variable aléatoire de maniere tres abstraite (pour les statisticiens : image réciproque de tous les boréliens sont des éléments de la tribue associée). On peut donc considérer que les sorties de cette fonction sont bien aléatore en posant un miodèle correctement. Et, les sorties passent le test du Chi deux au niveau 1%, la p valeur est tres correcte. Pour le test de Kolmogorov Smirnov, ce n'est pas possible car en réalité, la varialbe est discrete et Kolmogorov Smirnov ne s'utilise qu'avec des variables à densité continues.

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Recherche aléatoire [ par Domino ] Dans un but de contrôle (auditeurs) on me demande de sélectionner (afficher dans un grid ou charger dans un recordset), 3 records provenant d'une tabl attribuer un identifiant aléatoire calculé avec des chiffre et des lettres [ par yobogs ] Bonjour,quelqu'un aurait il un script me permettant de calculer un identifiantaléatoire et verifier dans la base de donnée s'il n'existe pas.Je ne veu nombre aléatoire [ par inconnu24 ] je veux créer des nombres aléatoires de 12 digits qui sont stocké dans une base de donné. chaque fois que je fais la création, il faut vérifier qu'un comment créer un tableau... [ par mike ] Voilà en fait je voudrais créer un tableau dans lequel une valeur tirée au hasard ne revienne plus ensuite! Par exemple si je fais un programme de lot Vraiment aléatoire ? [ par Niaphron ] Bonjour, je voudrais savoir quand un on à 2 ordianteurs qui tire un nombre aléatoire à la mm heure, mm minute et mm seconde, est-ce-que les 2 ordi tir Tirage aléatoire [ par commeunpic ] Je cherche un code htmlpour générer un tirage aléatoire d'un texte ou d'un fichier parmi une vingtaine de textes ou fichiers .Cela existe t'il par ici JEU DE SIMULATION [ par cumu ] NetTrader est un jeu qui vous permet de goûter aux joies et aux frayeurs de la Bourse mais sans le moindre risque. Achetez, revendez, gagnez ou perdez Simulation de F1(J'ai un problème) [ par Viacman ] Je suis en train de créé un simulateur de formule 1 mais j'ai un gros problème.Quand je simule, quelques pilotes arrivent à la même position. Exemple Simulation de train (pb sur la conception) [ par romain ] Voilà, j'aimerais faire une petite simulation ferroviaire.Je me heurte deja à un pb.Comment faire pour que lorsq'un train passe le feu passe au rouge Nombre aléatoire, réelement... [ par yobogs ] Bonjour, j'utilise cette fonction Int(2000 * Rnd + 1) pour génèrer un entier aléatoire entre 1 et 2000.Or je me rends compte que lorsque je lance mo


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,889 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales