Noticias

¡RECUERDA QUE SI ERES UN NUEVO USUARIO, DEBES PRESENTARTE PARA PODER PUBLICAR MENSAJES! | TENEMOS CANAL OFICIAL DE TELEGRAM: t.me/unity3dspain

Ayuda para programar Probabilidades o Porcentaje

Iniciado por TorresaguCARP, Agosto 21, 2017, 04:49:28 AM

Tema anterior - Siguiente tema
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%


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

Etiquetas: