Hola gente, a ver si alguien puede ayudarme o explicarme en cómo funcionan las probabilidades (no lo tengo del todo claro y tengo muchas dudas) supongamos que tengo una caja con objetos y cada objeto tiene asignado la probabilidad o el porcentaje de ser elegido, un objeto tiene una probabilidad de 50% y los otros 2 tiene 25% (supongo que habrá que llenar ese 100%) ¿ cómo haría para que funcione este sistema y tenga más chances de salir el objeto con 50% de probabilidad que los otros 2 de 25% ? o ¿ cómo haría en el caso de decidirse por 1 de los 2 objetos con 25% de probabilidad ? no pretendo que me den el script hecho, sólo que me explicaran cómo funcionaría este sistema
Cita de: TorresaguCARP date=1503283768¿ cómo haría para que funcione este sistema y tenga más chances de salir el objeto con 50% de probabilidad que los otros 2 de 25% ?
Si de alguna forma le asignas esa probabilidad no es que tenes que "hacer" que salga, ya la misma probabilidad te lo impone, tenes que dejar todo a la suerte. Pero seguro se a que te referis, a hacerlo desde el codigo.
En el codigo nunca use probabilidades, ni se si podes establecer alguna destribucion o densidad de probabilidad, pero lo unico que he usado son los Random.Range que en si podria verse como una distribucion de probabilidad uniforme (si usas enteros) de [a,b] en donde todos pueden salir con igual probabilidad (ningun favorito).
Si tuvieras tres casos por ejemplo , la probabilidad de salir cada uno para un random seria de 33.33333%, ahora podes trabajarlo diciendo que
dos resultados distintos terminan en lo mismo, por ejemplo:
enum Resultados {A,B_0,B_1,C};
Resultados m_resultado;
//a lahora de calcular
m_resultado = Random.Range(0,4); //puede salir 0,1,2 o 3
switch(m_resultado)
{
case Resultados.A:
//pasa A
break;
case Resultados.B_0:
//pasa B
break;
case Resultados.B_1:
//pasa B
break;
case Resultados.C:
//pasa C
break;
}
el codigo no digo que este totalmente bien lo estoy inventando al boleo, pero la idea es esa. Ahi te queda A = 25% , C = 25%, B= 50%
@lightbug Muy bien, gracias. lo probaré.
Yo siempre lo he hecho de otra manera, es más chapuza pero más entendible.
Resultados m_resultado;
public int probabilidad; //la probabilidad que tú quieres que salga ese item
//a lahora de calcular
m_resultado = Random.Range(0,100); //puede salir del 0 al 100
void ejecutar () {
if(m_resultado <= probabilidad){ //si el resultado del random es menor o igual que la probabilidad marcada (por ejemplo tu probabilidad es 30 y salio 25)
//pasa lo que quieras
}
}
prefiero usar valores entre 0 y 1, y evaluar los rangos con una cascada de if's:
var probabilidad = Random.Range(0f, 1f);
if (probabilidad >= 0.5f) // de 50% a 100%
GanaObjeto(1);
else if (probabilidad >= 0.25f) // de 25% a 50%
GanaObjeto(2);
else // de 0% a 25%
GanaObjeto(3);
Cita de: leocub58 date=1503334109Yo siempre lo he hecho de otra manera, es más chapuza pero más entendible.
Uh nunca lo pense asi, tiene toda la logica
Cita de: Braltor date=1503343836prefiero usar valores entre 0 y 1, y evaluar los rangos con una cascada de if's:
Porque usas float's en vez de int's? para que quede visualmente mas agradable? salvo que quieras tener una probabilidad del 31.52% con el 0 a 100 no te queda.
Cita de: lightbug date=1503353417Porque usas float's en vez de int's? para que quede visualmente mas agradable? salvo que quieras tener una probabilidad del 31.52% con el 0 a 100 no te queda.
si por las fracciones, y si quieres verlo como porcentaje solo tienes que multiplicar todo por 100...
Gracias a todos por sus respuesta, me resultó útil :D me siento algo estúpido por no haberme dado cuenta de algo tan sencillo xD