I have to agree with Don. This year I went from knowing nothing about Monte Carlo and UCT to world champion. I tried more than 400 variations on the basic UCT algorithm or playout strategy during 6 months of intensive development. The engine is written in C and tuned from the start for performance. I couldn't have done this many experiments (often several per day), without a very fast engine, because I used 1000 game contests to see if there was improvement, to get statistically significant results. Part of the reason I won is because the basic UCT/MC is so fast that I can incorporate the slow Many Faces knowledge and still get over 10K playouts per second per CPU on 9x9.
David > -----Original Message----- > From: [EMAIL PROTECTED] [mailto:computer-go- > [EMAIL PROTECTED] On Behalf Of Don Dailey > Sent: Thursday, November 27, 2008 8:56 AM > To: computer-go > Subject: Re: [computer-go] Re: hex robot > > On Thu, 2008-11-27 at 13:03 -0200, Mark Boon wrote: > > You say you're going to try to make a prototype first and then when it > > shows promise, move to a more flexible language like Java. What > > language are you intending to use? It seems the wrong way around to > > me. Develop the prototype in a flexible language and when it seems to > > work, move it to a specific langauge that can leverage some specific > > CPU features. Seems to make much more sense to me. > > This is clearly the conventional wisdom, but I think it's a mistake for an > "ultimately" high performance game program, even for an initial > prototype. The supposed benefit is "freedom to experiment" and nail > down your algorithm, but I think this is a myth. > > I know that sounds like blasphemy, but when I've tried this before I > discovered that even though C/C++ is pretty gnarly, it has at least 3 major > advantages that might not matter for many other things, but is very important > for games: > > 1. It's about as fast as you will get. > > 2. It is superbly flexible. > > 3. It is not a memory hog. > > > To summarize my experiences, these wonderful high level languages are full of > limitations and you spent more time pulling your hair out to > work around them. Even the speed limitation is more of an issue that > you think, if you make heavy use of testing. If you don't make heavy use of > testing, you don't know what you are doing anyway. > > For instance, let's say you are experimenting with an algorithm. At some > point you must test that algorithm to see if it's better than what you were > doing, or to compare it with something else. You must play a large number of > games to measure superiority, unless it is overwhelming. > Most changes won't be overwhelming and even if it is you still need a lot of > games to know how overwhelming it is. With a slower language this is > correspondingly a slower process, negating much of the supposed > high level language advantage. I spend more time waiting on tests than > programming, even in C. > > Someone says, but if you have a large bank of workstations ... Well > if you do, it doesn't change the fact that you are wasting them. An > author for a strong playing engine for any game will be able to utilize > as much power as you give him for testing. If I had 100 workstations I > still would not use Ruby (a joy to program in and one of my favorites) because > what a stupid waste of resources it would be to make those 100 workstations > perform like only 2 or 3 workstations. > > > When developing the simple reference bot, and experimenting with ideas > to make it play better with fewer simulations, guess what? I am > performance bound - I cannot test ideas fast enough and this would be worse > with a high level language. > > A word about Java, which will probably produce some anger because I know > some of us here love Java. I have never seen a top level, non-trivial > game playing program in Java. I don't think you could build a strong > chess program in Java. Probably more due to memory issues than performance - > but I think for a top chess program performance would be > an issue too. Yes, it's possible to write some programs in Java that > are almost as fast as C, but probably not a chess program. You > really need system level programming type of flexibility that C provides, not > high level abstractions that the processor doesn't care about, and the > compiler cannot optimize away. > > An ad-hoc poll: What is the strongest Java playing program on CGOS? > > I can't see building a very strong MCTS GO program in Java, because even > in C, the tree does not fit in memory. > > My little reference bot can be done in Java however. The performance > loss is modest and memory isn't an issue. But the code is clearly > larger. Perhaps because I'm not a Java expert, it seems to take more > code to do the same thing in Java. All kinds of scaffolding required > to use the standard data structures. Much more typing. > System.out.printf() is just one example. Seems like a little thing > and I'm nitpicking - I see some value in this kind of anal-ism for big > projects especially, but it's pretty annoying. I cannot see an ease of use > difference between Java and C but I can imagine with large projects > Java has some advantages. With it's strong typing Java seems almost > as low level to me as C. > > To summarize, I have found over the years that just plain CPU/MEMORY > performance is the primary barrier not just to program strength, but > development time. > > You must measure development time 2 ways. One is how many man hours are > spent, and the other how much "calendar" time is spent. With a high > level language you can (in theory, but maybe not in practice) minimize man > hour time, by giving up calendar time and dramatically increasing > testing time (which need not involve the programmer.) But you also > would have to be willing to wait much longer between tests and be willing to > work piece-meal on a project while mostly waiting for tests. > You will also inevitably take more shortcuts in testing because it takes so > long. > > > - Don > > > > > > _______________________________________________ computer-go mailing list computer-go@computer-go.org http://www.computer-go.org/mailman/listinfo/computer-go/