About Deep Pharaon 3.5.1

(previously known as ZChess)
Last update: Sept.3, 2006
Pharaon is a chess playing program by Franck Zibi.
It runs under Win9x, Win NT, Win 2000/XP and it is WinBoard and UCI compatible.
It supports computers with 1 to 4 processors

I - Some Background

The first chess program I wrote was HpChess for the Hp48 calculator. It is an assembler program released in 1995 and I am still receiving postcards and e-mail about it.
Due to the low speed of the Hp48, HpChess can look at a depth of only 3 plies: not enough to play decently against a strong player or to avoid even easy traps.
The best achievement of HpChess was to draw a blitz game in 1996 against a PC Chess program running on a P75.
I decided in late 1995 to convert HpChess from assembler to C to run it on PC platforms : what a bad idea :-)
HpChess is a slow program (50 / 100 nps) and uses extensively SEE (Static Exchange Evaluator), pins detection.
A quiescence search at this low speed, seems too costly.
In a fast PC (>Pentium 200), detection of pins is not as important: the program can realizes itself why it should avoid pins using a 'brute force' search. The SEE is also not as valuable as in a HP48 (most current PC chess programs use SEE for ordering moves and for cutoff in the Quiescence search).

So my attempt to use what I have learned in HpChess for a PC Class chess program was a failure.
(the only good idea I have learned in HpChess is to try any ideas, even if they don't seem at first very useful).

II - The second birth of Pharaon

In late 1996, I was very interested by the 'Object Oriented stuff', I decided to convert all the C source of Pharaon in C++.
It was a big re-write and this new version played its first game in April 1997 (see Pharaon history)

III - Deep Pharaon features

- Pharaon is an object oriented program written in Visual C++ / MFC
- WinBoard and UCI Compatible
- Support 1 to 4 processors (see option NB_PROCESSORS in the pharaon.ini config file)
- it is massively BITBOARD oriented (using rotated and attack BITBOARD [for all pieces of the board])
- Hash Tables (using multiple probe scheme) Pawn Tables, and King Safety Tables
- Iterative deepening
- SEE (both for move ordering and cutoff)
- NULL Moves (R=2/R=3)
- Heavy pruning (not only in QSearch: see pharaon.ini)
- For move ordering :

> 1. The hash-table move

> 2. The moves recommended by the SEE

> 3. The killer moves

> 4. Counter moves

> 5. History heuristic

- Table Base (up to 5 men ending)
- Position Learning :
  When Pharaon makes a big mistake, it stores the position where it blundered in the file z_learn.epd to avoid playing it again.
- Book Learning:
  When Pharaon is out of book in a bad position, it will store the bad book line in the file : z_learn.epd
- Tactical extensions to detect some common combinations
- Fair Play :-) Pharaon will offer a draw to a human opponent if he has made a mistake in a clearly better position.

IV - Where to find it

> The official web site of Pharaon is : http://www.fzibi.com/pharaon.htm
> You'll find their the latest release of Pharaon, some more info, and I will be pleased to receive any feedbacks.
> I'm always searching for ways to add new knowledge (for the positional part of the evaluation), if you find a position where Pharaon missed a good *positional* move, please send me the game and explain me why it is a good move ( I am a 2100 elo chess player), I will try to explain it again to Pharaon ;-)