CPW history

From Chessprogramming wiki
Jump to: navigation, search

Home * Engines * CPW-Engine * History

December 2014, Version 1.1

September 2008


  • display of book alternatives
  • FIX concerning illegal book moves
  • NEW: book moves can be selected by their frequency


  • a couple of int functions whose returned value has not been used renamed to voids
  • clearing of the search driver now done in search_run, not in time_xxx_go
  • more comments


  • in search procedures renamed smove m[256] to smove movelist[256];
"m" should be reserved for a single move
  • move_isPseudoLegal() replaced by move_isLegal() which tests for check


  • NEW: search_iterate() stops on one legal reply after searching to depth 4
  • new names and location of functions move_isPseudoLegal() and move_countLegal()
  • more comments in search.cpp
  • separated book.h
  • FIX: replies to moves excluded from the opening book ( again )

August 2008


  • small internal book (in case that book file is missing)
  • FIX: timing-bug


  • FIX: various bugs occuring in fast time controls
  • only legal moves are checked at the root
  • FIX: hash memory allocation change possible
total memory = hash + hash/4(pawn hash) + 4mb(opening book, etc)
  • FIX: communication bug, stealing cpu of opponent
  • FIX: en passant flag is not set when no pawn can execute en-passant capture
( which helps with opening book and increases the number of transposition table cutoffs )
  • change in delta pruning
  • a couple of range checks added
  • numerous opening book code fixes
  • simplification of move parsing routine
  • because of ChessWar, reintroduced badCapture() pruning in quiescence search


  • NEW: program can use a TSCP-like book, exclude some moves out of it and handle transpositions
  • changed time management + comments


  • NEW: program can use a TSCP book and handle transpositions


  • FIX: removed all compiler-warnings (more attention given to variable types)
  • FIX: correct output of mate-values
  • FIX: transposition-table crash fixed, when size set to 0
  • FIX: ==/= bug in eval.cpp
  • encapsulation of useKiller
  • slight changes with futility-pruning
  • created header file for transposition-table
  • NEW: 4% speedup through prefetching the transpositiontable entry


-FIX in pawn shield evaluation "=" replaced by "==" (aaargh!)


  • new pruning in QS (testing if a queen capture and/or promotion can improve alpha)


  • NEW: evaluation hashtable (currently disabled, since lazy eval performs much better,

but might become useful after a rewrite of evaluation function)

  • finding good configuration of compiler switches


  • further restructuring of search routines
  • NEW: aspiration search


  • separating setKillers() function


  • serious restructuring of root search functions (sepatating search_root and search_iterate)


-FIX: hash moves from lower depths used for sorting


  • NEW: contempt() function instead of constant


  • NEW: adaptative null move pruning
  • FIX: loop counter for killer moves initialized as 0, not as 1 (bad Pascal habits!)
  • FIX: in info_currmove() first move number is 1, not 0 (bad C habits!)
  • in search() variable move_to_make instead of a loop redetecting best move
  • in movegen.ccp vectors represented as constants (NE etc) not as numbers
  • in movegen.cpp unnecessary int functions changed to void
  • getting rid of is_futility compiler switch


  • NEW: Pawn-hashtables
  • NEW: fast_eval()
  • because of that changes futility pruning gives some benefit, so it's enabled now
  • added move_iscapt() and move_isprom() to improve readability


  • NEW: function slavMistake() that discourages blocking the center
  • NEW: futility pruning (currently disabled, as node savings do not offset speed loss)

July 2008


  • separating com_nothing() function
  • more customizable evaluation parameters


  • NEW: CPW.ini stores evaluation constants
  • Transposition table: The size is scaled down to the next lower power of 2
  • thus replacing the slow mod operation by a quick 'and' operation when generating the tt-index
  • reducing the tt-entry size from 24 to 16 bytes. (changing alignment)
  • stop tt_save from overwriting an entry with the same position of a shallower depth
  • com (uci-protocol): 'setoption name Hash value n' works now


  • TWEAK: reducing a score jump caused by castling
  • TWEAK: bringing down mobility scores and second lazy evaluation limit
  • TWEAK: penalty for the lack of pawns


  • TWEAK: raising piece/square scores
  • TWEAK: modification of evalFianchetto()


  • NEW: history heuristic
  • TWEAK: doubled pawns do not count as a double king's shield
  • TWEAK: expanded pawn center evaluation: support for e4 pawn also counts


  • NEW: basic fianchetto evaluation
  • NEW: console interface will accept only pseudo-legal moves


  • NEW: killer heuristics (ugly code in need of redesign, but gains a couple of percent nodes)
  • FIX: nodes per second calculation overflow problem fixed
  • NEW: more human-friendly output in console mode


  • NEW: console mode reacts to "st" and "sd" commands


  • separating the eval.h file for function not used outside eval.cpp (better encapsulation)
  • making use of 088_math.h and changing most of its functions into macros
  • TWEAK: rooks on open files near the king increase tropism
  • scaling of middlegame king evaluation affects also pcsq score
  • creating a eval_vect struct collecting partial scores
  • serious restructuring of eval.cpp
  • creating printEval() function giving some insight into evaluation components
  • FIX: fixed a bug with delta pruning (it does not prune promotions anymore)


  • better time management
  • FIX: time check done once every 1024 nodes, not in each node - massive speedup
  • optimization of doubled pawn eval (a table instead of multiple ifs)


  • NEW: PVS added
  • FIX: a check extension also at the root (hash results from a move ago will be used more consistently)
  • separated PIECE_VAL and SORT_VAL, simplifying the code and getting rid of problems with king value
  • in fillSq() and clearSq() the count of pawns on a file is kept, so doubled pawns and open files are finally evaluated
  • fillSq() and clearSq() don't update piece/square value for a king (this is done within eval.cpp)


  • FIX: check extension bug fixed

June 2008


  • FIX: leaf node hashing bug fixed
  • some move sorting experiments


  • repetition detection - from now on CPW becomes a chess engine (as opposite to almost-chess engine)
  • FIX: solved the bug with the hash-values when time is over (tt_save only saves the hash, when time_over == false)
  • FIX: solved the bug with the communication
  • null move implemented

Up one Level