• 沒有找到結果。

遊戲人工智慧演算法

在文檔中 中 華 大 學 (頁 32-38)

第三章 對奕機器人軟體架構

3.4 遊戲人工智慧演算法

人工智慧(Artificial Intelligence)被廣泛定義為:一個電腦系統具有人類的知識 和行為,並具有學習、推理判斷來解決問題、記憶知識和了解人類自然語言的能力。

人工智慧的產生過程,在對於人類因問題和事物所引起的刺激和反應,以及所引發的 推理、解決問題、學習、判斷及思考決策等過程,將這些過程分解成一些基本步驟,

再透過程式設計,將這些人類解決問題的過程模組化或公式化,使得電腦能有一個結 構化的方法來設計或處理更複雜的問題[22-24]。

凡是研究如何製造出智慧機器或智慧系統,來模擬人類智慧活動的能力,以實 現人造智慧的一門科學,即稱為人工智慧系統。人工智慧是一種技術,而不是一項產 品,它的目的在讓電腦更能了解一般化的事物,凡是模擬人類「聽、說、讀、寫、看、

動作」等的電腦技術,都被歸類為人工智慧的範圍。最初的人工智慧起源於英國杜林

(A.M. Turing)設計了一款具記憶體、有儲存能力的杜林機(Turing Machine),它 暗示了電腦具有學習和思考能力,因為電腦只要執行新的程式,就能改變自己的「行 為」,這算是智慧的表現。

提到人工智慧,常讓人想到西洋棋的程式競賽,在 1997 年五月由 IBM 研發的 超級電腦「深藍」挑戰當時人類西洋棋冠軍 Gary Kasparov,最後結果由「深藍」獲 勝;這引起人們對人工智慧的廣泛注意與憧憬,也因此競相投入更多資源研究人工智 慧題材。在資訊科技眾多的領域裡面,人工智慧是極為重要的一環,它代表人類長久 以來的夢想:機器不再只是人類勞力的替代品,它可以在腦力方面的事務替我們分憂 解勞,甚至善解人意、撫慰心靈。

每個人大概都玩過電動玩具,早期的電玩遊戲都以單人遊戲為主,益智遊戲在 單人遊戲中佔有很大的部分,其中棋奕類的遊戲,包括象棋、圍棋、跳棋、五子棋、

西洋棋等,電腦並沒有大腦,只是一堆電子零件,它是如何做思考呢?怎麼知道下一 步棋該怎麼下呢?以下將討論如何使電腦具有人工智慧,並藉由遊戲演算法來增進電 腦的下棋能力。

井字遊戲(Tic-Tac-Toe)是一種規格很簡單的雙人遊戲,只要在畫有「井」字 的空格裡,一方畫「O」,另一方畫「X」,誰先畫完一橫列、一直行或對角線,誰就 獲勝。其所有可能的排列組合共有 39=19,683 種,比起西洋棋或其他遊戲動輒上兆種

於遇到問題時,能透過所累積的經驗與智慧來解決問題,因此人工智慧也就是在模擬 人類解決問題的能力。最常見的方法之一,就是驗證所有可能答案的正確性,如果用 這種方法,第一步就是先要找出所有可能的答案,然後一個一個地檢查它們的正確 性,於是有了搜尋的概念。依照搜尋目的不同,所發展的搜尋方法也不同。常見的競 局搜尋方法有:極大極小搜尋法(Mini-Maxing Search)、αβ 修剪搜尋法(Alpha-Beta Pruning)、漸深搜尋法(Tic Pruning)、經驗式修剪搜尋法(Heuristic Pruning)和最佳 解優先搜尋法(Best-First Search)等。這一類的搜尋法在棋弈類的遊戲中很普遍,例 如圍棋、象棋、西洋棋…等。以下將介紹常見的極大極小法,及本文所採用的最佳解 優先搜尋法。

l 極大極小法(Mini-Maxing Search)[22]

下棋時一人走一步,雙方都想要使自已的棋局保持優勢,同時使對方處於 劣勢。於是我們往往要考慮對手的應對走法,來決定下一步要怎麼走。同樣地,

對手也會預測我們的走法,不讓你稱心如意。極大極小法就是假設敵我雙方都 選擇最佳走法的一種有限深度、深度優先的搜尋方法。

