Генерация случайной булевой вероятности
Я знаю только, как я могу генерировать случайное логическое значение (true/false).
Вероятность по умолчанию - 50:50
Но как я могу сгенерировать истинное ложное значение с моей собственной вероятностью?
Пусть говорят, что он возвращает true с вероятностью 40:60 или 20:80 и т.д.
Ответы
Ответ 1
Ну, одним из способов является Random.Next(100) <= 20 ? true : false
, используя целочисленное значение NextInt, чтобы заставить вашу собственную вероятность. Однако я не могу говорить об истинной "случайности" этого метода.
Более подробный пример:
Random gen = new Random();
int prob = gen.Next(100);
return prob <= 20;
Ответ 2
Вы генерируете случайное число до 100 исключений и смотрите, если он меньше заданного процента. Пример:
if(random.Next(100) < 40) {
// will be true 40% of the time
}
В более общем плане, для вероятности X/Y используйте идиому вроде:
if(random.Next(Y) < X)
Ответ 3
Предполагая, что ваша вероятность представлена как double
между 0.0 и 1.0, я бы выполнил ее более просто:
Random rand = new Random();
...
double trueProbability = 0.2;
bool result = rand.NextDouble() < trueProbability;
result
будет true
с вероятностью, заданной trueProbability
http://msdn.microsoft.com/en-us/library/system.random.nextdouble(v=vs.110).aspx
Если это не " случайным образом", вы можете взглянуть на RNGCryptoServiceProvider
:
http://msdn.microsoft.com/en-us/library/system.security.cryptography.rngcryptoserviceprovider(v=vs.110).aspx
Ответ 4
Вот метод расширения, который предоставит случайный bool с указанной вероятностью (в процентах), являющейся истинным;
public static bool NextBool(this Random r, int truePercentage = 50)
{
return r.NextDouble() < truePercentage / 100.0;
}
вы можете использовать это как
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
Ответ 5
Я думаю, это может помочь вам
Random gen = new Random();
bool result = gen.Next(100) < 50 ? true : false;
Ответ 6
Для будущих знаний:
40:60:
var random = new Random();
return random.Next(10) < 4;
20:80:
var random = new Random();
return random.Next(5) == 0
и 1:1:
var random = new Random();
return random.Next(2) == 1;
Примечание. Просто сократите вероятность до кратчайшего варианта - например: "random.Next(5) == 0" быстрее, чем "random.Next(100) <= 20
Хотя - если вероятность изменится с пользовательского ввода - тогда это будет выглядеть так:
[ModifierByChoice] bool GetProbability(int trueProbability, int falseProbability)
{
var random = new Random();
return random.Next(trueProbability, trueProbability + falseProbability) < trueProbability;
}
Ответ 7
Random gen = new Random();
var boolVal = gen.Next(0, 1)==1? true : false;