Annuler un RandomSeed

Vous avez une idée pour améliorer ou modifier PureBasic ? N'hésitez pas à la proposer.
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Message par djes »

Il n'y a qu'une chose de vraiment aléatoire, c'est l'utilisateur. :D
Sinon vous avez la vitesse de rotation du ventilo, la température, la tension, etc :D
Avatar de l’utilisateur
SPH
Messages : 4947
Inscription : mer. 09/nov./2005 9:53

Message par SPH »

Il faut imbriquer DATE et ELASTEDMILI en fait :
RandomSeed(Date()-ElapsedMilliseconds())

!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.12LTS- 64 bits
Avatar de l’utilisateur
SPH
Messages : 4947
Inscription : mer. 09/nov./2005 9:53

Message par SPH »

En tout cas, je vais faire une synthese qui s'avere assez systematique :

Une question (interessante) :
SPH:
Apres avoir executer un quelconque randomseed, il est impossible de revenir au mode aleatoire de random.
Il devrait donc exister une instruction killrandomseed ou tuer le processus randomseed en lui passant la valeur 0 (ou une valeur negative)
Une reponse interessante :
DRI:
si tu veux en faire un toi même qui soit vraiment aléatoire donne ElapsedMilliseconds() comme germe aléatoire
Une reponse insensée (mais qui, au premier abord semble logique) :
Dobro:
ou bien un simple
Debug RandomSeed(Random(65535))
Il y a selon moi une impertinence d'un RandomSeed(Random(x)) provoquant un non retour au mode aleatoire.

Je millite pour un killrandomseed :
Debug Str(Random(100))+" : nombre entre 0 et 100 impossible a prevoir"
Debug Str(Random(100))+" : nombre entre 0 et 100 impossible a prevoir"
Debug Str(Random(100))+" : nombre entre 0 et 100 impossible a prevoir"
Debug Str(Random(100))+" : nombre entre 0 et 100 impossible a prevoir"
Debug ""
RandomSeed(100) : Debug "RandomSeed(100)"
Debug ""
Debug Str(Random(100))+" : le chiffre trouvé est 37"
Debug Str(Random(100))+" : le chiffre trouvé est 16"
Debug Str(Random(100))+" : le chiffre trouvé est 27"
Debug Str(Random(100))+" : le chiffre trouvé est 10"
Debug ""
RandomSeed(-1) : Debug "RandomSeed(-1)"
Debug "; Disons qu'on kill le process RandomSeed grace a '(-1)'"
Debug "; pour retrouver un réel mode aléatoire"
Debug ""
Debug Str(Random(100))+" : le chiffre sera 43; helas"
Debug Str(Random(100))+" : le chiffre sera 42; helas"
Debug Str(Random(100))+" : le chiffre sera 75; helas"
Debug Str(Random(100))+" : le chiffre sera 88; helas"
Debug ""
Debug "; Dommage, apres un RandomSeed, TOUS les nombres sont"
Debug "; previsibles meme quand on n'en veux plus..."
Debug "; Il manque un 'kill randomseed'"
La reponse bornée de Dobro :
Debug Str(Random(100))+" : nombre entre 0 et 100 impossible a prevoir"
Debug Str(Random(100))+" : nombre entre 0 et 100 impossible a prevoir"
Debug Str(Random(100))+" : nombre entre 0 et 100 impossible a prevoir"
Debug Str(Random(100))+" : nombre entre 0 et 100 impossible a prevoir"
Debug ""
RandomSeed(100) : Debug "RandomSeed(100)"
Debug ""
Debug Str(Random(100))+" : le chiffre trouvé est 37"
Debug Str(Random(100))+" : le chiffre trouvé est 16"
Debug Str(Random(100))+" : le chiffre trouvé est 27"
Debug Str(Random(100))+" : le chiffre trouvé est 10"
Debug ""
RandomSeed(Random(32000)) : Debug "RandomSeed(-1)"
Debug "; Disons qu'on kill le process RandomSeed grace a '(-1)'"
Debug "; pour retrouver un réel mode aléatoire"
Debug ""
Debug Str(Random(100))+" : le chiffre sera 43; helas"
Debug Str(Random(100))+" : le chiffre sera 42; helas"
Debug Str(Random(100))+" : le chiffre sera 75; helas"
Debug Str(Random(100))+" : le chiffre sera 88; helas"
Debug ""
Debug "; Dommage, apres un RandomSeed, TOUS les nombres sont"
Debug "; previsibles meme quand on n'en veux plus..."
Debug "; Il manque un 'kill randomseed'"
Les resultats montre le contraire d'un mode aleatoire :
15; 31; 93; 63
15; 31; 93; 63
15; 31; 93; 63
15; 31; 93; 63
15; 31; 93; 63
15; 31; 93; 63
15; 31; 93; 63

Malgré ca, Dobro se borne a croire en son RandomSeed(Random(xxx)) qui n'a AUCUN sens apres un precedent RandomSeed(xxxxx)
Il me dit meme :
je pense que t'a un problem avec ton ordi !!
chez moi mon programme en console fait varier les chiffres !!

en faisant "RandomSeed ( Random (32000))"
c'est evident qu'il fait changer le ramdom seed !!

