題:
國際象棋引擎如何“思考”?
chubbycantorset
2013-03-26 10:17:30 UTC
view on stackexchange narkive permalink

我想知道的是如何對引擎進行編程以找到動作。我確定他們首先會計算出最強制的行,例如捕獲和檢查。但是,微妙而深入的位置移動又如何呢?他們似乎也很快找到了它們(通常來說。當然,他們偶爾會錯過這樣的舉動)。像這樣,他們如何編程以尋找安靜的動作/位置思想?他們不能僅僅強行採取任何行動,因為那會花費太長時間,因此應該有一些聰明的方法讓他們真正迅速地達到最佳行動。我對了解這一點很感興趣,因為我認為這也有助於玩家在現實世界中對遊戲進行思考。

國際象棋引擎每秒查看數百萬個位置,因此實際上它們可以查看所有位置,直到它們深入一些。
這是一個很棒的問題,我真的很喜歡答案。
基本上,他們會先使用搜索算法(例如minimax)進行搜索,然後使用預編程的啟發式算法評估位置。儘管最近有一些引擎(例如AlphaZero)通過玩遊戲來開發自己的評估方法。
五 答案:
Edward Goodson
2013-03-26 10:32:36 UTC
view on stackexchange narkive permalink

通常,國際象棋引擎使用決策樹。樹的根是當前位置,並通過合法移動可以為每個位置創建一個子節點。這些節點中的每個節點都有一個子節點,用於通過從其合法移動可以到達的位置。引擎將樹推送到由其功能和“思考”時間定義的深度。可以簡單地交叉引用可以以多種方式到達的位置,因此不必考慮多個位置。一旦創建了樹,計算機就會使用一組加權規則來分析樹中的最終位置,並開始刪除那些不需要的或對手可以阻止其到達的位置。以這種方式砍伐這棵樹,直到只剩下一招,然後計算機執行該舉動。

http://www.chess.com/blog/zaifrun上有關於創建國際象棋引擎的系列或文章,如果您想更深入地了解它們的工作原理。

好的答案,所以當您看到深度為30時,是否表示引擎已搜索30個深度的節點?另外,Ply是什麼意思?
我不確定在不做更多研究的情況下Ply代表什麼,我從來都不擅長使用縮寫詞。深度是指有多少個節點深,每個節點將移動一半,或者要深入到某個節點,可能取決於程序員。但是,我認為慣例應該是採取更多行動。
一層是一招的一半。國際象棋棋步是一個完整的“設定”,如果您將白+黑的話。一層是其中一半,所以只有一種顏色。
Daniel B
2013-03-26 20:24:59 UTC
view on stackexchange narkive permalink

您在問一個非常複雜的問題,但是回到基礎知識是件好事。有兩個概念需要考慮:

評估

如果(真正的)玩家顯示位置並詢問“誰在這場比賽中獲勝?”,他們將如何做?決定?他們很可能會檢查一些基本的東西,例如:材質差異,碎片的開發程度或“良好”定位,翻倍/隔離/連接/通過的棋子,(受控)打開的文件,向上的距離

現在,如果必須的話,您可以根據上面的方法,系統地計算位置分數。例如,您可以確定棋子的價值為1分,而經過的棋子的價值為0.3分多。孤立的或加倍的典當值可能會少一些,等等。如果將所有內容加起來,您將獲得當前位置的估計值。

這被稱為評估,基本上所有國際象棋程序都具有一種評估位置的方法(忽略通常非常脆弱的新穎AI國際象棋引擎)。

但是,微妙的深度位置移動又如何呢?

那麼,我們只是勉強刮過位置評估的表面。評估功能的實際實現可能是簡單的,以允許每秒評估更多職位(儘管以粗略方式),或者更複雜,從而導致評估的職位更少,但置信度更高。評估功能通常會考慮成百上千條不同的信息。

搜索

我從上面特別遺漏了一些信息,其中最真實的是玩家會立即考慮-有什麼方法可以讓雙方立即贏得比賽嗎?有沒有可見的搭檔或“懸掛”件?儘管將其瑣碎化很容易,但除瑣碎瑣事外,別無其他。

一個球員對組合擁有完全信心是什麼意思?最後,歸結為已經計算了所有選項。真正的玩家通常不會這樣做(瑣碎或非常強迫的隊友除外),在大多數情況下,我們只會考慮少數選擇,並排除其他似乎“無建設性”或明顯導致虧損的選擇。在計算過程中,我們經常會犯錯誤,例如我們可能會意識到移動順序的更改會導致威脅消失,等等。關鍵是要完全確定一個組合,實際上您需要計算得出結論的所有方式,並假設每個玩家只會做出盡可能最佳的移動給他們(這稱為“最小/最大”)。

現在,由於國際象棋的搜索空間(這是“未來所有可能的移動”所指的空間)要比計算機可以計算的空間大得多,因此需要做出折衷。就像人類一樣,計算機可以根據某些條件決定不考慮整個思路。這就是啟發式。值得一提的是,雖然只有通過蠻力才能真正確定一種組合,但複雜的評估功能通常可以檢測到威脅的存在(例如,我們可以計算叉,串機會等,以指導該方向的搜索) )。

