日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

实现AlphaGo(一):围棋的基本规则和代码设计思路

發布時間:2023/12/20 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 实现AlphaGo(一):围棋的基本规则和代码设计思路 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

? ? ? 從本節開始,我們將從零開始,一行一行代碼的編寫,直到完整設計出當年擊垮13次世界圍棋冠軍李世石的AlphaGo

? ? ? 幸運的是,在人工智能思維下,我們不需要成為圍棋高手就能設計出AlphaGo,我們只需要掌握圍棋的若干條基本規則,然后熟悉Python代碼的編寫,具備深度學習的基本知識就夠了

?

----------------------------------------------------------------------------------------------------------------------------------------

圍棋的基本規則

? ? ? 圍棋在所有棋類中難度最大,但有趣的是,它的規則幾乎最簡單,圍棋充分體現了大道至簡的原則。

? ? ? 圍棋的棋盤有三種規格,分別為9*9,13*13和19*19,它是由若干條橫線和豎線交織而成的“田”字形網格:

? ? ? ?棋子必須下在線的交叉點上而不能下在方塊中間。圍棋下子基本上沒有任何約束,你下子的目的是盡可能的把對手的棋子給圍住吃掉。比賽開始后,黑子先走。當你下的棋子把對方棋子全面包圍時,對方被包圍的棋子就可以你吃掉。

? ? ? ?圍棋的棋子間有個概念叫相連,在一個棋子上下左右四個位置有同一顏色的棋子時,兩個棋子就會相連,而相連具有傳遞性,如果A與B相連,B與C相連,那么A與C就相連。上圖中加在兩個白子中間的黑子與它上方的黑子相連,而上方黑子與它右邊的黑子相連,于是三個黑子相連成一個集合。相連要看上下左右四個位置而不能看對角線,如果上圖去掉第二行最左邊的黑棋,剩下的兩個棋子就不相連。

? ? ? 一個棋子上下左右四個位置中沒有被對方棋占據的位置叫“自由點”,這些概念是我自己構造的,不對應專業術語,能說清楚問題即可。上圖四個方塊是自由點,如果白棋把四個方塊都占據的話,那么圍在里面的黑棋就再也沒有自由點了,任何沒有自由點相連的棋都會被對方吃掉。

?

? ? ? 在圍堵對方時,可能會出現一些特殊情況:

? ? ? 在上圖左邊白棋形成兩個”眼“A和B,這種情況下黑棋就無法吃掉白棋。因為無論你下在A還是B,白棋都存在一個自由點,因此黑棋無論如何都形不成對白旗的圍堵,除非白棋足夠蠢能讓黑棋連續堵住這兩個點。

? ? ? 而右邊則不同,黑棋只要堵住C點,白棋就沒有任何自由點,于是所有白棋就全被黑棋吃掉。因此下棋時你不能下在沒有自由點的位置,除非你能形成圍堵把對方棋子吃掉。

?

? ? ? 當結束時,需要計算雙方的分數以便決定勝負。首先要計算死棋,也就是無法形成兩眼的棋子集合,或者是那些不可能再有自由點的棋子集合,死棋被認為是給對方吃掉了。

? ? ?圍棋有兩種計分法,一種是領土計分。棋盤上任何上下左右都被你的棋圍住的點叫領土點,計一分,對方每個被你吃掉的棋子也計一分。第二種叫區間計分,棋盤上任何一個上下左右被你的棋子占據的空余點計一分,你在棋盤上還剩下的棋子各計一分,通常情況下兩種計分法會得出相同的結果。在程序設計時,我們采用第二種計分法。

? ? ? 根據上圖,我們計算一下黑白兩棋得分,其中大×的棋就是死棋,三角形對應的是黑棋的領土點,正方形占據的是白棋的領土點。對于第二個落子的人,在使用領土計分時它會獲得6.5分做補償,在使用區間計分時會獲得7.5分做補償。多余的0.5分是為了防止出現平局。

? ? ? 根據上面棋盤我們算一下雙方得分。白棋有兩個?,對應死棋,同時還有一個棋被黑棋吃掉(在上面沒有顯示出來),因此黑棋相當于吃掉白棋三個子,而黑棋有兩個帶?是死棋,相當于被白子吃掉。

? ? ? 三角形有10個,同時被兩個帶?白棋占據的位置,總共有12個領土點屬于黑棋。上圖有15個小方塊,再加上兩個帶?黑棋占據的位置,因此白棋的領土點有17個。

? ? ? 除去兩個帶?死棋,黑棋還剩27個子。除去兩個帶?白棋,白棋還剩25個子。按照領土計分法,如果白棋是后走,白棋得分是17個領土點+2個死棋+6.5分補償=25.5分。黑棋得分是12個領土點+2個死棋+1個吃掉的白棋(沒有在上圖顯示)=15分

? ? ?按照區域計分法,白棋有17個領土點+剩余25子+7.5補償分=49.5分。黑棋有12個領土點+剩余27子=39分,無論何種算法,白棋都被黑棋多出10.5分。在最終結果出來前,如果一方覺得自己沒希望了,隨時可以投子認輸。


? ? ?其中還有一種情況叫ko需要注意,那就是規則要防止局面進入死循環

? ? ? 如上圖右邊,當黑子下了后會把A點處的白子吃掉。此時規則禁止白棋下在A點,因為那會把上方的黑棋吃掉,于是棋盤回滾到上一個狀態,如此就會讓棋局陷入死循環。白子必須下在除了A點之外的另一處,然后后續步驟中,白子才允許重新下在A點。因此黑棋基本上有機會把A點堵上,除非白棋下得很巧妙,讓黑棋不得不放棄堵住A點。

?

代碼設計思路

有關棋類的編程設計大多基于“樹搜索”

? ? ? ?首先代碼先評估當前有幾種走法,然后分別模擬給定走法,也就是上圖第二層。然后代碼繼續評估對方有多少種走法,也就是上圖第三層,然后根據對方給定走法后在一次評估本方有多少種走法,我們看上圖最下方的箭頭已經有很多個了,隨著層數的增加,箭頭數將呈現指數級擴張。

?

? ? ? 很多棋類,例如象棋,國際象棋,五子棋等都可以依靠樹搜索進行,唯獨圍棋不行,那是因為圍棋根據樹搜索,圍棋將會呈現出爆炸式增長,使得計算機根本無法在給定時間內進行計算,圍棋搜索數如下:


?

? ? ? 根據運算國際象棋在樹搜索經過4步后,樹的分叉有八十一萬,而對圍棋而言是四十億,經過5步后,國際象棋有兩千四百萬分叉,而對圍棋而言是一萬億,因此用樹搜索編寫圍棋程序,經過七八步之后樹的分叉會超過全宇宙所有原子數量的總和!

? ? ? 因此常規做法無法完成圍棋程序。在深度學習技術成熟后,電腦才能夠通過學習和運算,在這么多的分差中根據當前棋盤局面找出合理路徑。在后續的課程中,我們將利用樹搜索,蒙特卡洛搜索,深度學習,增強性學習等多種技術組合在一起,從而打造出一個與當初AlphaGo一樣強大的圍棋智能程序。

?

學習人類的棋譜,識別人類的走棋規律

?

?


Alphago-zero使用了增強學習

打敗柯潔的alphago要比打敗李世石時候的alphago要強很多了

?

參考:

https://www.jianshu.com/p/7ee554b3e02b

總結

以上是生活随笔為你收集整理的实现AlphaGo(一):围棋的基本规则和代码设计思路的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。