Poker-Algorithmus

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Poker-Algorithmus

    ich habe das wochende mit einem eingeklemmten nerv verbrigen müssen, und hab vor lauter langeweile ein pokerspiel in javascript angefangen, wo ein spieler gegen "den computer" antritt. jetzt stehe ich vor folgendem problem.

    "der computer" zieht fünf karten und muss nun auswählen, welche er davon behalten will. leider habe ich absolut keinen plan wie ich das mache, ohne mit zigtausend schleifen zu arbeiten. gibt es da irgendeine matrix, mit der man eine kleine ki aufbauen kann?

    im moment werkel ich hier mit einem literal-objekt herum, das ungefär so aufgebaut ist.
    PHP-Code:
    var poker =
      {
       ... 
        
    cards :
        {
          
    'karo' :
          {
            
    0'2'1'3'2'4'3'5'4'6'5'7'6'8'7'9'8'10'9'b'10'd'11'k'12'a' 
          
    },
          
    'herz' :
          {
            
    0'2'1'3'2'4'3'5'4'6'5'7'6'8'7'9'8'10'9'b'10'd'11'k'12'a' 
          
    },
          
    'pik' :
          {
            
    0'2'1'3'2'4'3'5'4'6'5'7'6'8'7'9'8'10'9'b'10'd'11'k'12'a' 
          
    },
          
    'kreuz' :
          {
            
    0'2'1'3'2'4'3'5'4'6'5'7'6'8'7'9'8'10'9'b'10'd'11'k'12'a' 
          
    }
        },
        
        
    level :
        {
          
    0'karo'1'herz'2'pik'3'kreuz'
        
    },
        
        
    rank :
        {
          
    0'2'1'3'2'4'3'5'4'6'5'7'6'8'7'9'8'10'9'b'10'd'11'k'12'a' 
        
    },
        ...
      } 
    peter
    Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
    Meine Seite

  • #2
    Ist nicht schwer ... Also du musst einfach auf mögliche Kombinationen testen, d.h. folgende Test musst durchgeführt werden:

    - pair
    - two pairs
    - three of a kind
    - straight
    - flush
    - fullhouse
    - four of a kind
    - straight flush
    - royal flush

    Teste von unten nach oben dann weisst du was der Computer hat, anschliessend kannst du entscheiden, was getauscht werden muss.

    Die Tests kannst du in einzelne Function unterbringen und geschickt kombinieren, z.B. Fullhouse = 3 of a kind + pair, etc.

    Kommentar


    • #3
      Zitat von asp2php Beitrag anzeigen
      Ist nicht schwer ...
      hab ich anfangs auch gedacht.
      Zitat von asp2php Beitrag anzeigen
      Also du musst einfach auf mögliche Kombinationen testen, d.h. folgende Test musst durchgeführt werden:
      ...
      Teste von unten nach oben dann weisst du was der Computer hat, anschliessend kannst du entscheiden, was getauscht werden muss.

      Die Tests kannst du in einzelne Function unterbringen und geschickt kombinieren, z.B. Fullhouse = 3 of a kind + pair, etc.
      das ist mir auch schon klar. mir geht es nur um das wie. bisher wusel ich mich mit zig schleifen durch die karten. aber das muss doch besser zu lösen sein. gibt es hier keinen mathematiker?

      peter
      Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
      Meine Seite

      Kommentar


      • #4
        so einfach ist das normale poker ansich nicht.
        Es kann ja auch sein, dass du kein paar hast, aber 3x Herz und zwar 4 6 7 ... ...dann tauschst du ansich nur die anderen beiden, in einer gewissen Hoffnung.
        Gleiches bei Highcards.

        mfg

        Kommentar


        • #5
          Zitat von Blackgreetz Beitrag anzeigen
          so einfach ist das normale poker ansich nicht.
          Es kann ja auch sein, dass du kein paar hast, aber 3x Herz und zwar 4 6 7 ... ...dann tauschst du ansich nur die anderen beiden, in einer gewissen Hoffnung.
          Gleiches bei Highcards.

          mfg
          weiß ich alles. aber wie kann ich das in einen algorithmus mit einer entsprechenden matrix packen? das ist mein problem. ich will einfach nicht mit zig funktionen und schleifen arbeiten. der code soll so einfach wie möglich sein. und da hapert es bei mir.

          peter

          ps. vielleicht rede ich auch blödsinn, bin im moment ziemlich vollgepumpt mit schmerztabletten
          Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
          Meine Seite

          Kommentar


          • #6
            Ich kenne die Poker-Regeln leider nicht. Hab kurz bei Wikipedia geschaut und jetzt weiß ich zumindest, dass du dir da einen harten Brocken vorgenommen hast.
            Pokern ist anscheinend nur sehr schwer algorithmisch umzusetzen, da man das Blatt des Gegners nicht kennt. Man weiß eigentlich nur, welche Karten er auf keinen Fall haben kann, nämlich die eigenen. Die Güte Blattes des Gegners muss man anhand seines Setzverhaltens abschätzen. Diese psychologische Komponente ist nicht berechenbar. Da muss man heuristisch rangehen.

            Du willst jetzt erstmal die absolute* Güte deines eigenen Blattes ermitteln. Wie gesagt kenne ich die Regeln nicht. Aber es gibt knapp 2,6 Mio. Hände (52 über 5). Man kann die nicht alle vorab bewerten und speichern. Vor allem nicht in JS.

            Deshalb war mein erster Gedanke "Graph"! Ein vollständiger Graph, jede Karte als Knoten vertreten, gewichtete Kanten ...
            Wäre das eine Möglichkeit? Ich weiß halt nicht, ob man überhaupt Kantengewichte bestimmen kann und wie viele Pfadschritte durchschnittlich zu berechnen wären.

            Ich habe etwa folgendes im Kopf:
            Finde eine Karte aus deiner Hand im Graphen.
            Bilde jeden möglichen 5er-Pfad ausgehend von diesem Knoten. Damit das halbwegs performant geht, würde ich die Pfade sukzessiv verlängern und in jedem Schritt schauen, ob ich den neuen Knoten als Karte auf der Hand habe. Ausgehend davon und dem Gewicht der Kante wird die Güte des Pfades angepasst. Unterhalb einer bestimmten Güte wird ein Pfad nicht weiter verfolgt.

            Wenn die Regeln das hergeben, muss man deutlich weniger als die 2,6 Mio. möglichen Pfade berechnen. Durch geschickte Auswahl des Startknotens lässt sich eventuell auch noch was einsparen.

            Kommentar


            • #7
              Let me google that for you

              Zitat von Kropff Beitrag anzeigen
              ps. vielleicht rede ich auch blödsinn, bin im moment ziemlich vollgepumpt mit schmerztabletten
              Wir wissen alle schon, dass du drogen abhängig bist

              Kommentar


              • #8
                Zitat von onemorenerd Beitrag anzeigen
                Man weiß eigentlich nur, welche Karten er auf keinen Fall haben kann, nämlich die eigenen. Die Güte Blattes des Gegners muss man anhand seines Setzverhaltens abschätzen. Diese psychologische Komponente ist nicht berechenbar. Da muss man heuristisch rangehen.
                ach so toll soll das garnicht werden. der "computer" muss nur sein eigenes blatt beurteilen.
                Zitat von asp2php Beitrag anzeigen
                Let me google that for you
                Wir wissen alle schon, dass du drogen abhängig bist
                1. danke für den hinweis, schau ich mir morgen mal an
                2. komm du mir noch mal zwischen die finger

                peter
                Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
                Meine Seite

                Kommentar


                • #9
                  Meine erste Antwort war auch an asp2php gerichtet siehe "so einfach ist das nicht".

                  Du könntest ansonsten auch ein Punktesystem machen. >10 bekommt dann 3 punkte, unter 10 1 .. zusammenhängende +2 .. welche mit nur 1 karte dazwischen +1 usw. (farben.,..,..)
                  Und dann kannst du gucken, welche Kartenkombi die am meisten Punkte hat, die anderen tauschst du. Überprüfen kann man das Ganze aber mit Wenigen schleifen, die einfach immer nur eine karte zu einer anderen hinzunimmt etc und dann die Punkte dafür ausrechnet. Die höchste Kombi gewinnt und der Rest fliegt.

                  Bin mir nun nicht sicher, ob das System so funktioniert, aber viel mir gerade ein^^

                  mfg

                  Kommentar


                  • #10
                    Nennt sich hutchinson und gibt es somit schon. Hat aber wie jedes System seine Macken -man kann erfolgreiches Pokerspiel eben kaum berechnen.
                    [FONT="Helvetica"]twitter.com/unset[/FONT]

                    Shitstorm Podcast – Wöchentliches Auskotzen

                    Kommentar


                    • #11
                      Zitat von unset Beitrag anzeigen
                      Nennt sich hutchinson und gibt es somit schon.
                      Danke. Wusste zwar, dass ich öfter mal von dem Prinzip gelesen habe, aber kannte keinen Namen.


                      Ich denke, dass diese Methode da doch nen guter Ansatz für ist.
                      Zuletzt geändert von Blackgreetz; 11.05.2009, 02:24.

                      Kommentar


                      • #12
                        Hier gibt es noch ein paar Wahrscheinlichkeiten, die dir eventuell bei Kartenbewertungen helfen könnten: Texas Hold'em Poker Statistiken Startblätter Flops Wahrscheinlichkeit holdem-poker.ch
                        Simploo CMS - das einfache Webseiten-Bearbeitungsprogramm

                        Kommentar


                        • #13
                          Hier noch eine Poker-Engine in PHP: PHP Poker Engine - Official Website

                          Vielleicht kannst du da was rausziehen.
                          Simploo CMS - das einfache Webseiten-Bearbeitungsprogramm

                          Kommentar


                          • #14
                            danke euch allen. hätte ich geahnt, wie aufwendig das ist, hätte ich es bleiben lassen. sch***ß langeweile

                            peter
                            Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
                            Meine Seite

                            Kommentar


                            • #15
                              Ach komm schon. Die 5 Karten durchzulaufen ist doch nichts ... 5 von 52 Karten sind doch bloß nur 2.598.296 Kombinationen ... streng dich an

                              Kommentar

                              Lädt...
                              X