¿Quieres ganar 50$?

    • DyLaK
      DyLaK
      Bronce
      Registro: 12-29-2007 Artículos: 1.760
      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
      marcianoskate
      Bronce
      Registro: 08-22-2007 Artículos: 8.649
      interesante :D ... a ver si me le mido a codificarlo :D .... que freak :(
    • BEASTJQK
      BEASTJQK
      Bronce
      Registro: 04-04-2008 Artículos: 1.856
      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
      DyLaK
      Bronce
      Registro: 12-29-2007 Artículos: 1.760
      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
      cholopink
      Bronce
      Registro: 08-03-2008 Artículos: 400
      UN BOT!!!!!
    • elacs
      elacs
      Bronce
      Registro: 10-11-2008 Artículos: 1.141
      tienes futuro como publicista

      auguro muchas visitas a este hilo, con ese titulo jeje
    • Dem1983
      Dem1983
      Bronce
      Registro: 09-18-2008 Artículos: 710
      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
      DyLaK
      Bronce
      Registro: 12-29-2007 Artículos: 1.760
      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
      Dem1983
      Bronce
      Registro: 09-18-2008 Artículos: 710
      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
      DyLaK
      Bronce
      Registro: 12-29-2007 Artículos: 1.760
      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
      mornaner
      Bronce
      Registro: 09-19-2008 Artículos: 334
      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
      felixjet
      Bronce
      Registro: 01-26-2009 Artículos: 896
      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
    • Naharro
      Naharro
      Bronce
      Registro: 08-09-2008 Artículos: 583
      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
      Dem1983
      Bronce
      Registro: 09-18-2008 Artículos: 710
      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
      Galo7070
      Bronce
      Registro: 12-28-2007 Artículos: 7.601
      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
      Sargot
      Bronce
      Registro: 12-31-2008 Artículos: 255
      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
      BEASTJQK
      Bronce
      Registro: 04-04-2008 Artículos: 1.856
      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
      DyLaK
      Bronce
      Registro: 12-29-2007 Artículos: 1.760
      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
      Sargot
      Bronce
      Registro: 12-31-2008 Artículos: 255
      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
      DyLaK
      Bronce
      Registro: 12-29-2007 Artículos: 1.760
      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.