int[] piece_values = {0,1,3,3,5,9,99,0,99,9,5,3,3,1};Since we actually do not have to clear any of these at the start of every SEE-check (we keep track of the index and never use what existed there before) I simply moved them out of the method, making them static variables that are not cleared at each call.
int[] w_attackers = new int[16];
int[] b_attackers = new int[16];
int[] scores = new int[32];
This speeded up the SEE-check with about 30-40%. Imagine that. :)
Now SEE is not called that insanely often so in total this small change probably only accounts for a 5-10% speedup overall. But it is a reminder that you have to be careful with your initializations in Java. :)
The LMR and SEE additions to your program should give the program a great boost. I think your program is the strongest Java engine out there? Have you looked?
ReplyDeleteI admire your productivity!! Do you have a day job??
ReplyDeleteHmm, I know of 5-6 other Java engines and among those King's Out is probably the best. Mediocre is currently quite equal to King's out.
ReplyDeleteI should take the time to gather all the engines and get a little Java tournament going, might be interesting.
Thanks for the idea. :)
I am a computer science student so there is plenty of spare time to use up. :)
Well, enjoy it while you can. Once you code for a living, this will change, I can promise you. I get up at 5am to work on Vicki, and I have a bit of time in the evenings...(but then you're so tired that you can not be really very productive) Damn, I envy you! :-)
ReplyDeleteHi!
ReplyDeleteThank's for writing this very interessting blog! It's a joy to follow!
Your latest version is playing really solid chess!
One thing I have noticed is that Mediocre manages its time poorly when playing "x moves in y minutes" games. It usually reaches the time control with 30-40 % of the time remaining.
This behaviour probably costs a few ELO-points in tournaments wich use this format.
Thanks for the kind words. :)
ReplyDeleteWhile writing version 0.3 I made an attempt at a new time management algorithm and failed miserably, not sure what happened. I have been planning to make a new attempt now that version 0.3 is out.
But what you mention is very true. Mediocre only calculates the given time after each move and uses a certain percent of it. However, it would be very easy to adjust it so "x moves in y minutes"-controls would be handled more effectively.
Hi,
ReplyDeletefirst of all > great stuff !!
Really helpful for starting in chess programming.
Would be nice for late joiners
to have all the archived articles
in a more downloadable format, i.e. as one bundle with all *.html or in pdf format
Keep the fire burning :-)
bye4now, gilbert
Yes I know, as the blog has grown it has become hard even for me to find some of the older stuff.
ReplyDeleteI'm planning to put together a website with a collection of the guides and some sort of better overview.
Hopefully I'll get around to do it quite soon.