AA, ATs vs. AA,KcKd,KcKh,KdKs,KhKs

    • Albern
      Albern
      Bronze
      Dabei seit: 26.06.2007 Beiträge: 84
      Hallo

      wenn ich die Range "AA, ATs" gegen die gleich grosse Range "AA,KcKd,KcKh,KdKs,KhKs" antreten lasse, ist für Enumerate erstere stärker und bei Monte Carlo ist die letztere Range stärker. Beide Ranges bestehen aus jeweils 10 Händen.

      Klar ist, dass hier der cardremoval eine wichtige Rolle spielt, unklar ist jedoch was der Equilator jeweils genau macht...
  • 3 Antworten
    • NablaO
      NablaO
      Bronze
      Dabei seit: 23.01.2009 Beiträge: 12
      Original von Albern
      Hallo

      wenn ich die Range "AA, ATs" gegen die gleich grosse Range "AA,KcKd,KcKh,KdKs,KhKs" antreten lasse, ist für Enumerate erstere stärker und bei Monte Carlo ist die letztere Range stärker. Beide Ranges bestehen aus jeweils 10 Händen.
      Absolut richtig.
      Das ist ein DICKER Bug im Equilator.
      Ich frage mich was der Equiltor macht. Ich habe die selbe Range mal in meine selbst geschriebenes Programm geklemmt und sowol Monte-Caro-Simulation als auch Enumerate durchlaufen lassen. Bei mir kommen auch die selben Werte für beide Methoden raus.
      Die richtigen Werte sind übrigens die, die der Equilator bei enumerate ausspuckt.
      Evtl. liegt es an einem schlechten Zufallsgenerator (das Problem hatte ich in meinem ersten Versuch die Monte-Carlo-Simulation zu implementieren), was sich aber auch auf andere MC-Simulationen auswirken müsste... und ich habe das an deinem Beispiel das erste mal bemerkt.

      Original von Albern
      Klar ist, dass hier der cardremoval eine wichtige Rolle spielt, unklar ist jedoch was der Equilator jeweils genau macht...
      was meinst Du mit cardremoval?
    • AcesWing
      AcesWing
      Bronze
      Dabei seit: 07.04.2007 Beiträge: 376
      Dasselbe auch bei Pokerstove...
    • NablaO
      NablaO
      Bronze
      Dabei seit: 23.01.2009 Beiträge: 12
      @ Programmierer vom Equilator:

      hab nun herausgefunden, was der Fehler ist:

      Ihr teilt die Random-Hände offensichtlich so aus (offensichtlich, da ich auf eure Werte komme, wenn ich in meinem Programm die Hände genauso verteile):

      Ihr wählt eine zufällige Reihenfolge aus in der die Spieler eine Hande aus ihrer Handrange erhalten sollen. Ihr ermittelt dann für jeden Spieler solange eine Hand aus seiner Handrange bis diese Hand kompatibel mit den Händen der vorangegangenen Spielern ist, bis also in der ausgewählten Hand eines Spielers keine Karte aus der Hand eines vorangeganenen Spielers vorkommt.

      Der erste hat damit eine Gleichverteilung für jede Hand seiner Handrange. Der zweite allerdings schon nicht mehr, da alle Hände wegfallen, in denen eine Karte vorkommt, die schon Spieler eins hält. Usw.

      Damit hängt die Wahrscheinlichkeitsverteilung der Hände einer Handrange von der Reihenfolge ab in der sie Spieler die Karten erhalten. Die Reihenfolge wird allerings nach Gleichverteilung ermittelt und genau da ist das Problem!!!

      Illustration am Bsp: AsAc,AhTh vs. AsAc,KsKc

      Spieler 1 und 2 erhalten gleichoft (jeweils mit Wahrscheinlichkeit 0.5) als erster eine Hand aus ihrer Handrange.
      1) Ist Spieler 1 (0.5) zuerst dran, so bekommt er (gleichverteilt) eine der folgenden Hände:
      AsAc (0.5)
      AhTh (0.5)

      1a) Spieler 1 hat AsAc erhalten
      Spieler 2 erhält dann auf jeden Fall
      KsKc (1)
      -> match-up in diesem Fall: AsAc vs KsKc
      Wahrscheinlichkeit dieses Falls: 0.5*0.5*1

      1b) Spieler 1 hat AhTh erhalten
      Spieler 2 erhält dann (gleichverteilt) eine Hand aus:
      AsAc (0.5)
      -> match-up in diesem Fall: AhTh vs AsAc
      Wahrscheinlichkeit dieses Falls: 0.5*0.5*0.5
      KsKc (0.5)
      -> match-up in diesem Fall: AhTh vs KsKc
      Wahrscheinlichkeit dieses Falls: 0.5*0.5*0.5

      2) Ist Spieler 2 (0.5) ist zuerst dran, so bekommt er (gleichverteilt) eine der folgenden Hände:
      AsAc (0.5)
      KsKc (0.5)

      2a) Spieler 2 hat AsAc erhalten
      Spieler 1 erhält dann auf jeden Fall
      AhTh (1)
      -> match-up in diesem Fall: AhTh vs AsAc
      Wahrscheinlichkeit dieses Falls: 0.5*0.5*1

      2b) Spieler 2 hat KsKc erhalten
      Spieler 1 erhält dann (gleichverteilt) eine Hand aus:
      AsAc (0.5)
      -> match-up in diesem Fall: AsAc vs KsKc
      Wahrscheinlichkeit dieses Falls: 0.5*0.5*0.5
      AhTh (0.5)
      -> match-up in diesem Fall: AhTh vs KsKc
      Wahrscheinlichkeit dieses Falls: 0.5*0.5*0.5

      Damit ergibt sich folgende Gesamtwahrscheinlichkeitsverteilung aller mgl. Match-ups:
      AsAc vs KsKc : 0.5*0.5*1 + 0.5*0.5*0.5 = 0.25 + 0.125 = 0.375
      AhTh vs AsAc : 0.5*0.5*0.5 + 0.5*0.5*1 = 0.125 +0.25 = 0.375
      AhTh vs KsKc : 0.5*0.5*0.5 + 0.5*0.5*0.5 = 0.25

      Es müsste aber jedes Match-up gleichwahrscheinlich sein.

      Eine Lösung, die ich (und wohl auch Pokerstove) verwendet ist folgende:
      Wähle für jeden Spieler (unabhängig von den Vorgängern) eine Hand aus der Handrange. Falls mind. eine Karte doppelt verteilt wurde, wähle für alle Spieler neue Hände, usw. bis keine Karte doppelt verteilt ist.

      Dies drückt die Geschwindigkeit bei vielen Spielern, da dann die Wahrscheinlichkeit einer Doppeltverteilung von Karten recht hoch ist.