Computer Chess Club Archives


Search

Terms

Messages

Subject: Symbolic: Status report 2005.03.03

Author: Steven Edwards

Date: 12:55:06 03/03/05


Symbolic: Status report 2005.03.03

Automated matches between Symbolic's toolkit and Gnuchess have been used to test
the toolkit's time allocation and check for gross programming errors that might
only show up in an extended tournament environment.  These matches are run by
xboard and are useful for keeping the machinery busy.  With relatively fast time
controls like G/120+12, the toolkit can manage about a 40% score against
Gnuchess.  But in a recent series of games at a G/3600 time control, the toolkit
has done a bit better with a 60+% score.  Here's a part of the match log:

2005.02.28 00:58:42 Run finish
2005.02.28 00:58:42 Ponderings: 2387  successes: 1078  rate: 0.451613
2005.02.28 00:58:42 Game count: 29
2005.02.28 00:58:42 Win/Lose/Draw: [14 7 8]
2005.02.28 00:58:42 Scoring rate: 0.62069

This was intended as a 100 game match, but some unknown bug in Gnuchess caused
it to terminate unexpectedly in an KPK position in the 29th game.  This behavior
has been seen a number of times before and I think it may be related to an
iteration limit overflow fault with draw detection.  Compared with Gnuchess,
Symbolic and Crafty are more reliable; I don't have any recent memory of either
hanging during xboard mediation.

Why does the toolkit perform better at longer time controls?  Most likely, this
is because of the relatively high overhead the toolkit encounters at the start
of each search doing root position analysis.  But it's only once per search, and
so its overall impact is decreased as the allocated time per move is increased.

--------

I re-read the mid 1970s paper "Plans, goals, and search strategies for the
selection of a move in chess" by Church and Church.  In the paper, the authors
describe a program that plays speed chess; each search involves selecting a goal
and then selecting a move that best meets the intent of the goal.  Remarkably,
the program played reasonable moves using only a one ply search.  More
remarkably, the program was implemented on a DEC pdp12 minicomputer, a twelve
bit CPU and a whopping 8K of memory.  Having once spent time coding for the
machine's close cousin, a pdp8/e, I can appreciate the cleverness demonstrated
by the program's authors.

However, the plans and goals of the program are so rudimentary that they are
hardly deserving of the names.  There are only a few different plans/goals, and
the related move generation and evaluation routines are quite simple.  Yet the
performance is impressive, and this is due in large part to the various "whole
board" matrix operations the program performed to select a move based on global
considerations.  From their work, I've decided to duplicate and extend their
matrix functionality in Symbolic's ChessLisp source.  My guess is that this will
provide a faster way to accomplish certain pre-planning tasks than using a more
general production system as seen in Wilkins' Paradise program.  (Of course, a
production system may be used for those tasks that are best met using pattern
recognition.)  In Symbolic, the rough equivalent of the above program's
multi-purpose matrix data type is the "SymBoard", a base type that includes a 64
element vector and several associated routines.

The first Lisp subsystem built using the SymBoard type is the target tracker
facility.  A tracker is a Lisp object that assigns a unique ID to each chess man
that is used to track that man throughout the dynamic scope of a plan.  Each man
in the current ("now") position can be tracked to a unique origin square in a
starting ("org") position.  This capability is required to maintain a positive
identification of men that remains invariant across move sequences.  It a
solution to the classical frame problem within the context of man location.
Also, tracking also supports distinguishing among multiple men of the same color
and piece kind.  With tracker support, an enemy man can run but it can't hide.

A tracker has two very fast access routines used by Symbolic's planner and
explorer knowledge sources.  The first access routine takes a tracker target ID
and returns the target's current square (nil if the target has been captured);
the second takes the index of an occupied square and returns the target ID of
the occupant.  A piece created via pawn promotion inherits the target ID of its
precursor pawn.  A tracker also has an internal do/undo memory that simplifies
external dependencies.

Testing of the tracker facility shows that, on a 700 MHz machine, it takes the
ChessLisp interpreter about 150 usec to update the tracker with a move and about
100 usec to undo an update.  These numbers include the automated Lisp storage
reclamation; the result is that the facility is quick enough to be almost
unnoticeable in the context of a program with a (targeted) five nodes per second
tree search rate.



This page took 0 seconds to execute

Last modified: Thu, 15 Apr 21 08:11:13 -0700

Current Computer Chess Club Forums at Talkchess. This site by Sean Mintz.