From Chessprogramming wiki
Jump to: navigation, search

Home * Engines * Rajah

Rajah (RajahX),
a chess program by Valavan Manohararajah. Its development started from scratch in early 1996. Rajah played the DOCCC 1996 and the Aegon 1997, and its design, like many programs influenced by Chess 4.5 [1], was described in ICCA Journal, Vol. 20, No. 2 [2]. Rajah is a leaf-evaluator and performs no pre-processing at the root or interiour of the tree. Rajah was further subject of research in the author's 2001 M.Sc. thesis on parallel alpha-beta search from University of Toronto [3].



Peng Zhaoqin facing Rajah by Valavan Manohararajah, Aegon 1997 [4]


Rajah uses a full width principal variation search followed by quiescence search [5], where the move generator only generates captures and promotions to a queen, where a first layer in pruning removes any capture that fails to bring the material score above a value based on alpha [6]. A second layer in QS performs SEE, to prune all moves with a SEE values less than zero [7]. Additionally, Rajah applies Null Move Pruning similar as described by Donninger in 1993 [8] with a depth reduction of two. It extends checks, recapturers and passed pawn moves to the 7th and 8th rank. Extension are switched off, when the search depth exceeds two times the current iteration depth.

The transposition table is used in both full width and quiescence search, the replacement strategy is the one given by Dennis Breuker et al. in 1994 [9]. The killer heuristic and history heuristic is used in the full-width search only.


Rajah's board representation relies on 0x88 [10], to take advantage of testing those two bits in target square traversal of move generation [11], and specially for the unique square difference property for attack detection. In his article, Valavan gives the C source snippet of a typical inner loop in move generation, e.g. a white bishop moving diagonally up:

target_sq = current_sq;
while (1) {
  target_sq += 15; /* the move up and left */
  if ( target_sq & 0x88 ) break; /* check for out of bounds condition */
  if ( board[target_sq] == empty) {
    /* add a non-capture move to the move list */
  } else {
    if ( board[target_sq] & black_piece {
       /* add a capture move to the move list */


Forum Posts


  1. David Slate, Larry Atkin (1977). Chess 4.5 - The Northwestern University Chess Program. Chess Skill in Man and Machine, reprinted (1988) in Computer Chess Compendium
  2. Valavan Manohararajah (1997). Rajah: The Design of a Chess Program. ICCA Journal, Vol. 20, No. 2, pp. 87-91
  3. Valavan Manohararajah (2001). Parallel Alpha-Beta Search on Shared Memory Multiprocessors. M.Sc. thesis
  4. Aegon 1996-97 Photos by Thorsten Czub
  5. Tony Marsland (1986). A Review of Game-Tree Pruning. ICCA Journal, Vol. 9, No. 1
  6. Günther Schrüfer (1989). A Strategic Quiescence Search. ICCA Journal, Vol. 12, No. 1
  7. mvv/lva vs SEE capture ordering test results by Robert Hyatt, rgcc, August 10, 1995
  8. Chrilly Donninger. (1993). Null Move and Deep Search: Selective-Search Heuristics for Obtuse Chess Programs. ICCA Journal, Vol. 16, No. 3
  9. Dennis Breuker, Jos Uiterwijk, Jaap van den Herik (1994). Replacement Schemes for Transposition Tables. ICCA Journal, Vol. 17, No. 4
  10. X88 board representations by Valavan Manohararajah, rgcc, April 17, 1996
  11. see Vector Attacks - Increment Vectors why the cheap looking 0x88 test is not so "smart", 0x88 is not so smart by Christophe Théron, CCC, June 13, 2000
  12. Misinformation about RAJAH in the ICCA by Valavan Manohararajah, rgcc, April 5, 1997
  13. Re: Misinformation about RAJAH in the ICCA - APOLOGY by Jaap van den Herik, rgcc, April 8, 1997

Up one level