它從根節點出發,呼叫走法產生函式產生可能走法,向下巡行到給定深度 後,在葉節點處使用評估函數判斷棋局好壞。自已希望選擇得到最大分數的走 法,反之對手的目標則是選取使評估函數得到最小值的走法,因此程式在不同 階段中,交互使用取極大值和極小值的走法,也就是這個名稱的由來。

在一般的雙人對奕遊戲中,人工智慧大都採用極大極小法(Mini-Maxing Method)來評估下一步棋該如何走。極大極小法是以目前的棋盤,考慮所有可 能的棋步,對於每一個新盤局的所有可能,就需要重新考慮所有可能的棋步,

依此原則一直推演下去,考量到很多步之後的所有可能棋局。

考量的棋步越多,相對勝算也就越大,然而計算量也將隨之激增,因此我 們需要設計一個評估函數(Evaluation Function)來評估每一個棋局對雙方的勝 算如何。假設畫「O」的一方定為極大(MAX),畫「X」的一方定為極小(MIN),

若評估函數所得到的數值越大,表示對「O」的一方越有利;相之,如果評估 函數所得到的數值越小,則表示對「X」的一方越有利。此種設計有一前提,

就是假設雙方都會以對自己有利的棋步走。

極大極小法在井字遊戲的評估函數為:F(k) =(MAX 仍有可能完成的行數、

列數、對角線數的總和)–(MIN 仍有可能完成的行數、列數、對角線數的總和)。 假如於盤局 k 獲勝一方已確定為 MAX,則 F(k) = ∞;相反的,假如於盤局 k 獲 勝一方已確定為 MIN,則 F(k) = – ∞。其中,k 表示尚未分出勝負的盤局;棋盤 的縱向為行、橫向為列。

l 最佳解優先搜尋法(Best-First Search)[22]

這個搜尋法只根據最佳化的評估函數,來選擇下一個搜尋的節點,當評估 函數的準確度愈高,則愈可能找到最佳的節點。假如評估函數的準確度不高,

很有可能無作用或導致錯誤的搜尋發生,所以它使用一些估算解答成本的測量 方式,並設法朝最低成本方向進行搜尋。為了使搜尋更精確,因此估計解答成 本的測量,必須加上到達結束狀態的路徑成本一起估計。由於本文的井字遊戲 人工智慧演算法採用「最佳解優先搜尋法」,因此將以該搜尋法說明如何評估棋 局的其他可能走法,再進一步評估更深層的更多可能解,最後由評估函數得知 這些可能走法中的那一個為最佳解,順利找出電腦最佳的棋步。

範例說明:有一井字遊戲,電腦以「O」表示,玩家以「X」表示,其評 估函數定義為:

F(i) =(同一行、同一列及對角線的其他空白個數)+

〔(同一行、同一列及對角線的「O」個數)x 2〕+ K(i)

K(i) = 0, 若該一行、該一列、或對角線的「X」各數,最多為 0 個 -1, 若該一行、該一列、或對角線的「X」各數,最多為 1 個 4, 若該一行、該一列、或對角線的「X」各數,最多為 2 個

1. 假設一開始的棋局全部都是空格,如圖 3-6(a)。

2. 若由電腦先下,依評估函數可算出:

F(P0) =(2 + 2 + 2)+〔(0 + 0 + 0)x 2〕+(0 + 0 + 0)= 6 F(P1) =(2 + 2 + 0)+〔(0 + 0 + 0)x 2〕+(0 + 0 + 0)= 4 F(P2) =(2 + 2 + 2)+〔(0 + 0 + 0)x 2〕+(0 + 0 + 0)= 6 F(P3) =(2 + 2 + 0)+〔(0 + 0 + 0)x 2〕+(0 + 0 + 0)= 4

F(P5) =(2 + 2 + 0)+〔(0 + 0 + 0)x 2〕+(0 + 0 + 0)= 4 F(P6) =(2 + 2 + 2)+〔(0 + 0 + 0)x 2〕+(0 + 0 + 0)= 6 F(P7) =(2 + 2 + 0)+〔(0 + 0 + 0)x 2〕+(0 + 0 + 0)= 4 F(P8) =(2 + 2 + 2)+〔(0 + 0 + 0)x 2〕+(0 + 0 + 0)= 6 3. 因此電腦選擇最大值 P4 位置,則棋局狀況如圖 3-6(b)。

