Formation par Olivier Duffez

Formation au référencement par Olivier Duffez, créateur de WebRankInfo !
Une formule efficace alliant théorie et pratique, avec une haute disponibilité des intervenants
Cette formule a déjà convaincu plusieurs centaines d'entreprises, pourquoi pas vous ?
Réservez vite votre place en ligne (convention possible pour imputer sur le budget formation)

Formation référencement Marseille

[php/MySQL] Tirage au sort avec pondération

Aller à la page 1, 2, 3  Suivante
Poster un nouveau sujet Imprimer cette discussion    Forum -> Développement d'un site Web   Les dernières discussions de ce forum sont disponibles au format RSS
Voir le sujet précédent :: Voir le sujet suivant  
Auteur Message
 
HawkEye
Modérateur
Modérateur

Inscrit le: 23 Fév 2004
Messages: 12124
Localisation: Google

URL permanente de ce messagePosté le : Mer Déc 12, 2007 11:07    Sujet du message: [php/MySQL] Tirage au sort avec pondération

Hello,

Je cherche à faire un tirage au sort, avec une condition et une pondération basée sur un score.

Exemple: Choisir un hamster gagnant parmi ceux qui ne sont pas éliminés, et en les favorisant proportionnellement à leur force.

Les données seraient organisées comme suit:

[ nom_joueur | nom_hamster | valide | force ]

--> (jean, ham_star, 1, 500)
--> (paul, hemmster, 1, 1000)
--> (marc, lobster, 0, 1800)

--> le hamster de marc ne peut pas gagner (il est éliminé)
--> le hamster de paul a 2x plus de chances d'être tiré au sort...

Je ne trouve pas de solution simple Sad
 
HawkEye Visiter le site web du posteur
oli004
WRInaute accro
WRInaute accro

Inscrit le: 06 Jan 2005
Messages: 1856
Localisation: France, departement 03 (Allier)

URL permanente de ce messagePosté le : Mer Déc 12, 2007 11:23    Sujet du message: [php/MySQL] Tirage au sort avec pondération

ça ne fonctionne pas ça :

soit x la plus grande force

if rand(1,x) < y {

y gagne ;

}

else {

x gagne ;

}


? Rolling Eyes

bien sur, préalablement, tu fais un select sur ta base de deux id aléatoire dont eliminé est à 0


Dernière édition par oli004 le Mer Déc 12, 2007 11:27; édité 1 fois
 
oli004 Visiter le site web du posteur
moktoipas
WRInaute accro
WRInaute accro

Inscrit le: 29 Juin 2004
Messages: 1827
Localisation: Nantes

URL permanente de ce messagePosté le : Mer Déc 12, 2007 11:23    Sujet du message: [php/MySQL] Tirage au sort avec pondération

Moi je le ferai en duex requettes
1 pour recureper la liste des hamster dansl a courses
1 pour recuperer la somme des forces des hamster dans la course.

la seconde renvoie 1500 donc

et tu choisi un nombre au pif entre 0 et 1500

ensuite, tu parcours (dans n'importe quel ordre, osef) le resultat de la requete des hamster qui sont dans la course.

a chaque hamster( enfin) ligne) tu soustrait de ton random la force du hamster.

Quand juste après ta soustraction tu a ton random qui fait 0 ou est négatif, c'est que tu est tombé sur le hamster gagnant Smile

(moi je prefere les gerbilles)
 
moktoipas Visiter le site web du posteur
Leonick
WRInaute accro
WRInaute accro

Inscrit le: 08 Aoû 2004
Messages: 8427
Localisation: Val de Marne

URL permanente de ce messagePosté le : Mer Déc 12, 2007 11:41    Sujet du message: [php/MySQL] Tirage au sort avec pondération

perso, je ferais un array() qui contiendrait 500 fois jean et 1000 foi paul, un petit shuffle () et tu prends le 1° du tableau
 
Leonick Visiter le site web du posteur
HawkEye
Modérateur
Modérateur

Inscrit le: 23 Fév 2004
Messages: 12124
Localisation: Google

URL permanente de ce messagePosté le : Mer Déc 12, 2007 11:42    Sujet du message: [php/MySQL] Tirage au sort avec pondération

oli004, j'aurais du préciser qu'il peut y avoir 100 hamsters dans la course... pas obligatoirement 2 Wink

moktoipas, ton idée m'a l'air bien. Aucun souci pour les deux requêtes, mais c'est la suite qui va me poser problème...

