original de DyLaKmmmm no lo acabo de entender, puedes explicarlo un poco mejor? lo has probado? (aunque sea para un rango como AA,A5o vs AA,A2s)
No, no lo probé, simplemente plasmé mi idea en pseudocódigo basándome en la de Dem.
Intentaré explicarlo algo mejor, ahora sin pseudocódigo.
Tenemos dos rangos de manos.
Empezamos con la equity 0, y la calcularemos con le equity de cada enfrentamiento.
Recorremos todo nuestro rango cogiendo así cada mano posible y vamos cogiendo mano por mano.
Vemos la probabilidad de que salga esa mano.
Calculo la probabilidad total, ya que lo utilizaré para dividirlo en el equity total (esto es donde más dudo, lo que intento hacer aquí es, que si jugase todas las manos, tengo un 0.45% que me salga AA, calculo la equity contra un rango, y cuando calcule el total, lo dividio en entre 100% ed jugar todas las manos, pero como nuestro rango es otro, enotnces lo divido entre el número de manos que jugamos en porcentajes).
Calculo el nuevo rango del villano, para esto, le paso su rango y le paso mi mano. Con esto sólo quiero calcular las probabilidades de cada mano (que dices tenerlo en el primer post ), así, las manos que requieran de cartas que tengo yo, obtendrán un 0% y no afectarán al cálculo de la equity total.
Calculo la equity de mi mano contra su nuevo rango y esto lo multiplico por la probabilidad de que salga nuestra mano.
Cuando haga lo mismo con todas las manos, la equity total la dividio entre el total de probabilidad de nuestro rango (si jugamos todas, el 100% si jugamos sólo AA el 0.45 si jugamos AA y KK 0.9....)
Con esto, el pseudocódigo creo que se entiende bien.
Ahora intentaré hacerlo un poco más simple y más comprensible.
rango1 Array de manos;
rango2 Array de manos;
equityTotal = 0;
probTotal = 0;
for ( i = 0; i < rango1.size(); i++ ){
mano1 = rango1.getHand(i);
prob = mano1.probabilidad();
probTotal += prob;
equityTotal += equityContra(rango2, mano1) * prob;
}
equityTotal /= probTotal;
y la función equityContra :
equity = 0;
probTotal = 0;
for (i = 0; i < rango2; i++){
mano2 = rango2.getHand(i);
prob = NuevaProbabilidad(mano, mano2); //Calculo la nueva probabilidad que tiene su mano, dependiendo de la mia, si tengo AhAc y su mano es AhKh, entonces la probabilidad es 0.
probTotal += prob;
equity += mano1.contra(mano2) * prob;
}
equity /= probTotal;
return equity;
El programa no sé como lo tendrás a lo que a rangos se refiere, pero mi idea es tener todas las combinaciones posibles (es decir, AKo = AhKc Akhs Ahkd AdKh ...) para que, si yo tengo el As de un palo, se quiten las manos del rango que necesite dicha carta (es decir, que en vez de hacer 12 AKo había 9 AKo si yo tengo A2s por ejemplo).