Générer Une Probabilité Booléenne Aléatoire

je sais seulement comment je peux générer une valeur booléenne aléatoire (true / false). La probabilité par défaut est de 50: 50

mais comment puis-je générer une vraie fausse valeur avec ma propre probabilité? Disons qu'il retourne vrai, avec une probabilité de 40:60 ou 20:80 etc...

22
demandé sur Hamid Pourjam 2014-08-13 03:44:31

7 réponses

eh Bien, une façon est Random.Next(100) <= 20 ? true : false, en utilisant la valeur entière de NextInt pour forcer votre propre probabilité. Je ne peux pas parler du vrai "hasard" de cette méthode cependant.

exemple Plus détaillé:

Random gen = new Random();
int prob = gen.Next(100);
return prob <= 20;
33
répondu E. Moffat 2016-12-22 14:19:45

Vous générer un nombre aléatoire jusqu'à 100 exclusif et voir si c'est moins de un pour cent. Exemple:

if(random.Next(100) < 40) {
  // will be true 40% of the time
}

plus généralement, pour une probabilité de X/Y, utilisez un idiome comme:

if(random.Next(Y) < X)
15
répondu Peter O. 2015-12-01 10:27:00

Voici une méthode d'extension qui fournira un bool aléatoire avec une probabilité spécifiée (en pourcentage) d'être vrai;

public static bool NextBool(this Random r, int truePercentage = 50)
{
    return r.NextDouble() < truePercentage / 100.0;
}

vous pouvez l'utiliser comme

Random r = new Random();
r.NextBool(); // returns true or false with equal probability
r.NextBool(20); // 20% chance to be true;
r.NextBool(100); // always return true
r.NextBool(0); // always return false
8
répondu Hamid Pourjam 2016-02-25 08:27:09

en Supposant que votre probabilité est représentée par double entre 0.0 et 1.0, Je l'implémenterais plus simplement comme ceci:

Random rand = new Random();
...
double trueProbability = 0.2;
bool result = rand.NextDouble() < trueProbability;

result sera true avec la probabilité donnée par trueProbability

http://msdn.microsoft.com/en-us/library/system.random.nextdouble(v=vs. 110).aspx

Si ce n'est pas "suffisamment aléatoire", vous pouvez prendre un coup d'oeil à RNGCryptoServiceProvider:

http://msdn.microsoft.com/en-us/library/system.security.cryptography.rngcryptoserviceprovider(v=vs. 110).aspx

7
répondu Mike 2014-08-13 00:12:33

je pense qu'il peut aider à vous

Random gen = new Random();
bool result = gen.Next(100) < 50 ? true : false;
1
répondu Ivan Suen 2015-07-09 03:59:08

Pour l'avenir de la connaissance:

40:60:

var random = new Random();
return random.Next(10) < 4;

20:80 serait:

var random = new Random();
return random.Next(5) == 0

et 1:1 serait:

var random = new Random();
return random.Next(2) == 1;

Note: il suffit de raccourcir la probabilité à la variante la plus courte - comme par exemple: "aléatoire.Next (5) == 0" est plus rapide que "aléatoire.Suivant (100) < = 20 Cependant-si la probabilité change à partir de l'entrée de l'utilisateur-alors il semblerait que:

[ModifierByChoice] bool GetProbability(int trueProbability, int falseProbability)
{
var random = new Random();
return random.Next(trueProbability, trueProbability + falseProbability) < trueProbability;
}
0
répondu AssassinLV 2017-04-03 16:29:59
Random gen = new Random();
var boolVal = gen.Next(0, 1)==1? true : false;
-2
répondu alltej 2016-05-02 20:13:09