一、前言: 1.現況:現代社會多元,許多傳統文化或技藝,受到各種大環境的衝擊,若沒有求新求進步,很容易就因此而式微。 古老的象棋除了以競賽模式進行之外,結合了電腦資訊科技,就可以讓人有耳目ㄧ新之感,因而便於推廣。 目前電腦對弈程式以西洋棋發展最為完善,已有多次打敗世界棋王的紀錄。而近來象棋程式也曾有打敗特級 大師的壯舉,目前預估電腦的棋力已經可至六、七段左右,以中國大陸(佼佼者如『象棋奇兵』)、台灣( 如『象棋世家』)發展較好。 2.電腦象棋的功能: (1)訓練棋手:電腦不會失誤的特性,人類棋手與其對弈,更可訓練縝密的思考,以增加臨場穩定性。 (2)資料整理與分析:電腦具有強大的記憶與運算功能,將棋譜資料輸入後,方便人類棋手查詢;且在寫入特殊的分 析程式後,便可運用其強大的運算力找出棋譜中尚未出現的實用新變。 (3)推廣與行銷:電腦互動性強,並可製作高品質的聲光效果,而資訊業為當前主流,利用電腦與象棋的結合,推廣 上可以事半功倍。 (4)學術性:有些原本尚未定論的殘局,經過電腦長期窮舉累積資料庫後,已經得到了結論。然而那些艱深的殘局在 實戰中因為限著影響,雖致使實用性較低,然而如能統整成學術論文,價值則極高。 (5)輔助競賽棋規的判定:依據明確的定義邏輯,電腦已經能把所有相關的條件列出,使棋規程式能得到非常有參考 價值的判定。將來也許可以應用於競賽場所,輔助殘判裁決有爭議的棋局。
二、對弈程式的特點: 1.計算力:具有電腦的速度、準度,並以窮舉為主,輔以具有的象棋知識來除錯之。 2.棋力之客觀性:棋力不受其他條件影響,如體力、情緒。因而可以保持棋力的穩定性。 3.知識永久性:得到的知識不會有忘記的疑慮,而且具有長久的累積性。 4.具體直接的判斷模式:優劣勢的判斷偏向於絕對的技術性,沒有相對的策略面。對所有的對手均用一樣的模式來對弈。 (除非操作者對弈前事先設定之)
三、象棋知識與程式的結合方向: 1.量化:必須給予一個score,來作為局勢優劣的判斷。 2.絕對與相對: (1)演變:電腦弈棋的知識都是從絕對的部分開始,然後相對的部分逐漸建構,與絕對的部分相輔相成,甚而可能代替 絕對的部分。 (2)定義:給予電腦知識必須明確而可行,抽象的部分需由人將之具體化。以《三子歸邊》為例,首先就要定義出『邊』 的範圍。 (3)子力: 絕對部分─即子多則優。 相對部分─如《寡士怯雙俥》、《缺象怕炮攻》、《殘局馬勝炮》等子力型式,將子力的絕對分數做個調整。 (4)位置: 絕對部分─即該兵種在棋盤上的絕對位置。舉例來說,兵在花心位置可得到的加分。 相對部分─與其他子力(包括己方與他方)相對位置來做調整分數的依據。例如:無根車包受到紅俥牽制時,分數應 予調降。 3.database的取得:使用資料庫來記憶一些基本定式,可大幅減少電腦的運算時間,並增加正確的機率。這裡多用於開局 與殘局。 (1)開局: 1 將書面棋譜以人工來輸入。 2 使用程式將現有的電子棋譜轉檔成可用的資料庫。 3 實戰對局的統計:將他人下過的棋局(如網路對局等)下載後,將變例的勝敗和局數統計出來,來當做電腦選用開局的參考。 (2)實用殘局: 1細分勝和(優劣)程度:對於定式殘局,給予電腦不同程度(例如:必勝、巧勝、必和等等)的分數。使電腦於後中 局兌子時,選擇有利於自己的子力。 2殘局窮舉程式:殘局子力較少,目前的發展,已經可以給予雙方特定的子力,將位置與走法完全窮舉,然後把所有棋 形與走法導入資料庫供電腦使用。例如:傌兵對士象全(包括所有位置與走法)。 4 棋規與循環的關係:弈棋常會進入循環盤面,有無犯例必須告訴電腦,否則實際臨局將窒礙難行。所以棋規判斷的知識對於 電腦而言,重要性不亞於弈棋的知識。(以下均以亞洲棋規為例) (1)允許與非允許着法的定義:首要必須定義『叫將』、『根』(包括真根或假根)、『捉』等等常見術語,然後進一步判 定是否為允許著法。 (2)score的調整:進入允許的循環盤面時,依據電腦變著後,可接受的優劣程度分數的誤差範圍,使電腦自行判斷是否變 著。因此並非一定要變著,或者一定不變著。 (3)算度的影響:進入循環盤面後,電腦所計算的深度必然減低,致使電腦的棋力大受影響。因此必須在程式上給予電腦切 斷循環盤面的計算過程。 5 test與debug:經常性的測試,並依據發生的問題來解決錯誤,是電腦象棋不可或缺的步驟。以下簡單介紹可能遭遇的問題與 解決方案: (1)知識與程式互相干擾:給予的知識有時會與之前所寫的程式碼有所衝突,因此造成弈棋程式發生無法預期的錯誤。 (2)知識的重複性:不同概念的審局函數寫進去後,常常因為兩種知識中的一小部分有所重複,因而造成電腦對局勢判斷的 錯誤(通常是過於樂觀)。 (3)知識的不合理性:專家給予電腦知識時,仍無法完全跳脫主觀意識,而造成電腦局勢判斷的弱點。 (4)典型局面的test:為了避免上述問題在實際對弈中產生,常要找許多與該知識相關的盤面來進行測試,以衡量其正確性。 (5)新版vs舊版:讓加入知識的新版程式,與未加入知識的舊版程式相互對弈一定盤數,測試新版勝率是否提高。 (6)人vs電腦:人與電腦的思維並不完全一樣,因此還需常常要跟人類棋手對弈,來找出電腦下棋的弱點。 (7)評估計算深度與廣度的影響:當加入許多審局函數後,雖然電腦會得到較為全面的棋藝知識,然而卻常常造成計算深度 的下降。所以還需要衡量知識與算度孰輕孰重的取捨問題。
四、今後要致力的部份: 1.象棋各階段的顯著差異:開、中、殘局概念完全不同,且過渡時期較為模糊,有時還會大幅跳躍,定義難度相當高。 2.概念性部分缺乏自省:電腦弈棋程式雖然現在已有自我學習的功能,但其實均由勝敗結果存入開局面的database,而無法從 棋形概念做自我提升。 3.知識增加後所影響的算度與速度:礙於硬體等條件影響,即使能不斷增加正確的知識,若無法解決算度獲速度減低的問題, 對棋力的影響不一定是正面的。
五、結語:在不斷充實或修正電腦弈棋的方向的同時,電腦對弈程式有助於訓練或幫助人類強化棋力與穩定性,且未知的象棋知識 (或有探討空間者)也可利用科技而求突破,因而創造傳統與現代化雙贏的局面。
《後記》本篇是以增進電腦棋力的學術性為主,市售商業軟體有時會故意設定讓電腦失誤,來增加弈棋的娛樂性不盡相同。然而以 推廣象棋而言,實為以不同的方式來達成一樣的目的,故均應該提倡。 另外不論學術或商業上,或者以棋手或教學路線來說,人們應具有以下觀念:電腦是一種人發明的『工具』,給予人們的 應是『協助』,而非『威脅』。心量必須放寬,對人類的進步才有正面的影響。
郭武昌執筆、徐讚昇(中研院資訊所副研究員)審稿
|