| 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 贏了,機器智慧又一次戰勝了人類
|
|
|
![]() |
![]() |
| 實用資訊 | |
|
|
| 一周點擊熱帖 | 更多>> |
| 一周回復熱帖 |
| 歷史上的今天:回復熱帖 |
| 2015: | 全英賽落幕,諶龍最大贏女單全軍完蛋! | |
| 2015: | 值得一看:第二次核打擊——福島核危機 | |
| 2013: | 阿黛: 風雞(續) | |
| 2013: | 火箭-太陽 | |
| 2012: | 喜孜孜痛飲茅台,笑盈盈看小林子宰鹿 | |
| 2012: | 小林黔驢技窮了。 | |
| 2011: | 哈哈,很熱鬧嘛,看來俺得說兩句嘍。 | |
| 2011: | 整理博客,讀兩篇老ID的帖感慨萬千! | |




