Sólo sé cómo puedo generar un aleatoria valor booleano (true/false).
La probabilidad de incumplimiento es de 50:50

Pero ¿cómo puedo generar un verdadero valor falso con mi propia probabilidad?
Digamos que devuelve true con una probabilidad de 40:60 o 20:80, etc…

  • Generar un número aleatorio entre 1 y 100 y comparar su distribución?
  • Lo que has hecho hasta ahora?
InformationsquelleAutor Dark Side | 2014-08-12

7 Comentarios

  1. 43

    Bueno, una forma es Random.Next(100) <= 20 ? true : false, utilizando el valor entero de NextInt a la fuerza de su propia probabilidad. No puedo hablar por la «aleatoriedad» de este método, aunque.

    Ejemplo más detallado:

    Random gen = new Random();
    int prob = gen.Next(100);
    return prob <= 20;
    • Me atrevería a suponer que la previsibilidad de estos valores booleanos es tan aleatorio como Random.Next() sería. No sé si es el mismo ya que es randomness aunque.
    • Para mí, en ASP.Net el trabajo de la sintaxis resultó un poco más elaborado: myRandomBool = new Random().Next(100) <= 50 ? true : false
  2. 17

    Generar un número aleatorio de hasta 100 exclusiva y a ver si es menos de un porcentaje dado. Ejemplo:

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

    Más generalmente, para una probabilidad de X/Y, el uso de un lenguaje como:

    if(random.Next(Y) < X)
  3. 10

    Aquí es un método de extensión que proporcionará al azar bool con la probabilidad especificada (en porcentaje) de ser cierto;

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

    usted puede utilizar esto como

    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
  4. 8

    Asumiendo que la probabilidad se representa como double entre 0.0 y 1.0, me gustaría poner en práctica lo más simple como esto:

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

    result será true con la probabilidad dada por trueProbability

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

    Si esto no es «lo suficientemente aleatorios«, usted puede tomar un vistazo a RNGCryptoServiceProvider:

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

    • para ser plenamente representativa de la trueProbability no deberíamos hacer un <= en lugar de < prueba?
    • No, puesto que NextDouble() devuelve un valor entre 0 (inclusive) y 1 (exclusivo). Si extrapolamos a 100% de probabilidad de, < 1 es suficiente.
    • También, el 0% nunca debe ser cierto. La única manera de cubrir ese caso es comprobar que < 0.
  5. 3

    Creo que puede ayudar a

    Random gen = new Random();
    bool result = gen.Next(100) < 50 ? true : false;
    • La expresión gen.Next(100) < 50 es expresión booleana. No es necesario utilizar el operador condicional aquí.
  6. 0

    Para conocimiento de las futuras:

    40:60 sería:

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

    20:80 sería:

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

    y 1:1 sería:

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

    Nota: Sólo acortar la probabilidad de que el menor variación, como por ejemplo: «el azar.Siguiente(5) == 0» es más rápido, a continuación, «el azar.Siguiente(100) <= 20
    Si la probabilidad de cambios a partir de la entrada del usuario – a continuación, se vería como:

    [ModifierByChoice] bool GetProbability(int trueProbability, int falseProbability)
    {
    var random = new Random();
    return random.Next(trueProbability, trueProbability + falseProbability) < trueProbability;
    }
    • Mediante la reducción de las fracciones, los números escritos en el código de repente se convierten en mágicos números. A menos que usted puede y realmente probar que existe una significativa desaceleración mediante el uso de grandes cantidades, el consejo de la reducción de las fracciones es contraproducente. Además se podrá confundir el principio de programadores que a veces se utiliza el < operador y a veces la ==, una vez incluso comparando a cero y la otra vez la comparación de un valor distinto de cero.
  7. -3
    Random gen = new Random();
    var boolVal = gen.Next(0, 1)==1? true : false;
    • La pregunta era: But how can I generate a true false value with my own probability? Let's say it returns true with a probability of 40:60 or 20:80 etc.... Esta respuesta es errónea.

Dejar respuesta

Please enter your comment!
Please enter your name here