ABOUT resp
-----------

  I started development of resp in 2001 as a just-for-fun programming
  project in my spare time. It's the first chess program I ever wrote.


MOVE GENERATION

  The program uses 64-bit structures ("bitboards") to present
  information about the chess board. I use 20 bitboards, which
  are updated everytime a move is made/unmade. In my first
  implementations I stored the complete bitboards into a stack
  (class BBHistory) after every move, but found later that 
  recalculation is much faster than memory transfer. resp uses
  MMX optimized assembler routines for attack board generation
  of sliding pieces.


SEARCH

  My chess engine uses a negascout algorithm driven by an iterative
  deepening framework. It uses null move forward pruning, limited
  razoring and extended futility pruning. The (fractional) search depth 
  is extended on various events. The quiescence search uses a 
  static exchange evaluator (SEE) to discard futile moves.
  
  Evaluated subtrees are stored into a hash table
  using Zobrist hashing. Pawn structures are also stored into
  a special pawn hash table, everytime the static evaluation is called.
  
EVALUATION

  My first idea to write an evaluation function was an implementation
  of a method described in  DT_eval_tune.txt (A. Nowatzyk, Jan.2000).
  The basic idea is to maximize the number of grand-master moves
  the engine will find in a given pgn database. For that shallow
  subtrees are searched and evaluated and everytime the program chooses
  a move different from the gm move, the evaluation of the non gm moves
  are forced to a lower score. Via least square fitting the feature
  weights are recalculated.

  Although my implementation was able to improve the number of found
  gm moves, the resulting eval function was not satisfying: different
  pgn databases would result in different values for the feature weights.
  Right now the learning code is still in  the program (it has to be
  activated with a preprocessor define) but I didn't use it for my current
  eval function.
  

Peter Rosendahl, Feb. 2002
