題:
評估國際象棋位置的準確方法是什麼?
Charles Menguy
2012-05-10 21:48:36 UTC
view on stackexchange narkive permalink

我對計算機象棋AI算法(有機會在某個時候進行開發)感興趣的時間已經很長了,例如 Minimax,而作為這些算法的核心組成部分,是所謂的評估功能,以確定什麼是板配置,什麼是板。

在換句話說,給定國際象棋棋盤的配置,您如何確定它對自己有利,並以何種置信度?

例如:

  • 如果如果您擁有中鋒,這是非常有利的。
  • 如果您的棋子多於對手,那麼這是有利的。
  • 如果您輸掉了皇后,這是不利的。
  • 如果典當行將被提升,這是有利的。
  • ...

因此,我想根據有關國際象棋遊戲的一些專家知識,就如何創建 good 評估功能尋求一些建議。如果可能的話,還可以設置一定程度的可喜度(例如,介於1到100之間是非常不滿意的。)

最後的想法是能夠創建一種可以在樹中查找的算法直至一定深度的可能性,並基於對玩家有利而對對手不利的條件來評估下一步的最佳配置(考慮到將來的幾步移動)。但是如果沒有良好的評估功能,該算法將一無所獲。

我認為這個問題在StackOverflow上會做得很好。關於Chess AI的問題已經很多
我曾想過將其發佈在SO上,但是我幾乎可以肯定它會因為沒有建設性或真正的問題而被關閉。也許,如果我需要更多地強調代碼本身,但是我認為對於評估功能,它需要有關國際象棋的知識,而不是有關代碼或算法的知識。
多麼準確。唯一完全準確的方法是您輸贏還是平局。
八 答案:
Eve Freeman
2012-05-11 08:39:43 UTC
view on stackexchange narkive permalink

這是一個很好的起點。材質比較是關鍵(且容易),然後您可以進行調整以考慮位置方面,例如開放等級/文件/對角線,典當結構等。

https://www.chessprogramming.org /評估

mishaturnbull
2015-03-01 09:17:29 UTC
view on stackexchange narkive permalink

我覺得我在這個答案上有些遲了,但是-我也在製造引擎。源代碼使用Python(即使您不知道,也相當容易閱讀),如果您希望閱讀,可以在此處使用。當前活躍的“啟發式”列表(在發佈時):

  • 更發達(越靠近另一側)的作品越好
  • 更接近晉升的棋子好的
  • 根據遊戲的不同階段(開場,中局,結束階段)分別對國王評分。
  • 如果玩家同時擁有兩個主教,則會獲得獎勵
  • 如果玩家有城堡防禦,則可獲得獎勵
  • 孤立的棋子(周圍沒有任何東西的棋子)不好
  • 加倍的棋子(同一文件上的兩個棋子之間沒有間隙) )不好
  • 擁有全部8個棋子並不是一件好事,並且會受到懲罰(它們會使板子雜亂無章並妨礙道路)
  • 看看這個很棒的評估功能(也可以使用)
  • 與主教在同一個顏色正方形上有更多棋子的主教會受到懲罰(在擁擠的情況下效果不佳)
  • 尚未實施,但已計劃:在更為擁擠的情況下,騎士會獲得獎勵

其中一種要點,我提到了遊戲的“階段”(例如開頭,中間遊戲,殘局),如果您希望將其包含在引擎中,則可能會遇到與我相同的問題:沒有明確的界線將它們分開。我用來確定遊戲進入哪個階段的功能使用了一些東西:

  • 棋盤上的材料數量(一旦殺死一塊棋子,就會將游戲標記為不在開場狀態)
  • 移動次數(無論什麼動作,開局次數均少於6整)
  • 移動皇后區(如果同時移動了兩個皇后,則將游戲標記為中間遊戲)

這個答案可能很長,很晚並且沒有主題,但是我希望無論如何它都會有所幫助。

Pablo S. Ocal
2014-09-21 02:53:40 UTC
view on stackexchange narkive permalink

加上@Eve Freeman的答案,我建議您查詢一下世界上最好的計算機引擎Stockfish如何評估給定位置。 源代碼已打開,因此您可以免費進行操作。我認為您要查找的具有評估功能的文件是此文件

Chromatix
2019-07-01 04:48:45 UTC
view on stackexchange narkive permalink

令人驚訝的是,事實證明,當評估功能為 random (隨機)時,Minimax引擎將表現良好;這就是所謂的“比爾效應”(Beale effect),其產生原理是有利於您給更多選擇權而對手較少選擇權的頭寸。持續有效地生成隨機評估的一種合理方法是針對該位置生成一個Zobrist哈希(使用在遊戲開始時隨機選擇的係數),然後直接從哈希中得出隨機評估。

在相反,AlphaZero和Leela使用大型神經網絡對搜索到的每個位置進行了非常複雜的評估。用人類的話來描述該網絡有效實現的功能是不切實際的,但是毫無疑問,它比Stockfish的評估功能更有效。 AlphaZero的研究論文表明,這種方法最適合蒙特卡洛樹搜索,而不是Minimax。

另一方面,如果您想開發一個分析引擎來幫助您人類參與者或評論員了解職位的細微差別,可能有必要使用已建立的物質價值和職位理論來實施常規評估功能。 EdSchröder的 Inside Rebel 就是一個很好的例子,記錄了在Mephisto的幾台國際象棋計算機中使用的備受讚譽的引擎的主要設計特徵。您可能希望使用某種程度的機器學習來確定評估功能中每個元素的相對重要性,並逐個分解這些元素以在GUI中呈現。

