Genesis 2.0
by Omid David Tabibi

Department of Computer Science,
Bar-Ilan University, Israel.
davoudo@cs.biu.ac.il
http://www.cs.biu.ac.il/~davoudo


BACKGROUND
----------

I started playing chess when I was less than 5 years old. Eversince, chess has
always been an integral part of my life. I used to participate in tournaments 
intensively and my Fide rating is about 2250 Elo at the moment.

The Genesis chess engine which I first released last year, was created mainly
for research purposes, as computer chess is the subject of my thesis.


FEATURES
--------

A feature that is unique to this engine, is that you choose the search algorithm.
Unlike other engines that have a fixed search algorithm (for example NegaScout +
null-move pruning), this engine can adopt any of the following algorithms:

NegaScout or AlphaBeta
Aspiration window size
Null move pruning on or off
Set the 'R' parameter of null-move search
Use standard or verified null-move pruning
Quiescence on or off (check extensions on or off)
Set hash table size or hash table off
Opening book on or off
And much more...

Type "help" for a complete list.

In addition, it displays many details of the search in a format illustrated
below:

------------------------------------------------------------
nodes 5259264  time 30.01  nps 175227
leaf 2547373  q 1379606  eval 2140416  lazy 3711044
null 1139343  null-cut 336300  null-err 16  fut-reduct 17554
hhits 764844  hexact 636583  hleaves 503305
hput 4081395  hoverwrites 1281045
best-order 1282075  1st-move-cut 1137107  hmove-cut 78662
leaves 48%  quiesc 26%  null 21%  ordering 83%
null-cut 70%  fut-reduct 3%  aspwin-suc 77%
hhits 14%  hoverwrites 31%  husage 53%
------------------------------------------------------------

Genesis 2 uses a book file named 'Genesis2.bok' (included in the zip package)
which is a simple text file, i.e., you can edit it or create new books.


INSTALLATION
------------

You can use this engine both in command line mode and Windows mode. For command
line mode, just run the file 'Genesis.exe' then type "help" for a list of 
commands. Type "default" to return to default settings (optimal settings).

This engine is compatible with Tim Mann's WinBoard graphical interface for 
Windows.

You can either download the file 'genesis_wb.zip' from my website which also
has a configured WinBoard included, or you can download WinBoard at 
http://www.tim-mann.org/chess.html and set the setting as explained below.

After downloading WinBoard, go to WinBoard directory and open the file 
'winboard.ini' then add to it the following lines: (assuming that this engine 
is at C:\Chess\Genesis\Genesis.exe)

In the "FirstChessProgram" part add "Genesis" /fd=C:\Chess\Genesis
In the "SecondChessProgram" part add "Genesis" /sd=C:\Chess\Genesis

It is recommended that you read WinBoard's help file.


OPTIONS
-------

In command line mode type "help" to display a list of commands. Here is a 
description of each command (every command should be in lower case):
Note: <n> stands for a number which you have to enter; for example to set hash
      table size to 64, you enter: h 64
      <f> stands for a file name which you have to enter; for example to save
      the position to file 'myfile.txt', you enter: save myfile.txt
      <s> stands for a string; for example to load a position, you enter 'fen'
      followed by a string in FEN format; e.g.:
      fen rnbqkb1r/1p2pppp/p2p1n2/8/3NP3/2N5/PPP2PPP/R1BQKB1R w KQkq - 0 6

ab ............ use AlphaBeta search algorithm (instead of NegaScout)
about ......... display engine information
alarmon ....... computer makes a beep sound after it moves
alarmoff ...... alarm off
autod ......... each time computer makes a move, the board will be displayed.
                (by default the board is not displayed after each move, this
                is good to play blind chess, which is a hobby of mone!)
autodoff ...... turn auto-display off
bench ......... run the benchmark. before running the benchmark type "default"
                to restore the default settings.
board1 ........ simple board
board2 ........ two color board (dark squares are shaded)
book <n> ...... use opening book in which if <n> is equal to 1, the opening
                mode will be [random on], which means that the engine will
                choose the opening randomly from opening book. if <n> is set
                to 0, mode will be [random off].
                By default the mode is [random off].
bookon ........ use opening book (the book file is 'Genesis2.bok')
bookoff ....... turnoff opening book
d ............. display the board
default ....... restore default settings. (set the engine to maximum strength)
fen <s> ....... load position from string <s>
fut <n> ....... futility pruning on (depth = <n>)
futoff ........ futility pruning off
h <n> ......... use hash table of <n> Megabytes
hoff .......... turn off hash table
iidon ......... internal iterative deepening on
iidoff ........ internal iterative deepening off
load <f> ...... loads a position which is saved in file <f> (the position 
                should be in FEN format)
new ........... start a new game
ns ............ use NegaScout search (instead of AlphaBeta)
null <m> <n> .. use null pruning in which:
                the parameter 'R' in null-move search algorithm is set to <m>.
                to use standard null-move pruning enter parameter <n> as 0.
                entering parameter <n> as 1 (which is default) will make the
                engine use verified null-move pruning.
nullon ........ null-move pruning on (without changing other null-move
                parameters)
