Computer Chess Club Archives


Search

Terms

Messages

Subject: Re: Position-based learning glitch

Author: Eugene Nalimov

Date: 10:03:52 06/14/98

Go up one level in this thread


Maybe you have to replace second argument of an "open" by
(O_WRONLY | O_BINARY)? My guess is that OS replaced 0x0D
by 0x0D 0x0A.

Eugene

On June 13, 1998 at 21:55:27, Robert Hyatt wrote:

>On June 13, 1998 at 16:32:41, Stuart Cracraft wrote:
>
>>Hi,
>>
>>My program has a strange problem. Perhaps sharing this
>>will make a lightbulb light up somewhere... I'm fresh out of bulbs.
>>
>>I added position-based learning awhile back. The goal
>>is to note those positions that are "significantly worse"
>>(about 3/4 of a pawn) at the final iteration than the best
>>of the previous iterations, mark them PERMANENT in
>>the hash table and write them out to disk.
>>
>>When a new game starts, hash table is zeroed, learned positions
>>are read back in and marked PERMANENT.
>>
>>Fine, it runs well with test positions from Slate's article in
>>the ICCA Journal. After three "shocks" it's written out
>>3x28 bytes of information and learns plays Slate's examples
>>well enough to play all the exact moves as Slate's Mouse program,
>>avoiding the bad variations it would have naturally gone into
>>and even avoiding a bad move in a position with quite afew
>>different pieces and locations than in the learned position
>>illustrating the sharing of learning experience in some class
>>of overlapping families of related positions in the search-tree.
>>
>>So I now let it run on ICS. After a time I come back and
>>it's written out an ODD number of bytes!!!  Impossible.
>>It is doing only write()'s of sizeof the hash entry which is
>>28 bytes. I use open and read to read it, nothing buffered.
>>The effect is when a "bad record" is written, the learn
>>file restore stops and the program continues but with
>>far fewer learnt positions than are actually in the
>>buggy learn file.
>>
>>The point is: how could it output an odd number of bytes
>>to the learn file on disk when the only thing it is written
>>is an even number of bytes each time, e.g.
>>
>>When the last iteration is significantly worse than the best
>>previous iteration:
>>
>>  /* set buf to hash table entry plus some additional info, omitted */
>>  fd = open(filename,O_WRONLY);
>>  write(fd,buf,28);
>>  close(fd);
>>
>
>should you not OR in O_APPEND with the O_WRONLY flag, so that you only
>add to the end?
>
>
>
>>and when reading them in at game's start
>>
>>  fd = open(filename,O_RDONLY);
>>  read(fd,buf,28);
>>  /* restore buf to hash table here, omitted */
>>  close(fd);
>>
>>the fd is not used for anything else except the above
>>and is closed after each use
>>
>>I've tried seemingly everything:
>>
>>  - disable all interrupts during write operation
>>  - stop using buffered fopen/fwrite/fflush/fclose in favor of
>>    unbuffered
>>
>>My learn file position entry is:
>>
>>typedef struct
>>{
>>   short side;
>>   int move;
>>   HashType hashkey;
>>   int score;
>>   short flag;
>>   short depth;
>>   long nodes;
>>} LearnHashSlot;
>>
>>where HashType is long long. Actually I could shorten
>>this and avoid storing *move* and *nodes* since they
>>aren't used but I don't see how that will help.
>>
>>How can write(...) possibly write out an odd number of
>>bytes with an even number of bytes specified in its call?
>>
>>By the way, the learn file positions are read at game startup
>>and written out after each appropriate search completes
>>by simply appending the latest position learned to the end
>>of the file, e.g.
>>
>>  fd = open(...,O_WRONLY)
>>  lseek(fd,0,SEEK_END);
>>  write(fd,buf,sizeof(LearnHashSlot));
>>  close(fd);
>>
>>Help Obi-Wan-Kenobi!
>>
>>--Stuart
>
>
>the above should work.  However, you said one thing that sounds wrong,
>but you probably wrote it in an unclear way.  You said you write out a
>position to the learn database when the score drops between the last
>iteration and the final iteration.  I assume you mean from one *search*
>to another search?  That's the way I do it.
>
>Also, I'd stop opening and closing the learn file multiple times.  Open
>it, seek to the end, write a position, seek to the beginning and store
>them
>in the real hash table when you want...



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.