Computer Chess Club Archives


Search

Terms

Messages

Subject: Computer chess schools of thought

Author: Russell Reagan

Date: 19:27:55 06/30/02


I'm curious if there are any schools of thought when it comes to computer chess.
Earlier today at work while I was trying to avoid working I was thinking about
two different approaches to developing an engine. One approach (which as far as
I know seems to be the most popular) is to pick your data structures based on
personal preferences, recommendations by more experienced developers, or
whatever the reason may be.

I was reading over some CCC archives on my break and I read about how Vincent
was doing something in his program (attacks I think), and I saw how he was able
to do attacks very fast, but my other thought was that he surely put some
thought into how he wanted to evaluate positions before he decided upon what
kind of data structures to use.

I believe the example was that he had an array that incrementally kept track of
how many pieces attacked a particular square, so when it came time to evaluate,
he had everything ready to go and I imagine he probably does other things like
this, and so his evaluation is probably very efficient.

So approach number two would be to decide how you'd like to evaluate positions
and then decide which data structures best accomplish that. For example, if
mobility is a factor that you think is very important, then you should choose
data structures that make it possible to calculate that efficiently and not do
extra move generation and recursive calls to calculate mobility. I've often
struggled with how to approach deciding on which data structures to use, and
this seems to at least be a better method (maybe) of choosing data structures.
This (to me) seems like a better way than saying, "I'm going to use 0x88 because
it can do fast edge detection and attack detection." If fast edge detection and
attack detection aren't significant factors in your programs evaluator, then
this might not be a wise method of choosing your data structures.

A final thought I had regarding this was that the ultimate wise decision would
be to choose the method that best suits your strengths as the programmer. For
example, let's say that ideally bitboards were the fastest (just for the sake of
discussion). Now, if your strength lies in programming ability, then that is
probably the right decision for you, since you will get the most out of that.
What if your strength is not programming though? What if you are a good
programmer, but your true talent lies in the ability to find abstract ways of
evaluating positions (IE ways that would work in a chess program)? If that is
your talent, then maybe you should choose the second approach (choosing your
data structures based on evaluation factors).

I'm not entirely sure if any of this would work better in practice than current
methods, but I think it sounds good in theory anyway. I like the idea of
"playing to your strengths" though.

Russell



This page took 0.01 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.