Il y a environ 3 ans, j'ai codé une marche aléatoire 2D avec un collègue en C++, d'abord cela semblait fonctionner correctement car nous obtenions un modèle différent à chaque fois. Mais chaque fois que nous décidions d'augmenter le nombre de pas au-dessus d'un certain seuil, un motif papillon apparent apparaissait, nous avons remarqué qu'à chaque exécution du code, le motif se répétait mais en commençant à un endroit différent du papillon. Nous avons conclu et signalé alors que c'était dû au générateur pseudo-aléatoire associé à la fonction srand (), mais aujourd'hui j'ai retrouvé ce rapport et il y a encore des choses que j'aimerais comprendre. J'aimerais mieux comprendre comment fonctionne le générateur pseudo-aléatoire pour obtenir ce genre de symétrie et de motif ciclique. Le modèle dont je parle est le suivant (les étapes sont codées par couleur dans une séquence arc-en-ciel pour apprécier la progression de la marche):
ÉDITER:
J'ajoute le code utilisé pour obtenir ce chiffre:
#include<iostream>
#include<cmath>
#include<stdlib.h>
#include<time.h>
#include <fstream>
#include <string.h>
#include <string>
#include <iomanip>
using namespace std;
int main ()
{
srand(time(NULL));
int num1,n=250000;
ofstream rnd_coordinates("Random2D.txt");
float x=0,y=0,sumx_f=0,sumy_f=0,sum_d=0,d_m,X,t,d;
float x_m,y_m;
x=0;
y=0;
for(int i=0;i<n;i++){
t=i;
num1= Rand()%4;
if(num1==0){
x++;
}
if(num1==1){
x--;
}
if(num1==2){
y++;
}
if(num1==3){
y--;
}
rnd_coordinates<<x<<','<<y<<','<<t<<endl;
}
rnd_coordinates.close();
return 0;
}
Vous voudrez peut-être regarder ma réponse à une autre question ici sur les implémentations plus anciennes de Rand()
. Parfois, avec les anciennes fonctions Rand() and srand()
, les bits d'ordre inférieur sont beaucoup moins aléatoires que les bits d'ordre supérieur. Certaines de ces implémentations plus anciennes persistent, il est possible que vous en ayez utilisé une.