4. 若對手選擇 P0 位置,則棋局狀況如圖 3-6(c)。

圖 3-6、井字遊戲的 1~2 步棋局 5. 依同樣的評估函數可算出:

F(P1) =(1 + 1 + 0)+〔(1 + 0 + 0)x 2〕+(0 -1 + 0)= 3 F(P2) =(2 + 1 + 1)+〔(0 + 0 + 1)x 2〕+(0 -1 + 0)= 5

F(P3) =(1 + 1 + 0)+〔(0 + 1 + 0)x 2〕+(-1 + 0 +0)= 3 F(P5) =(2 + 1 + 0)+〔(0 + 1 + 0)x 2〕+(0 + 0 + 0)= 5 F(P6) =(1 + 2 + 1)+〔(0 + 0 + 1)x 2〕+(-1 + 0 +0)= 5 F(P7) =(1 + 2 + 0)+〔(1 + 0 + 0)x 2〕+(0 + 0 + 0)= 5 F(P8) =(2 + 2 + 0)+〔(0 + 0 + 1)x 2〕+(0 + 0 -1)= 5

6. 由此可知,P2、P5、P6、P7 及 P8 都是很好的選擇。假設電腦選擇 P2 位置,

則棋局狀況如圖 3-7(d)。

7. 對手選擇 P6 位置,則棋局狀況如圖 3-7(e)。

圖 3-7、井字遊戲的前 3~4 步棋局

8. 依同樣的評估函數可算出:

F(P1) =(1 + 0 + 0)+〔(1 + 1 + 0)x 2〕+(0 -1 + 0)= 4 F(P3) =(0 + 1 + 0)+〔(0 + 1 + 0)x 2〕+(4 + 0 + 0)= 7

F(P5) =(1 + 1 + 0)+〔(1 + 1 + 0)x 2〕+(0 + 0 + 0)= 6 F(P7) =(1 + 1 + 0)+〔(1 + 0 + 0)x 2〕+(0 -1 + 0)= 3 F(P8) =(1 + 1 + 0)+〔(1 + 0 + 1)x 2〕+(0 -1 -1)= 4 9. 因此電腦選擇最大值 P3 位置,則棋局狀況如圖 3-8(f)。

10. 對手選擇 P5 位置,則棋局狀況如圖 3-8(g)。

圖 3-8、井字遊戲的 5~6 步棋局 11. 依同樣的評估函數可算出:

F(P1) =(1 + 0 + 0)+〔(1 + 1 + 0)x 2〕+(0 -1 + 0)= 4

F(P7) =(1 + 1 + 0)+〔(1 + 0 + 0)x 2〕+(0 -1 + 0)= 3 F(P8) =(0 + 1 + 0)+〔(1 + 0 + 1)x 2〕+(-1 -1 -1)= 2 12. 因此電腦選擇最大值 P1 位置,則棋局狀況如圖 3-9(h)。

13. 對手選擇 P7 位置,則棋局狀況如圖 3-9(i)。

14. 最後電腦選擇 P8 位置,雙方以和局結束,棋局狀況如圖 3-9(j)。

圖 3-9、井字遊戲的 7~9 步棋局

通常解決一個問題的演算法可能有千百種,然而是否恰當、實用、有效率、容 易實現都還是得先經過一番評估。如何從這麼多演算法中挑出最適合的,除了要先了

解一些演算法的基本概念外,還要多了解對於類似問題是否還有更好的解決方法。

在我們看來一些遊戲雖然玩起來很簡單,但要讓電腦學會如何判斷下一步該怎 麼走,卻又是另一回事,對於不同遊戲,除了要挑選適當的方法,還要先了解遊戲的 規則,才能加入適合的判斷條件,以提升程式執行效能。對於這種電腦會「思考」的 益智遊戲程式,人工智慧演算法佔有相當大的關係,也因為人工智慧的範疇非常大,

要寫出一個複雜的遊戲其實非常不容易,因此要對演算法和遊戲都有一定程度的了 解,才能完全實做出一個好的遊戲演算法。

在文檔中 中 華 大 學 (頁 32-38)

相關文件