IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Algorithmes et structures de données Discussion :

Créer un vecteur aléatoire


Sujet :

Algorithmes et structures de données

  1. #1
    Membre averti Avatar de Rafy
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    415
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 415
    Points : 417
    Points
    417
    Par défaut Créer un vecteur aléatoire
    La génération de nombre aléatoire est un sujet assez vaste, les utilisations nombreuses. Je souhaiterais créer un vecteur (3D) aléatoire :

    Il est possible de choisir chaque coordonnées de manière aléatoire, par exemple choisir chaque coordonnées entre -1 et 1, de générer un vecteur avec ces coordonnées.

    Ceci apportent quelques problèmes :
    -> Il est possible de tomber sur le vecteur nul (ce qui n'est pas un problème en soit), mais par la suite si on désir un vecteur de norme, 1 aléatoire, alors notre modé de génération nous retourne un vecteur que l'on ne pourra pas normaliser.
    -> Le vecteur ainsi généré n'est pas choisi de manière uniforme dans le volume possible, je m'explique. Ce n'est pas parcequ'on choisi aléatoirement uniformément les coodronnées qu'elles ne vont pas donner une répartition des vecteurs générés aléatoire et uniforme...
    La preuve dans le cas décrit au dessus, on constate une répartition non uniforme dans l'espace; on peut distinguer une forte concentration au centre et sur 4 axes qui sont les bisectrices des sommets des tétraèdres formés par les axes sur lesquels ont à choisi les coordonnées aléàtoirement.... (Je ne sais pas si j'ai pas perdu du monde en route la )
    Pour faire clair, dans le plan (en 2D) on aurai une forte concentration des vecteurs généré sur deux axes : la première bisectrice, et sa perpendiculaire passant par l'origine du repère...

    Ma question :
    Comment serai-t-il possible de générer de manière simple et rapide des vecteurs aléàtoires sans ces effets néfastes

    j'insiste sur simple et rapide car je présens une certaine dérive possible.
    Il faut se dire que cette génération va être appelée dans un jeu, jusqu'à 10000 par frame, donc pas de truc dans le genre trucs de fou.... merci d'avance
    Première grosse démo en construction :
    http://bitbucket.org/rafy/exo2/

  2. #2
    Expert éminent Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Points : 7 903
    Points
    7 903
    Par défaut
    Bonjour,

    En 2D les coordonnées polaires résolvent le problème. En 3D aussi, je pense.
    " Le croquemitaine ! Aaaaaah ! Où ça ? " ©Homer Simpson

  3. #3
    Membre averti Avatar de Rafy
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    415
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 415
    Points : 417
    Points
    417
    Par défaut
    Ben en fait non car ça fait toujours une concentration autour de l'origine...
    Alors j'avais pensé faire un choix non linéaire du rayon, c'est à dire non pas choisir un nombre pour le rayon de manière equiprobable, mais plutôt logarithmique de manière à éloingner les possibilités de choix au centre mais c'est lourd à mettre en place car il faut que je fasse une fonction rand non linéaire, donc pour faire un truc jolie une fonction rand à laquelle on peut passer une fonction de répartition....
    Première grosse démo en construction :
    http://bitbucket.org/rafy/exo2/

  4. #4
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Si le générateur aléatoire a une dimensionalité supérieure à 3, c'est bon non ?
    En fait, je pense aux générateurs qui peuvent générer n dimensions statistiquement indépendantes comme les MT19937 par exemple.

  5. #5
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Points : 2 227
    Points
    2 227
    Par défaut
    Citation Envoyé par Rafy
    Ben en fait non car ça fait toujours une concentration autour de l'origine...
    Alors j'avais pensé faire un choix non linéaire du rayon
    Tu peux faire quelque chose de très très simple
    R = rayon maximum,
    Rand une fonction qui te ramène un nombre entre 0 et 1
    r = rayon trouvé :

    r = R * Racine n-ième(Rand)

    A toi de déterminer la bonne valeur de n...
    J'affirme péremptoirement que toute affirmation péremptoire est fausse
    5ième élément : barde-prince des figures de style, duc de la synecdoque
    Je ne réponds jamais aux questions techniques par MP

  6. #6
    Membre confirmé
    Profil pro
    Directeur Scientifique
    Inscrit en
    Avril 2005
    Messages
    419
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur Scientifique

    Informations forums :
    Inscription : Avril 2005
    Messages : 419
    Points : 554
    Points
    554
    Par défaut
    Je me souviens de cette discussion:

    http://www.developpez.net/forums/showthread.php?t=78786

  7. #7
    Modérateur
    Avatar de ToTo13
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Janvier 2006
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 793
    Points : 9 860
    Points
    9 860
    Par défaut
    Bonjour,

    il est possible de faire des tirages aléatoires avec la fonction du langage que tu utilises, puis de passer ces nombres dans des algos utilisant des fonction XOR. Ceci est fait en cryptographie.
    Consignes aux jeunes padawans : une image vaut 1000 mots !
    - Dans ton message respecter tu dois : les règles de rédaction et du forum, prévisualiser, relire et corriger TOUTES les FAUTES (frappes, sms, d'aurteaugrafe, mettre les ACCENTS et les BALISES) => ECRIRE clairement et en Français tu DOIS.
    - Le côté obscur je sens dans le MP => Tous tes MPs je détruirai et la réponse tu n'auras si en privé tu veux que je t'enseigne.(Lis donc ceci)
    - ton poste tu dois marquer quand la bonne réponse tu as obtenu.

  8. #8
    Membre averti Avatar de Rafy
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    415
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 415
    Points : 417
    Points
    417
    Par défaut
    Citation Envoyé par Miles
    Si le générateur aléatoire a une dimensionalité supérieure à 3, c'est bon non ?
    En fait, je pense aux générateurs qui peuvent générer n dimensions statistiquement indépendantes comme les MT19937 par exemple.
    Je ne connais pas les MT19937, mais ce que je sais c'est que choisir aléatoirement uniformément suivant 3 axes ne va pas donner un choix aléaoitre uniforme en combinant les directions...
    Première grosse démo en construction :
    http://bitbucket.org/rafy/exo2/

  9. #9
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Avec un MT19937 oui, tu peux même aller au-delà de 600 dimensions à ton parallélépipère dans lequel tu tires tes points, et la répartitition sera toujours encore uniforme dans le volume.
    Maintenant, si pour toi, le but est de générer aléatoirement dans une sphère, c'est un autre problème

  10. #10
    Membre averti Avatar de Rafy
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    415
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 415
    Points : 417
    Points
    417
    Par défaut
    Citation Envoyé par Médiat
    Tu peux faire quelque chose de très très simple
    R = rayon maximum,
    Rand une fonction qui te ramène un nombre entre 0 et 1
    r = rayon trouvé :

    r = R * Racine n-ième(Rand)

    A toi de déterminer la bonne valeur de n...
    Ouais j'avais pensé utiliser le sinus ou le cosinus pour me créer une non uniformité dans le choix pour le rayon....
    Racine sera plus rapide mais provoquera surement des trucs étrange en 0 du fait de la tangeante nul : il va y avoir un effet de fuite du centre, et je pense que ça va faire l'effet inverse : je n'aurais plus rien au milieu.... A voir il faut tester...
    Mais je ne sais pas comment faire pour générer un veteur aléatoire dans l'espace... Car le coup des coordonnées polaire dans le plan peuvent peut-être palier au problème d'effet de "croix", mais dans l'espace, il faut que je choisisse 2 angles, et un rayon, et je pense que je vais encore avoir un problème avec ces 2 angles... Il vas y avoir un autre effet de bord.
    Et puis il va y avoir des projections à faire pour revenir en coordonnées cartésiennes, c'est à dire plein de sinus et de cosinus, et ça c'est pas très cool, car c'est pas rapide... (je rapelle : jusqu'a 10000 fois par frame) Ca risque de piquer.
    Première grosse démo en construction :
    http://bitbucket.org/rafy/exo2/

  11. #11
    Membre averti Avatar de Rafy
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    415
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 415
    Points : 417
    Points
    417
    Par défaut
    Citation Envoyé par Miles
    Avec un MT19937 oui, tu peux même aller au-delà de 600 dimensions à ton parallélépipère dans lequel tu tires tes points, et la répartitition sera toujours encore uniforme dans le volume.
    Maintenant, si pour toi, le but est de générer aléatoirement dans une sphère, c'est un autre problème
    Si j'arrive à avoir un vecteur de norme 1 aléatoire, c'est bon. Donc on peut dire que oui, c'est dans une sphere... Mais le coup de passer d'un cube à une sphere c'est juste une question de normalisation...
    Première grosse démo en construction :
    http://bitbucket.org/rafy/exo2/

  12. #12
    Membre averti Avatar de Rafy
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    415
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 415
    Points : 417
    Points
    417
    Par défaut
    Citation Envoyé par ToTo13
    Bonjour,

    il est possible de faire des tirages aléatoires avec la fonction du langage que tu utilises, puis de passer ces nombres dans des algos utilisant des fonction XOR. Ceci est fait en cryptographie.
    Je travail en C++.
    Mais si je dois faire des XOR, il faut que je stocke tout les vecteurs que je génère, non ? Et si j'en créé 10000 par frame, je vais saturer la mémoire rapidement
    Ou alors je n'ai pas compris la méthode.
    Première grosse démo en construction :
    http://bitbucket.org/rafy/exo2/

  13. #13
    Membre averti Avatar de Rafy
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    415
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 415
    Points : 417
    Points
    417
    Par défaut
    Citation Envoyé par FrancisSourd
    Je viens de lire le post. Ca veut dire qu'au lieu de choisir mes coordonnées entre -1 et 1, si je les choisi entre -inf et +inf, alors je vais minimiser la concentration sur les diagonales du cube englobant ????
    Première grosse démo en construction :
    http://bitbucket.org/rafy/exo2/

  14. #14
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Citation Envoyé par Rafy
    Si j'arrive à avoir un vecteur de norme 1 aléatoire, c'est bon. Donc on peut dire que oui, c'est dans une sphere... Mais le coup de passer d'un cube à une sphere c'est juste une question de normalisation...
    Dans ce cas, tu prends un générateur aléatoire de dimension suffisante, et c'est bon.

  15. #15
    Membre averti Avatar de Rafy
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    415
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 415
    Points : 417
    Points
    417
    Par défaut
    Hum, oui et le MT19937, c'en est un ???
    Et le truc que j'ai posté juste avant, c'est bon aussi ou pas ????
    Première grosse démo en construction :
    http://bitbucket.org/rafy/exo2/

  16. #16
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Le MT19937, c'est un générateur de Mersenne-Twister utilisant un nombre de Mersenne avec n=19937. C'est générateur de haute dimension, comme indiqué précédemment. Normalement, tu ne devrais pas avoir de pb avec un tel générateur vu ses capacités - contrairement aux générateurs à congruence linéaire -

  17. #17
    Membre averti Avatar de Rafy
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    415
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 415
    Points : 417
    Points
    417
    Par défaut
    Je suis en train de regarder ça, sur http://miles.developpez.com/tutoriels/cpp/boost/random/
    Je ne sais pas trop ce que c'est que la "vitesse approximative", plus le nombre est petit, et plus c'est rapide ?
    Première grosse démo en construction :
    http://bitbucket.org/rafy/exo2/

  18. #18
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Oui, c'est ça. C'est en fait la vitesse indicative donnée par Boost, je ne sais donc pas exactement à quoi elle correspond

  19. #19
    Membre averti Avatar de Rafy
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    415
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 415
    Points : 417
    Points
    417
    Par défaut
    Si je créé un vecteur avec comme coordonnées, 3 nombres que je viens de générer avec MT19937, je n'aurai plus de problème d'effet de "croix" ????
    Je vais vérifier ça.
    Je vais essayer au par avant je vais voir si en changeant ma méthode courante (au lieu de prendre les nombre entre -1 et 1, de les prendre entre -inf et +inf) j'obtiens quelquechose, ça ne me ferrai pas trop de changement.
    Sinon ben je vais me lancer dans le MT19937
    Merci à tous pour vos réponses.
    Je ne metterai le tag résolu que quand j'aurai réussi à avoir ma répartition uniforme.....
    Première grosse démo en construction :
    http://bitbucket.org/rafy/exo2/

  20. #20
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Oui, normalement
    Et en plus, tu peux utiliser les distributions aléatoires pour avoir des intervales particuliers.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 3 123 DernièreDernière

Discussions similaires

  1. Réponses: 12
    Dernier message: 25/05/2007, 16h28
  2. Réponses: 2
    Dernier message: 06/04/2007, 11h30
  3. Réponses: 24
    Dernier message: 15/02/2007, 23h41
  4. créer un fchier aléatoire avec un nom unique
    Par hansaplast dans le forum Langage
    Réponses: 2
    Dernier message: 20/10/2006, 15h37
  5. Créer un password aléatoire
    Par finalfx dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 16/10/2006, 09h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo