麻省理工公開課人工智能筆記五

關於博弈的討論---計算機關於象棋博弈

計算機實現象棋博弈的幾種方法的討論

第一種方式是像人類,計算機討論兵型,戰術,棋局時機等,這顯然無法做到。

第二種方法考慮計算機的如果-那麼規則;即如果將兵前移一位,那麼就那樣做。這樣做對棋盤沒有評估,只是看看棋盤,以當前的情況爲依據來下。

如上圖,上面的點是棋局形式,下面的點是可能的操作,我們可以根據第一個方向確定下一步如何走。對可能的操作進行排序,選優先級最高的那個。不過這不是一種很好的方式。

第三種方法是對棋局做出評估,看所有移動的可能結果,確定所有可能的下一步中走哪一步是最好的,這需要設法評估形勢。

評估的一種方式如上圖,我們將當前棋盤上的形式設爲f1,f2····fn,分別可能代表王的位置等等棋局形式,這些形式最終構成一個函數g,而這個可以用一個多項式來表示,g = c1*f1+c2*f2+······cn*fn,我們可以找到評估中喜歡的一種方式往下走。

第四種方式是使用搜索算法,這裏我們首先考慮大英博物館算法,用於評估下面的所有可能結果。我們思考下面這棵樹

樹的度爲b,深度爲d,葉節點的數目顯然爲b的d次方,然而對於棋盤來說,所要評估的形式顯然很多,要想評估下一步的最好選擇,樹中大概有10的120次方几點,這顯然不可能。

第五種方式我們將不只考慮向下一步的方式,而是考慮向下多步來做評估。

圓圈中的數字爲5,代表第五種方式爲向下考慮多步

首先使用極小化極大算法

考慮一個簡單的b=d=2的樹,我們考慮兩個棋手,第一層的棋手想要得到極大值,第二層的棋手想要得到極小值,我們從上往下且從左往右給幾個結點排號,顯然②號結點將得到2,③號結點將得到值1,而①號結點取最大值得到值2。這樣可以到達樹的底部,一層一層的往上挪,然後決定怎麼走。雖然沒有得到最大值,但這是對抗性對局,得不到最大值也理所當然。

當b和d比較大時,我們知道,結點數是b^d,這顯然比較大,在博弈中我們也可以用一些方法進行剪枝。

如上圖,當我們看到2時,極小化者就知道②號結點的值<=2,再遍歷到7時,可以確定②號結點的值=2,同時極大化者可以確定①號結點的值>=2,當遍歷到1時,極小化者確定③號結點<=1,此時極大化者就可以確定①號結點值=2,這樣就進行了剪枝。這就是α-β算法,是對極小化極大算法的優化。

當有四層時,我們同樣可以用α-β算法,這時就有較多枝條被剪去。

在較好的情況下,我們需要做的靜態評估數大概是S = 2*b^(d/2),這已經大大縮小了工作量。

然而,如果當最後一層節點需要的計算量非常大,耗時很長,我們就需要使用上一層靜態評估讓結果一個保證,如上圖,上一層的計算量比下一層少了一個量級。所以當我們規定下一步棋需要多少時間時,可以有一個保證,從而得到一個較好的評估。

爲什麼可以使用這種方法,如上圖計算,前面所有的評估量相加,約等於b^(d-1)。

所有的博弈程序都是這麼走的,極小化極大加α-β算法優化。

然而這仍然不是人工智能,這隻能是推土機的智能。

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