博弈中的對抗搜索問題

博弈(Game)

  • 多智能體環境下,智能體之間存在合作和競爭關係;
  • 數學領域中的“博弈”: 把任何多智能體環境看成是一種博弈遊戲,如果其中每個智能體對其它智能體的影響是“顯著的”,這些影響可以是合作或竟爭。
  • 人工智能領域中的“博弈”: 確定性的、有完整信息的,輪流行動的,兩個遊戲者的零和遊戲
  • 博弈的抽象本性成爲AI研究者感興趣的對象

 AI中研究的博弈,即如何根據當前的棋局,選擇對自己最有利的一步棋 ? 

博弈的特點:

        雙方的智能活動,任何一方都不能單獨控制博弈過程,而是由雙方輪流實施其控制對策的過程。

博弈問題的表示:

        用博弈樹來表示,它是一種特殊的與或圖。節點代表博弈的格局(即棋局),相當於狀態空間中的狀態,反映了博弈的信息。 與節點、或節點隔層交替出現。

        爲什麼與節點、或節點隔層交替出現?

        假設博弈雙方爲:MAXMIN

        在博弈過程中,規則是雙方輪流走步。在博弈樹中,相當於博弈雙方輪流擴展其所屬節點。

        從MAX方的角度來看:所有MIN方節點都是與節點                                                                   

        理由: 因爲MIN方必定選擇最不利於MAX方的方式來擴展節點,只要MIN方節點的子節點中有一個對MAX方不利,則該節點就對MAX方不利,故爲“與節點”。

         從MAX方的角度來看:所有屬於MAX方的節點都是“或節點

        理由: 因爲擴展MAX方節點時,MAX方可選擇擴展最有利於自己的節點,只要可擴展的子節點中有一個對已有利, 則該節點就對已有利。

        在博弈樹中,先行一方的初始狀態對應樹的根節點,而任何一方獲勝的最終格局爲目標狀態,對應於樹的終葉節點(可解節點或本原問題)。但是,從MAX的角度出發,所有使MAX獲勝的狀態格局都是本原問題,是可解節點,而使MIN獲勝的狀態格局是不可解節點。

博弈的例子:

  •  一字棋
  • 跳棋
  • 中國象棋
  • 圍棋
  • 五子棋

博弈中的優化決策(Optimal decisions)

  • 問題的表述:兩名遊戲者MAX和MIN,MAX先行,然後兩人輪流出招,直到遊戲結束。
  • 在遊戲的最後,給優勝者獎分,給失敗者罰分。
  • 該問題可以形式化成爲下面的搜索問題: 

初始狀態:包括棋盤局面和確定該哪個遊戲者出招;

後繼函數:返回(move, state)的一個列表;(move是合法招數,state是招數move所導致的狀態)

終止測試:判斷遊戲是否結束;結束的狀態稱爲終止狀態

目標函數:對終止狀態給出一個數值。 

例:井子棋遊戲 

例:Grundy博弈-分配物品問題        

如果有一堆數目爲N的錢幣,由兩位選手輪流進行分配,要求每個選手每次把其中某一堆分成數目不等的兩小堆,直至有一選手不能將錢幣分成不等的兩堆爲止,則判定這位選手爲輸家。

用數字序列加上一個說明來表示一個狀態:      

                                                                         (3, 2, 1, 1, MAX)

數字序列:表示不同堆中錢幣的個數

說明:表示下一步由誰來分,即取MAX或MIN

現在取N=7的簡單情況,並由MIN先分

對於比較複雜的博弈問題,只能模擬人的思維“向前看幾步”,然後作出決策,選擇最有利自己的一步。即只能給出幾層走法,然後按照一定的估算辦法,決定走一好招

