Tengo una enumeración de la que me gustaría seleccionar aleatoriamente un valor, pero no realmente aleatorio. Me gustaría que algunos de los valores tengan menos probabilidades de ser seleccionados hasta ahora. Esto es lo que tengo hasta ahora ...Valor aleatorio de enum con probabilidad
private enum Type{
TYPE_A, TYPE_B, TYPE_C, TYPE_D, TYPE_E;
private static final List<Type> VALUES =
Collections.unmodifiableList(Arrays.asList(values()));
private static final int SIZE = VALUES.size();
private static final Random RANDOM = new Random();
public static Type randomType() {
return VALUES.get(RANDOM.nextInt(SIZE));
}
}
¿Existe una manera eficiente de asignar probabilidades a cada uno de estos valores?
Código encuentra desde here
Creo que has entendido mal. La idea es: sumas todos los pesos. Ahora imagine la regla con max = valor calculado. Ahora apunte cada peso sobre esta regla, por lo que primero será (de acuerdo con mi ejemplo en respuesta) de 0 a 10, del segundo 10 al 11, del 11 al 16 y así sucesivamente. Ahora señale con el dedo el lugar al azar de nuestra regla y vea en qué segmento apunta. Respuesta editada –
Eso es realmente lo que terminé haciendo. ¡Gracias! – tgrosinger
BTW puede mejorar el rendimiento si precalcula los límites de los tipos en el constructor, pero en cinco tipos no es real. –