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

 

前言:
  炸金花這款遊戲, 從技術的角度來講, 比德州差了不少. 因此他的AI模型也相對簡單一些. 本文從EV(指望收益)的角度, 來嘗試構建一個簡單的炸金花AI.html

 

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

 

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增量, 咱們以下定義:spa

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

  注: EV(下次輪到本身行動前)是個預估值, 由於不肯定本次操做後, 其餘玩家後續的操做, 這邊作個平均值, 認爲後續玩家全都跟注(check).
  這樣delta(EV) > 0, 則AI更傾向於check/raise, 若delta(EV) < 0, 則AI更傾向於提早結束戰鬥, 會選擇PK或者pack.設計

  這樣AI決策的僞代碼基本以下:htm

	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到最大, 把別人嚇走, 致使最終的指望收益不高.blog

 

模糊策略的引入:
  任何基於規則的AI, 同等條件下其行動策略是固定的. 爲了避免被別人利用規則漏洞, 須要引入必定的模糊策略.
  在該策略下, AI的行爲決策, 有必定的隨機模糊性, 能夠按8/2原則, 進行具體的執行.
  好比手拿差牌, 能夠主動進行raise, 起到嚇唬的做用.遊戲

 

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

 

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

相關文章
相關標籤/搜索