A passerby
2015-09-23 16:46:39 UTC
view on stackexchange narkive permalink

我認為國際象棋程序員在設計評估功能時往往不依賴於強大的國際象棋棋手的知識,而是嘗試不同的元素,然後在遊戲中與其他引擎進行比較,並決定保留哪些內容。拉里·考夫曼(Larry Kaufman)談到了他對人類的理解是什麼的看法,但這聽起來像拉吉利希(Rajlich)和戴利(Dailey)都是注重結果,並且沒有完全接受考夫曼的思想。 Zach Wegner比較了Rybka和Fruit的評估功能。 Rybka可以代表前進的領域之一是根據零件的特定組合併入物料失衡表。考夫曼也為此寫了一篇文章。

http://www.top-5000.nl/ZW_Rybka_Fruit.pdf http://danheisman.home.comcast .net /〜danheisman / Articles / evaluation_of_material_imbalance.htm

techcraver
2015-01-10 11:27:18 UTC
view on stackexchange narkive permalink

此鏈接是恕我直言的最佳起點。我將此作為我自己的國際象棋程序&的起點,發現它也易於理解和使用。

https://chessprogramming.wikispaces.com/Simplified+evaluation+function

您能否簡要介紹一下鏈接的內容?
Wikispaces網站現已終止。指向新家的更正鏈接:https://www.chessprogramming.org/Simplified_Evaluation_Function
jaxter
2016-10-21 21:20:08 UTC
view on stackexchange narkive permalink

簡而言之,調整國際象棋引擎參數的標準方法是:

  1. 定義參數
  2. 給出參數標稱(起始)值
  3. 運行引擎以查看其性能
  4. 調整參數值以嘗試改善其性能
  5. ol>

    然後重複步驟3和4,直到完成達到您的性能目標。

    通常的做法是建立一個實驗室,讓引擎在比賽中與對手對抗。引擎使用兩種顏色進行多種遊戲。感興趣的主要比賽涉及運行參數值為A的引擎與參數值為B的引擎。

    您可能會猜到,這種方法的結果很大程度上取決於:

  • 選擇的參數
  • 如何指定參數
  • 在整個測試過程中如何改變參數值
  • 發動機如何運行(有限的層深度,有限的時間,靈敏度等)

這種方法還消耗了很多時間。

和創新方法)是研究人員在2010年使用遺傳算法技術開發的,用於:a)指定參數,b)調整參數值。研究人員首先針對一組一組大師遊戲運行了一個帶有一組初始參數值的發動機,以查看它是否可以有效地選擇“最佳舉動”。 “最佳舉動”定義為大師級舉動*。記錄失敗的地方。然後,嘗試另一個參數值集,並確定相對性能與先前運行的對比。

然後,嘗試使用“優勝劣汰”生存的遺傳算法原理來組合參數值的程序化方法。在這裡,“最適合”是指產生最接近理想值的輸出的那個。 (這也恰好是對“最小二乘擬合”回歸的統計技術的一種雙關,該技術用於判斷近似值的質量。)

只有在發現可以模仿通用汽車在實際的發動機比賽階段開始得相當好。在這個階段,不同的參數值集再次相互抵觸,這一次是直接。遺傳算法改進技術被應用來連續產生更好的發動機。

在此研究項目中,使用了36個參數,包括零件的所有材料價值以及許多更常見的戰略評估條件,例如向後的棋子,弱方格,主教對等。但是,研究人員添加了一些新參數,例如每種工件的“國王壓力”,“機動性”值,在與國王相鄰的文件上滾動,在半開放文件上滾動,在箭頭上攻擊國王。 -/ b- / g- / h-文件,經過的棋子與後衛國王之間的分隔等等。

不幸的是,研究人員並未詳細說明如何提出這組參數,以及他們可能測試並拒絕了哪些替代參數。可以合理地假設它們以更大的集合開始,並(通過反複試驗)確定哪些對性能有最大的影響,哪些無關緊要或微不足道,因此可以刪除。

如果這聽起來可能有用,則可以在 此處 找到研究。

*關於研究人員使用的方法的一個階段的警告是有序的。約翰·納恩(John Nunn)在他的理解棋步移動簡介中,選擇了“ ...強大的宗師之間的艱苦比賽...”來說明他的主題。然後,他補充說:

讀者可能會很驚訝地發現,裝飾本書中游戲的問號數量眾多。當然,您可能會認為,只有30款遊戲可供選擇,所以找到一些有聲遊戲應該很容易。但是,我可以向您保證不是。 ...幾乎可以在任何復雜的,艱苦的比賽中發現錯誤...我從來沒有覺得自己的比賽完全準確,所以我個人並不覺得這些啟示令人困擾。但是,有些人可能會發現很難承認人類下象棋的準確性不像以前想像的那樣。

Nunn博士提出的觀點表明,研究人員設置國際象棋的最初方法是要求他們模仿大師級動作的引擎參數可能會存在缺陷,因為人為遊戲存在缺陷。實際上,眾所周知,引擎的性能已經比人類好。

因此,設置初始參數的更好方法可能是將新引擎與匹配現有的高級引擎

SmallChess
2017-04-19 06:47:57 UTC
view on stackexchange narkive permalink

有一個不錯的網站:

https://hxim.github.io/Stockfish-Evaluation-Guide/

它為您介紹了Stockfish函數的工作方式。

enter image description here



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