Je t'envoie un petit MP pour la partie "php" Wink

Merci
 
HawkEye Visiter le site web du posteur
blman
WRInaute accro
WRInaute accro

Inscrit le: 05 Sep 2003
Messages: 2697
Localisation: Nantes / Laval (France)

URL permanente de ce messagePosté le : Mer Déc 12, 2007 12:03    Sujet du message: [php/MySQL] Tirage au sort avec pondération

Moi je ferais pareil que Leonick si tu n'a pas trop d'enregistrement et pareil que moktoipas si tu en a beaucoup

PS : HawkEye, laisse Moktoipas tranquille, il a déjà assez de boulot comme ça Wink
 
blman Visiter le site web du posteur
auboutdufil
Nouveau WRInaute

Inscrit le: 19 Mai 2006
Messages: 21
Localisation: France

URL permanente de ce messagePosté le : Mer Déc 12, 2007 13:08    Sujet du message: [php/MySQL] Tirage au sort avec pondération

Moi je pondèrerai sur une échelle de 1 à 10 les forces :
--> (jean, ham_star, 1, 500, 0)
--> (paul, hemmster, 1, 1000, 1)
--> (marc, lobster, 0, 1800, 2)

Ensuite je fais un tableau pondéré :
(lobster, lobster, hemmster)

[note: il n'y a pas ham_star car il a une note de 0, et il y a 2 fois lobster parce qu'il a une note de 2)


et je fais un joli random dessu Smile
 
auboutdufil Visiter le site web du posteur
athoms
WRInaute occasionnel
WRInaute occasionnel

Inscrit le: 22 Avr 2004
Messages: 223
Localisation: France

URL permanente de ce messagePosté le : Mer Déc 12, 2007 16:52    Sujet du message: [php/MySQL] Tirage au sort avec pondération

Salut?
Et en sql ça ne serait pas possible de faire ça, avec quelque chose du genre?

Code:
select * from hamster where valide=1 order by rand(),force desc limit 1
 
athoms Visiter le site web du posteur
Leonick
WRInaute accro
WRInaute accro

Inscrit le: 08 Aoû 2004
Messages: 8427
Localisation: Val de Marne

URL permanente de ce messagePosté le : Mer Déc 12, 2007 17:05    Sujet du message: [php/MySQL] Tirage au sort avec pondération

non, je crois que la seule solution semble être celle que j'ai donnée. Si on effectue un tri selon un 2° critère (genre la force), que j'ai force 2 ou 2000, je serais juste devant celui qui a une force 1 et j'aurais toujours 1 chance sur 2 d'être tiré au sort.
 
Leonick Visiter le site web du posteur
moktoipas
WRInaute accro
WRInaute accro

Inscrit le: 29 Juin 2004
Messages: 1827
Localisation: Nantes

URL permanente de ce messagePosté le : Mer Déc 12, 2007 17:10    Sujet du message: [php/MySQL] Tirage au sort avec pondération

Non, ta solution n'est pas la seule ^^


La mienne est tout a fait valable et évite de faire un tri sur un tableau de millions d'entrées (1000 hamster de force 1000 et on se retrouve avec un méga tableau).
 
moktoipas Visiter le site web du posteur
rog
WRInaute accro
WRInaute accro

Inscrit le: 21 Sep 2006
Messages: 1662
Localisation: sapucaia do sul (RS)

URL permanente de ce messagePosté le : Mer Déc 12, 2007 17:43    Sujet du message: [php/MySQL] Tirage au sort avec pondération

j'ai l'impression qu'aucune des deux solutions ne convient

ça marche pas avec un tableau de 3
lol

1 - 500
2 - 1000
3 - 2000

= 3500

si on divise par 500, on obient 7
sur 7 affichages on devrait avoir
une fois le 1
deux fois le 2
quatre fois le 3

à moins trouver une fonction mysql qui correspond à cet algo, ça va être un peu plus compliqué à mettre en place que cela ne le paraît

rog
 
rog Visiter le site web du posteur
blman
WRInaute accro
WRInaute accro

Inscrit le: 05 Sep 2003
Messages: 2697
Localisation: Nantes / Laval (France)

URL permanente de ce messagePosté le : Mer Déc 12, 2007 17:45    Sujet du message: [php/MySQL] Tirage au sort avec pondération

La solution de Moktoipas fonctionne ainsi, si j'ai tout bien compris.

