top
Loading...
VB.NET實現五子棋的人工智能
天極IT資訊短信服務 電腦小技巧
資費:包月5元
手機:
介紹:細處著手,巧處用功。高手和菜鳥之間的差別就是:高手什么都知道,菜鳥知道一些。電腦小技巧收集最新奇招高招,讓你輕松踏上高手之路。


人工智能也就是所謂的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構想是很強大的如果你不是很厲害的五子棋高手的話,可能很快會被計算機打敗。我在聯眾上可是中級棋手啊,跟這種構想打的時候勝率也不是很高。

作者:http://www.zhujiangroad.com
來源:http://www.zhujiangroad.com
北斗有巢氏 有巢氏北斗