Pruning and Transposition Tables
PSU CS410/510GAMES
Lecture 7
July 13, 2000
- Other Pruning Techniques
  
  - Quiescence search
    
    - Horizon Effect is classic problem; don't stop
    in middle of exchange and guess
    
- Determine quiescence by seperate heuristics or by
    variance in root value
    
 
- Principal Variation Search (PVS) = Korf: ``best-first
      minimax''
    
    - Idea: trust eval in interior of tree to prune
    ``bad'' moves early
    
- Trick: always extend (leftmost) path determining root value
        (variant of AB)
    
- Suffers from ``early mistake'' problem: fix by depth
        cutoff (common), weighting, sampling, etc.
    
 
 
- Transposition Tables
  
  - Game trees are graphs: e.g. Tic-Tac-Toe has
    
    - 9! = 362880 possible games
    
- 3^9 = 6561 possible positions
    
 
- Dynamic Programming: remember value of game
  states rather than rediscovering them; remove
  transpositions
    
    - Comparing game states expensive: use hash table
    
- Any hash table implementation will do: quadratic,
        open, etc.
    
- Tricks are available for fast hashing of game states
    
 
- Problems
    
    - Must keep track of all the state: player on
        move, etc.
    
- Some games are clocked, e.g. chess
        ``50-move'' rule
    
- Not enough memory: need replacement strategy
    
 
- Replacement strategies
    
    - FIFO (replace oldest): works for games with local loops
    
- LIFO (replace newest): better in general, since
    leverage is best early
    
- Random: models LFU, but harder to implement
    
- ``Interesting'' = different from heuristic?
    
 
 
- Narrowing the window: zero-window search
  
  - Idea: fail to disprove AB window
  
- If window wildly wrong, can quickly find
      subtree that proves it
  
- Example: card games
  
- MTD(f) (outline by Aske Plaat)
    
    - The narrower the AlphaBeta window, the more cutoffs
        you get, the more efficient the search is. Hence
        MTD(f) uses
	    only search windows of zero size.
    
- Zero window AlphaBeta calls return
        bounds. At the root of the tree the return bounds
        are stored in upperbound (after
	    AlphaBeta ``failed low'') and lowerbound (after
        AlphaBeta ``failed high''). The bounds delimit the
        range of possible
	    values for the minimax value. Each time MTD(f)
        calls AlphaBeta it gets a value back that narrows
        the range, and the
	    algorithm is one step closer to hitting the
        minimax value.
    
- Storing nodes in memory gets rid of the overhead
        inherent in multiple re-searches. A transposition
        table of sufficient
	    size does the job.
    
- It is more efficient to start the search
        close to its goal. Therefore MTD(f) needs (and can
        make use of) a good first
	    guess.