炸金花游戲(3)--基於EV(期望收益)的簡單AI模型


 

前言:
  炸金花這款游戲, 從技術的角度來說, 比德州差了很多. 所以他的AI模型也相對簡單一些. 本文從EV(期望收益)的角度, 來嘗試構建一個簡單的炸金花AI.

 

相關文章:
  德州撲克AI--Programming Poker AI(譯)
  系列文章說來慚愧, 之前一直叫嚷着寫德州AI, 不過可惜懶癌晚期, 一直沒去實踐, T_T. 相比而言, 炸金花簡單很多, 也更偏重於運氣和所謂的心理對抗.
  系列文章:
  1. 炸金花游戲的模型設計和牌力評估 
  2. 炸金花游戲的勝率預估 
  3. 基於EV(期望收益)的簡單AI模型
  4. 炸金花AI基准測試評估
  5. 動態收斂預期勝率的一種思路

 

EV模型:
  在EV模型中, 有如下幾個概念, 手牌勝率p, 總底池pool, 玩家自身的累計總下注bet.

EV = p * (pool - bet) - (1 - p) * bet
   = p * pool + (2p - 1) * bet

  當EV>0時, 則表明玩家傾向於盈利, 若EV<0, 則表明玩家更傾向於輸, 此時最優策略是pack, 及時止損. 但是EV是結果偏向, 並不是動作決策偏向的. 因此我們引入delta(EV), 即EV增量的概念, 來幫助AI進行具體的行動(check/raise/pk/pack/see)決策.
  假定n為當前沒棄牌的玩家總數, d為當前玩家的本輪下注籌碼, d'因玩家是否see而引入的一個d的變化值.
  對於EV增量, 我們如下定義:

delta(EV) = EV(下次輪到自己行動前) - EV(本次行動前) = p * ∑ d' + (2p - 1) * d

  注: EV(下次輪到自己行動前)是個預估值, 因為不確定本次操作后, 其他玩家后續的操作, 這邊做個平均值, 認為后續玩家全都跟注(check).
  這樣delta(EV) > 0, 則AI更傾向於check/raise, 若delta(EV) < 0, 則AI更傾向於提前結束戰斗, 會選擇PK或者pack.

  這樣AI決策的偽代碼基本如下:

	if EV(當前輪) > 0:
		# 選擇check/raise后, 最大的delta(EV)的action
		delta(EV) = max(delta(EV) <- check, raise)
		if delta(EV) > 0:
			do check/raise
		if delta(EV) <= 0:
			do pk/pack
	else if EV(當前輪) <= 0:
		do pack/pk

  

模型修正:
  原先的EV模型是有陷阱的, 比如當前手牌勝率超過50%時, 此時EV>0, delta(EV)>0, AI會一直決策check/raise, 一旦遇到鋼板會輸的很慘. 究其原因是模型勝率是平均勝率, 其並沒有根據對手的行為而動態調整范圍.
  解決方案, 即根據每一輪次, 根據玩家的行為(raise/pk結果), 逐漸提升剩下玩家的手牌強度, 重新計算勝率P, 這樣勝率P是遞減的, 這樣就逃出了此前的模型陷阱.
  至於勝率P如何重新計算, 這就是一個開放性的問題, 總之提升對手手牌的范圍, 而不是加入勝率衰減因子, 這個方向是對, 就看這個度如何把握了.
  在EV模型中, 還需要引入隱含收益, 即在手牌非常強大的前提下, 需要埋伏, 不能直接raise到最大, 把別人嚇走, 導致最終的期望收益不高.

 

模糊策略的引入:
  任何基於規則的AI, 同等條件下其行動策略是固定的. 為了不被別人利用規則漏洞, 需要引入一定的模糊策略.
  在該策略下, AI的行為決策, 有一定的隨機模糊性, 可以按8/2原則, 進行具體的執行.
  比如手拿差牌, 可以主動進行raise, 起到嚇唬的作用.

 

更多的工作:
  1. 玩家用戶畫像的建立
  2. see執行最佳時機
  3. 隱含收益和利益最大化策略
  4. 策略平衡和心理戰引入

 

總結:
  本文只是給出炸金花的一種AI實現思想, 是基於EV(期望收益)模型的. 下文將給出具體的代碼, 以及面對基准測試集, 其模型能達到的效果.
  對待博彩游戲, 希望大家娛樂心態行娛樂之事, 切勿賭博, ^_^.

  

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM