評估函數

評估函數

評估函數指的用來評估研究對象整體以及局部性能的一種數學函數模型。

實現方法


就評價方法而言主要有兩個類型。第一個是“終點評價”(),即用你擅長的評價演演算法,簡單地評價每個局面,而不受其他局面的影響。這通常會給出好的結果,但是非常慢。因此一些程序設計師用了下面的訣竅,稱為預先計算(),一階評價(),或棋子-格子數組()。
在我們對一個局面搜索最佳著法之前,我們認真檢查棋局本身,在數組格子,棋子類型中保存計算值。在搜索過程中評價任何局面,只要簡單地把棋子在數組中的值加起來就行了。我們不必每一步都重新計算它們的和,在把棋子從一個格子移到另一個格子時,可以用下面的公式更新評價值。

評估函數的內容


典型的評估函數,要把下列不同類型的知識整理成代碼,並組合起來:
(1)子力():在國際象棋中,它是子力價值的和,在圍棋或黑白棋中,它是雙方棋盤上棋子的數量。這種評價通常是有效的,但是黑白棋有個有趣的反例:棋局只由最後的子數決定,而在中局里,根據子力來評價卻是很差的思路,因為好的局勢下子數通常很少。其他像五子棋一樣的遊戲,子力是沒有作用的,因為好壞僅僅取決於棋子在棋盤上的位置,看它是否能發揮作用。
(2)空間():在某些棋類中,棋盤可以分為一方控制的區域,另一方控制的區域,以及有爭議的區域。例如在圍棋中,這個思想被充分體現。而包括國際象棋在內的一些棋類也具有這種概念,某一方的區域包括一些格子,這些格子被那一方的棋子所攻擊或保護,並且不被對方棋子所攻擊或保護。在黑白棋中,如果一塊相連的棋子占居一個角,那麼這些棋子就不吃不掉了,成為該棋手的領地。空間的評價就是簡單地把這些區域加起來,如果有說法表明某個格子比其他格子重要的話,那麼就用稍複雜點的辦法,增加區域重要性的因素。
(3)機動():每個棋手有多少不同的著法?有一個思想,即你有越多可以選擇的著法,越有可能至少有一個著法能取得好的局勢。這個思想在黑白棋中非常有效,國際象棋中並不那麼有用。(它也曾被使用,但現在國際象棋程序設計師們把它從程序中去掉了,因為它看起來對整個局面的評價質量沒什麼提高。)
(4)著法():這和機動性有著密切的聯繫,它指的是在黑白棋或連四子棋中(以及某些國際象棋殘局中),某方被迫作出使局面變得不利的著法。和機動性不同的是,起決定作用的是著法數的奇偶而不是數量。

如何組合評價要素


把評價要素組合起來,通常就和上面所說的一階評價一樣,評估函數是很多項的和,每一項是一個函數,它負責找到局面中的某個特定因素。為什麼要用加法呢?因為這種簡單的組合信息的方法在實踐中非常好用。棋類程序應該充分嘗試各種可能的評估函數:把各種勝利的可能性結合起來,包括很快獲勝(考慮進攻手段),很多回合以後能獲勝,以及在殘局中獲勝(國際象棋中就必須考慮通路兵的優勢)的可能性,然後把這些可能性以適當的方式結合起來。