Computer Chess Club Archives


Search

Terms

Messages

Subject: Re: Position-based learning glitch (THE SOLUTION)

Author: Robert Hyatt

Date: 10:12:26 06/20/98

Go up one level in this thread


On June 20, 1998 at 11:47:48, Stuart Cracraft wrote:

>
>On June 18, 1998 at 01:13:36, Hristo wrote:
>
>>On June 17, 1998 at 15:41:32, Robert Hyatt wrote:
>>
>>>On June 17, 1998 at 14:06:11, Stuart Cracraft wrote:
>>>
>>>>On June 16, 1998 at 17:52:41, David Fotland wrote:
>>>>
>>>>>If this is a PC, you should open the file in binary mode.
>>>>>
>>>>>On the PC, end of lines are stored as CRLF, and a file opened in
>>>>>ascii mode will convert LF to CRLF, adding an extra byte from
>>>>>time to time.
>>>>>
>>>>>David Fotland
>>>>
>>>>File was non-text binary structs at the time the message was posted.
>>>>Had already tried both w+b and w modes, both resulting in the extra
>>>>byte.
>>>>
>>>>To fix, I've converted to a wholly text flat-file ascii which adds
>>>>the ability for human editing and updates to the file to control learning.
>>>
>>>This is one of those approaches that I'd label "bad software engineering."
>>>
>>>IE you have a bug, so you change something and the bug goes away...  or
>>>does it?  In your case, I can't imagine that this is a system problem
>>>because my book and position files are binary, and they *never* pick up
>>>odd bytes.  If yours are, there is something going wrong, perhaps a wild
>>>store, perhaps an undefined variable.
>>
>>Perhaps, uninitialized variable(!) or a loop_counter going one more than it
>>should ... for(int iCount=0; iCount <= MAX_COUNTER; iCount) ...
>>
>>Best Regards.
>>Hristo
>>
>>
>>
>>
>>
>>> But I wouldn't rest until I had
>>>precisely "pinned the tail on the donkey" otherwise, such bugs have a nasty
>>>way of coming back again and again, until they are fixed.
>
>No --  it was not this.
>
>Credit for the suggestion that resulted in the fix goes to David Fotland.
>He suggested that the write's occuring were having an occasional
>\012 byte (for whatever reason) converted to \015\012. He indicated
>the file was being opened in the wrong mode.
>
>I was opening it with
>
>    FILE *lfp;
>    lfp = fopen(FILENAME,O_WRONLY|O_APPEND);
>
>I changed this to:
>
>    FILE *lfp;
>    lfp = fopen(FILENAME,O_WRONLY|O_APPEND|O_BINARY);
>
>After this, my position-based learning has been working fine. It learned
>42 new positions in last night's overnight testing (playing a total
>of 72 games at various time controls).
>
>--Stuart



this looks wrong based on my ANSI standard.  here is the prototype for
fopen from my unix man page:

SYNOPSIS
       #include <stdio.h>

       FILE *fopen( char *path, char *mode);

the second argument to fopen is a pointer to a char, which can have one
of several characters in the string, including "r", "w", "a", "+" and "b".

it looks like you are using "open()" rather than "fopen()" and simply
mis-typed the name in your post?  open() does have mode flags as the
second argument (int).




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.