正文之前
前陣子做了個《人工智能》 的課程作業,然后寫了個人工智障。。。大概就是個可以跟你下五子棋的傻兒子。。。下面是代碼和效果
正文
1、 摘要
機器博弈是人工智能領域的重要分支,它的研究對象多以復雜的棋牌類智力游戲為主,已經得到解決的棋類游戲,幾乎全部都應歸功于機器博弈近半個世紀的發展。計算機解決問題的優勢在于能把不易解析的問題,借助于現代計算機的運算速度優勢枚舉出所有的合理情形而得解;然而,博弈問題的復雜程度決定了它不能過度依賴機器的計算能力。許多待解決的或已經解決的棋類,其狀態空間復雜度或博弈樹復雜度量級都太過龐大,所以我們需要添加約束,并且采用合理的算法進行優化。
五子棋問題是人工智能中的一個經典問題。當今世界,AlphaGo已經執圍棋之牛耳,五子棋領域卻鮮少有人問津。本文根據課堂所學知識結合文獻、博客,基于兩種開發語言實現了一個智能對戰的AI五子棋游戲平臺。
本文所做工作如下:
(1) 五子棋界面實現;
(2) 智能判定棋盤走勢;
(3) 改進了棋盤掃描方式;
(4) 改良了系統評分表評估方式;
(5) 實現了基于點評分表估值找出最佳落子方式。
2、 問題描述、知識表達
2.1 問題描述
五子棋AI問題的最大問題是如何實現智能對弈,即當人落子之后,算法如何解讀當前的棋盤并且對其進行分析解讀,得到電腦方的最佳落子點。其次還有一個問題是如何判斷勝利,這可以作為前面棋盤局勢判定的一個子問題,也可以看做是一個單獨的問題,不過這個問題總體來說較為簡單,所以不做詳細說明。
2.2 知識表達
五子棋的整體知識構建包含以下部分:
(1) 棋盤局面表示法
(2) 棋局勝利判定
(3) 棋型知識庫
(4) 智能博弈流程
對于問題(1),采用數組表示法。棋盤中的各交叉點有三種狀態,不妨令 0表示空(未放置棋子) ,-1 表示有黑子 ,1 表示有白子,數組表示法的基本思想是:以交叉點對應的數組索引值來表達物理位置 ,以交叉點對應的元素值表達狀態(空、 黑子、 白子)。令 V = {0 ,1 ,-1} ,棋盤 的第 i 個交叉點的狀態 Si ∈V ,任何棋局都可以表示成一個 n ×n 的二元組。
對于問題(2), 采用數組表示法時,想知道任意兩個元素 Si 和Sj 是否共線,要通過 i 和 j 之間的數值規律來判斷。從這方面看,數組表示法是一種原始、低效的表示方法,但是對于評分表算法來說其性能損失是可以接受的。要判斷是否有一方已經勝利,只需要對整個棋盤判定當前落子點的縱、橫、正斜、反斜四個方向的最長延伸出四個位置看是否能連成一條同色直線即可。具體的操作可以視為:從落子點出發,向兩個方向延伸,如果遇到同色,那么計數器加一,遇到非同色(空白或者異色)則停止在該方向的延伸,一個計數器記下該方向上的兩頭的連續同色棋子數。等到四個方向都探索完畢,如果四個計數器中有一個計數器達到了5,那么即可判斷出已經有五子連珠了,此局結束。
新聞熱點
疑難解答