Computer Chess Club Archives


Search

Terms

Messages

Subject: Re: Alternatives to Using Position Eval FUNCTIONS?

Author: Robert Hyatt

Date: 10:12:38 11/27/02

Go up one level in this thread


On November 27, 2002 at 13:02:19, Bob Durrett wrote:

>On November 27, 2002 at 12:01:24, Robert Hyatt wrote:
>
>>On November 27, 2002 at 09:49:55, Bob Durrett wrote:
>>
>>>
>>>Disclaimer:  I do not know the specifics of how position evaluation is
>>>accomplished in the top chess engines.
>>>
>>>
>>>From what I have read here, position evaluation is typically accomplished with a
>>>"function."  This function appears to be fairly simple.  Otherwise it would be
>>>called a position evaluation "subprogram."  Since a large number of positions
>>>are evaluated, the evaluation must be very quick and hence simple.
>>>
>>>Less processor time is available for searching if the amount of processor time
>>>used for position evaluation is increased.  In an extreme example, one might
>>>devote 90% of the processor time to position evaluation.  I do not know what
>>>this percentage is in practice. If a huge number of positions are evaluated,
>>>then the total amount of processor time devoted to evaluation might be large.
>>>
>>>It seems that there is a tradeoff between complexity of position evaluation and
>>>the number of positions evaluated. My impression is that current engines devote
>>>only a very small percentage of the processor time to evaluation of any given
>>>position.
>>>
>>>Devoting a large amount of processor time to position evaluation of each
>>>individual position would make sense, or so it seems, only if the evaluation
>>>were very very good.  Essentially, this would mean evaluating only a relatively
>>>few positions but evaluating them extremely well, using a complex position
>>>evaluation subprogram.
>>>
>>>In theory, a perfect evaluation subprogram would have to evaluate only one
>>>position for each move made.  Maybe someone would say that chess engines do just
>>>that.  They "evaluate" the position after the move was made.  They just do it
>>>using search algorithms.
>>>
>>>
>>>So, this leads to the following question:
>>>
>>>Has anybody yet explored the option of using complex evaluation subprograms
>>>[which do not rely primarily on the use of search algorithms] for position
>>>evaluation?
>>>
>>>Bob D.
>>
>>
>>You definition of "simple" is very vague.  For example, is Crafty "simple" or
>>"complex"??
>
>I was definitely NOT saying Crafty is simple!!!!  I was referring to the
>position evaluation code only.  Also, I meant simple in a relative sense, when
>compared to more complex evaluation, or to the overall chess engine program.

I understood you to mean that.  Since my evaluation takes over 50% of the total
time that is used, it is far from "simple"...  I'd call one "simple" it it is in
the 10-15-20%
range at worst... and even that would not be just a couple of hundred lines...

>
>>Whichever you choose, Crafty spends over 50% of the total time used for
>>selecting a move in executing the evaluation code.
>
>**********************************************
>
>That is very interesting information!  It would be nice to have similar
>information for other chess engines.  [Hint.]
>
>**********************************************
>
>To me, the gyrations a chess engine has to go through [alpha/beta and such],
>other than execution of the evaluation "function," seem more like overhead. Of
>course, this is merely my perception.  Hard-core alpha/beta devotees would
>probably take exception to this characterization.  : )
>
>>I have a hard time calling 50% of the total
>>time "simple" myself,
>
>Well, there are two things being discussed here:  (a) percentage of total
>processor time used to perform position evaluation, and (b) complexity of the
>evaluation versus the number of positions evaluated per unit of time.
>
>>since this is about 4,000 lines of code, roughly...
>
>Are all 4000 lines of this code within a single compact "function"? [Or is the
>code somehow spread out here and there, willy nilly, throughout the Crafty
>code?]

It is almost all in evaluate.c...  there are a few bits and pieces stuck over in
utility.c
as those are functions that can be used for evaluation _and_ other things...




>
>It would be easy to feel that a 4000 line evaluation "function" might not be
>"simple," but when taken in the context that you have 51,000 lines of code in
>Crafty, 4000 doesn't sound like much at all!!!!!!!!
>
>Anyway, my questions are driven by my perception that the evaluation function
>size/complexity would be a critical parameter in chess engine design, at least
>for the types of chess engines that do a lot of searching.
>
>I really would like to know about the tradeoffs that determine:
>(a) the number of lines of position evaluation code as a percentage of the total
>number of lines of code of the chess engine, and
>(b) the percentage of total processor time to devote to position evaluation.
>
>How does the chess engine programmer decide which percentages to use?  What are
>the optimal percentages?  [Please assume a mature chess engine (like Crafty),
>and not one just started]
>
>Bob D.



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.