人工智慧五子棋實現原理

2022-06-14 13:33:08 字數 2269 閱讀 2346

關於棋盤棋子的實現邏輯我就不多說了,大家可以看原始碼,並不複雜,說說ai部分的實現吧:

我的實現思路是:

1.走對自己獲得勝利最有利的點(說白了就是最接近5子連線的點)

2.堵對對方獲得勝利最有利的點(說白了就是堵對方的棋子)

做到這兩步就能實現乙個初級階段的人工智慧了。

那麼接下來就講講關於計算獲得勝利最有利的點是如何計算出來的:

其實原理也比較簡單:

在棋盤上計算每個空白位置的點的4個方向(橫向,縱向,左上角到右下角方向,右上角到左下角方向)每個有可能獲勝的方向所連成的以當前棋子為出發點的長度為獲勝棋子數量的(五子棋為5)中途沒有被敵方棋子阻擋的所覆蓋的己方棋子數。(是不是很繞,反正如果是我看到會被繞暈,沒看懂不要緊,下面有栗子,對是栗子)得出每個方向上最大棋子數之後,然後取出每個棋子四個值裡最大的值作為獲勝權重(win_weight)。

以下圖為例:

這是乙個6x6的棋盤,現在我們來計算一下白子獲勝的權重:

那麼權重是如何計算的呢?舉個栗子來說明吧:

首先定義這個棋盤座標系x方向是向右的,y方向是向下的,左上角的位置是(0,0),(x,y)可以定義乙個棋子的座標。定義xy方向為左上角到右下角方向,yx方向為右上角到左下角方向。

(0,0)點的權重計算:首先判斷這一點沒有連成5子的可能性,權重為0。

(0,2)點的權重計算:首先判斷這一點沒有連成5子的可能性,權重為0。

(0,3)點的權重計算:首先判斷這一點有連成5子的可能性,接下來x軸方向上經過當前位置可連成五子的棋子有0個,y軸方向上經過當前位置可連成五子的棋子有1個,xy方向不存在連成5子的可能性,yx方向上不存在連成5子的可能性,四個方向中,取最大值,結果為1,那麼當前點的獲勝權重為1。

以此類推,可以得出所有空白點的白字獲勝權重。

那麼我們下一步讓ai直接走獲勝權重最大的點是不是就可以了呢?

非也非也。我們不能只考慮自己獲勝,也要考慮防止對手獲勝。那麼如何防止對手獲勝呢?我的方式就是走對手獲勝權重最高的位置就可以了,就素堵住對方的棋子(傳說中的走別人的路,讓別人無路可走)。

同樣的方式,我們可以求得黑子的獲勝權重(win_weight)分布:

可以看出在(0,0),(0,2),(0,4),(0,5)這幾個點是黑子獲勝概率最大的點。白子走在這些點就可以堵住黑棋。

好的我們得到了白子贏得勝利最有利的點,以及白子阻止黑子獲得勝利最有利的點,那麼問題來了:我們到底該如何選擇具體走哪個點呢?

有個比較粗劣的實現方式,就是將這兩個權重相加,相當於將這兩個條件同等來對待,認為對白子獲得勝利的影響重要性是相同的,然後取加起來權重最高的點。

但實際情況是這兩個條件對獲得勝利的影響是不等價的,我們要想辦法來得到描述這兩者之間關係的公式。這裡的實現方式有:

嘗試去將這兩個引數相乘,取得的結果作為最終權重,來進行取值。

或者 白子的獲勝權重 + r * 黑子的獲勝權重, r是乙個係數,我們需要通過不斷的調整來接近最好的結果。

通過不斷的嘗試,來將最接近答案的公式猜出來。

比如下過五子棋的人都知道乙個常識:當對手有三子相連,是乙個很危險的情況,如果自己目前沒有三子相連,那麼你應該去堵住對方的連在一起的三子。那麼就可以判斷,當對手的win_weight >= 3 的時候,加入對手權重的判斷,其餘情況不考慮對手獲勝權重。

構建機器學習演算法,通過大量的訓練資料來訓練機器,從而讓機器通過歷史資料來算出下一步該怎麼走

我認為第三種方式是最理想的實現,因為前面兩種無法覆蓋到所有的情況。不過目前我只是做了第一種的簡單的實現,接下來會考慮逐漸完善機器學習演算法。

好了,這就是我實現五子棋ai的乙個大致思路,有很多人問我什麼是機器學習,我覺得在這裡可以用乙個簡單的比喻告訴大家:

人生會經歷很多事情,當你年幼無知的時候,可能會由於涉世未深而犯很多次錯誤,當你漸漸長大了,成熟了,經歷的事情多了起來,尤其是當你犯錯的時候,有人對你指出這樣做是錯的,你犯錯誤的次數就會慢慢減少,這個過程就像是乙個機器學習的過程。

機器積累訓練資料之前,很容易出錯,經過大量的訓練資料訓練之後,就會做的越來越好,這就是機器學習。

五子棋(人工智慧)

五子棋 人人對戰 人機對戰 include include 字元陣列的函式定義的標頭檔案 include standard library標準庫標頭檔案 define kong 0 define wanjia 1 define diannao 2 空位置設為0 玩家下的位置設為1 電腦下的位置設為2...

人工智慧實現簡單的五子棋程式

我這個程式在qq五子棋上實驗了一下,結果是黑棋先手全勝,白棋后手的勝率卻慘不忍睹,原因有下 1 五子棋的先手是有優勢的,所以職業比賽裡都會有禁手來實現公平 2 水平有限,對局面的評估只有一小部分 主要思路就是博弈樹,程式向前看一步,對對手可能的走法進行評估,評估的策略主要有兩條 1 掃瞄整個棋盤,判...

五子棋的人工智慧演算法

以前曾研究過五子棋的人工智慧演算法,這篇文章就是講的實現與原理。當然也只是做了最簡單的研究,人工智慧是個高深的學問,我基本上不懂,這裡的實現也只是憑自己的感覺來寫的,程式也不是我寫的,但是原理就是這樣。我相信還有高手,我的文章也只能提供給一些初學者看看了。電腦下子實際上是分兩個步驟的,第乙個步驟是盡...