極大極小搜尋演算法:
用於圍棋,五子棋,象棋等棋類,結果有三種可能:勝利、失敗和平局。理論上可以窮舉所有的走法,這就需要生成整棵博弈樹。實際上不可行。因此搜尋時可以限
定博弈樹的深度,到達該深度則不再往下搜,相當於只往前看 n 步。
如果題意是求出必勝,必敗,必和等,那麼肯定是全部搜完整一棵搜尋樹,此題目資料量一般很小
如果是不搜尋完,只能求出勝或敗或和的概率
思路:先要弄乙個估價函式:
概念:max(己方)和min(敵手)對弈,輪到max走棋了,那麼我們會遍歷max的每乙個可能走棋方法,然後對於前面max的每乙個走棋方法,遍歷min的每乙個走棋方法,然後接著遍歷max的每乙個走棋方法,…… 直到分出勝負或者達到了搜尋深度的限制。若達到搜尋深度限制時尚未分出勝負,則根據當前局面的形式,給出乙個得分,計算得分的方法被稱為估價函式,不同遊戲的估價函式如何設計和具體遊戲相關。
確定估價值函式:對max方有利,估價值為正,對max方越有利,估價值越大。對min方有利,估價值為負,對min方越有利,估價值越小。
作用:因為非葉子節點的估價函式值可以通過其子結點推出,所以是用於求出子結點的估價值,然後往樹的根節點推
然後要想怎麼根據葉子節點輸贏推到根節點輸贏:
其中的一些概念:
作為max的選擇,在此局面下,所有走的所有可能作為同一層,其中節點也叫做極大節點
作為min的選擇,同理,節點叫做極小節點
如下圖:
作為max方
肯定要選最有利的,那麼就選此時所有選擇的節點中的估價函式值最大的一種
該節點估價值就是其下min的所有選擇的最大的乙個值,也即是對min最不利,對max最有利的乙個節點
作為min方
也要選最有利的,那麼就選此時所有選擇的節點中的估價函式值最小的一種
該節點估價值就是其下max的所有選擇的最小的乙個值,也即是對max最不利,對min最有利的乙個節點
額,好難說清,上偽**:
function minimax(node, depth) // 指定當前節點和還要搜尋的深度
// 如果勝負已分或者深度為零,使用評估函式返回局面得分
if node is a terminal node or depth = 0
return the heuristic value of node
// 如果輪到對手走棋,即node是極小節點,選擇乙個得分最小的走法
if the adversary is to play at node
let α := +∞
for each child of node
α := min(α, minimax(child, depth-1))
// 如果輪到自己走棋,是極大節點,選擇乙個得分最大的走法
else
let α := -∞
for each child of node
α := max(α, minimax(child, depth-1))
return α;
C語言 極大極小搜尋
時限 1000ms 記憶體限制 10000k 總時限 3000ms 描述 搜尋n層,第一層取最大值,先輸入兩個整數n randseed,用randseed設定隨機數種子。搜尋時每層4個分支,能不能想這個分支走用函式canmoveto 判斷,內容如下 int canmoveto int m,int d...
博弈基礎 極大極小搜尋
計算機博弈 也稱機器博弈 是乙個挑戰無窮 生機勃勃的研究領域,是人工智慧領域的重要研究方向,是機器智慧型 兵棋推演 智慧型決策系統等人工智慧領域的重要科研基礎。機器博弈被認為是人工智慧領域最具挑戰性的研究方向之一。機器博弈的核心技術是博弈搜尋演算法 零和博弈 zero sum game 又稱零和遊戲...
poj1568 極大極小搜尋
問題 給出乙個4x4 tic tac toe 的棋局的局面,問先手 x 是不是能找在接下來的一步中 找到乙個必勝局面,如果有,輸出第乙個落子位置 按順序 極大極小搜尋策略一般都是使用在一些博弈類的遊戲之中 這樣策略本質上使用的是深度搜尋策略,所以一般可以使用遞迴的方法來實現。在搜尋過程中,對本方有利...