最後,儘管計算機速度非常快,但是啟發式技術使它們能夠進行如此深入的計算。話雖如此,您可能會驚訝於現代引擎如何全面地計算,甚至在快速遊戲中也超過了3個動作。

因此,總而言之-評估功能內置了很多智能功能(即,它們考慮的功能比普通人類玩家要多),啟發式技術使計算機可以消除它認為可能不會採取的思路。結局很好,計算機速度也非常快。加起來,很難被擊敗。

Lynob
2013-03-27 03:34:13 UTC
view on stackexchange narkive permalink

我同意答案。

我記得通用 Roman Dzindzichashvili一個羅馬實驗室視頻中談論它,但我沒有記住那是什麼視頻(如果有人知道細節,請編輯我的答案)。

羅馬說, Fritz引擎的開發者是他的朋友。因此,羅曼(Roman)對弗里茨(Fritz)進行了測試,看它有多好,開發人員告訴羅曼(Roman),為了讓弗里茨做出複雜的決定(例如,犧牲材料以換取位置優勢),他們必須改變零件的價值,例如告訴程序一位糟糕的主教值得一分,對角線敞開的主教值得七分,騎士在近身位置值得五分...

我不知道每塊的確切數字,但是這就是它的工作方式,現在您的引擎在犧牲一個糟糕的主教上沒有任何問題,或者如果您能告訴他每個位置的每個零件的價值也沒問題。

編輯

另請參閱國際象棋編程Wiki

bjedrzejewski
2013-04-25 13:57:40 UTC
view on stackexchange narkive permalink

計算機不可能看起來足夠深(25層或更多)並檢查所有可能的移動。

什麼才是可能的稱為 Alpha-beta修剪 a的技術>,這意味著類似於人類的計算機(但性能更好)僅遵循有希望的延續。

計算機不斷評估位置(基於一些預先編碼的規則,評估材料,國王的安全性,活動,當兵結構等) ),並研究可能導致他們達到最佳職位的變體。

他們如何有效地做到這一點,以在一秒鐘內評估數百萬個此類職位,仍然與魔術接近。

>

總而言之,您是正確的,如果他們下戰略棋,他們將無法查看所有舉動,但是他們可以非常迅速地查看良好的舉動。問題仍然在於他們可以看到的長期計劃和視野,但這正在研究中(Rybka的分析速度要慢得多,但是下棋的位置要多得多,而Houdini則很浪漫,因為他的“機械心臟”計算了更多的動作並更具攻擊性)。甚至計算機都有自己的風格!

A passerby
2015-09-23 16:20:31 UTC
view on stackexchange narkive permalink

Alpha-beta修剪只是意味著,如果您發現一條對您不利的行,您將停止查看該候選移動,而嘗試其他移動。這是一種向後修剪,意味著您永遠不會錯過任何一個好舉動。相比之下,正向修剪更多地基於猜測。徒勞的修剪,後期裁員和剃刀都是正向修剪的類型,所有這些都取決於程序員對哪種類型的裁員的考慮。一個進行大量前期修剪的程序可能會錯過導致交配的驚人犧牲,但另一方面,它消除了很多非常糟糕的舉動,因此可以更深入地研究牠喜歡的舉動。

大多數引擎會全面搜索前幾步,並檢查所有可能性。如果沒有任何舉動失敗過高(例如,顯然比您已經考慮過的舉動更糟),則將搜索範圍擴大一點。通常,您將繼續探索每條線,直到到達靜止位置(不進行檢查,捕獲,配合威脅等),然後進行評估。安靜的動作在搜索樹中的深處可能不會被考慮,但是一旦您到達遊戲中的實際位置,引擎就會查看所有動作,無論安靜還是尖銳。實際上,有時您會在引擎輸出中看到這一點,這是因為引擎突然偏向於未考慮回退幾步的移動。

引擎計算速度如此之快,以至於他們考慮的並不那麼重要首先來看一下,但是對於人類來說,這是一個關鍵問題。喬納森·提斯達爾(Jonathan Tisdall)在他的書《立即改善國際象棋》中回答了這個問題。當您受到攻擊時,他建議您先看看最猛烈的動作。當您進行防守時,您首先要看最困難的路線。他在決定先看哪個動作時還引用了經驗法則(例如集中化,協調性)。

其他可能相關的書是伊曼紐爾·內曼(Emmanuel Neimann)的《無形棋步》和查爾斯·黑爾坦(Charles Hertan)的《強迫棋步》,他們都認為考慮尖銳姿勢中不太可能或令人驚訝的動作的重要性。 Hertan甚至談到要為這種戰術開發“計算機眼”。



該問答將自動從英語翻譯而來。原始內容可在stackexchange上找到,我們感謝它分發的cc by-sa 3.0許可。
Loading...