• noppapokeri

    Esillä 15 viestiä, 61 - 75 (kaikkiaan 98)
    • Julkaisija
      Viestit
    • #468007
      xci
      Jäsen

      36*36*6^5 on kahvipapuja laskennallisesti. Kirjoitin kerran viiden kortin käsien vertailijan, joka pystyi vertaamaan 1M heads up -kättä sekunnissa. Noppapokerissa käden vahvuuden tarkistaminen on sinänsä laskennallisesti jopa helpompaa, eli veikkaan että alle 100 sekunnin päästään.

      EDIT: epäselvä viittaus

      #468013
      laitsi
      Osallistuja

      shoot the moonsi on kova peli 🙂 olis kiva jos siihenki olis vastaavanlaista taulukkoa, että kun eine 11 vs 12 iha niin flippei taida ollakkaa ? 🙂

      #468041
      hauturi
      Osallistuja

      @thunder wrote:

      @hauturi wrote:

      Tää on itse asiassa ollut jo pari tuntia työn alla, mutta väliin on tullut muuta. Voi mennä jopa huomiseen.

      No hemmetti, ehdin jo väsäämään nopeasti koodin.

      Tosin toimivuus ei mitenkään 100% varmaa, joten ehkä hyväkin olla pari versiota.

      Edit: http://www.aijaa.com/v.php?i=3615939.jpg taulukko todennäköisyyksistä.

      En ehtinyt jatkamaan omaani illalla, koitan tehdä nyt aamulla valmiiksi niin pääsee vertailemaan.

      #468130

      @thunder wrote:

      @hauturi wrote:

      Tää on itse asiassa ollut jo pari tuntia työn alla, mutta väliin on tullut muuta. Voi mennä jopa huomiseen.

      No hemmetti, ehdin jo väsäämään nopeasti koodin.

      Tosin toimivuus ei mitenkään 100% varmaa, joten ehkä hyväkin olla pari versiota.

      Edit: http://www.aijaa.com/v.php?i=3615939.jpg taulukko todennäköisyyksistä.

      Kiitos!

      Hieno taulukko. Tossa on ilmeisesti kompensoitu noi splittioutit pois ja luvut on puhtaasti vahvuuksia toista kättä vastaan. Olis vielä hyvä jos olis listattuna myös noitten splittien todennäköisyydet.

      #468247
      thunder
      Jäsen

      @Savinaama-Liimatasku wrote:

      Olis vielä hyvä jos olis listattuna myös noitten splittien todennäköisyydet.

      http://www.aijaa.com/v.php?i=3618585.jpg

      Olisi toki vielä hyvä, että nuo olisi yhdistettynä samaan taulukkoon ja näkyisi tyyliin tn1 – split – tn2. Mutta tuo oli nopeampi toteuttaa&pitää nyt hauturin tulokset odotella ensin.

      #468277
      hauturi
      Osallistuja

      @thunder wrote:

      @Savinaama-Liimatasku wrote:

      Olis vielä hyvä jos olis listattuna myös noitten splittien todennäköisyydet.

      http://www.aijaa.com/v.php?i=3618585.jpg

      Olisi toki vielä hyvä, että nuo olisi yhdistettynä samaan taulukkoon ja näkyisi tyyliin tn1 – split – tn2. Mutta tuo oli nopeampi toteuttaa&pitää nyt hauturin tulokset odotella ensin.

      Tässä vertailukelpoinen thunderin ensimmäisen taulukon kanssa (splitit mukana); pieniä eroja on. En osaa tässä vaiheessa yhtään osaa sanoa kumpi on oikein; haluaako joku ryhtyä erotuomariksi?

      Edit: yksi bugi korjattu, uudet tulokset:

      Edt2: toinen korjaus:

      Edit3: nyt on sama

      Teen kohta toisen taulukon splitit erikseen.

      Edit: tässä thunderin taulukko, niin on helpompi vertailla:

      #468290
      hauturi
      Osallistuja

      Tässä ohjelmani tuottamat split-todennäköisyydet:

      Edit: näistäkin bugikorjattu versio:

      Edit2: toinen korjaus:

      Edit3: nyt on sama

      ja vertailun vuoksi thunderin:

      Eli selviä eroja näissäkin. Pitää koittaa illalla laskea joku tapaus auki, niin saa selville kumpi (jos kumpikaan) on oikein.

      #468302
      thunder
      Jäsen

      Sulla on esim. 46 vs 55 split todennäköisyys 0.001.

      Tuo tuntuisi liian pieneltä. Sillä tn, että pöytään tulee 23456 on jo:

      (5*4*3*2*1)/(6^5)=0.0154320988

      Tosin en kyllä löisi kovin suurta vetoa omienkaan tulosten oikeudellisuudesta.

      #468308
      hauturi
      Osallistuja

      @xci wrote:

      36*36*6^5 on kahvipapuja laskennallisesti. Kirjoitin kerran viiden kortin käsien vertailijan, joka pystyi vertaamaan 1M heads up -kättä sekunnissa. Noppapokerissa käden vahvuuden tarkistaminen on sinänsä laskennallisesti jopa helpompaa, eli veikkaan että alle 100 sekunnin päästään.

      Ilman erityistä nopeusoptimointia oma koodini sylkäisee nuo taulukot 1,813 sekunnissa. Nopeus ei luultavasti muutu, vaikka koodista varmaan joku bugikin vielä löytyy.

      #468316
      keely
      Osallistuja

      Pari maistiaista heron Dicestovesta:

      66 vs 44,55,66,56 preflop


      Board:
      Player #1 [66]
      won: 487493, split: 283338, lost:229169
      EQUITY: 62.90%
      Player #2 [44,55,66,56]
      won: 229169, split: 283338, lost:487493
      EQUITY: 37.07%

      Kärkitripsit+overi vs. nutsirange flopilla


      Board: 255
      Player #1 [56]
      won: 268519, split: 120431, lost:611050
      EQUITY: 32.87%
      Player #2 [22,25,55]
      won: 611050, split: 120431, lost:268519
      EQUITY: 67.13%
      #468323
      MooZes
      Osallistuja

      @keely wrote:

      Pari maistiaista heron Dicestovesta:

      66 vs 44,55,66,56 preflop


      Board:
      Player #1 [66]
      won: 487493, split: 283338, lost:229169
      EQUITY: 62.90%
      Player #2 [44,55,66,56]
      won: 229169, split: 283338, lost:487493
      EQUITY: 37.07%

      Kärkitripsit+overi vs. nutsirange flopilla


      Board: 255
      Player #1 [56]
      won: 268519, split: 120431, lost:611050
      EQUITY: 32.87%
      Player #2 [22,25,55]
      won: 611050, split: 120431, lost:268519
      EQUITY: 67.13%

      Level?

      #468324
      keely
      Osallistuja

      @MooZes wrote:

      Level?

      Trolli?

      #468326
      thunder
      Jäsen

      @keely wrote:


      Board:
      Player #1 [66]
      won: 487493, split: 283338, lost:229169
      EQUITY: 62.90%
      Player #2 [44,55,66,56]
      won: 229169, split: 283338, lost:487493
      EQUITY: 37.07%

      Mikset laske noita tarkasti? Jos nyt oikein noista ymmärsin, niin arvot 1M floppia ja lasket niistä todennäköisyydet? Erilaisten pöytäkorttien määrä on kuitenkin vain sen 6^5, joten ihan mahdollista laskea kaikki kombinaatiot läpi suoraan.

      #468327
      keely
      Osallistuja

      @thunder wrote:

      Mikset laske noita tarkasti? Jos nyt oikein noista ymmärsin, niin arvot 1M floppia ja lasket niistä todennäköisyydet? Erilaisten pöytäkorttien määrä on kuitenkin vain sen 6^5, joten ihan mahdollista laskea kaikki mahdollisuudet läpi suoraan.

      Koska halusin valmista, bugitonta ja vähällä vaivalla.

      #468538
      hauturi
      Osallistuja

      Ilmeisesti viimeisetkin bugit on löydetty, kiitokset thunderille avusta.

      Lähtö”käsien” keskinäiset vahvuudet:

      ja vertailun vuoksi thunderin alkuperäinen taulukko:

      Splittiin päätymisen todennäköisyys:

      ja jälleen vertailun vuoksi thunderin alkuperäinen:

      Kuten huomataan, aika samalta näyttää. Thunderin matlab-taidot olivat siis meikäläisen koodaustaitoja paljon paremmat.

      Kiinnostuneille vielä koodi tarvittaessa jatkokehitettäväksi tai muuten hyödynnettäväksi:

      package noppapokeri;

      import java.util.Arrays;

      public class Main {
      public static void main(String[] args) {

      Object results[][] = new Object[21][21];
      Object splits[][] = new Object[21][21];
      int row = 0;
      int me[] = new int[2];
      int you[] = new int[2];
      for (me[0] = 1; me[0] <= 6; me[0]++)
      for (me[1] = me[0]; me[1] <= 6; me[1]++) {
      int col = 0;
      for (you[0] = 1; you[0] <= 6; you[0]++)
      for (you[1] = you[0]; you[1] <= 6; you[1]++) {
      int countTotal = 0;
      int countIWin = 0;
      int countSplit = 0;
      int countYouWin = 0;
      int common[] = new int[5];
      for (common[0] = 1; common[0] <= 6; common[0]++)
      for (common[1] = 1; common[1] <= 6; common[1]++)
      for (common[2] = 1; common[2] <= 6; common[2]++)
      for (common[3] = 1; common[3] <= 6; common[3]++)
      for (common[4] = 1; common[4] <= 6; common[4]++) {
      countTotal++;
      int result = findBetter(me, you, common);
      if (result < 0)
      countIWin++;
      else if (result > 0)
      countYouWin++;
      else
      countSplit++;
      }
      results[row][col] = new Double(((double)countIWin + (double)countSplit/2)/(double)countTotal);
      results[col][row] = new Double(((double)countYouWin + (double)countSplit/2)/(double)countTotal);
      splits[row][col] = new Double((double)countSplit/(double)countTotal);
      splits[col][row] = new Double((double)countSplit/(double)countTotal);
      col++;
      }
      row++;
      }
      for (int i=0; i<21; i++) {
      for (int j=0; j<21; j++)
      System.out.print(results[j] + ",");
      System.out.println();
      }
      System.out.println();
      for (int i=0; i<21; i++) {
      for (int j=0; j<21; j++)
      System.out.print(splits
      [j] + ",");
      System.out.println();
      }
      }

      static int findBetter (int me[], int you[], int common[]) {
      if (me[0] == you[0] && me[1] == you[1])
      return 0;
      int myAll[] = {me[0], me[1], common[0], common[1], common[2], common[3], common[4]};
      int yourAll[] = {you[0], you[1], common[0], common[1], common[2], common[3], common[4]};
      int myHandValue = getHandValue(myAll);
      int yourHandValue = getHandValue(yourAll);
      return yourHandValue - myHandValue;
      }

      static int getHandValue(int dice[]) {
      int SET_COEFF = 1;
      int STRAIGHT_COEFF = 2;
      int BOAT_COEFF = 3;
      int QUADS_COEFF = 4;
      int YATZY_COEFF = 5;
      int MAX_VAL = 260;

      Arrays.sort(dice);

      int numConsecutive = 1;
      int maxConsecutive = 1;
      int nextConsecutive = 1;
      int valueConsecutive = 0;
      int valueNext = 0;
      int prevDice = 0;

      for (int i = 1; i < 7; i++) {
      if (dice
      == dice) {
      numConsecutive++;
      if (numConsecutive >= maxConsecutive) {
      if (prevDice != dice
      ) {
      nextConsecutive = maxConsecutive;
      valueNext = valueConsecutive;
      prevDice = dice
      ;
      }
      maxConsecutive = numConsecutive;
      valueConsecutive = dice
      ;
      } else if (numConsecutive >= nextConsecutive) {
      nextConsecutive = numConsecutive;
      valueNext = dice
      ;
      }
      }
      else
      numConsecutive = 1;
      }
      if (maxConsecutive > 4)
      return MAX_VAL * YATZY_COEFF + valueConsecutive;
      if (maxConsecutive == 4) {
      int kicker = dice[6];
      if (valueConsecutive == kicker)
      kicker = dice[2];
      return MAX_VAL * QUADS_COEFF + valueConsecutive * 6 + kicker;
      }
      if (maxConsecutive == 3 && nextConsecutive >= 2) {
      return MAX_VAL * BOAT_COEFF + valueConsecutive * 6 + valueNext;
      }
      if ((maxConsecutive == 2 && nextConsecutive < 2)
      || ((Arrays.binarySearch(dice, 2) >= 0
      && Arrays.binarySearch(dice, 3) >= 0
      && Arrays.binarySearch(dice, 4) >= 0
      && Arrays.binarySearch(dice, 5) >= 0)
      && (Arrays.binarySearch(dice, 1) >= 0
      || Arrays.binarySearch(dice, 6) >= 0)))
      if (Arrays.binarySearch(dice, 6) >= 0)
      return MAX_VAL * STRAIGHT_COEFF + 1;
      else
      return MAX_VAL * STRAIGHT_COEFF;
      if (maxConsecutive == 3) {
      int betterKicker = dice[6];
      int worseKicker = dice[5];
      if (valueConsecutive == betterKicker) {
      betterKicker = dice[2];
      worseKicker = dice[1];
      } else if (valueNext == worseKicker)
      worseKicker = dice[1];
      return MAX_VAL * SET_COEFF + valueConsecutive * 6 * 6 + betterKicker * 6 + worseKicker;
      }
      if (maxConsecutive == 2 && nextConsecutive == 2) {
      int kicker = dice[6];
      if (kicker == valueConsecutive) {
      kicker = dice[4];
      if (kicker == valueNext)
      kicker = dice[2];
      }
      return valueConsecutive * 6 * 6 + valueNext * 6 + kicker;
      }
      throw new RuntimeException("Something has gone horribly wrong!");
      }
      }
    Esillä 15 viestiä, 61 - 75 (kaikkiaan 98)
    • Sinun täytyy olla kirjautunut vastataksesi tähän aiheeseen.