Comment créer une probabilité d'un pourcentage donné?
Je suis en train de créer un pourcentage basé sur la probabilité pour un jeu. E. g. si un élément a 45% de chance d'un coup critique, qui doit dire qu'il est de 45 à 100 hits être critique.
Tout d'abord, j'ai essayé d'utiliser une solution simple:
R = new Random();
int C = R.Next(1, 101);
if (C <= ProbabilityPercent) DoSomething()
Mais dans 100 itérations avec un chances de, par exemple, 48%, il donne 40-52 sur 100.
En va de même pour 49, 50, 51.
Donc, il n'y a pas de différence entre ces "pourcents".
La question est de savoir comment définir un pourcentage, par exemple, de 50, et obtenir strictement de 50 à 100 aléatoire?
C'est une chose très importante de la probabilité d'un objet rare à trouver l'occasion d'augmenter leur chance de trouver un article. Donc le buff de 1% serait sensinble, parce que maintenant il ne l'est pas.
Désolé pour mon mauvais anglais.
Assurez-vous de comprendre le caractère aléatoire.
Cela signifie que si un avez 50% de chance d'obtenir un "1" dans une séquence binaire de 10 bits, qu'il serait 0, 1, 0, 0, 0, 1, 1, 0, 1, 1 par exemple. Mais encore - 5 "1"de l'. Aléatoire occurencies, stricte comte.
Puis c'est pas vraiment aléatoire. C'est de l'aléatoire à partir de l'intérieur d'un groupe, pas vraiment aléatoire. Aléatoire comme un jeu de carte, pas de hasard, comme un lancer de dés.
en outre; sur de la fenêtre de 100 rôles doit-elle être mesurée? si c'est un glissement de la fenêtre, alors la seule solution valable est de continuer de répéter la même chose 100 résultats extrêmement non-aléatoire.
OriginalL'auteur maelstrom | 2012-11-12
Vous devez vous connecter pour publier un commentaire.
Vous avez besoin de penser seulement en termes de distribution uniforme à répétition, des rouleaux.
Vous ne pouvez pas regarder plus de 100 rouleaux, parce que forcer céder exactement 45 ne serait pas aléatoire. Habituellement, de tels rouleaux doivent présenter un "manque de mémoire". Par exemple, si vous lancez un dé à la recherche pour un 6, vous avez un 1-en-6 chance. Si vous roulez 5 fois, et de ne pas obtenir un six - ensuite: la probabilité d'obtenir un 6 sur le rouleau suivant n'est pas 1. Il est encore de 1 à 6. En tant que tel, vous pouvez seulement regarder comment il répondu à vos attentes lors amortis sur une différence statistiquement grand nombre d'événements... de 100 000 à dire.
En gros: votre code actuel est très bien. Si l'utilisateur connaît (parce qu'ils ont touché à 55 reprises sans critique) que les 45 prochains hits doit être critique, alors il n'est plus aléatoire et qu'ils peuvent déjouer le système.
Aussi; 45% de chance de coup critique semble un peu élevé ;p
Je pensais que c'était juste le "awesome saint chaos de la mort marteau de maximum carnage"
merci beaucoup, j'ai obtenu votre point. Peut-être que j'ai pris un peu de sérieux sur un concept de Diablo II Magique Trouver. Je pensais que c'est beaucoup plus compliqué que de mon code.
DII MF est encore plus compliquée en raison de ses rendements décroissants. 100% MF ne garantit pas seulement de trouver de bleu et de meilleures armes. 🙂
Si vous pouvez m'en dire plus sur ce système, il serait d'autant plus apprécié. Je comprends que les "rendements décroissants" signifie la différence entre moindre des valeurs est beaucoup plus qu'entre les plus grands. Mais comment puis-je mettre en œuvre un tel système?
OriginalL'auteur Marc Gravell
Non, ce n'est pas vrai. Vous missunderstud complètement la notion de Probabilité. Vous ne voulez pas un "basés sur un pourcentage de probabilité", vous voulez un "basés sur un pourcentage de la distribution aléatoire de 100 échantillons".
Ce que vous avez besoin est un "sac d'événements", 45 "crytical" et 55 "non crytical". Une fois que vous choisissez un événement dans le sac, vous n'avez que le reste des événements de choisir la prochaine fois.
Vous pouvez le modèle de cette façon:
OriginalL'auteur Yván Ecarri
Depuis que je ne suis pas un expert en C#, je vais utiliser une fonction C++ pour la facilité, mais encore applicable pour n'importe quelle langue.
rand() - générateur de nombres aléatoires.
J'ai utilisé cette méthode pour créer de très grandes filtré grilles et elle donne d'excellents résultats pour des valeurs de précision.
OriginalL'auteur lambda
La chose est, avec
Random
vous pourriez vouloir initialiser cette classe qu'une seule fois.C'est parce que
Random
utilise le système de temps est comme une semence pour la génération de nombres aléatoires.Si votre boucle est très rapide, il peut arriver que plusieurs Aléatoire-les instances sont à l'aide de la même semence, et ainsi générer les mêmes numéros.
Vérifier les nombres générés si vous pensez que ce qui se passe.
En plus de cela, inhérente à l'Aléatoire, c'est qu'il ne vous donnera pas des résultats exacts.
Cela signifie que même avec une chance de 50/50, il pourrait arriver qu'une séquence de 100 "pile" ou "face" donne "chefs" 100 fois.
La seule chose que vous pouvez faire est de créer l'Aléatoire de l'instance une fois et de vivre avec les résultats; sinon, vous ne devriez pas utiliser Aléatoire.
Ok, il a dit "itérations", alors j'ai pensé qu'il pourrait avoir utilisé une boucle, donc j'ai voulu le mettre en garde sur les effets secondaires possibles de l'initialisation Aléatoire dans une boucle.
J'ai utilisé une boucle pour un objectif de test. Et j'ai initialisé Aléatoire avant de boucle.
OriginalL'auteur Davio