設萬維讀者為首頁 廣告服務 聯繫我們 關於萬維
簡體 繁體 手機版
分類廣告
版主:彎刀
萬維讀者網 > 競技沙龍 > 帖子
gugeren: 棋類軟件是怎麼寫成的
送交者: gugeren 2016年03月09日13:59:16 於 [競技沙龍] 發送悄悄話

棋類軟件是怎麼寫成的

初到美國上學時,電腦老師要求我們用軟件寫“井字棋”(tic-tac-toe)的對弈軟件。

相信大多數中國人小時候都玩過“井字棋”:在畫成“井”字的9個方格里,2人分別畫上“O”或“X”。哪一位先使得自己的符號在連續縱、橫或斜角3格里相連,算贏。

我根據小時候下這種棋的心得寫了一個簡短的軟件交差。

在與一起上課的一位從俄羅斯來的學生交流寫這個軟件的經驗時,他指出,要考慮到所有的9個格子的情況;就是說,軟件的第1步要考慮到9!(9x8x7……x1)這麼多種情況。

我們一起又想到,由於“井”字是對稱的3x3的圖形,因此情況就縮減到3種情況:中間格(僅1格)、側面格(4格)和角上(4格)這3種。

由此,我看了一些當時出版的有關棋類對弈軟件和人工智能的書。現在把當時的學習心得分享出來。

棋類對弈軟件的大致流程是這樣的:

1] 把所有可能的棋子走法都列出來。

2] 對每步進行評估。這是最主要的一個步驟:

a)一般做法是,建立一個或幾個用於評估棋子走法的方程,對方程中的各個變量(即棋手移動棋子到某個位置的考慮的各種原因)給予各種重要性(術語稱“權重 [weights]”)的估量;即重要性大的變量/因素的權重大些,反之小些。

最簡單的這種評估方程就是一個多元的線形方程(多元一次方程)。求出方程的值。

b)可能有些更“聰明”的評估方程,會根據具體的對手,在比賽現場用各種方法隨時修改每步的變量的種類和各個權重,這樣就可以更精確地對付對手了。

3] 根據2]中得出的最好的結果,去移動棋子。

4] 可能像好棋手那樣,軟件會對棋賽進行“復盤(重複棋賽的每步走法)”,以找出勝或負的主要原因及其“關節點”(在哪一步或哪幾步使得被動轉為主動的;或者主動轉為被動的),並據此修改評估方程。

5] 重複1]-4]的步驟。

簡而言之,這些對弈軟件就是“學習-進步-再學習-再進步”這樣一個重複往返的過程,與人們的實際學習情景類似。只是軟件不知疲勞,學習不倦罷了。

在國際象棋、中國象棋和圍棋3大棋類中,最容易寫出的是國際象棋對弈軟件,因為國際象棋使用64格棋盤,它的第1步走法最多只有64!種;況且國際象棋的第1步只有幾種棋子可以走,這就把64!種走法大幅削減了。

中國象棋也是類似情況。

而寫圍棋對弈軟件棘手的地方,就是原始的圍棋盤是空白的;從理論上說,圍棋的第1步走法有361!種。好在根據評估,棋盤上有一些地方在第1步是不會放任何棋子的,這樣才把361!種走法大幅削減下來。

其實,再複雜的數學問題,只要有數學模型及其方程,目前對電腦都不是大問題,只是計算時間的長短而已。

另外,棋類對弈軟件已經基本上把敵我每步的走法都進行了精確的評估,這當然比人類棋手僅根據自己或別人的下棋經驗來移動棋子厲害得多。

電腦不會像人類棋手那樣由於疲勞會出錯;目前電腦的計算速度夠快,可以做到人類棋手才走出一步棋子,軟件已經找到了回應的棋步;電腦的儲存量現在也夠大,可以把所有人類棋手的棋譜都輸入到電腦里(或者放在“儲存雲”里,在比賽時隨時調用)。

綜合以上這些,電腦打敗人類棋手,就沒有什麼稀奇了。

由於這已是20多年前的事情了,許多知識肯定已經過時,還請行家不辭賜教。

參考連接:

http://www.pingwest.com/why-is-alphago-so-great-and-what-is-deepmind-trying-to-achieve/

擊敗了李世石九段的圍棋人工智能“AlphaGo”究竟是什麼?


http://www.pingwest.com/alphago-vs-lee-sedol-first-round/

AlphaGo 贏了,機器智慧又一次戰勝了人類


0%(0)
0%(0)
標 題 (必選項):
內 容 (選填項):
實用資訊
回國機票$360起 | 商務艙省$200 | 全球最佳航空公司出爐:海航獲五星
海外華人福利!在線看陳建斌《三叉戟》熱血歸回 豪情築夢 高清免費看 無地區限制