<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          texas_algorithm德州撲克算法

          聯(lián)合創(chuàng)作 · 2023-09-30 16:09

          德州撲克算法

          用于德州撲克的算法,包括以下功能

          • 查表算法

          • 評估算法

          使用

          <dependency>
              <groupId>com.github.esrrhs</groupId>
              <artifactId>texas_algorithm</artifactId>
              <version>1.0.7</version>
          </dependency>
          // 獲取2張手牌5張公牌的最大的5張牌
          TexasAlgorithmUtil.getMax("黑2,黑3", "方2,方A,黑7,黑5,黑6");
          // 獲取7張牌的大小,用于比牌
          int win = TexasAlgorithmUtil.getWinPosition("方4,方A,黑2,黑A,黑3,黑5,黑6");
          // 獲取2張手牌4張公牌的勝率,用于評估
          float p = TexasAlgorithmUtil.getHandProbability("方3,方A", "黑2,黑4,黑5,黑K");

          測試玩玩

          • 解壓texas_algorithm.rar到當(dāng)前文件夾

          • 運(yùn)行TestUtil.Main

          生成表玩玩

          • 解壓texas_algorithm.rar到當(dāng)前文件夾

          • 運(yùn)行TexasAlgorithmUtil.Main,需要添加vm參數(shù)-Xmx8000m

          查表算法

          查表算法,給定任意7張牌(5張和6張也支持),查表給出5張最大牌的牌面以及大小、勝率、類型。查表方法很簡單,下面講一下生成表的算法。

          算法實(shí)現(xiàn)

          窮舉C(52, 7)的組合

          52張牌里面選7張,一共有1億多種組合,對7張牌進(jìn)行編碼變成long類型,得到一個1億長度的數(shù)組。

          • 給定6張和5張,也是同理生成

          多線程快速排序

          對這1億長度的數(shù)組進(jìn)行從小到大排序,排序依據(jù)就是7選5后的大小。使用多線程快速排序,在8核的機(jī)器上,排完大概需要10小時。

          • 如果把最終的查表算法替換原始的比牌算法,速度可以縮短到2小時。

          結(jié)果輸出

          數(shù)組已經(jīng)排好序,現(xiàn)在按照順序輸出到一個文件,內(nèi)容有key、大小順序、max牌的值、max牌的類型、可閱讀的牌面信息。最后文件大小差不多12G。

          • 注意到大小其實(shí)是階梯狀的,就是有很多牌是一樣大,但是先后順序不同,所以在輸出的時候,要再做一下比牌處理。

          結(jié)果去色

          1億條數(shù)據(jù)如果直接用,內(nèi)存會爆,使用去色算法縮減規(guī)模。分為有花色和無花色兩個文件,最后文件總大小18M。實(shí)際加載到內(nèi)存占用幾十M。

          • 對于同花的類型,比如同花、同花順、皇家同花順,7張牌的分布肯定是比如紅紅紅紅紅梅黑,就是至少5張牌是同花色的,于是可以轉(zhuǎn)變花色成為方方方方方黑黑,節(jié)省key值

          • 對于非同花的類型,花色毫無作用,那么只需要把花色全去掉,變成方方方方方方方即可

          查詢方法

          給定7張牌,先去同花表里查,如果沒有就去非同花表里查,兩個都有就誰大選誰。

          評估算法

          評估算法,給定2張手牌,0-4張公牌,大致估算出這手牌在1v1情況下的勝率。

          算法實(shí)現(xiàn)

          勝率計算

          注意到前面已經(jīng)生成了7張牌的大小順序了,那么現(xiàn)在給定N張牌(2<=N<=6),只需要去7張牌的集合里遍歷,看包含這N張牌的7張牌的勝率,做一下平均值就是平均勝率。順便還會生出最大勝率最小勝率。5個輸出文件最終大小是2G。

          結(jié)果去色

          這個N張牌的勝率表同樣存在重復(fù)的,采用類似的方法去掉花色,分為兩張表,查詢先查詢原始表,沒有再去查詢?nèi)サ艋ㄉ谋怼Mㄟ^這種方法,6個文件可以縮減到300M。實(shí)際加載到內(nèi)存差不多200M。

          公牌查詢

          把公牌代入上面計算的勝率表中,查詢得到公牌的勝率情況,也就是說對方用這個公牌去組成7張牌的平均勝率記為P1,以及最大和最小勝率P1Max和P1Min。

          手牌公牌查詢

          把我的手牌和公牌加起來,代入上面的勝率表中,查詢得到一個平均勝率P2。注意這時候P2是不準(zhǔn)確的,因?yàn)槭峙票恢貜?fù)使用了。這里存在誤差。

          勝率預(yù)估

          P1、P2都已經(jīng)拿到,根據(jù)P1和P2的關(guān)系用P1Max和P1Min做下差值即可得出勝率。這里假定分布是均勻的所以也會有誤差。

          預(yù)估誤差

          如果采用最原始的方法窮舉所有組合,即固定手牌和固定公牌,窮舉剩下公牌和對方手牌,并計算勝率,目前2張手牌4張公牌需要20多天才能計算完,并且數(shù)據(jù)量已經(jīng)超標(biāo)。通過和實(shí)際勝率比較,誤差大部分在0.1以內(nèi),比如實(shí)際勝率0.5,預(yù)估0.6。

          瀏覽 15
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          編輯 分享
          舉報
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          編輯 分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  www.黄色视频 | 二区三区四区视频 | 日本级婬乱片A片AAA毛片A | 青娱乐亚洲领先 | 五月天啪啪网 |