Computer Chess Club Archives


Search

Terms

Messages

Subject: Re: Some questions.......

Author: Robert Hyatt

Date: 10:19:07 09/19/98

Go up one level in this thread


On September 19, 1998 at 11:14:40, Guillem Barnolas wrote:

>
>     I am currently developing a pascal chess program which I think will be
>quite weak, because to generate legal moves I'm generating all the moves and
>then discarding the ones that leave the king in check... Generating only legal
>ones seems quite tough.. I now crafty does, but considering it's in C and uses
>bitboards, it's quite difficult for me to understand it.. I tried tscp, but it
>uses the same technique that me (I should say i use the same that it uses..;) I
>have thought of some way of doing this, but seem a little weird... I'll try to
>explain in few words... I thought I could go from the king_position looking if
>there are friendly pieces blocking possible attacks...(I think I might have seen
>this in Crafty or some other program, as X_ray attacks...) and mark those
>friendly pieces...afterwards i go through all the board and for non-marked
>pieces I generate all the movements.. for pieces marked once I generate captures
>to the attacking piece and movements on that direction.. for the pieces marked
>more than once I generate no movements... I don't know If this would miss
>anything... I haven't implemented it because I'm still fighting with the program
>;-D...
>

this is not really necessary.  I generate legal moves only if I start off in
check, because it is more efficient (in my code) to generate only legal moves
than it is to generate a bunch of moves and cull them one at a time by noting
that the king is in check after making them...

But for the normal case, I generate all moves, and let the search at the next
ply reject a move from this ply if it can capture the king, which means that
move was illegal.  It doesn't happen often, *except* when you are in check. Then
almost all moves are illegal...




>     Another thing is I don't have principal variation storing quite clear... I
>saw in one page it's usually stored as a two dimension array, but don't
>understand quite well the updating part... I mean, If I'm on ply 4 and happen to
>find a better movement than the one I had before I still have to know If I was
>following the PV, because If not I would mess everything up...

in your q-search, you will do something like "score=Evaluate()"  then ask
if (score > beta) return beta;  If you get past that, this score is a candidate
to be backed up.  Whenever you "back up" a score, you also simply back up all
the moves that led to this score...  sort of a "matched set" of moves to lead to
a position and the score when you get there...





>
>     And to finish, I have been looking for some books on the subject but happen
>to see that all are out-of-prints one, except from the "Kasparov vs Deep Blue:
>Computer chess comes of age" which seems to be quite an historical aproach but
>seems to cover few technical aspects...
>
>     If you can help me on any of this subjects I would be very pleased....



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.