Page 3 of 7
Re: Writing bugs
Posted: Thu Jan 10, 2019 7:20 am
by Rebel
syzygy wrote: ↑Sun Jan 06, 2019 11:24 pm
Funnily enough I made the same mistake today, but the compiler caught it for me. (See
here.)
Re: Writing bugs
Posted: Thu Jan 10, 2019 7:22 am
by Rebel
hgm wrote: ↑Sun Jan 06, 2019 8:43 pm
Nothing wring with
if((x&1) != engine) ...
If you dislike parentheses, you could also do
if(x-engine & 1) ...
I wouldn't say adding unnecessary dummy variables is "the right way to do it".
Maybe not, but I left it, it's a great reminder!
Re: Writing bugs
Posted: Thu Jan 10, 2019 6:46 pm
by chrisw
Took me a while to track this one down .....
Code: Select all
while(the cows come home)
{
selfplay(engine_1, engine_1)
append game to file
engine_weights += initial_weights + random(small_variation)
}
which produces lots of varied games.
Then same thing in parallel, the equivalent of this loop:
Code: Select all
for thread in range(cores)
{
while(the cows come home)
{
selfplay(engine_1, engine_1)
append game to file(thread)
engine_weights += initial_weights + random(small_variation)
}
}
concatenate(files)
What could possibly go wrong?
Re: Writing bugs
Posted: Thu Jan 10, 2019 7:06 pm
by Ras
chrisw wrote: ↑Thu Jan 10, 2019 6:46 pmWhat could possibly go wrong?
If one thread finishes its game early and modifies the engine weights while the other threads are still playing, they might not like that? Also, it looks strange with the "+=" in both cases, but probably more serious in the parallel case.
Re: Writing bugs
Posted: Thu Jan 10, 2019 7:34 pm
by chrisw
Ras wrote: ↑Thu Jan 10, 2019 7:06 pm
chrisw wrote: ↑Thu Jan 10, 2019 6:46 pmWhat could possibly go wrong?
If one thread finishes its game early and modifies the engine weights while the other threads are still playing, they might not like that? Also, it looks strange with the "+=" in both cases, but probably more serious in the parallel case.
pardon the sloppy pseudo code.
no, it's a more general problem ...
Re: Writing bugs
Posted: Thu Jan 10, 2019 8:27 pm
by Fulvio
chrisw wrote: ↑Thu Jan 10, 2019 7:34 pm
no, it's a more general problem ...
https://stackoverflow.com/questions/212 ... om-numbers
Re: Writing bugs
Posted: Thu Jan 10, 2019 9:11 pm
by chrisw
Each parallel batch contains identical games is (was) the problem
Re: Writing bugs
Posted: Fri Jan 11, 2019 5:58 am
by mar
chrisw wrote: ↑Thu Jan 10, 2019 9:11 pm
Each parallel batch contains identical games is (was) the problem
Wait - could this possibly be related to the fact that you used Python, where threads are completely useless due to GIL and you have to use multiple processes?
Then your "bug" is directly related to the language "features" you used, not at all to the pseudo-code which tells absolutely nothing.
Re: Writing bugs
Posted: Fri Jan 11, 2019 6:59 am
by mar
Ok, seriously: you forgot to reseed, no big deal.
This is suspicious as well:
Code: Select all
engine_weights += initial_weights + random(small_variation)
as it would skyrocket the weights quickly. I believe the first += should actually be =
Re: Writing bugs
Posted: Fri Jan 11, 2019 10:41 am
by mcostalba
Code: Select all
for (x = engine; x < MAX_MOVES; x += 2)
If x <= MAX_MOVES happens to be correct, then make it wrong fixing the definition somewhere else: it should really be wrong