PHP|Débutant :: Forums

Advertisement

Besoin d'aide ? N'hésitez pas, mais respectez les règles

Vous n'êtes pas identifié(e).

#1 15-09-2009 13:45:03

morgan47
Membre
Inscription : 19-08-2009
Messages : 52

[Résolu] Sélectionner un enregistrement aléatoirement en fonction du poids.

bonjour,

J'aimerai créé un jeux de hasard ou l'on gagne par exemple, 10 points(1 chance sur 2), 50 points (1 chance sur 10), 500 points (1 chance sur 50)...

Mais je ne sais pas du tout comment m'y prendre.

Il faut que je créé une table gains, par exemple :
idgains | probabilité | gains

Mais ensuite je ne sais pas du tout comment procédé pour faire un random en tenant compte du poids de chaque gains.

Est ce que vous auriez une idée?

Merci beaucoup

Hors ligne

#2 17-09-2009 01:54:10

morgan47
Membre
Inscription : 19-08-2009
Messages : 52

Re : [Résolu] Sélectionner un enregistrement aléatoirement en fonction du poids.

Personne n'a d'idé?
Sinon oublions la requète SQL et imaginons que j'ai récupéré les ligne dans un tableau.
Il y a un moyen de choisir une ligne du tableau en fonction des probabilités?
Merci

Hors ligne

#3 17-09-2009 07:30:32

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : [Résolu] Sélectionner un enregistrement aléatoirement en fonction du poids.

Saluton,
Il faut dire que la formulation de ta problématique est tout sauf d'une grande clarté.
Qu'entends-tu exactement par un chance sur n ?
et où doit s'arrêter la série, c'est à dire par quoi faut-il remplacer les ... ?
Jette un œil sur ce petit script

<?php
$tirage=array_fill(0,499,10);
$tirage=array_merge($tirage,array_fill(0,249,20));
$tirage=array_merge($tirage,array_fill(0,124,40));
$tirage=array_merge($tirage,array_fill(0,62,80));
$tirage=array_merge($tirage,array_fill(0,30,160));
$tirage=array_merge($tirage,array_fill(0,15,320));
$tirage=array_merge($tirage,array_fill(0,7,640));
$tirage=array_merge($tirage,array_fill(0,3,1280));
$tirage=array_merge($tirage,array_fill(0,1,2560));
$tirage[]=5120;
shuffle($tirage);
echo $tirage[0];

Le hasard appliqué à un liste de composition proportionnelle au gain escomptable, ne constitue-t-il pas ce que tu appelles

un moyen de choisir une ligne du tableau en fonction des probabilités ?


Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

#4 17-09-2009 12:08:29

morgan47
Membre
Inscription : 19-08-2009
Messages : 52

Re : [Résolu] Sélectionner un enregistrement aléatoirement en fonction du poids.

En fait si c'est tout à fait ca.
Choisir une ligne du tableau en fonction des probabilités de chaque enregistrement.

Je parle de poids, mais c'est la même chose.
je vais regardé ton script.

Hors ligne

#5 17-09-2009 12:22:14

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : [Résolu] Sélectionner un enregistrement aléatoirement en fonction du poids.

En fait ça à l'air de le faire assez bien

<?php
$tirage=array_fill(0,499,10);
$tirage=array_merge($tirage,array_fill(0,249,20));
$tirage=array_merge($tirage,array_fill(0,124,40));
$tirage=array_merge($tirage,array_fill(0,62,80));
$tirage=array_merge($tirage,array_fill(0,30,160));
$tirage=array_merge($tirage,array_fill(0,15,320));
$tirage=array_merge($tirage,array_fill(0,7,640));
$tirage=array_merge($tirage,array_fill(0,3,1280));
$tirage=array_merge($tirage,array_fill(0,1,2560));
$tirage[]=5120;
$i=0;
$result=array();
while($i++<1000){
    shuffle($tirage);
    @$result[$tirage[0]]++;
    }
ksort($result);
?><pre><?php print_r($result);?></pre>

Retourne ce genre de test

[10] => 501
    [20] => 252
    [40] => 125
    [80] => 60
    [160] => 32
    [320] => 20
    [640] => 7
    [1280] => 2
    [5120] => 1


Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

#6 18-09-2009 09:27:31

morgan47
Membre
Inscription : 19-08-2009
Messages : 52

Re : [Résolu] Sélectionner un enregistrement aléatoirement en fonction du poids.

Si j'ai bien compris ton code, tu enregistre plusieurs fois dans un tableau chaque "jeux" pour lui donné des probabilités différentes.

Hors ligne

#7 18-09-2009 10:17:29

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : [Résolu] Sélectionner un enregistrement aléatoirement en fonction du poids.

Non,
Je crée un tableau (array()) $tirage qui contient :
- 500 occurrences qui valent 10
- 250 occurrences qui valent 20
- 125 occurrences qui valent 40
-  63 occurrences qui valent 80
-  31 occurrences qui valent 160
-  16 occurrences qui valent 320
-   8 occurrences qui valent 640
-   4 occurrences qui valent 1280
-   2 occurrences qui valent 2560
-   1 occurrence qui vaux 5120
ensuite je mélange [shuffle()] le tableau  1000 fois et à chaque fois j'incrémente l'index d'un autre tableau qui correspond à la valeur de la première position du tableau mélangé.
Ensuite je classe ce tableau de résultat en ordre croissant des index [ksort()].
On observe que la fréquence de sortie des valeurs correspond, à peu près, à leur fréquence de présence dans le tableau $tirage.
En fait, j'aurais du nommer le tableau $tirage, $souche et le tableau $result, $tirages, ç'aurait été plus clair, probablement.


Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

#8 27-09-2009 23:23:03

morgan47
Membre
Inscription : 19-08-2009
Messages : 52

Re : [Résolu] Sélectionner un enregistrement aléatoirement en fonction du poids.

J'ai réussi à faire ce que je voulais en m'aidant de ton code.
J'ai utilisé array_rand pour sélectionner un index aléatoirement.
Merci beaucoup

Hors ligne

Pied de page des forums