Je suis un étudiant en informatique et je suis actuellement inscrit au cours de simulation et modélisation de systèmes. Cela implique de gérer les systèmes quotidiens autour de nous et de les simuler dans différents scénarios en générant des nombres aléatoires dans différentes courbes de distribution, comme l'IID, la gaussienne, etc. par exemple. J'ai travaillé sur le projet boids et une question m'a juste frappé: qu'est-ce que c'est vraiment "aléatoire"? Je veux dire, par exemple, chaque nombre aléatoire que nous générons, même dans nos langages de programmation comme via la Math.random()
méthode en Java, est essentiellement généré suivant un "algorithme".
Comment savons-nous vraiment qu'une séquence de nombres que nous produisons est en fait aléatoire et pourrait-elle nous aider à simuler un certain modèle aussi précisément que possible?
la source
Réponses:
La réponse courte est que personne ne sait ce qu'est vraiment le hasard, ou si une telle chose existe. Si vous souhaitez quantifier ou mesurer le caractère aléatoire d'un objet discret, vous vous tournerez généralement vers la complexité de Kolmogorov . Avant la complexité de Kolmogorov, nous n'avions aucun moyen de quantifier le caractère aléatoire de, disons, une séquence de nombres sans considérer le processus qui l'avait engendré.
Voici un exemple intuitif qui dérangeait vraiment les gens à l'époque. Considérez une séquence de lancers de pièces. Le résultat d'un lancer est soit têtes ( ) ou queues ( T ). Disons que nous faisons deux expériences, où nous lançons une pièce 10 fois. La première expérience E 1 nous donne à H , H , H , H , H , H , H , H , H , H . La deuxième expérience E 2 nous donne T , T , H , T , H ,H T E1 H,H,H,H,H,H,H,H,H,H E2 . Après avoir vu le résultat, vous pourriez être tenté de prétendre qu'il y avait quelque chose de mal avec la pièce en E 1 , ou du moins pour une raison étrange, ce que vous avez obtenu n'est pas aléatoire. Mais sion suppose tous les deux H et T sont tels que probable (la pièce est équitable), la probabilité d'obtenir soit E 1 ou E 2 est égal à ( 1 / 2 ) 10 . En fait, l'obtentiond'une séquence spécifique est aussi probable que n'importe quelle autre! Pourtant, E 2 se sentT,T,H,T,H,T,T,H,T,H E1 H T E1 E2 (1/2)10 E2 aléatoire, et ne le fait pas.E1
En général, étant donné que la complexité de Kolmogorov n'est pas calculable, on ne peut pas calculer à quel point une séquence de nombres est aléatoire, quel que soit le type de processus "totalement aléatoire" revendiqué.
la source
Dans le cas de Java (ou langages similaires), nous connaissons l'algorithme utilisé pour créer les nombres aléatoires. S'il commence par une seule graine, les nombres ne sont pas du tout aléatoires, c'est-à-dire que si nous connaissons dans une séquence a 0 , … , a n , nous connaissons a i + 1 , ou déclaré comme probabilité conditionnelle: ∀ k , l , i : P ( a i + 1 = k ∣ a i = l ) ∈ { 0 ,ai a0,…,an ai+1
Néanmoins, ces séries peuvent remplir des propriétés (voir par exemple WP: Autocorrélation ) que les nombres aléatoires remplissent et ces propriétés suffisent souvent pour accomplir des tâches, où nous aimerions utiliser des nombres aléatoires "réels" (par exemple générés par un processus physique), mais peuvent ' t faire des efforts.
la source
Il est impossible de savoir avec certitude si une séquence donnée est aléatoire ou non. Vous pouvez cependant regarder les caractéristiques (ou paramètres) d'une séquence et calculer la probabilité d'une telle séquence compte tenu de la distribution d'intérêt.
Si vous pouviez générer une séquence infiniment longue en utilisant votre générateur aléatoire, elle devrait avoir les mêmes paramètres que la distribution aléatoire. Par exemple, si vous utilisez la distribution gaussienne standard , votre séquence devrait approcher la moyenne de 0 et l'écart-type de 1 . Donc, une façon préliminaire de vérifier votre générateur est de générer une séquence vraiment longue et de vérifier qu'elle se rapproche de la distribution aléatoire souhaitée.(μ=0,σ=1) 1
Vous pouvez ajouter des moments supplémentaires de la distribution (tels que l'asymétrie) d'intérêt pour une validation ultérieure. Pour les numéros IID, vous pouvez également essayer de former un algorithme d'apprentissage automatique pour prédire les éléments à venir de la séquence, puis tester l'hypothèse nulle que l'historique améliore les performances. Cependant, aucune de ces méthodes ne peut prouver qu'une séquence est vraiment aléatoire et, au mieux, peut reconnaître quand les séquences ne sont PAS aléatoires (dans une certaine mesure).
la source
La théorie moderne de la réponse informatique est "une source aléatoire est une source qui semble aléatoire pour votre classe d'algorithmes préférée". Il s'agit d'une perspective utilitaire: si une source de hasard ressemble à un vrai hasard pour tous les algorithmes qui vous intéressent, alors rien d'autre n'a d'importance. Vous pouvez analyser vos algorithmes comme s'ils recevaient des lancers de pièces véritablement aléatoires, et votre analyse donnera les bonnes réponses.
Cette idée est derrière toute notion formelle moderne de pseudo-aléatoire.
la source
Voici deux cents de plus.
Une façon de penser aux algorithmes aléatoires est d'imaginer une boîte qui prend une entrée, fait des choses mystérieuses à cette entrée et produit une sortie ("imprévisible").
Mais à la place, il pourrait être utile de les considérer comme des algorithmes déterministes qui prennent deux entrées: l'entrée "vraie" et certaines entrées "aléatoires" que nous obtenons de fonctions comme
Math.Random()
.Comme Jonathan et frafl le mentionnent, il existe des moyens de vérifier si une source aléatoire se comporte "de manière aléatoire". Mais tout ce qu'ils feront, c'est influencer ce que vous pensez des informations futures provenant de cette source aléatoire. Si vous pensez que chaque bit est également susceptible d'être égal à zéro ou à un, quels que soient les bits précédents, alors au mieux de vos connaissances et de vos croyances, cette source est aléatoire de manière uniforme et indépendante et, par conséquent, au meilleur de vos connaissances et de vos croyances, il fonctionnera rapidement ou sera correct ou ainsi de suite. C'est ma vision philosophique, de toute façon.
la source
Nous ne pouvons pas générer de nombres vraiment aléatoires. Il existe différentes méthodes pour générer des nombres pseudo-aléatoires en utilisant une équation spécifiée et une valeur de départ particulière. Ainsi, la séquence aléatoire de nombres dépend de la valeur de départ. Une fois que nous connaissons la valeur de départ, nous pouvons prédire quelle sera la séquence. En dehors de cela, il existe d'autres méthodes pour générer des nombres aléatoires. Les gens utilisent maintenant certaines méthodes pour générer de vrais nombres aléatoires, comme l'utilisation du temps de déplacement de la tête de disque et d'autres méthodes physiques qui peuvent être incorporées dans un ordinateur. Reportez-vous à: http://en.wikipedia.org/wiki/Random_number_generation#Generation_methods
la source
par la méthode donnée comme vous l'avez dit
Math.random () en Java
Randomize; Aléatoire (n); à Delphi
vous pouvez implémenter votre propre structure et logique pour générer des nombres aléatoires,
où un tel "algorithme" peut fonctionner selon vos spécifications données pour de meilleurs résultats aléatoires.
et construire sur cela les logiques.
Merci.
la source
d'autres réponses sont bonnes, voici quelques autres angles sur cette question très importante / involontairement profonde. les informaticiens étudient le hasard depuis des décennies et continueront probablement de l'étudier. il a de nombreuses connexions profondes et surtout des questions ouvertes qui restent sur le terrain. Voici quelques indications.
le «vrai / vrai hasard» se produit avec des processus physiques de bas niveau et du «bruit» comme dans les diodes zener, la mécanique quantique, etc. qui peuvent être exploités dans les RNG basés sur le matériel
d'autres nombres générés dans le domaine informatique sont ce que l'on appelle le "pseudo-aléatoire" qui est simulé et ne peut jamais correspondre au "vrai hasard". ce sont les soi-disant PRNG
il existe un sens important de "dureté cryptographique des générateurs de nombres aléatoires" qui, dans un sens, mesure leur "qualité" ou "sécurité", voir par exemple le PRNG sécurisé cryptographiquement . fondamentalement, un générateur "faible" n'a pas autant de complexité de calcul qu'un générateur "dur" et un générateur "faible" est plus facile à casser.
un autre sens quelque peu apparenté qui en résulte est la «dureté des preuves». imaginez une preuve pour prouver qu'un RNG est un temps linéaireO ( n ) . cette preuve semble être plus simple que celle requise pour prouver qu'elle est quadratiqueO ( n2) etc. ce concept est encore en cours de formalisation / recherche mais il empiète sur des questions profondes comme P=? NP dans un document célèbre appelé Natural Proofs . grosso modo, les auteurs montrent un P≠ La preuve NP doit avoir une certaine "complexité", sinon la même technique d'analyse pourrait être utilisée pour briser les PRNG, et de plus, de façon assez surprenante, la plupart ou peut-être toutes les séparations / techniques de classes de complexité connues à cette date (ou peut-être même après, à ce jour ) le font. n'ont pas une complexité suffisante.
un important sujet de recherche en TCS est les algorithmes randomisés et dérandomisés . l'idée est, en gros, d'étudier dans quelle mesure l'algorithme est modifié en remplaçant le «vrai hasard» par un PRNG et il existe divers théorèmes profonds sur le sujet. voici une question cstheory.se de haut rang qui donne un aperçu de la recherche dans ce domaine: des algorithmes randomisés efficaces et simples où le déterminisme est difficile
un autre sujet clé lié au TCS est l' entropie de l' information - introduite à l'origine en physique il y a longtemps - qui étudie un concept étroitement lié de "désordre de l'information" et comme certains autres concepts importants dans (T) CS semble être l'une des idées clés qui recoupent la frontière entre l'analyse appliquée et théorique, même certaines des formules sont les mêmes .
attestant à nouveau du statut de la recherche active, il y a d'autres questions de haut rang sur cstheory.se qui se rapportent à cette question. voici un proche, presque le même: est un générateur de nombres vraiment aléatoires Turing calculable
la source