Je cherche =E0 faire un javascript qui retourne un id (pour un array)
al=E9atoirement mais dont les =E9l=E9ments de ce tableau sont pond=E9r=E9 po=
ur
leur donner plus ou moins d'importance. (j'ai mis un pourcentage pour
le moment)
En gros : j'ai un tableau
var tableau =3D new Array(
Array("nom du premier =E9l=E9ment", 0.5),
Array("nom du 2=E8me =E9l=E9ment", 0.5),
);
Ainsi, je souhaite appeller une fonction Js qui me retourne 1 et un
seul =E9l=E9ment de ce tableau. Avec le tableau de l'exemple ci-dessus, je
souhaite donc une =E9quiprobabilit=E9 sur les 2 =E9l=E9ments. Par cons=E9que=
nt,
je je fais 100 tirages, alors potentiellement j'aurais 50 fois le 1er
=E9l=E9ments qui sortira.
Savez vous comment je peux faire en javascript ?
NB : bien sur, les pond=E9rations sont des variables :-)
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
diablo
Bonjour,
Je cherche à faire un javascript qui retourne un id (pour un array) aléatoirement mais dont les éléments de ce tableau sont pondéré pour leur donner plus ou moins d'importance. (j'ai mis un pourcentage pour le moment)
En gros : j'ai un tableau var tableau = new Array( Array("nom du premier élément", 0.5), Array("nom du 2ème élément", 0.5), );
Ainsi, je souhaite appeller une fonction Js qui me retourne 1 et un seul élément de ce tableau. Avec le tableau de l'exemple ci-dessus, je souhaite donc une équiprobabilité sur les 2 éléments. Par conséquent, je je fais 100 tirages, alors potentiellement j'aurais 50 fois le 1er éléments qui sortira.
Savez vous comment je peux faire en javascript ? NB : bien sur, les pondérations sont des variables :-)
google -> "javascript random"
hf
ps : pour tes poids, j'utiliserais cette methode indirecte : -> plutot que d'assigner des poids à tes différents éléments multiplies-les, je veux dire par là que tu devrais créer plusieurs éléments identiques, ce devrait donner à peu de chose près le même résultat
-- -uTb#`diablo PWed by GNU/Linux Debian on Diablo
Bonjour,
Je cherche à faire un javascript qui retourne un id (pour un array)
aléatoirement mais dont les éléments de ce tableau sont pondéré pour
leur donner plus ou moins d'importance. (j'ai mis un pourcentage pour
le moment)
En gros : j'ai un tableau
var tableau = new Array(
Array("nom du premier élément", 0.5),
Array("nom du 2ème élément", 0.5),
);
Ainsi, je souhaite appeller une fonction Js qui me retourne 1 et un
seul élément de ce tableau. Avec le tableau de l'exemple ci-dessus, je
souhaite donc une équiprobabilité sur les 2 éléments. Par conséquent,
je je fais 100 tirages, alors potentiellement j'aurais 50 fois le 1er
éléments qui sortira.
Savez vous comment je peux faire en javascript ?
NB : bien sur, les pondérations sont des variables :-)
google -> "javascript random"
hf
ps : pour tes poids, j'utiliserais cette methode indirecte :
-> plutot que d'assigner des poids à tes différents éléments
multiplies-les, je veux dire par là que tu devrais créer
plusieurs éléments identiques, ce devrait donner à peu de
chose près le même résultat
--
-uTb#`diablo PWed by GNU/Linux Debian on Diablo
Je cherche à faire un javascript qui retourne un id (pour un array) aléatoirement mais dont les éléments de ce tableau sont pondéré pour leur donner plus ou moins d'importance. (j'ai mis un pourcentage pour le moment)
En gros : j'ai un tableau var tableau = new Array( Array("nom du premier élément", 0.5), Array("nom du 2ème élément", 0.5), );
Ainsi, je souhaite appeller une fonction Js qui me retourne 1 et un seul élément de ce tableau. Avec le tableau de l'exemple ci-dessus, je souhaite donc une équiprobabilité sur les 2 éléments. Par conséquent, je je fais 100 tirages, alors potentiellement j'aurais 50 fois le 1er éléments qui sortira.
Savez vous comment je peux faire en javascript ? NB : bien sur, les pondérations sont des variables :-)
google -> "javascript random"
hf
ps : pour tes poids, j'utiliserais cette methode indirecte : -> plutot que d'assigner des poids à tes différents éléments multiplies-les, je veux dire par là que tu devrais créer plusieurs éléments identiques, ce devrait donner à peu de chose près le même résultat
-- -uTb#`diablo PWed by GNU/Linux Debian on Diablo
SAM
Bonjour,
Je cherche à faire un javascript qui retourne un id (pour un array) aléatoirement mais dont les éléments de ce tableau sont pondéré pour leur donner plus ou moins d'importance. (j'ai mis un pourcentage pour le moment)
<html> <script type="text/javascript"> var tableau = new Array( Array("nom du premier élément", 0.5), Array("nom du 2ème élément", 0.5) );
function aleatoire(tablo) { var idx = 0, R = [], long=0; for(var i=0; i<tablo.length; i++) { long = tablo[i][1]*10; for(var j=0; j<long; j++) { R[idx] = tablo[i][0]; idx++; } } return R[Math.floor(Math.random()*R.length)]; } </script> <p><button onclick=" document.getElementById('inf').innerHTML+='n+ '+aleatoire(tableau);"
go</button></p> <pre id="inf"></pre>
</html>
-- sm
Bonjour,
Je cherche à faire un javascript qui retourne un id (pour un array)
aléatoirement mais dont les éléments de ce tableau sont pondéré pour
leur donner plus ou moins d'importance. (j'ai mis un pourcentage pour
le moment)
<html>
<script type="text/javascript">
var tableau = new Array(
Array("nom du premier élément", 0.5),
Array("nom du 2ème élément", 0.5)
);
function aleatoire(tablo) {
var idx = 0, R = [], long=0;
for(var i=0; i<tablo.length; i++) {
long = tablo[i][1]*10;
for(var j=0; j<long; j++) {
R[idx] = tablo[i][0];
idx++;
}
}
return R[Math.floor(Math.random()*R.length)];
}
</script>
<p><button onclick="
document.getElementById('inf').innerHTML+='n+ '+aleatoire(tableau);"
Je cherche à faire un javascript qui retourne un id (pour un array) aléatoirement mais dont les éléments de ce tableau sont pondéré pour leur donner plus ou moins d'importance. (j'ai mis un pourcentage pour le moment)
<html> <script type="text/javascript"> var tableau = new Array( Array("nom du premier élément", 0.5), Array("nom du 2ème élément", 0.5) );
function aleatoire(tablo) { var idx = 0, R = [], long=0; for(var i=0; i<tablo.length; i++) { long = tablo[i][1]*10; for(var j=0; j<long; j++) { R[idx] = tablo[i][0]; idx++; } } return R[Math.floor(Math.random()*R.length)]; } </script> <p><button onclick=" document.getElementById('inf').innerHTML+='n+ '+aleatoire(tableau);"
go</button></p> <pre id="inf"></pre>
</html>
-- sm
mathieu.lory
Ah, ben tout le travail est fait !! je viens de l'intégrer dans mon code et ça marche du premier coup !!
Ah, ben tout le travail est fait !! je viens de l'intégrer dans mon
code et ça marche du premier coup !!
Ah, ben tout le travail est fait !! je viens de l'intégrer dans mon code et ça marche du premier coup !!
Il vaudra sans doute mieux créer l'array modifié en fonction des pondérations et ne faire un aléa que sur ce nouveau tableau.
Le truc donné fait ça (créer un nouvel array) mais à chaque appel de la fonction. Pour 2 trucs ça va mais pour 275 ... ? avec des coef 0.9 ou 1.5
-- sm
Olivier Miakinen
Je cherche à faire un javascript qui retourne un id (pour un array) aléatoirement mais dont les éléments de ce tableau sont pondéré pour leur donner plus ou moins d'importance. (j'ai mis un pourcentage pour le moment)
[...]
Savez vous comment je peux faire en javascript ? NB : bien sur, les pondérations sont des variables :-)
Je cherche à faire un javascript qui retourne un id (pour un array)
aléatoirement mais dont les éléments de ce tableau sont pondéré pour
leur donner plus ou moins d'importance. (j'ai mis un pourcentage pour
le moment)
[...]
Savez vous comment je peux faire en javascript ?
NB : bien sur, les pondérations sont des variables :-)
Un algo possible (sans dupliquer les variables N fois dans un autre
tableau) a été donné cette semaine dans fr.sci.maths :
<news:694f0842-bfea-4f4c-907d-f2b85d5640ca@e10g2000prf.googlegroups.com>
<http://groups.google.fr/group/fr.sci.maths/msg/75f4c7551085ea3a?hl=fr>
Je cherche à faire un javascript qui retourne un id (pour un array) aléatoirement mais dont les éléments de ce tableau sont pondéré pour leur donner plus ou moins d'importance. (j'ai mis un pourcentage pour le moment)
[...]
Savez vous comment je peux faire en javascript ? NB : bien sur, les pondérations sont des variables :-)
Je cherche à faire un javascript qui retourne un id (pour un array) aléatoirement mais dont les éléments de ce tableau sont pondéré pour leur donner plus ou moins d'importance. (j'ai mis un pourcentage pour le moment)
[...]
Savez vous comment je peux faire en javascript ? NB : bien sur, les pondérations sont des variables :-)
Je crois que la finalité du truc chez les matheux est encore + sioux : on diminue la pondération du machin x s'il a déjà été tiré.
-- sm
Je cherche à faire un javascript qui retourne un id (pour un array)
aléatoirement mais dont les éléments de ce tableau sont pondéré pour
leur donner plus ou moins d'importance. (j'ai mis un pourcentage pour
le moment)
[...]
Savez vous comment je peux faire en javascript ?
NB : bien sur, les pondérations sont des variables :-)
Un algo possible (sans dupliquer les variables N fois dans un autre
tableau) a été donné cette semaine dans fr.sci.maths :
<news:694f0842-bfea-4f4c-907d-f2b85d5640ca@e10g2000prf.googlegroups.com>
<http://groups.google.fr/group/fr.sci.maths/msg/75f4c7551085ea3a?hl=fr>
et qu'est ce donne :
<http://groups.google.fr/group/fr.sci.maths/msg/c8d192189a5583b0>
traduit en JS ?
Je cherche à faire un javascript qui retourne un id (pour un array) aléatoirement mais dont les éléments de ce tableau sont pondéré pour leur donner plus ou moins d'importance. (j'ai mis un pourcentage pour le moment)
[...]
Savez vous comment je peux faire en javascript ? NB : bien sur, les pondérations sont des variables :-)
Mathematica est un logiciel hyperspécialisé pour les mathématiques. Je dis ça alors que je ne l'ai jamais utilisé, mais je ne serais pas étonné qu'il ait en standard des fonctions pour calculer des exponentielles de matrices ou des intégrales triples. En tout cas, le programme donné dans l'article que tu cites n'est pas une implémentation de l'algorithme donné dans l'article que je citais moi-même.
Je crois que la finalité du truc chez les matheux est encore + sioux : on diminue la pondération du machin x s'il a déjà été tiré.
Non, non, pas du tout. Je vais essayer de le traduire en JavaScript, en repartant de l'exemple que tu avais donné.
<html> <script type="text/javascript"> var tableau = new Array( Array("nom du premier élément", 0.5), Array("nom du 2ème élément", 0.5) );
function sommepoids(tablo) { var somme = 0; for (var i = 0; i < tablo.length; i++) { somme += tablo[i][1]; } return somme; }
var sommetotale = sommepoids(tableau);
function aleatoire(tablo,total) { var alea = Math.random() * total; var somme = 0; for (var i = 0; i < tablo.length; i++) { somme += tablo[i][1]; if (somme > alea) { return tablo[i][0]; } } /* ce cas ne devrait pas arriver : */ return tablo[tablo.length-1]; } </script> <p><button onclick=" document.getElementById('inf').innerHTML + 'n+ ' + aleatoire(tableau,sommetotale);"
go</button></p> <pre id="inf"></pre>
</html>
On pourrait bien sûr calculer sommetotale à l'intérieur de aleatoire(), surtout si on ne s'en sert qu'une seule fois.
et qu'est ce donne :
<http://groups.google.fr/group/fr.sci.maths/msg/c8d192189a5583b0>
traduit en JS ?
Mathematica est un logiciel hyperspécialisé pour les mathématiques. Je
dis ça alors que je ne l'ai jamais utilisé, mais je ne serais pas étonné
qu'il ait en standard des fonctions pour calculer des exponentielles de
matrices ou des intégrales triples. En tout cas, le programme donné dans
l'article que tu cites n'est pas une implémentation de l'algorithme
donné dans l'article que je citais moi-même.
Je crois que la finalité du truc chez les matheux est encore + sioux :
on diminue la pondération du machin x s'il a déjà été tiré.
Non, non, pas du tout. Je vais essayer de le traduire en JavaScript, en
repartant de l'exemple que tu avais donné.
<html>
<script type="text/javascript">
var tableau = new Array(
Array("nom du premier élément", 0.5),
Array("nom du 2ème élément", 0.5)
);
function sommepoids(tablo) {
var somme = 0;
for (var i = 0; i < tablo.length; i++) {
somme += tablo[i][1];
}
return somme;
}
var sommetotale = sommepoids(tableau);
function aleatoire(tablo,total) {
var alea = Math.random() * total;
var somme = 0;
for (var i = 0; i < tablo.length; i++) {
somme += tablo[i][1];
if (somme > alea) {
return tablo[i][0];
}
}
/* ce cas ne devrait pas arriver : */
return tablo[tablo.length-1];
}
</script>
<p><button onclick="
document.getElementById('inf').innerHTML + 'n+ ' + aleatoire(tableau,sommetotale);"
go</button></p>
<pre id="inf"></pre>
</html>
On pourrait bien sûr calculer sommetotale à l'intérieur de aleatoire(),
surtout si on ne s'en sert qu'une seule fois.
Mathematica est un logiciel hyperspécialisé pour les mathématiques. Je dis ça alors que je ne l'ai jamais utilisé, mais je ne serais pas étonné qu'il ait en standard des fonctions pour calculer des exponentielles de matrices ou des intégrales triples. En tout cas, le programme donné dans l'article que tu cites n'est pas une implémentation de l'algorithme donné dans l'article que je citais moi-même.
Je crois que la finalité du truc chez les matheux est encore + sioux : on diminue la pondération du machin x s'il a déjà été tiré.
Non, non, pas du tout. Je vais essayer de le traduire en JavaScript, en repartant de l'exemple que tu avais donné.
<html> <script type="text/javascript"> var tableau = new Array( Array("nom du premier élément", 0.5), Array("nom du 2ème élément", 0.5) );
function sommepoids(tablo) { var somme = 0; for (var i = 0; i < tablo.length; i++) { somme += tablo[i][1]; } return somme; }
var sommetotale = sommepoids(tableau);
function aleatoire(tablo,total) { var alea = Math.random() * total; var somme = 0; for (var i = 0; i < tablo.length; i++) { somme += tablo[i][1]; if (somme > alea) { return tablo[i][0]; } } /* ce cas ne devrait pas arriver : */ return tablo[tablo.length-1]; } </script> <p><button onclick=" document.getElementById('inf').innerHTML + 'n+ ' + aleatoire(tableau,sommetotale);"
go</button></p> <pre id="inf"></pre>
</html>
On pourrait bien sûr calculer sommetotale à l'intérieur de aleatoire(), surtout si on ne s'en sert qu'une seule fois.
SAM
et qu'est ce donne :
Je vais essayer de le traduire en JavaScript, en repartant de l'exemple que tu avais donné.
Ne faudrait-il pas d'abord trier le tableau sur la pondération ? dans la mesure où on l'exploite suivant un ordre progressif.
Bon, avec un array de 2 éléments (de même poids !) pas facile de juger ;-)
<html> <script type="text/javascript"> var tableau = new Array( Array("nom du premier élément", 0.5), Array("nom du 2ème élément", 0.5) );
function sommepoids(tablo) { var somme = 0; for (var i = 0; i < tablo.length; i++) { somme += tablo[i][1]; } return somme; }
var sommetotale = sommepoids(tableau);
function aleatoire(tablo,total) { var alea = Math.random() * total; var somme = 0; for (var i = 0; i < tablo.length; i++) { somme += tablo[i][1]; if (somme > alea) { return tablo[i][0]; } } /* ce cas ne devrait pas arriver : */ return tablo[tablo.length-1]; } </script> <p><button onclick=" document.getElementById('inf').innerHTML + > 'n+ ' + aleatoire(tableau,sommetotale);"
go</button></p> <pre id="inf"></pre>
</html>
Olivier Miakinen
Ne faudrait-il pas d'abord trier le tableau sur la pondération ? dans la mesure où on l'exploite suivant un ordre progressif.
Non, cela n'a aucune importance. De même, les poids peuvent être entiers ou pas, et il peut même y en avoir un nul qui ne sera jamais choisi. En revanche il ne faut pas de poids négatif. Par ailleurs, si on s'arrange à l'avance pour que la somme des poids soit égale à 1 (comme dans l'exemple donné), il est à priori inutile de la recalculer.
Bon, avec un array de 2 éléments (de même poids !) pas facile de juger ;-)
Yapluka essayer avec un autre exemple :
var tableau = new Array( Array("nom du premier élément", 0.5), Array("nom du 2ème élément", 0.5), Array("nom du 3e élément", 1.5) );
Le 3e élément devrait être choisi trois fois plus souvent que chacun des deux autres.
Ne faudrait-il pas d'abord trier le tableau sur la pondération ?
dans la mesure où on l'exploite suivant un ordre progressif.
Non, cela n'a aucune importance. De même, les poids peuvent être entiers
ou pas, et il peut même y en avoir un nul qui ne sera jamais choisi. En
revanche il ne faut pas de poids négatif. Par ailleurs, si on s'arrange
à l'avance pour que la somme des poids soit égale à 1 (comme dans
l'exemple donné), il est à priori inutile de la recalculer.
Bon, avec un array de 2 éléments (de même poids !) pas facile de juger ;-)
Yapluka essayer avec un autre exemple :
var tableau = new Array(
Array("nom du premier élément", 0.5),
Array("nom du 2ème élément", 0.5),
Array("nom du 3e élément", 1.5)
);
Le 3e élément devrait être choisi trois fois plus souvent que chacun des
deux autres.
Ne faudrait-il pas d'abord trier le tableau sur la pondération ? dans la mesure où on l'exploite suivant un ordre progressif.
Non, cela n'a aucune importance. De même, les poids peuvent être entiers ou pas, et il peut même y en avoir un nul qui ne sera jamais choisi. En revanche il ne faut pas de poids négatif. Par ailleurs, si on s'arrange à l'avance pour que la somme des poids soit égale à 1 (comme dans l'exemple donné), il est à priori inutile de la recalculer.
Bon, avec un array de 2 éléments (de même poids !) pas facile de juger ;-)
Yapluka essayer avec un autre exemple :
var tableau = new Array( Array("nom du premier élément", 0.5), Array("nom du 2ème élément", 0.5), Array("nom du 3e élément", 1.5) );
Le 3e élément devrait être choisi trois fois plus souvent que chacun des deux autres.