|
Post by steadyeddie on Dec 18, 2016 6:08:46 GMT -8
SteadyEddie is a player based on the sample player (it's still in the "sample" package!) from the GGP course. So it's written in Java, and uses all the Player infrastructure.
One huge advantage SteadyEddie has is that I use Steve and Andrew's propnet from Sancho. That's because when I wrote my player when doing lesson 5 or whatever, I was disgusted to find I could only do 1 rollout per turn in chess, and MCTS needs more than that ;-) So I used their propnet to generate moves and states, as a temporary workaround to writing a decent MCTS player, intending to come back and write my own. But I never did, or never got close if I'm honest. I'm afraid turning GDL into possible moves and states never excited me as much as everything else.
Because I am only using the Propnet for the basics, I don't used Sancho's factorizing powers (or any of the other cool higher level stuff they've written), so SteadyEddie is not factorized.
I also have no hard coded heuristics, like pieces. So it's even more depressing that SteadyEddie can perform at all well by just throwing CPU at the problem.
You can't look a gift horse in the mouth. But also it's true to say that the Sancho propnet is not always stable. Luckily when it seems to fail, it does most often in games that are a bit random anyway. In this case SE drops to using the prover propnet with no MCTS; just rollouts at 1 ply with one thread. That is effective at games like Battlebrushes, where these days SE appears to win with roughly equal frequency to everyone else.
|
|
|
Post by Andrew Rose on Jan 27, 2017 12:26:45 GMT -8
Yes, Sancho definitely has its rough edges in some of the more unusual games. Unfortunately, it has got worse in this regard since you took your cut. Now even some of the more mainline games generate invalid propnets (e.g. there has definitely been a regression in some flavours of the Queens puzzle). I don't quite know where it all went wrong. If I ever get back into it properly, this is surely high up the priority list.
|
|
|
Post by Andrew Rose on Jan 27, 2017 12:28:19 GMT -8
It's interesting that you managed to separate the state machine from everything else. I sometimes wonder about creating a new player, starting with the state machine but doing many other things differently. However, the effort involved in extracting it (especially with the optimised representations for states, moves, etc.) has always seemed like a big hurdle. Any hints?
|
|
|
Post by steadyeddie on Jan 30, 2017 16:21:25 GMT -8
Well, again, I can't look a gift horse in the mouth, but OMG, you guys did not make it easy. I'd send you my shim, except it's an embarrassment to software engineering, and one day it might fall into the hands of someone I preach good practice to.
I recall sitting in a car park, with the worlds worst hangover, on an annoyingly sunny day, trying to even find the APIs, between kids sports matches. Horrible. But attempt 10 (to this day c:\ggp-new10), was the one.
I spose I should sent it to you. Open source and all that. I'd better give it a clean.
I did wonder if my shim would be of use to newbies. But if I were to start again, I'd start from Richard's most excellent gurgeh post in C++.
|
|