si ça marche pas chez toi , c'est pas normal !
Cependant, apres avoir essuyé les insultes de "chercheur de merde", je montre le paradoxe d'un RandomSeed(Random(z)) voulant retablir le mode aleatoire quand il y a deja eu un premier RandomSeed.

La, Dobro comprend enfin ce paradoxe et se permet de le réexpliquer en reprenant betement mon explication alors que précédement, il n'avait rien capté :
c'est ce que Dri (et moi) lui avons dit au debut !!

il n'y a pas de mode reellement aléatoire avec un ordi
puisque la sequence est toujour prise a partir d'une liste immuable

en fait ton exemple montre que le premier random(100) est deja une sequence "previsible" car un RandomSeed(x) est effectué au lancement du compillateur ....
A noter que lui, defentait un randomseed(random(x)). Pourtant, il dit defendre ElapsedMilliseconds() !!

Puis il retombe tres naïvement dans sa logique pour oser reaffirmer :
donc cela revien a dire que mon RandomSeed(random(32000)) n'est pas plus idiot que RandomSeed(ElapsedMilliseconds()) !!!
Pourtant, RandomSeed(random(32000)) est TOTALEMENT NON ALEATOIRE...

PA - THE - TIQUE !! :roll:
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

Message par Dr. Dri »

Là je suis d'accord avec le fait que ce code ne garantisse pas un nombre aléatoire.

Code : Tout sélectionner

RandomSeed(constante)
RandomSeed( Random(autre_constante) )
Debug Random(derniere_constante)
Là par contre je ne suis vraiment pas d'accord avec le fait que ce code ne garantisse pas un nombre aléatoire

Code : Tout sélectionner

RandomSeed(constante)
RandomSeed( ElapsedMilliseconds() )
Debug Random(derniere_constante)
Pourquoi je n'ai pas besoin de me servir en plus de la date ? pour la simple raison que la probabilité de tomber x fois de suite sur la MÊME milliseconde est TRES FAIBLE!

La raison est simple, à chaque lancement de ton programme les accès au disque seront +/- long selon sa position de départ, le temps que t'accorderas l'OS sera +/- important selon le nombre de processus lancés, la consommation du CPU, la quantité de RAM utilisée (et donc la quantité de mémoire paginée utilisée) etc etc

enfin bon... LOL quoi

Dri :lol:
Avatar de l’utilisateur
SPH
Messages : 4947
Inscription : mer. 09/nov./2005 9:53

Message par SPH »

Dr. Dri a écrit :Là par contre je ne suis vraiment pas d'accord avec le fait que ce code ne garantisse pas un nombre aléatoire

Code : Tout sélectionner

RandomSeed(constante)
RandomSeed( ElapsedMilliseconds() )
Debug Random(derniere_constante)
TOTALEMENT DACCORD. Cependant, je me suis referé au manuel de PB :
Syntaxe

Resultat = ElapsedMilliseconds()
Description

Renvoie le nombre de millisecondes qui se sont écoulées depuis le démarrage de l'ordinateur. Cette fonction est relativement précise: il peut y avoir de légères différences en fonction de l'OS sur lequel le programme s'exécute.
Dr. Dri a écrit :Pourquoi je n'ai pas besoin de me servir en plus de la date ? pour la simple raison que la probabilité de tomber x fois de suite sur la MÊME milliseconde est TRES FAIBLE!
Dri :lol:
Je pense aussi que c'est faible... mais si tous les jours un programme demarre avec l'ordi, on pourrait croiser les memes tables...
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Message par djes »

Rarement vu un topic aussi dénué d'intérêt.
Avatar de l’utilisateur
SPH
Messages : 4947
Inscription : mer. 09/nov./2005 9:53

Message par SPH »

djes a écrit :Rarement vu un topic aussi dénué d'intérêt.
Tu vas rejouir dodo la :wink:
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

Message par Dr. Dri »

djes a écrit :Rarement vu un topic aussi dénué d'intérêt.
Bah en même temps je passe pas un jour sur le forum et je vois que tout un topic s'est enflammé, j'avoue m'ettre "légerrement" forcé à tout lire (sur la fin ca devien drole quand même)

Dri
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

mon randomseed(random(x))
est a inclure dans une boucle bien sur !!
la boucle des events par exemple, mais cela me paraissait evident
d'ailleurs dans mon exemple avec la console (exemple qui marche tres bien)
cela marche parceque inclus dan une boucle créé avec un goto

le fait d'utiliser "RandomSeed( ElapsedMilliseconds() )"

reviens a la meme chose, sauf que le ElapsedMilliseconds() est une "boucle"
effectué ailleurs ! ... :?

un "randomseed(random(x))" dans une boucle d'event
(entre le repeat-until de la boucle principal ), n'est pas plus previsible que le
RandomSeed( ElapsedMilliseconds() ..... :roll:
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

Message par Dr. Dri »

@Dobro
j'ai pas dit que ta méthode ne marchait pas, mais qu'elle ne fonctionnait pas directement après un randomseed avec une constante. Dans ce cas précis c'est prévisible ^^

Dri
Répondre