nulloff ....... null-move pruning off
on ............ computer plays for the side to move
off ........... computer is set inactive (it doesn't play at its turn)
ponderon ...... pondering on
ponderoff ..... pondering off
pv ............ print pv starting from iteration <n>
quit .......... quit the program
resign <n> .... computer resigns if its score is smaller than <n> (by default
                this value is set to -1200). Note that <n> should be a negative
                number. Value of a pawn is about 100, so if you wan't the
                computer to resign if it's about 8 pawns behind, type
                "resign -800". It is strongly recommended that you don't modify
                the default resign value.
resignoff ..... resign off, computer never resigns.
save <f> ...... save the position to file <f>. The position is saved in FEN 
                format.
sd <n> ........ set maximum depth to <n> plies
st <n> ........ search <n> seconds for each move
staton ........ show search lines and statistics
statoff ....... hide thinking
undo .......... take back a move
win <n> ....... set aspiration window size to <n>
winoff ........ aspiration window search off
x <n> ......... use quiescence search. If <n> is equal to 0, check extensions
                are turned off, and if <n> equals 1, check extensions
                are conducted.
xon ........... quiescence search on
xoff .......... quiescence search off
? ............. move now (when computer is thinking)

Enter the move in coordinate notation, for example g1f3 or a7a8q
And do not forget to always use lower case.

When you modify the settings, they are saved on exit to file 'Genesis200.ini'.
For example if you turn off null-move search, it will remain inactive next
time you start the engine.

For best performance enter "default" to restore default settings.


ALGORITHMS
----------

Genesis uses NegaScout/PVS, verified null-move pruning, selective extensions,
history heuristic, transposition table (hash table) and internal iterative
deepening. Each of these options can be disabled or modified.

The backbone algorithm of Genesis is verified null-move pruning which we
introduced in:

Omid David Tabibi and Nathan S. Netanyahu:
Verified Null-Move Pruning,
ICGA Journal, Vol. 25, No. 3, pp. 153--161, September 2002.

Our results have shown that verified null-move pruning with R = 3 performs
considerably better than standard null-move pruning with R = 2, both in terms
of constructing a smaller search tree, and having greater tactical strength.

You can find this paper at http://www.cs.biu.ac.il/~davoudo/pubs.html


VERSION HISTORY
---------------
(Dates are in European format; e.g. 3.4.02 is 3 APR 02)

2.0 (17.3.03)
- Improved most of the data structures and algorithms
- Modified the evaluation function
- Added pondering option
- Added analysis mode support
- Added support for more WinBoard commands
- Improved check extensions
- New book format
- Fixed all known bugs from previous versions

1.10 (8.1.03)
- Fixed a bug in data structures
- Modified check extensions
- Added an option to set futility pruning depth

1.09 (7.1.03)
- Implemented futility pruning
- Modified quiescence search (about 75% less q-nodes)
- Improved null-move pruning
- Improved data structures (thanks to Dann Corbit)
- Fixed a bug in loading positions under WinBoard

1.08 (10.11.02)
- Improved transposition table
- Modified evaluation function
- Improved aspiration window search
- Modified check extensions
- Added support for loading and editing positions in WinBoard
- Printing the PV as soon as a new PV is found
- Better display of thinking
- Scoring from white's view
- Added an option to load FEN string from stdin
- Fixed a bug in PV
- Fixed a bug in loading positions

1.07 (4.7.02)
- Improved null-move pruning
- Modified evaluation of pawns
- Slightly modified king tropism evaluation

1.06 (16.6.02)
- Improved null-move pruning
- Improved selective extensions
- Improved opening book. (The big book file can be downloaded at my website) 

1.05 (7.6.02)
- Modified check detection code resulting in 10% NPS speedup
- Improved repetition detection
- Slightly modified evaluation of pawns
- Added an option to turn off check extensions
- Save and load in FEN format
- Better display of variations

1.04 (25.5.02):
- Improved opening selection
- Improved null-move pruning

1.03 (7.4.02):
- Added the resign feature
- Modified evaluation of passed pawns
- Slightly improved king safety

1.02 (6.4.02):
- Improved null-move pruning

1.01 (4.4.02):
- Added an option to choose random opening (random on/off)
- Fixed a bug in opening book

1.0 (3.4.02):
First release!


UPDATES
-------

You can download the latest updates for this engine at:
http://www.cs.biu.ac.il/~davoudo



THANKS
------
I would like to thank the following people:

Dann Corbit for his invaluable suggestions and assitance in improving Genesis.
David Dahlem for designing the logo. (Genesis.bmp)


CONTACT
-------

Feel free to email me for any bug reports, suggestions, constructive (or
destructive) criticism, etc. Your comments are highly appreciated!

If you are running an engine tournament with Genesis taking part, please send 
me the games and results if possible.

On my website "Omid's Computer Chess Website" you can find the latest computer
chess articles and research. You can find my computer chess related
publications at http://www.cs.biu.ac.il/~davoudo/pubs.html

Email:		davoudo@cs.biu.ac.il
Website:	http://www.cs.biu.ac.il/~davoudo


Copyright  2002-2003 Omid David Tabibi.
