Sélectionnez l'élément de hasard avec des poids
J'ai une liste d'environ. 10000 articles. La situation actuelle est que chaque élément est associé à un poids (de priorité ou d'importance). Maintenant, le plus petit poids est -100
(négatives et les valeurs zéro peut être retiré) et le poids le plus élevé est 1500
. Le poids est déterminé par l'intuition par des personnes (comment quelqu'un pense que le point est important pour la communauté). Parce qu'il n'est pas facile de déterminer le point le plus important, je voudrais utiliser certains facteur aléatoire, de sorte que les éléments avec un poids inférieur aura moins de chance d'être sélectionné et de son poids sera ajusté à l'avenir (un mélange de bon sens et de l'aléatoire).
Savez-vous comment coder une fonction getItem
?
def getItem(dict):
# this function should return random item from
# the dictionary of item-weight pairs (or list of tuples)
# Normally I would return only random item from the dictionary,
# but now I'd like to have this: The item with weight 1500 should
# have much more chance to be returned than the item with weight 10.
# What's my idea is to sum up the weights of all items and then compute
# some ratios. But maybe you have better idea.
return randomItem
Merci
OriginalL'auteur xralf | 2012-02-13
Vous devez vous connecter pour publier un commentaire.
Avoir un oeil sur ce, je pense que c'est ce dont vous avez besoin avec une belle comparaison entre les différentes méthodes Aléatoire pondéré de génération en Python
L'approche la plus simple est suggéré:
Vous pouvez trouver plus de détails et améliorations possibles ainsi que certaines approches différentes dans le lien ci-dessus.
OriginalL'auteur Bogdan
Python 3.6 introduit aléatoire.choix()
OriginalL'auteur m.elahi
Vous devez extraire un nombre aléatoire entre 0 et la somme des poids (positif par définition). Ensuite, vous obtenez l'élément à partir d'une liste en utilisant les traversent: http://docs.python.org/library/bisect.html (le traversent, standard moduke).
OriginalL'auteur jimifiki
C'est plus facile à faire si les poids ne sont pas négatifs. Si vous devez avoir le négatif de poids, vous aurez pour compenser le poids le poids le plus bas possible. Dans votre cas,
offsetted_weight = itemweight + 100
En pseudo-code, il va comme ceci:
OriginalL'auteur Dervall
Si vous stockez vos données dans une base de données, vous pouvez utiliser SQL:
Soignée, mais il est SQL et la question est marqué avec python tag. De toute façon, j'aime l'idée.
Comment je l'ai dit, 'SI vous UTILISEZ UNE BASE de données" ...
En fait, je l'aime parce que j'utilise
sql
et votre solution semble assez bon et utilisable à la première vue.Par Votre description, je pensais que Vous êtes à l'aide de sql. Espérons que cela fonctionne comme u besoin.
OriginalL'auteur coppettim