五子棋的人工智能

         人工智能也就是所謂的AI(Artificial Intelligence),它是一門很抽象的技術,AI程序的編寫不須要依據任何既定的思考模式或者規則。尤爲是遊戲中的AI能夠徹底依程序設計者自己的思考邏輯製做。我我的認爲人工智能的核心應該是使計算機具備自動的處理事件的能力,而咱們的全部的研究也應該圍繞着這一方向。咱們今天討論的是策略類的人工智能。

              策略類人工智能能夠說是AI中比較複雜的一種,最多見的策略類AI遊戲就是棋盤式遊戲。在這類遊戲中,一般的策略類AI程序都是使計算機判斷目前情況下全部可走的棋與可能的獲勝情況,並計算當前計算機可走棋步的獲勝分數或者玩家可走棋步的獲勝分數,而後再決定出一個最佳走法。下面咱們先介紹一下五子棋的AI構想。

                                                 第一部分       五子棋的AI構想

              有句話叫「當局者迷,旁觀者清。」,但這句話在由AI所控制的計算機玩家上是不成立的,由於計算機必須知道有那些獲勝方式,並計算出每下一步棋到棋盤上任一格子的獲勝概率,也就是說,一個完整的五子棋的AI構想必須:1,可以知道全部的獲勝組合,2,創建和使用獲勝表,3,設定獲勝的分數,4,使電腦具備攻擊和防守的能力。

一,求五子棋的獲勝組合

在一場五子棋的遊戲中,計算機必需要知道有那些的獲勝組合,所以咱們必須求得

獲勝組合的總數。咱們假定當前的棋盤爲10*10。

              (1),計算水平方向的獲勝組合數,每一列的獲勝組合是:6,共10列,因此水平方向的獲勝組合數爲:6*10=60

              (2),計算垂直方向的獲勝組合總數,每一行的獲勝組合是:6,共10行,則垂直方向的獲勝組合數爲:6*10=60

              (3),計算正對角線方向的獲勝組合總數,正對角線上的獲勝組合總數爲6+(5+4+3+2+1)*2=36

              (4),計算反對角線方向的獲勝組合總數,反對角線上的獲勝組合總數爲6+(5+4+3+2+1)*2=36

              這樣全部的獲勝組合數爲:60+60+36+36=192

二,創建和使用獲勝表

              咱們已經計算出了一個10*10的五子棋盤會有192種獲勝方式,這樣咱們能夠利用數組創建獲勝表,獲勝表的主要做用是:1,判斷當前的獲勝方式是否有效;2,判斷當前的獲勝方式中到底有多少子落入該獲勝組合中。詳細的使用您將在後面的程序中能夠看出。

三,分數的設定

在遊戲中爲了讓計算機可以決定下一步最佳的走法,必須先計算出計算機下到棋盤

上任一空格的分數,而其中最高分數即是計算機下一步的最佳走法。

原理:咱們斷定當前討論的空格與當前討論的點有幾種獲勝的方式,有幾種該空格就加幾分。這種原理初聽起來彷佛是沒法入手,不要緊,當您瞭解咱們後面的程序後您就會明白這種決策原理了。

這種決策有一些缺陷,由於若是隻根據這個模型設計,就有可能出現電腦或玩家有三個子連成一線的時候,計算機卻判斷不出,它認爲其餘某些空格是當前的獲勝的最佳位置而不去攻擊或防守。不要緊咱們徹底能夠經過一個增強算法來改變當前的分值狀況,也就是說當電腦或玩家有三個子或四個子連成一線時,咱們經過增強算法將當前與三個子或四個子有關的空格的分值提升,從而能夠彌補這一缺憾。

四,攻擊與防守

              以上的方式,事實上計算機只是計算出了最佳的攻擊位置,爲了防守咱們還應計算當前玩家的最佳的攻擊位置。這樣有什麼用呢?道理很簡單,若是玩家最佳攻擊位置的分數大於計算機最佳攻擊位置上的分數,那麼計算機就將下一步的棋子擺在玩家的最佳攻擊位上以阻止玩家的進攻,不然計算機便將棋子下在本身的最佳攻擊位置上進行攻擊。

              事實上,這個AI構想是很強大的若是你不是很厲害的五子棋高手的話,可能很快會被計算機戰勝。我在聯衆上但是中級棋手啊,跟這種構想打的時候勝率也不是很高。web


萬艾可www.weigecheng.com 算法

相關文章
相關標籤/搜索