對人工智慧中「極大極小值」的博弈演算法的資料整理。
1. 極大極小演算法被廣泛應用於計算機的棋類遊戲中。不被用於打牌。因為計算機無法看到對手的牌,就很難做出**。在棋類遊戲中,雙方的棋子都是明確的,所以計算機可以通過類似深度優先搜尋(遞迴)的方法來求解。也就是the minimax tree。
為了優化演算法,採用α-β剪枝演算法來降低複雜度。如:原先要計算400個節點,現在縮小到了平方根,也就是20個節點。
極大極小演算法的層級節點數是指數遞增的…所以一般我們會進行層數限制。
2. 偽**:
function minimax(node, depth) // 指定當前節點和搜尋深度
// 如果能得到確定的結果或者深度為零,使用評估函式返回局面得分
if node is a terminal node or depth = 0
return the heuristic value of node
// 如果輪到對手走棋,是極小節點,選擇乙個得分最小的走法
if the adversary is to play at node
let α := +∞
foreach child of node
α := min(α, minimax(child, depth-1))
// 如果輪到我們走棋,是極大節點,選擇乙個得分最大的走法
else
let α := -∞
foreach child of node
α := max(α, minimax(child, depth-1))
return α;
進一步的**:
int minmax(int depth) else
}
int max(int depth)
generatelegalmoves();
while (movesleft())
} return best;
}
int min(int depth)
generatelegalmoves();
while (movesleft())
} return best;
}
α-β剪枝優化演算法
function
alphabeta
(node, depth, α, β, player)
ifdepth = 0 or
nodeisa
terminal
node
return
theheuristic
value
ofnode
ifplayer = maxplayer // 極大節點
foreach
child
ofnode // 極小節點
α := max(α, alphabeta(child, depth-1, α, β, not(player) ))
if β ≤ α // 該極大節點的值》=α>=β,該極大節點後面的搜尋到的值肯定會大於β,因此不會被其上層的極小節點所選用了。對於根節點,β為正無窮
break
(* beta cut-off *)
return α
else
// 極小節點
foreach child of node // 極大節點
β := min(β, alphabeta(child, depth-1, α, β, not(player) )) // 極小節點
if β ≤ α // 該極大節點的值<=β<=α,該極小節點後面的搜尋到的值肯定會小於α,因此不會被其上層的極大節點所選用了。對於根節點,α為負無窮
break
(* alpha cut-off *)
return β
(* initial call *)
alphabeta(origin, depth, -infinity, +infinity, maxplayer)
memset各型別的極大極小值
include int main 較 的原則 加法不爆。極大值 0x7f 較大值 0x3f 較小值 0xc0 極小值 0x80 較 的原則 加法不爆。極大值 0x7f 較大值 0x3f 較小值 0xc0 極小值 0x80 較 的原則 保證一定位精度。7f以上一直到be都是 0 實際上是乙個很小的 1...
對人工智慧的認識
對人工智慧的認識 人工智慧是電腦科學的乙個研究分支,不過,這個分支下面又包含很多的研究方向,這個分支提出的時間很早,中間也熱鬧過幾次,自從2012年以來又熱鬧了,所以看了一點綜述文章對此進行簡單的記錄。2 人工智慧包括六個方面 一 計算機視覺 算上模式識別 影象處理等問題 二 自然語言理解與交流 包...
對人工智慧的了解
20世紀50年代以來,計算機科學家們致力於研發與人類智慧型類似的程式。當這些程式被開發到一定水平後,它們就可以在一些特定的應用場景中替代人類。它們被稱為人工智慧 ai 和認知計算。對於人工智慧,我的了解並不是很多,知識面很有限,盡量總結一些。1 涵蓋領域 涵蓋了電腦科學 心理學 哲學 神經科學 社會...