2009-04-27 10 views
1

J'ai un ensemble d'événements qui doit se produire au hasard, mais dans une fréquence prédéfinie. c'est-à-dire au cours d'événements (totalement) infinis, l'événement A aurait dû se produire 10% des fois, l'événement B aurait dû se produire 3%, et ainsi de suite ... Bien sûr, la somme totale des pourcentages de la liste d'événements ajoutera jusqu'à 100.Génération d'un ensemble d'événements aléatoires à une fréquence prédéfinie

Je veux atteindre ce par programme. Comment puis-je faire cela?

Répondre

1

description intéressante. Sans détails spécifiques qui contraignent la mise en œuvre, je ne peux proposer qu'une idée que vous pouvez modifier pour l'adapter aux choix que vous avez déjà faits à propos de votre implémentation. Si vous avez un fichier pour lequel chaque ligne contient un seul événement, construisez le fichier pour avoir 10% de lignes A, 3% de lignes B, etc. Ensuite, lorsque vous choisissez un événement, obtenez un entier généré aléatoirement pour sélectionner un numéro de ligne. fichier.

1

Vous devez élaborer un peu plus sur ce que vous voulez dire. Si vous voulez juste que les probabilités soient telles que vous les avez décrites, il suffit de choisir un nombre aléatoire compris entre 1 et 100 et de le mapper aux événements. Autrement dit, si le nombre aléatoire est compris entre 1 et 10, faites l'événement A. Si c'est 11-13, faites l'événement B, etc.

Cependant, si vous avez besoin de pour sortir exactement avec ces proportions en tout temps (pas que ce soit vraiment possible), vous devez le faire différemment. S'il vous plaît confirmer le sens que vous recherchez et je vais modifier si nécessaire.

+0

Oui, je suis conscient que les probabilités ne tomberont dans les valeurs requises que sur une période plus longue, donc je pense que cela me suffit. Je suppose que cela dépend aussi de la façon dont "random" les nombres pseudo-aléatoires générés le sont aussi. –

1

Pour chaque événement, générez un nombre aléatoire compris entre 0 et 100. Si l'événement A doit se produire dans 10% des cas, mappez les valeurs 0 à 10 sur l'événement A, et ainsi de suite.

Par exemple, pour 2 événements:

n = 0 - 10 ==> Event A 
n = 11 - 99 ==> Event B 

Si vous faites cela, vous pouvez avoir vos événements se produisent à des moments aléatoires, et si la durée de fonctionnement est assez long (et votre RNG est assez bon), les fréquences d'événements s'ajouteront au pourcentage désiré.

+0

0 - 10 entraînera l'événement A survenant 11% du temps, cela devrait être 0 - 9 –

4

Vous n'avez pas spécifié une langue, vient alors voici une pseudo-code

Vous voulez essentiellement une fonction qui fera appel à d'autres fonctions avec différentes probabilités

Function RandomEvent 

    float roll = Random() -- Random number between 0 and 1 
    if roll < 0.1 then 
     EventA 
    else if roll < 0.13 then 
     EventB 
    .... 
1
  1. Générer une séquence d'événements dans les proportions exactes que vous voulez.
  2. Pour chaque événement, générez aléatoirement un horodatage lorsque chaque événement doit être livré, dans les limites de temps.
  3. Trier par cet horodatage
  4. Parcourez la liste en fournissant chaque événement au moment approprié.
0

Choisissez un nombre aléatoire compris entre 1 et 100 inclus. Assignez à chaque événement un ensemble unique d'entiers qui représente la fréquence à laquelle il doit se produire. Si vous avez généré aléatoirement des chutes de nombres dans cette plage de nombres sélectionnée, déclenchez l'événement associé.

Dans l'exemple ci-dessus, l'événement qui devrait afficher 10% du temps vous attribuerait une plage d'entiers 10 entiers longs (1-10, 12-21, etc ...). Comment vous stockez ces rangess entiers est à vous.Comme Michael l'a dit, puisque ce sont des nombres aléatoires, il n'y a aucun moyen de garantir que cet événement se déclenche exactement 10% du temps, mais à long terme il devrait ... avoir une distribution égale de nombres aléatoires.

Questions connexes