Saltar al foro
Avisos
Vaciar todo

[Cerrado] ¿Quieres ganar 50$?

59 Mensajes
14 Usuarios
0 Reacciones
3,261 Visualizaciones
DyLaK
Registrado: 29.12.2007
Elite Grinder

Daré 50$ al primero que resuelva este problema (correctamente), siempre y cuando no lo haya resuelto yo antes, lo cual lo notificaré en este hilo.

Necesito calcular la equity de un rango vs otro rango.

Dispongo de:
-Equity de cualquier mano vs otra mano (AKs vs 22,JTo vs 32s, 33 vs 55... etc.)
-Probabilidad de que salga una mano (AA=0.45%, AKo=0.9%, 54s=0.3%...etc.)
-Probabilidad de que salga una mano, teniendo yo otra
-EDITO: tambien de equity mano vs rango

Si se usan otros cálculos que no sean obvios indicar cuales son.

Si está en un lenguaje de programación como C,Java,C++,C#, o pseudocódigo, daré 60$.


58 respuestas
marcianoskate
Registrado: 22.08.2007
Oldschool Grinder

interesante :D ... a ver si me le mido a codificarlo :D .... que freak :(


BEASTJQK
Registrado: 04.04.2008
PokerStrategist

No hace eso el EQUILATOR y gratis??

jejeje

Dejandonos de Bromas, esta interesante tu peticion, pero te cuesta $200...

Dejandonos nuevamente de bromas...

Es concurso o te sirve o te servira en realidad, si lo descubres y te sirve me explicas como funciona y te doy el 50% de lo que ofreces!!....

lol...

Que businessman que soy!! :D :D:D


DyLaK Autor del tema
DyLaK
Registrado: 29.12.2007
Elite Grinder

original de BEASTJQK
No hace eso el EQUILATOR y gratis??

jejeje

Dejandonos de Bromas, esta interesante tu peticion, pero te cuesta $200...

Dejandonos nuevamente de bromas...

Es concurso o te sirve o te servira en realidad, si lo descubres y te sirve me explicas como funciona y te doy el 50% de lo que ofreces!!....

lol...

Que businessman que soy!! :D :D:D

lol xD

Si, le voy a dar una utilidad, no doy 50$ porque me aburra tanto xD. Estoy haciendo un programa para hacer cierto cálculos jugando shortstack.


cholopink
Registrado: 04.08.2008
PokerStrategist

UN BOT!!!!!


elacs
Registrado: 11.10.2008
PokerStrategist

tienes futuro como publicista

auguro muchas visitas a este hilo, con ese titulo jeje


Dem1983
Registrado: 18.09.2008
PokerStrategist

rango1 Array de manos;
rango2 Array de manos;

equityTotal = 0;

for ( i=0; i<rango1.size();i++ ){

mano1 = rango1.getHand(i);

equityParcial = 0;

for ( j=0; j<rango2.size();j++ ){

mano2 = rango2.getHand(j);

equityParcial =+ mano1.equityContra(mano2);

}

equityTotal =+ equityParcial / (j+1);

}

equityTotal = equityTotal /( i+1);


DyLaK Autor del tema
DyLaK
Registrado: 29.12.2007
Elite Grinder

original de Dem1983
rango1 Array de manos;
rango2 Array de manos;

equityTotal = 0;

for ( i=0; i<rango1.size();i++ ){

mano1 = rango1.getHand(i);

equityParcial = 0;

for ( j=0; j<rango2.size();j++ ){

mano2 = rango2.getHand(j);

equityParcial =+ mano1.equityContra(mano2);

}

equityTotal =+ equityParcial / (j+1);

}

equityTotal = equityTotal /( i+1);

Bueno, primer intento, me alegro de que la gente se vaya animando xD.

Pero sin llegar a comprobarlo, te aseguro que no funciona, porque no tienes en cuenta la probabilidad de que salga una mano, entre otras cosas.
En el rango A2o,A2s sale muchas más veces A2o que A2s, y eso no lo tienes en cuenta.


Dem1983
Registrado: 18.09.2008
PokerStrategist

Hola!
En realidad si se tiene en cuenta!
Estoy tomando cada mano es decir cada vez que hago rango1.getHand(i); me devuelve una sola mano, no un conjunto... Es decir, por ejemplo, AsKh o AhKs, con lo cual si se esta teniendo en cuenta...

Necesitarias tenerlo para cada "conjunto de manos"?


DyLaK Autor del tema
DyLaK
Registrado: 29.12.2007
Elite Grinder

original de Dem1983
Hola!
En realidad si se tiene en cuenta!
Estoy tomando cada mano es decir cada vez que hago rango1.getHand(i); me devuelve una sola mano, no un conjunto... Es decir, por ejemplo, AsKh o AhKs, con lo cual si se esta teniendo en cuenta...

Necesitarias tenerlo para cada "conjunto de manos"?

Am ok. De todas formas si lo haces así creo que tampoco funciona. Porque podrías estar enfrentando dos manos iguales.


mornaner
Registrado: 19.09.2008
PokerStrategist

Para solucionar eso se puede hacer algo como esto, que creo que ajustaría más el resultado, porque tiene en cuenta la probabilidad de que el rival tenga esa mano teniendo en cuenta la tuya:

-------------------------------------------------------------------------------------

rango1 Array de manos;
rango2 Array de manos;

equityTotal = 0;

for ( i=0; i<rango1.size();i++ ){

mano1 = rango1.getHand(i);

equityParcial = 0;

for ( j=0; j<rango2.size();j++ ){

mano2 = rango2.getHand(j);

equityParcial =+ mano1.equityContra(mano2) * probMano(mano1, mano2);

}

equityTotal =+ equityParcial / (j+1);

}

equityTotal = equityTotal /( i+1);

-------------------------------------------------------------------------------------

Si no con un if (mano1 /= mano2) antes de hacer la multiplicación bastaría.


felixjet
Registrado: 26.01.2009
PokerStrategist

en cierto foro ya he visto que te dan la solucion xD para evitar el problema de AA vs AA simplemente comprueba en primera mano que la segunda dada no es lo mismo, y si lo fuera restarlas para el total de las probabilidades. y en la segunda mano lo mismo.

algo asi no? xD


No compito pero doy una ayuda que te puede solucionar esto y mucho más. Mirate las siguientes librerias para C y python: pokersource

Incluso me encontré con que algunos de los progrmas ejemplo son los que usan ciertas paginas eb que calculan equitys


Dem1983
Registrado: 18.09.2008
PokerStrategist

original de DyLaK

original de Dem1983
Hola!
En realidad si se tiene en cuenta!
Estoy tomando cada mano es decir cada vez que hago rango1.getHand(i); me devuelve una sola mano, no un conjunto... Es decir, por ejemplo, AsKh o AhKs, con lo cual si se esta teniendo en cuenta...

Necesitarias tenerlo para cada "conjunto de manos"?

Am ok. De todas formas si lo haces así creo que tampoco funciona. Porque podrías estar enfrentando dos manos iguales.

Eso no influye en el equity total dado que es un 50% y 50%.

Saludos!


Galo7070
Registrado: 28.12.2007
PokerStrategist

DyLak, cuando veas esto metete en el MSN, que te paso por mail el modelo de cálculo, es decir la "idea" para resolverlo que se me ocurrió a mi.

Luego de la programación te arreglas tu.


Sargot
Registrado: 01.01.2009
PokerStrategist

rango1 Array de manos;
rango2 Array de manos;

equityTotal = 0;
probTotal = 0;

for ( i = 0; i < rango1.size(); i++ ){

mano = rango1.getHand(i);

prob = mano.probabilidad();
probTotal += prob;
rango2 = NuevoRango(rango2, mano); //Calcula las cartas del rango 2, conviertiendo el 0% las que incluyen cartas que tienes tú y aumentando el porcentaje de las demás, con lo que pones que conoces

equityTotal += mano.equityContra(rango2) * prob;

}

equityTotal /= probTotal;

En NuevoRango se cambia la probabilidad de cada mano del rango 2 dependiendo de tu mano. Por lo que, en lo que dices tener de equity mano vs rango, espero que tengas en cuenta la probabilidad que salga cada carta del rango.


BEASTJQK
Registrado: 04.04.2008
PokerStrategist

LOL....

Esto parece que tiene buen futuro... Sigo con la propuesta de poner el 50% del premio si al final solo hay que hacer unos click's para que funcione!! :D


DyLaK Autor del tema
DyLaK
Registrado: 29.12.2007
Elite Grinder

original de Sargot
rango1 Array de manos;
rango2 Array de manos;

equityTotal = 0;
probTotal = 0;

for ( i = 0; i < rango1.size(); i++ ){

mano = rango1.getHand(i);

prob = mano.probabilidad();
probTotal += prob;
rango2 = NuevoRango(rango2, mano); //Calcula las cartas del rango 2, conviertiendo el 0% las que incluyen cartas que tienes tú y aumentando el porcentaje de las demás, con lo que pones que conoces

equityTotal += mano.equityContra(rango2) * prob;

}

equityTotal /= probTotal;

En NuevoRango se cambia la probabilidad de cada mano del rango 2 dependiendo de tu mano. Por lo que, en lo que dices tener de equity mano vs rango, espero que tengas en cuenta la probabilidad que salga cada carta del rango.

mmmm no lo acabo de entender, puedes explicarlo un poco mejor? lo has probado? (aunque sea para un rango como AA,A5o vs AA,A2s)


Sargot
Registrado: 01.01.2009
PokerStrategist

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).


DyLaK Autor del tema
DyLaK
Registrado: 29.12.2007
Elite Grinder

La equity de cada mano la tengo en este formato:

AKo vs AKs
22 vs 33
JTo vs 53o

Es decir, es siempre suited, of, o pareja, pero no dispongo de la probabilidad de manos concretas.