Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1495 connectés 

  FORUM HardWare.fr
  Emploi & Etudes
  Aide aux devoirs

  Génération aléatoire de fractions

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Génération aléatoire de fractions

n°4044138
ghuillaume
Posté le 07-10-2012 à 19:30:29  profilanswer
 

Bonjour,
 
J'ai un petit problème qui parait très simple, mais pour lequel j'ai du mal à trouver une solution optimale, qui soit vraiment aléatoire.
 
Voilà le problème.
Je dispose de 2 données. Appelons la première X, un pourcentage entre 0.00 et 1.00 (2 chiffres significatifs maxi). La deuxième est N, et représente le nombre de fractions que je dois générer.
 
Je dois donc créer un petit programme informatique qui génère N fractions aléatoires (appelons les a/b) telles que :
a1/b1 + a2/b2 + ... + an/bn = X
avec des a et des b relativement petits (grand max 100)
 
 
Jusque là, j'ai trouvé 2 solutions.
 
Première solution :
1- Je génère aléatoirement tous les a de manière à ce que la somme de mes a soit égale à X*100
2- Je donne la valeur 100 à tous les b
3- Je simplifie les fractions
 
Problème : pas très aléatoire dans le sens où j'ai beaucoup de fractions sur 100, et je n'ai que peu de valeurs possibles pour b (50, 25, 20, 10, 5, 4 et 2)
 
Deuxième solution
1- Génération aléatoire de tous les b
2- Trouver le ppcm de tous les b afin de trouver une fraction Y/ppcm qui serait égale à X.
3- Génération aléatoire de tous les a de manière à ce que la somme de ces a soit égale au Y trouvé à l'étape 2. On obtient N fractions avec un dénominateur commun (le ppcm)
4- Simplification des fractions
 
Problème : Comme la première solution, peu de fractions peuvent être simplifiées. Le seul avantage est que l'on obtient pas que des fractions sur 100...
 
 
Une autre idée ?
J'ai pensé que le meilleur moyen d'avoir un résultat aléatoire était de commencer par générer aléatoirement les rapports a/b. Le problème de cette méthode est qu'elle pourrait me donner des a et des b trop grand, puisque rappelez vous qu'il m'en faut des très petits (100 maxi). Et je ne sais pas comment faire pour générer ces rapports de manière à avoir des nombres petits
 
Merci d'avance
 
edit : ne prenez pas en compte les situations extrêmes (X = 0.01 et N = 2 par exemple), mais seulement le cas général. Je m'occupe du reste !

mood
Publicité
Posté le 07-10-2012 à 19:30:29  profilanswer
 

n°4044389
belettete
qui ne tête plus :'(
Posté le 07-10-2012 à 22:15:16  profilanswer
 

Hello,
 
Est-ce que tu ne pourrais pas faire comme ça (long, mais bon c'est déjà plus aléatoire que tes solutions)
 
Pour générer un certain a/b < à un nombre m, a = uniforme(0,100) par exemple, b=uniforme(0,a*m)
 
1- Générer a1/b1 < X
2- Générer a2/b2 < X-a1/b1
3- Générer a3/b3 < X-a1/b1-a2/b2
...
N-1- Générer a(N-1)/b(N-1) < X-a1/b1-...-a(N-2)/b(N-2)
N- aN/bN = X- somme de tous les ai/bi obtenus précédemment
 
Ça répond mieux à l'énoncé, qui fixe dès le début N et X.


---------------
今日事,明日毕
n°4044495
ghuillaume
Posté le 07-10-2012 à 23:33:42  profilanswer
 

Je vais peut-être paraitre un peu gland, mais que fait la fonction uniforme() ? J'ai rien trouvé sur le waybe.

n°4044514
belettete
qui ne tête plus :'(
Posté le 07-10-2012 à 23:51:04  profilanswer
 

Euh pardon, c'est une notation pour désigner une loi uniforme.
Sur Excel, rand() est une loi uniforme entre 0 et 1 (donne un nombre au hasard entre 0 et 1).
Là tu veux plutôt une loi uniforme sur des nombre entiers, mais ça se fait aussi. Genre pour a : partie entière(100*rand())
 
(la partie entière sur excel, c'est floor je crois)


---------------
今日事,明日毕
n°4044614
ghuillaume
Posté le 08-10-2012 à 01:48:48  profilanswer
 

Ok, mais imaginons que j'ai en entrée X = 0.75.
Au premier coup, je trouve a = 25 par exemple. Il faut que B soit au minimum de 34 (a/X) pour que a/b soit inférieur à X. Or, uniforme(0,a*m) donne un nombre compris entre 0 et 18, non ? J'aurais donc plutôt tendance à dire b = uniforme(0,a*m)+(a/m), sachant que m = X si on parle de la première génération, et sachant que je ne sais pas ce que a*m fait là ^^. Ce qui donne, dans mon exemple, un nombre compris entre 34 et 52.
 
Bref, ta piste est bonne, et j'ai codé ta solution avec a = uniforme(0,15) et b = uniforme(0,100)+(a/m) et j'obtiens des résultats assez corrects avec N=8, mais peut-être un peu trop de valeurs extrêmes avec des N petits (2,3) ou grands (20,25), c'est-à-dire des rapports pas très homogènes (plusieurs 1% ou 2% à côté d'un seul 60% par exemple, avec X = 75%). Pas vraiment obligé d'avoir des résultats homogènes donc je peux m'en contenter, mais ce serait un plus de pouvoir avoir, de temps à autre, des résultats homogènes.
Qu'en penses-tu ?
 
 
PS : je code en C++ ;)


Message édité par ghuillaume le 08-10-2012 à 01:51:46
n°4044676
belettete
qui ne tête plus :'(
Posté le 08-10-2012 à 09:55:11  profilanswer
 

Oui pardon, j'ai inversé a et b, ma définition pour b n'est pas bonne du tout ;)
 
b doit être > a/X, sans limite. Or ce n'est pas trop possible de faire une uniforme sur un ensemble infini :D Donc on peut faire ce que tu as fait, en limitant à 100, mais du coup ça réduit considérablement les possibilités, d'où les résultats quelque peu bizarres.
 
A vue de nez, tu pourrais essayer a = uniforme(0,15), b = uniforme(0,1000)+a/X voire 10000, X = ce que tu veux, N = 20.
 
Sachant qu'avec N=2,3 les résultats ne sont pas super pertinents, surtout quand on sait que le dernier (an,bn) n'est pas vraiment aléatoire.
 
 
Edit : ok, c++ c'est cool. Je mettais avec excel, car tout le monde a excel :o mais le principe de la programmation est le même partout ^^


Message édité par belettete le 08-10-2012 à 10:06:39

---------------
今日事,明日毕

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Emploi & Etudes
  Aide aux devoirs

  Génération aléatoire de fractions

 

Sujets relatifs
loi de distribution (variable aléatoire)algo : déplacement aléatoire
Variable aléatoireProbabilités (variable aléatoire discrète, loi...)
maple : liste aléatoire.M2 Modélisation aléatoire de PVII (ex DEA Laure Elie)
M2 Modélisation aléatoire (ex DEA Laure Elie)Notre génération est-elle vraiment fainéante ?
combinaison : nCp génération de la liste 
Plus de sujets relatifs à : Génération aléatoire de fractions


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR