2012-01-16 6 views
1
function negamax(node, depth, α, β, color) 
    if node is a terminal node or depth = 0 
     return color * the heuristic value of node 
    else 
     foreach child of node 
      val := -negamax(child, depth-1, -β, -α, -color) 
      {the following if statement constitutes alpha-beta pruning} 
      if val≥β 
       return val 
      if val≥α 
       α:=val 
     return α 

したがって、上記のは(ウィキペディアからコピーされた)私のnegamaxコードで、次のようにそれが呼び出された場合:Negamaxは常に正の値を返しますか?

その後
negamax(origin, depth, -inf, +inf, 1) 

、この関数は関係なく、常に我々が呼んでいるものの深さの正の値を返します。で機能する。これは、ヒューリスティックな値そのものが常に正であることを前提としています。

答えて

0

はい、リーフノードの評価スコアが正の場合、正の値が負の値で返されます。これは、カラー値による乗算が達成するものです。再帰的なネガマックス呼び出しが奇数回ある場合は、最終的な否定を取り消すために、常に反対の否定が行われます。奇数回の再帰呼び出しでは、色は常に-1になるからです。再帰呼び出しが偶数であれば、すべての否定はキャンセルされ、色は1になります。これにより、戻り値は影響を受けません。

color == -1でnegamaxを呼び出す場合は、正しい値を取得するためにその呼び出しを無効にする必要があります。つまり:

-negamax(origin, depth, -inf, +inf, -1) 
関連する問題