Hi Rob,

To you only.

Looks like you are setting up a nice little framework there. Since you
are going to the effort, you might want to have a look at my solution;

MyPlayer won the match: 71-25
MyPlayer took 2.249866 seconds, Standard took 93.019248 seconds

Not sending this to brag. Actually, I think your code is a lot nicer.
I'm betting James will just ignore my solution in his quiz summary
again. Fair enough too. It's not very rubyish and it is a bit complex
but it does a good job. If you'd like to clean it up and incorporate
it into your framework, please do. And since you are using gdbm, maybe
you'll even be able to get my transposition tables to work. Currently
I have to refresh them each turn (which would be completely pointless
if I wasn't using MTD(f)). If you want to read more about the MTD(f)
algorithm I found a good explanation here;

http://www.cs.vu.nl/~aske/mtdf.html

Anyway, hopefully my code will be of interest to someone. ;-)

Cheers,
Dave

PS: if you didn't find my solution in the mailing list, it's here;

http://www.davebalmain.com/pages/kalah

On 12/12/05, Rob Leslie <rob / mars.org> wrote:
> Here's my solution. I'm still playing with it, but I'm posting it now
> for the benefit of others to look at.
>
> The solution is divided into strategies and players. Strategies are
> used to estimate the value of any particular board configuration to a
> player without any deep recursion or other lengthy operations. The
> only strategy I have now is BasicStrategy.
>
> Players implement a tactic for finding the best move based on the
> strategy. StandardPlayer uses a 6-ply alpha-beta search, and plays
> fairly well. The ply depth can be changed by modifying the DEPTH
> constant.
>
> ThreadedPlayer is an experimental time-limited player using a
> multithreaded search. It doesn't tend to play as well or as fast as
> StandardPlayer. CachingPlayer is an experimental GDBM-based caching
> player I wrote in an attempt to improve StandardPlayer's performance.
>
> RandomPlayer simply plays random moves, and has been useful for testing.
>
> To play, you can:
>
>    ruby -r ./match.rb -e 'run(StandardPlayer, RandomPlayer)'
>
>
>
>
> --
> Rob Leslie
> rob / mars.org
>
>
>
>
>
>