棋類遊戲走步計算AI

2021-04-01 22:58:17 字數 2575 閱讀 8918

如果棋類遊戲中一方有利,就是另一方不利,這時稱為零和博弈。這種型別的博弈,可以使用minimax演算法,下面簡單介紹一下:

我們知道,如果不出差錯,一般我們輪流下棋時,都是堅持這樣的原則:如果是自己下,堅持走計算好的最好的棋步;到對手時,他也一定是這樣,根據零和博弈原理也就是對手走對我們最壞的棋步。如果對盤面的評估值越大越對我們有利時,我們追求的就是最大化盤面評估值(max),對手追求的是讓我們的盤面評估值最小化(min)。

(4)最大化     /  /

[2]  (4)

最小化       / /

(4)   (5)

最大化    //      //

[3] [4] [2] [5]

說明:上面圖中,"()"中的內容由""內的內容按照最大或最小原則得當。

再看看我們走棋時過程實際也是要在乙個這樣的樹中尋找乙個最好的棋步。一般來說,乙個棋局不可能完全遍歷,可以設定乙個最大搜尋深度,在到達最大深度節點時給出評估值,然後利用最大最小原則來一步一步得到頂層評估值。下面是乙個例子:

minmax (gameposition game)

maxmove (gameposition game)

else

int negamax(局面 p, int depth)

//end for each

return bestvalue;

} // end function

後來人們發現,上面的演算法效率太低。1958年有人發明了alpha-beta剪枝演算法,這樣一來可以去除大量不必要的搜尋,大大提高了效率。

其主要思想是:

(1)alpha剪枝:當我們知道對於某一層要選出最大值傳給上層,當前層最大值為alpha,如果發現後面有小於這個alpha的值時就不需要再搜尋那個節點和其子節點,因為它的評估值一定不會大於alpha。如下圖:

(8)

最大化     /  /(剪枝)

[8]  (5)

最小化       / /

(4)   (5)

最大化    //      //

[3] [4] [2] [5]

(2)類似有beta剪枝。

(8)

最大化     /  /(剪枝)

[8]  (5)

最小化       / /

(4)   (5)

最大化    //      //

[3] [4] [2] [5]

(2)類似有beta剪枝。

如果利用負最大演算法,可以得到如下演算法:

long negaalphabeta(局面 p, int depth, long alpha, long beta)

}

return alpha;

}

當然,還有許多方法來提高效率,如:

pvs

歷史啟發

殺手啟發

sss *

mtd(f)

等等,這裡不詳細論述。

參考資料:

南開大學軟體學院《棋類遊戲(人機博弈)的一般演算法》課件

http://.baidu.com/s?wd=alpha-beta%bc%f4%d6%a6&cl=3(有很多中文好東東)

遊戲程式設計精粹1

(8)

最大化     /  /(剪枝)

[8]  (5)

最小化       / /

(4)   (5)

最大化    //      //

[3] [4] [2] [5]

(2)類似有beta剪枝。

如果利用負最大演算法,可以得到如下演算法:

long negaalphabeta(局面 p, int depth, long alpha, long beta)

}

return alpha;

}

當然,還有許多方法來提高效率,如:

pvs

歷史啟發

殺手啟發

sss *

mtd(f)

等等,這裡不詳細論述。

參考資料:

南開大學軟體學院《棋類遊戲(人機博弈)的一般演算法》課件

http://.baidu.com/s?wd=alpha-beta%bc%f4%d6%a6&cl=3(有很多中文好東東)

遊戲程式設計精粹1

(8)

最大化     /  /(剪枝)

[8]  (5)

最小化       / /

(4)   (5)

最大化    //      //

[3] [4] [2] [5]

(2)類似有beta剪枝。

如果利用負最大演算法,可以得到如下演算法:

long negaalphabeta(局面 p, int depth, long alpha, long beta)

}

return alpha; }

當然,還有許多方法來提高效率,如:

pvs

歷史啟發

殺手啟發

sss *

mtd(f)

等等,這裡不詳細論述。

lua 五福 傳統棋類遊戲

遊戲 五福 發音是wu fu 但是怎麼寫可能不對 地圖 如圖所示,白色園圈為下棋的位置 遊戲由兩人進行,分別使用石頭和木棍,雙方交替下棋 遊戲以空白棋盤開始 遊戲分兩個階段 階段一雙方分別網空白位置下棋,如果構成連子,可獲得靠棋 己方棋子壓住對方棋子,表明該位置無效 權力,可靠子數量為 3連 1 4...

遊戲AI 2 遊戲AI模型

在這本書中有大量的演算法和技術。讀者很容易迷失其中,所以從全域性著眼去了解各個部分是如何組合在一起的十分重要。為了有所幫助,我使用了乙個統一的結構來討論遊戲中使用的ai。這不是唯一可選的模型,也不是唯一貼合本書中技術的模型。但是為了使討論更清楚,我將展示每種技術如何適用於製作遊戲 ai 角色的通用結...

遊戲AI 隨機移動

比起將物件沿著直線移動更進一步,就是隨機移動目標。說實話,隨機運動在某些情況下可以被認為是無腦運動。我們就試著用 來模擬一下蒼蠅的大腦 我們姑且認為蒼蠅飛行是無腦的 這裡我們會用到 rand 隨機函式,這個寫過 的人都知道吧 隨機飛行就是隨機改變蒼蠅在x軸和 y軸上的速度值。所以 如下 x velo...