中國象棋的人機博弈程式

2021-05-21 19:45:08 字數 1136 閱讀 2286

對此題目有興趣的朋友們:

感謝你們抽出寶貴的時間來閱讀這些淺顯的文字。

很多人可能都知道chess的人機大戰:

2023年,卡斯帕羅夫以4比2戰勝「深藍」(deep blue);

2023年,「更深的藍」(deeper blue)以3.5比2.5擊敗了卡斯帕羅夫;

2023年,「深弗里茨」(deep fritz)與克拉姆尼克在巴林以4比4戰平;

2023年,卡斯帕羅夫與「深青年」(deep junior)以3比3戰平;

2023年,英國棋王亞當斯以0.5比5.5慘敗於「九頭蛇怪」(hydra);

2023年,在德國波恩克拉姆尼克以2:4敗給「深弗里茨」(deep fritz);

隨著chess的機器博弈水平達到特級象棋大師級,中國象棋也有條不紊的發展起來。但是中國象棋的機器博弈水平還不能達到大師級。這其中有很多原因,比如起步晚,比如現在的技術大多是從chess的技術中移植過來的。雖然這兩種棋有相似之處,但是畢竟還是有差別的。

象棋中有幾個關鍵的技術,一是程式設計時棋子棋盤資料的表示方法,二是對於靜態棋局的估值,三是對博弈樹(實際是乙個策略樹)搜尋。目前,棋盤表示方面比較先進的方法是位(bit)棋盤表示;靜態估值使用遺傳演算法進行優化;博弈樹的搜尋技術則比較多。

我對於探索搜尋技術比較感興趣。我覺得除了移植chess中的搜尋技術外,還要真對於中國象棋自身的特點來探索分析。目前比較常用的chess中的技術是alpha-beta剪枝演算法,pvs演算法(priciple variation search),zws演算法(zero window search),置換表(transposition tables),迭代深化(iterative deepening),sss*演算法,mtd(f),不走棋啟發(null move heuristic)等一些預先剪枝技術,靜態搜尋(quiescent search),殺手啟發(killer heuristic),歷史啟發(history heuristic)等等很多很多具體的技術。這些技術對於了解機器博弈程式的人來說可能大多都是很熟悉的。但是,不用說什麼新的技術,即使這些技術與中國象棋結合時有一些並不是很恰當(當然對於純粹的博弈樹搜尋的方法沒有什麼可說)但是像預先剪枝(forward pruning)的技術,剪枝的側重點應該有所變化;還有棋步生成的排序上應該有所變化。

當然有關搜尋技術不勝列舉,我在這裡只是拋磚引玉,希望朋友參與討論。

中國象棋2

using system using system.collections.generic using system.linq using system.text using system.drawing namespace chinesechess public override bool mov...

中國象棋 題解

中國象棋這道題才看到的時候,畏難情緒很重啊,先介紹題目,大意是在n行 m列的棋盤上,放若干個炮可以是 0個,使得沒有任何乙個炮可以攻擊另乙個炮。請問有多少種放置方法。考試的時候沒有其他的想法,就只想暴力騙分,用乙個一維的標記陣列,再用乙個遞迴,每排最多放兩個。後面想來,完全可以把每排最多放兩個的情況...

DP 中國象棋

這次小可可想解決的難題和中國象棋有關。在乙個 n 行 m 列的棋盤上,讓你放若干個炮 可以是 0 個 使得沒有任何乙個炮可以攻擊另乙個炮,請問有多少種放置方法。大家肯定很清楚,在中國象棋中炮的行走方式是 乙個炮能攻擊到另乙個炮,當且僅當它們在同一行或同一列中,且它們之間恰好有乙個棋中。你也來和小可可...