決策過程

  1. 將當前狀態作爲初始狀態,建立一個深度爲h的搜索樹,h(horizon,稱爲視野)是在有限時間內能夠考慮到的最大深度
  2. 對所有葉節點狀態進行評價
  3. 由葉節點回推至根節點,選擇其中最好的一個動作決策(假設對手MIN的應對總是給MAX帶來最壞的結果

->極大極小算法 Minimax algorithm

評價函數  Evaluation Function

  • 函數 e: 狀態 s -> 數值 e(s)
  • e(s) 即爲估計狀態s對於MAX來說“好”的程度的啓發式信息
  • e(s) > 0 意味着狀態s對於MAX來說是有利的 (數值越大越有利)
  • e(s) < 0意味着狀態s對於MIN來說是有利的
  • e(s) = 0 意味着狀態s是中立的

例: 井字棋

e(s) =    對MAX開放的行,列,對角線數量  -  對MIN開放的行,列,對角線數量

值的回推

深度爲2的搜索樹

MiniMax反推過程

  • 假設評價值越高,對Max越有利;評價值越低,對Min越有利;
  • 反推過程中,對每一個節點賦予一個值,這個值是在對方不犯錯誤的情況下,自己能夠獲得的最大受益。

MINIMAX-VALUE(n) = \left\{\begin{matrix} UTILITY(n), if\ n\ is\ a\ terminal\ node \\ max_{s\in Successors(n)}MINIMAX-VALUE(s), if\ n\ is\ a\ MAX\ node \\ min_{s\in Successors(n)}MINIMAX-VALUE(s), if\ n\ is\ a\ MIN\ node \end{matrix}\right.

MiniMax決策過程

  • 在Max步中,Max選擇能夠得到MiniMax值最大的狀態的行動;
  • 在Min步中,Min選擇能夠得到MiniMax值最小的狀態的行動。
  • 這樣便完成了博弈中的決策過程。

反推與決策過程示例

極大極小算法

  1. 從當前狀態(MAX走棋)開始,擴展博弈樹到深度h (視野: 因爲需要在時間限制內做出決策)
  2. 對博弈樹的每一個葉節點計算評價函數值
  3. 由葉節點開始至根節點計算回推值: (a)MAX節點取得其後繼的最大評價值 (b)MIN節點取得其後繼的最小評價值
  4. 選擇能夠得到最大回推值的走棋
僞代碼:
function MINIMAX-DECISION(state) returns an action
  inputs: state, current state in game
  return the a in Actions(state) maximizing MIN-VALUE(RESULT(a,state))

function MAX-VALUE(state) returns a utility value
  if TERMINAL-TEST(state) then return UTILITY(state)
  v <- -INF
  for a,s in SUCCESSORS(state) do v<-MAX(v,MIN-VALUE(s))
  return v

function MIN-VALUE(state) returns a utility value
  if TERMINAL-TEST(state) then return UTILITY(state)
  v <- INF
  for a,s in SUCCESSORS(state) do v<-MIN(v,MAX-VALUE(s))
  return v  

博弈過程 (MAX):

到達最終狀態前重複以下步驟

  1. 採用極大極小方法選擇一步走棋
  2. 按1的決策走棋
  3. 觀察MIN的應對走棋

注意:每一回合建造深度爲h的博弈樹僅爲選擇當前的一步走棋,下一個回合重複所有的步驟(上一回閤中深度爲h-2的子樹可以拿來重複使用)

α-β 剪枝(α-β pruning)

極大極小搜索過程由兩個完全分離的步驟組成:

  1. 用深度優先算法生成一棵博弈搜索樹。
  2. 估計值的倒推計算。

缺點:這種分離使得搜索的效率比較低。

還能做得更好嗎?

是的 !  能夠做得更好 !

例子:

改進:在博弈樹生成過程中同時計算端節點的估計值及倒推值,以減少搜索的次數,這就是α-β過程的思想,也稱爲α-β剪枝法。

α-β 剪枝:

  1. 剪枝:剪掉那些不影響最後決策的分支。
  2. 一般原則:考慮某節點n,如果遊戲者在n的上層的任何節點有一個更好的選擇m,那麼再計算的MiniMax值就與n無關,即n可以被剪裁掉。

α-β 剪枝的思想:如果m比n好,我們就不會走到n。

例:

α-β

  • α=到目前爲止我們在路徑上的任意選擇點發現的MAX的最佳選擇
  • β=到目前爲止我們在路徑上的任意選擇點發現的MIN的最佳選擇

α-β 剪枝:

  • 當某個節點的值比目前MAX的α值或MIN的β值更差時,裁掉該節點剩下的分支。
  • 剪枝不影響最後得到的結果。
  • α-β剪枝的效率很大程度上取決於檢查後繼的順序
僞代碼:
function ALPHA-BETA-DECISION(state) returns an action
  inputs: state, current state in game
  return the a in ACTIONS(state) maximizing MIN-VALUE(RESULT(a,state))
function MAX-VALUE(state,alpha,beta) returns a utility value
  inputs: state, current state in game
		  alpha, the value of the best alternative for MAX along the path to state
		  beta, the value of the best alternative for MIN along the path to state
  if TERMINAL-TEST(state) then return UTILITY(state)
  v <- -INF
  for a,s in SUCCESSORS(state) do 
    v<-MAX(v,MIN-VALUE(s,alpha,beta))
	if v >= beta then return v
	alpha <- MAX(alpha,v)
  return v
function MIN-VALUE(state,alpha,beta) returns a utility value
  same as MAX-VALUE but with roles of alpha,beta reversed

處理搜索樹中的重複狀態

  • 在遊戲中重複狀態的頻繁出現往往是因爲調換—導致同樣棋局的不同行棋序列的排列

例如,[a1, b1, a2, b2]和[a1, b2, a2, b1]都結束於同樣的棋局,其中[b1, b2]是[b2,b1]的調換。

  • 解決辦法:第一次遇見某棋局時將對它的評價存儲在哈希表中(該哈希表稱爲調換表)。

實戰https://blog.csdn.net/u014296991/article/details/105618765

不完整的實時決策(Imperfect, real-time decisions)

  • α-β算法依然要搜索至少一部分空間直到終止狀態,這樣的搜索不現實。
  • 用可以估計棋局效用的啓發式評價函數EVAL代替評估終止節點的效用函數。
  • 用可以決策什麼時候運用EVAL的截斷測試取代終止測試。

如何設計評價函數?

  • 應該以和真正的效用函數同樣的方式對終止狀態進行排序。
  • 評價函數的計算不能花費太多的時間。
  • 對於非終止狀態,評價函數應該和取勝的實際機會密切相關。
  • 在計算能力有限情況下,評價函數能做到最好的就是猜測最後的結果
  • 大多數評價函數的工作方式是計算狀態的不同特徵,那麼對狀態的一個合理評價是加權平均值

國際象棋中EVAL通常取爲加權線性函數(假設每個特徵的貢獻獨立於其它特徵的值)

截斷搜索

  • 用 CUTOFF-TEST(state, depth) 來進行截斷測試,如果滿足則返回 EVAL(state);
  • 使用迭代深入搜索:當時間用完時,程序就返回目前完成最深的搜索所選擇的招數。
  • 由於評價函數的近似性,截斷搜索可能導致錯誤。

截斷搜索的改進

  • 需要更爲複雜的截斷測試:

評價函數應該只用於那些靜止的棋局(近期不會出現大的變化的棋局),非靜止的棋局可以進一步擴展直到靜止的棋局,這種額外的搜索稱爲靜止搜索。

期望搜索和MTD(f)

  • 普通的Alpha-Beta搜索對某個局面最終的“最小-最大”值沒有假設。看上去它考慮到任何情況,但是,如果你有一個非常好的主意(例如由於你在做迭代加深,從而想到前一次的結果),你就會找出那些和你預期的差得遠的路線,預先把它們截斷。
  • Alpha-Beta搜索的一個變種,開始時用從負無窮大到正無窮大來限定搜索範圍,然後在期望值附近設置小的窗口
  • 設想發表在一個網站上:http://theory.lcs.mit.edu/~plaat/mtdf.html
  • 具體實現稱爲MTD(f)搜索算法,只有十多行

殘局庫 Endgame Databases

  • 殘局庫在很多棋類遊戲中扮演着非常重要的角色。例如九人Morris,西洋跳棋。
  • 要讓某種棋類完全可解,通常要藉助於殘局庫——從起始局面開始向前搜索,結合殘局庫,就能解出這盤棋。
  • 在盤面上棋子數量很少的情況下,殘局庫才能實現。國際象棋5子殘局—7.05GB存儲空間,6子殘局庫—1.2TB!

殘局庫類型

  • 如果殘局庫中某個特定的局面是贏棋、輸棋還是和棋是確定的,稱爲“勝負和”(WLD)殘局庫;
  • 如果知道多少步以後棋局會結束,稱爲“殺棋步數”(DTM,Distance to Mate)殘局庫;
  • 如果只知道多少步以後會轉換爲另一種類型的局面,就稱爲“轉換步數”(DTC,Distance to Conversion)殘局庫。

殘局庫生成

  • 基本算法稱爲“後退式分析”(Retrograde Analysis),由Ken Thompson首先使用
  • 從某個已知棋局結果的狀態回退(eg:白方被將死),推測前一步黑方是如何走棋達到該狀態的

 

注:主要內容來自巢文涵老師的人工智能課

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章