資料介紹
最近我用Python做了一個(gè)國(guó)際象棋程序并把代碼發(fā)布在Github上了。這個(gè)代碼不到1000行,大概20%用來實(shí)現(xiàn)AI。在這篇文章中我會(huì)介紹這個(gè)AI如何工作,每一個(gè)部分做什么,它為什么能那樣工作起來。你可以直接通讀本文,或者去下載代碼,邊讀邊看代碼。雖然去看看其他文件中有什么AI依賴的類也可能有幫助,但是AI部分全都在AI.py文件中。
AI 部分總述
AI在做出決策前經(jīng)過三個(gè)不同的步驟。首先,他找到所有規(guī)則允許的棋步(通常在開局時(shí)會(huì)有20-30種,隨后會(huì)降低到幾種)。其次,它生成一個(gè)棋步樹用來隨后決定最佳決策。雖然樹的大小隨深度指數(shù)增長(zhǎng),但是樹的深度可以是任意的。假設(shè)每次決策有平均20個(gè)可選的棋步,那深度為1對(duì)應(yīng)20棋步,深度為2對(duì)應(yīng)400棋步,深度為3對(duì)應(yīng)8000棋步。最后,它遍歷這個(gè)樹,采取x步后結(jié)果最佳的那個(gè)棋步,x是我們選擇的樹的深度。后面的文章為了簡(jiǎn)單起見,我會(huì)假設(shè)樹深為2。
?
生成棋步樹
棋步樹是這個(gè)AI的核心。構(gòu)成這個(gè)樹的類是MoveNode.py文件中的MoveNode。他的初始化方法如下:
這個(gè)類有五個(gè)屬性。首先是move,即它包含的棋步,它是個(gè)Move類,在這不是很重要,只需要知道它是一個(gè)告訴一個(gè)起子往哪走的棋步,可以吃什么子,等等。然后是children,它也是個(gè)MoveNode類。第三個(gè)屬性是parent,所以通過它可以知道上一層有哪些MoveNode。pointAdvantage屬性是AI用來決定這一棋步是好是壞用的。depth屬性指明這一結(jié)點(diǎn)在第幾層,也就是說該節(jié)點(diǎn)上面有多少節(jié)點(diǎn)。生成棋步樹的代碼如下:
變量moveTree一開始是個(gè)空list,隨后它裝入MoveNode類的實(shí)例。第一個(gè)循環(huán)后,它只是一個(gè)擁有沒有父結(jié)點(diǎn)、子結(jié)點(diǎn)的MoveNode的數(shù)組,也就是一些根節(jié)點(diǎn)。第二個(gè)循環(huán)遍歷moveTree,用populateNodeChildren函數(shù)給每個(gè)節(jié)點(diǎn)添加子節(jié)點(diǎn):
這個(gè)函數(shù)是遞歸的,并且它有點(diǎn)難用圖像表達(dá)出來。一開始給它傳遞了個(gè)MoveNode對(duì)象。這個(gè)MoveNode對(duì)象會(huì)有為1的深度,因?yàn)樗鼪]有父節(jié)點(diǎn)。我們還是假設(shè)這個(gè)AI被設(shè)定為深度為2。因此率先傳給這個(gè)函數(shù)的結(jié)點(diǎn)會(huì)跳過第一個(gè)if語句。
然后,決定出所有規(guī)則允許的棋步。不過這在這篇文章討論的范圍之外,如果你想看的話代碼都在Github上。下一個(gè)if語句檢查是否有符合規(guī)則的棋步。如果一個(gè)都沒有,要么被將死了,要么和棋了。如果是被將死了,由于沒有其他可以走的棋步,把node.move.checkmate屬性設(shè)為True并return。和棋也是相似的,不過由于哪一方都沒有優(yōu)勢(shì),我們把node.pointAdvantage設(shè)為0。
如果不是將死或者和棋,那么legalMoves變量中的所有棋步都被加入當(dāng)前結(jié)點(diǎn)的子節(jié)點(diǎn)中作為MoveNode,然后函數(shù)被調(diào)用來給這些子節(jié)點(diǎn)添加他們自己的MoveNode。
- Arduino超級(jí)國(guó)際象棋II
- 使用Arduino的國(guó)際象棋鬧鐘
- 國(guó)際象棋機(jī)器人開源分享
- 一個(gè)簡(jiǎn)單的國(guó)際象棋時(shí)鐘
- 用于M5Stack的Arduino大型國(guó)際象棋
- Arduino超級(jí)國(guó)際象棋
- Python的單行命令實(shí)例說明 1次下載
- python的12個(gè)經(jīng)典實(shí)例程序詳細(xì)說明 32次下載
- Python的函數(shù)文件與模塊的程序說明 2次下載
- Flask入門教程之使用Python和Flask開發(fā)一個(gè)Web程序 0次下載
- 使用Python和Flask開發(fā)一個(gè)Web程序 0次下載
- Flask入門教程使用Python和Flask開發(fā)你的第一個(gè)Web程序電子書 0次下載
- 使用用于MCS-51的IAR嵌入式平臺(tái)編寫的一個(gè)示例程序程序免費(fèi)下載
- 如何使用Python編程一個(gè)石頭剪刀布游戲的小程序 26次下載
- 《Python開發(fā)技術(shù)詳解》-隨書附帶程序 0次下載
- 寫一個(gè)exe程序 850次閱讀
- 利用Python找到下一個(gè)“游戲驛站” 529次閱讀
- 一個(gè)純Python編寫的輕量級(jí)數(shù)據(jù)庫 700次閱讀
- 如何來編寫一個(gè)串口收發(fā)程序 2742次閱讀
- 用ChatGPT編寫各種腳本 7225次閱讀
- Verilog程序編寫規(guī)范 3757次閱讀
- 如何編寫第一個(gè)hello world程序 8144次閱讀
- 如何使用Python編寫一個(gè)桌面軟件系統(tǒng)?步驟有哪些 4761次閱讀
- 可以使用手機(jī)編程實(shí)現(xiàn)python嗎 9633次閱讀
- 基于GD32F103系列處理器設(shè)計(jì)的象棋人機(jī)對(duì)弈程序 3147次閱讀
- 一個(gè)python腳本看透Linux程序對(duì)庫的依賴 3057次閱讀
- AlphaZero如何快速學(xué)習(xí)每個(gè)游戲,如何從隨機(jī)對(duì)弈開始訓(xùn)練 6928次閱讀
- 如何使用Python編寫能夠從原始文本提取信息的程序 1w次閱讀
- AI自學(xué)就可用更少步數(shù)復(fù)原任意3階魔方 8281次閱讀
- 分享一份網(wǎng)友學(xué)習(xí)python時(shí)編寫的一個(gè)小工具 7218次閱讀
下載排行
本周
- 1電子電路原理第七版PDF電子教材免費(fèi)下載
- 0.00 MB | 1491次下載 | 免費(fèi)
- 2單片機(jī)典型實(shí)例介紹
- 18.19 MB | 95次下載 | 1 積分
- 3S7-200PLC編程實(shí)例詳細(xì)資料
- 1.17 MB | 27次下載 | 1 積分
- 4筆記本電腦主板的元件識(shí)別和講解說明
- 4.28 MB | 18次下載 | 4 積分
- 5開關(guān)電源原理及各功能電路詳解
- 0.38 MB | 11次下載 | 免費(fèi)
- 6100W短波放大電路圖
- 0.05 MB | 4次下載 | 3 積分
- 7基于單片機(jī)和 SG3525的程控開關(guān)電源設(shè)計(jì)
- 0.23 MB | 4次下載 | 免費(fèi)
- 8基于AT89C2051/4051單片機(jī)編程器的實(shí)驗(yàn)
- 0.11 MB | 4次下載 | 免費(fèi)
本月
- 1OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234313次下載 | 免費(fèi)
- 2PADS 9.0 2009最新版 -下載
- 0.00 MB | 66304次下載 | 免費(fèi)
- 3protel99下載protel99軟件下載(中文版)
- 0.00 MB | 51209次下載 | 免費(fèi)
- 4LabView 8.0 專業(yè)版下載 (3CD完整版)
- 0.00 MB | 51043次下載 | 免費(fèi)
- 5555集成電路應(yīng)用800例(新編版)
- 0.00 MB | 33562次下載 | 免費(fèi)
- 6接口電路圖大全
- 未知 | 30320次下載 | 免費(fèi)
- 7Multisim 10下載Multisim 10 中文版
- 0.00 MB | 28588次下載 | 免費(fèi)
- 8開關(guān)電源設(shè)計(jì)實(shí)例指南
- 未知 | 21539次下載 | 免費(fèi)
總榜
- 1matlab軟件下載入口
- 未知 | 935053次下載 | 免費(fèi)
- 2protel99se軟件下載(可英文版轉(zhuǎn)中文版)
- 78.1 MB | 537793次下載 | 免費(fèi)
- 3MATLAB 7.1 下載 (含軟件介紹)
- 未知 | 420026次下載 | 免費(fèi)
- 4OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234313次下載 | 免費(fèi)
- 5Altium DXP2002下載入口
- 未知 | 233046次下載 | 免費(fèi)
- 6電路仿真軟件multisim 10.0免費(fèi)下載
- 340992 | 191183次下載 | 免費(fèi)
- 7十天學(xué)會(huì)AVR單片機(jī)與C語言視頻教程 下載
- 158M | 183277次下載 | 免費(fèi)
- 8proe5.0野火版下載(中文版免費(fèi)下載)
- 未知 | 138039次下載 | 免費(fèi)
評(píng)論
查看更多