Ma table :
Tibo -> force 500
Cyril -> force 1000
Yves -> force 100
Jean -> force 2000 (balaise Jean)
Bruno -> force 500

Total des forces : 4100

Test 1 :
-------------------------------------------------------
Nbre prix au pif dans l'interval 0-4100 -> allé au hasard 4000 (voir http://fr3.php.net/rand)

Ensuite, on mélange le tableau des hamsters pour faire un tri aléatoire ( http://fr.php.net/shuffle )
Jean -> 4000 - 2000 = 2000 -> perdu
Cyril -> 2000 - 1000 = 1000 -> perdu
Tibo -> 1000 - 500 = 500 -> perdu
Bruno -> 500 - 500 = 0 -> gagné !!!

Test 2 :
-------------------------------------------------------
Nbre prix au pif dans l'interval 0-4100 -> allé au hasard 2000

Ensuite, on mélange le tableau des hamsters pour faire un tri aléatoire ( http://fr.php.net/shuffle )
Bruno -> 2000 - 500 = 1500 -> perdu
Tibo -> 1500 - 500 = 1000 -> perdu
Jean -> 1000 - 2000 = -1000 -> gagné !!!


Et oui, effectivement, avec cette solution, on consomme moins de ressources sur un nombre important d'enregistrements que de multiplier le nombre d'entrées d'un tableau. Et plus on a de force, plus on a de chance de gagner.
 
blman Visiter le site web du posteur
HawkEye
Modérateur
Modérateur

Inscrit le: 23 Fév 2004
Messages: 12124
Localisation: Google

URL permanente de ce messagePosté le : Mer Déc 12, 2007 17:47    Sujet du message: [php/MySQL] Tirage au sort avec pondération

moktoipas a écrit:
Non, ta solution n'est pas la seule ^^


La mienne est tout a fait valable et évite de faire un tri sur un tableau de millions d'entrées (1000 hamster de force 1000 et on se retrouve avec un méga tableau).


C'est aussi la crainte que j'avais Wink

Disons qu'il n'y a qu'une dizaine de hamsters pour l'instant, et que leur force va de 50 à 6500... mais ces deux valeurs sont haussières Wink Rolling Eyes

J'ai appliqué la solution de moktoipas (désolé blman, j'te l'ai pris quelques minutes Wink ). Merci à tous.

Note: comme certains l'ont compris, il ne s'agit pas de hamsters ou de force, mais bien de comptes AdSense et de "mérite" Wink
 
HawkEye Visiter le site web du posteur
moktoipas
WRInaute accro
WRInaute accro

Inscrit le: 29 Juin 2004
Messages: 1827
Localisation: Nantes

URL permanente de ce messagePosté le : Mer Déc 12, 2007 17:52    Sujet du message: [php/MySQL] Tirage au sort avec pondération

c'est meme pas la peine de faire un shuffle.

meme bruno, qui est a la fin du tableau a des chance de gagner, il gagnera quand le random sera entre 3600 et 4100.
sa proba est donc de (4100-3600)/4100= 500/4100

en fait c marche peu importe l'ordre des hamster (jean est un hamster Surprised )
 
moktoipas Visiter le site web du posteur
moktoipas
WRInaute accro
WRInaute accro

Inscrit le: 29 Juin 2004
Messages: 1827
Localisation: Nantes

URL permanente de ce messagePosté le : Mer Déc 12, 2007 17:53    Sujet du message: [php/MySQL] Tirage au sort avec pondération

Citation:
Note: comme certains l'ont compris, il ne s'agit pas de hamsters ou de force, mais bien de comptes AdSense et de "mérite"


moi j'avais pas compris Sad


je pensais que tu voulais faire un jeu de paris en ligne pour les enfants :$ (véridique)
 
moktoipas Visiter le site web du posteur
 
Montrer les messages depuis:   
Revenir en haut    Forum -> Développement d'un site Web Toutes les heures sont au format GMT + 2 Heures
Page 1 sur 3 - Aller à la page 1, 2, 3  Suivante
Connexion
Nom d'utilisateur:    Mot de passe:      Se connecter automatiquement à chaque visite    

Définitions :

CLIQUEZ ICI pour vous inscrire à WebRankInfo (forum, annuaire, outils...)

Connexion

© 2001-2005 phpBB Group, support français
Personnalisation : WebRankInfo ™


 ODP  Firefox  Alsacreations  annuaire webmaster Yagoort