Re: [computer-go] Re: Open source real time Go server

2010-01-18 Thread Michael Williams

Even though KGS is not open, you can still reverse engineer it, right?  Why 
not create an accessible web interface to KGS?

terry mcintyre wrote:
If accessibility is the only criterion, a client would do the trick; 
it would need an open protocol.


It's been a bit of an inconvenience that KGS does not publish an 
open-protocol interface.


As for other things we'd like to see improved, we could build a list. My 
pet peeve is the KGS score estimator, which is often wildly wrong. 
I've heard complaints about the implementation of the rules, and some 
have argued that it is not terribly bot-friendly.
 
Terry McIntyre terrymcint...@yahoo.com


Everyone wants to live at the expense of the state. They forget that 
the state wants to live at the expense of everyone. --Frederic Bastiat







___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/


___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/


Re: [computer-go] Re: Open source real time Go server

2010-01-18 Thread Michael Williams

Your point is obvious but that's a horrible proof since there are usually more 
than one legal moves from which to chose (that means it takes more time).

steve uurtamo wrote:

As for other things we'd like to see improved, we could build a list. My pet
peeve is the KGS score estimator, which is often wildly wrong.


an SE can't be any smarter than a computer player that runs in the
amount of time that you're willing to wait for the SE to calculate*.
so don't expect much.  ever.  recall that the SE runs locally in your
client.

s.

* proof: if it were, then it would make a better computer player by
just evaluating its score estimate at all legal board points and
choosing the maximum at each move.
___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/



___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/


Re: [computer-go] Paper about Mogo's Opening Strategy

2010-01-15 Thread Michael Williams

I'd like to read it, but that link doesn't work for me.  Is it correct?

Brian Sheppard wrote:

I recommend the paper
http://hal.inria.fr/docs/00/36/97/83/PDF/ouvertures9x9.pdf by the Mogo team,
which describes how to use a grid to compute Mogo's opening book using
coevolution.

Brian

___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/



___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/


Re: [computer-go] Paper about Mogo's Opening Strategy

2010-01-15 Thread Michael Williams

Never mind, the problem was on my side.

Michael Williams wrote:

I'd like to read it, but that link doesn't work for me.  Is it correct?

Brian Sheppard wrote:

I recommend the paper
http://hal.inria.fr/docs/00/36/97/83/PDF/ouvertures9x9.pdf by the Mogo 
team,

which describes how to use a grid to compute Mogo's opening book using
coevolution.

Brian

___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/






___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/


Re: [computer-go] GoChild Web2.0 is live on Google AppEngine

2009-12-29 Thread Michael Williams

Can you tell us English speakers anything about it?

幼儿围棋 wrote:

Hi All,

GoChild is designed for learning how to play Go efficiently.

Web App - http://gochild2009.appspot.com

Official site - http://www.gochildgame.com

Regards,
gosharplite




___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/


___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/


Re: [computer-go] GoChild Web2.0 is live on Google AppEngine

2009-12-29 Thread Michael Williams

Darren Cook wrote:

GoChild is designed for learning how to play Go efficiently.


Here is the English link for Michael :-)
  http://www.gochildgame.com/en/index.htm




Thanks!  I know how his wife feels -- I'm also still trying to figure out what 
to do after Ko is created :/
___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/


Re: [computer-go] Fuego 04 native Windows

2009-12-17 Thread Michael Williams

Jacques,

It has been some time since you made this.  Did you have to make changes to any of the original Fuego files?  I'm asking because I'm trying to figure out what 
would go wrong if I dumped current Fuego files into the Windows-buildable source that you provided.



Jacques Basaldúa wrote:
I have made a native Windows Fuego build compiled with MS Visual Studio 
2008.


Thanks to the Fuego team for making such a nice program free software !!

I will use it to measure some tree metrics to tune my own program and 
for a validation
experiment for an evaluation function I have developed. I will post 
results when I have any.


To test the binary I made it play on todays KGS tournament and won 1 
game of 3 against

MFOG and 1 game of 3 against Aya + all the other games.

It was running on an overclocked (3.6 GHz) i7.

The settings were:

uct_param_search max_nodes 1250
uct_param_player reuse_subtree 1
uct_param_player ponder 1
go_rules kgs
sg_param time_mode real
uct_param_search number_threads 8
uct_param_search lock_free 1
uct_param_search virtual_loss 1
uct_param_search number_playouts 2

The binary does around 36k games/sec in the opening rising to 50-60k 
later. Which is a lot
more than the 23.5K of the cygwin version. AFAIK it works Ok with 
multithreading with

and without locking. It is also much smaller and has no .dll dependencies.

If someone wants to test it more, it is here:

http://www.dybot.com/fuego04nw/fuego.zip

And the source code Windows developers always dreamt of but were too shy 
to ask ;-)


(All relevant parts of boost included, 0 static lib dependencies, 0 
dynamic lib dependencies,

compiles with MS Visual Studio 2008 0 errors 0 warnings.)

http://www.dybot.com/fuego04nw/fuego.7z

(Compressed with 7z. 7z is free software available at: 
http://www.7-zip.org/
The command line version is the best option if you don't like programs 
integrating in Explorer.)



Jacques.
___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/



___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/


Re: [computer-go] [ANNOUNCE] Computer Go 2009 - complete state of art

2009-12-04 Thread Michael Williams

Very nice.  Do you (or anyone) have the details of (Boon, 2009) concerning 
arbitrarily shaped patterns?

Petr Baudis wrote:

  Hello!

  Today I held a presentation on the complete state of art in
Computer Go, showing hopefully all the current widely applicable
results, most successful strategies and worst current problems (in my
interpretation, of course) - you can find it at:

http://pasky.or.cz/~pasky/go/

  The presentation has a section introducing basic Go rules and tactics
so it should be suitable even for AI researches not very familiar with
Go. Of course it is not perfect and some parts assume accompanying
explanations and few formulas on blackboard, but I think it could still
be good material to give quick overview on currently used approaches
with sufficient depth to satisfy a computer science scholar, plus
quick references to the papers.

  P.S.: One IMHO important thing I now realize I've missed in the open
problems section is parallelization on GPU.

  P.P.S.: The presentation also shows some preliminary (noticeably
positive) results of naive dynamic komi application in handicap games.
I plan to publish this later in a paper when I try more approaches and
do more comprehensive testing.

  Hope it's useful,

Petr Pasky Baudis
___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/



___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/


Re: [computer-go] Go Programming Language

2009-11-11 Thread Michael Williams

If you thought finding Go(game)-related stuff on the web was hard before...


Ben Shoemaker wrote:

Has anyone tried programming Go in the Go Programming Language?

http://golang.org/



  
___

computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/



___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/


Re: [computer-go] Bitmap Go revisited and mockup implementation

2009-08-26 Thread Michael Williams

I only showed the first line.  There were many more.  Gotta go to work though.

René van de Veerdonk wrote:

Micheal,

Is that all the output you get? Did you notice that the first line with 
test-error changed ... the second number went from 31 to 32. We did 
something! But not what I expected. BTW. The program does not normally 
crash, it just stops after its initial testing is completed and errors 
were detected. If you actually went from a gazillion line to just one, 
we have hit a nerve. I you just didn't bother to copy the rest of the 
output, we made no progress. But, since the output actually changed, it 
would still be nice to see a few more lines and see the trend.


Thanks for helping ... debugging for someone else must not be the best 
use of your time,


René

On Tue, Aug 25, 2009 at 8:03 PM, Michael Williams 
michaelwilliam...@gmail.com mailto:michaelwilliam...@gmail.com wrote:


No.  The code is now:


__forceinline
unsigned int bitmap_t::lowest_index () const {
 const __m128i comp = _mm_cmpeq_epi32 (_mm_setzero_si128 (), board);
 unsigned long m = _mm_movemask_epi8 (comp) ^ 0x;
 if (!_BitScanForward (m, m)) return 127;
 /* offending instruction */
 //return 8*m + __lzcnt (board.m128i_u32[m/4]);
 /* new code follows */
 unsigned long n;
 _BitScanForward (n, board.m128i_u32[m/4]);
 return 8*m + (32-n);
}


Debug:
testing _BitScanForward (m, 0): 0 1099227377

testing _BitScanForward (m, 1): 1 0
testing _BitScanForward (m, 256): 1 8
testing _BitScanReverse (m, 0): 0 1103042705

testing _BitScanReverse (m, 1): 1 0
testing _BitScanReverse (m, 256): 1 8
test-error [bitmap_t::lowest_index]: 0 32

Release:

testing _BitScanForward (m, 0): 0 16843009
testing _BitScanForward (m, 1): 1 0
testing _BitScanForward (m, 256): 1 8
testing _BitScanReverse (m, 0): 0 4
testing _BitScanReverse (m, 1): 1 0
testing _BitScanReverse (m, 256): 1 8
test-error [bitmap_t::lowest_index]: 0 32



René van de Veerdonk wrote:

Micheal,

Your output is actually correct. The output is undefined when
the second argument to _BitScanForward is zero and that is what
I am explicitly testing for in the method
bitmap_t::lowest_index, which is supposed to return an index to
any set bit (despite the name). Your output shows that it
returns a number that is off in a very predictable way (it seems
that replacing 8*m + n with 8*m + (32-n) on the last line
may do the trick for you, but it breaks my local copy). So, now
I am positively baffled.

Help?

René

On Tue, Aug 25, 2009 at 7:25 PM, Michael Williams
michaelwilliam...@gmail.com
mailto:michaelwilliam...@gmail.com
mailto:michaelwilliam...@gmail.com
mailto:michaelwilliam...@gmail.com wrote:

   Debug build:
   testing _BitScanForward (m, 0): 0 842032512

   testing _BitScanForward (m, 1): 1 0
   testing _BitScanForward (m, 256): 1 8
   testing _BitScanReverse (m, 0): 0 840277132

   testing _BitScanReverse (m, 1): 1 0
   testing _BitScanReverse (m, 256): 1 8

   Release build:

   testing _BitScanForward (m, 0): 0 16843009
   testing _BitScanForward (m, 1): 1 0
   testing _BitScanForward (m, 256): 1 8
   testing _BitScanReverse (m, 0): 0 4

   testing _BitScanReverse (m, 1): 1 0
   testing _BitScanReverse (m, 256): 1 8

   Sucks when they produce different results.



   René van de Veerdonk wrote:

   Micheal,

   Thanks for trying. Could you try one or two more things?

   (1) Replace the _BitScanForward in the new code to
   _BitScanReverse. This probably won't help.

   (2) Add this to bitmapgo.cpp:

   /* sandbox */
   const bool sandbox = true;
   void test_sandbox () {
unsigned long m = 220;
unsigned char test_it = _BitScanForward (m, 0);
std::cout  testing _BitScanForward (m, 0): 
   (int) test_it m  \n;
test_it = _BitScanForward (m, 1);
std::cout  testing _BitScanForward (m, 1): 
   (int) test_it m  \n;
test_it = _BitScanForward (m, 256);
std::cout  testing _BitScanForward (m, 256): 
   (int) test_it m  \n;
test_it = _BitScanReverse (m, 0);
std::cout  testing _BitScanReverse (m, 0): 
   (int) test_it m  \n;
test_it = _BitScanReverse (m, 1);
std::cout  testing _BitScanReverse (m, 1): 
   (int) test_it m  \n;
test_it = _BitScanReverse (m, 256);
std::cout  testing _BitScanReverse (m, 256

Re: [computer-go] Bitmap Go revisited and mockup implementation

2009-08-25 Thread Michael Williams

(AMD Phenom CPU)

Michael Williams wrote:
It came through fine the first time.  Gmail probably hid the duplicate 
text from you for convenience since it saw that it was text that you 
already sent out. Or something.


I can compile the original (9x9) bitmap Go files in Windows 7 x64, but 
when I run it I get this:


test-error [bitmap_t::lowest_index]: 0 31
test-error [bitmap_t::lowest_index]: 1 30
test-error [bitmap_t::lowest_index]: 2 29
test-error [bitmap_t::lowest_index]: 3 28
test-error [bitmap_t::lowest_index]: 4 27
test-error [bitmap_t::lowest_index]: 5 26
test-error [bitmap_t::lowest_index]: 6 25
test-error [bitmap_t::lowest_index]: 7 24
test-error [bitmap_t::lowest_index]: 8 23
test-error [bitmap_t::lowest_index]: 9 22
test-error [bitmap_t::lowest_index]: 10 21
test-error [bitmap_t::lowest_index]: 11 20
test-error [bitmap_t::lowest_index]: 12 19
test-error [bitmap_t::lowest_index]: 13 18
test-error [bitmap_t::lowest_index]: 14 17
test-error [bitmap_t::lowest_index]: 15 16
test-error [bitmap_t::lowest_index]: 16 15
test-error [bitmap_t::lowest_index]: 17 14
test-error [bitmap_t::lowest_index]: 18 13
test-error [bitmap_t::lowest_index]: 19 12
test-error [bitmap_t::lowest_index]: 20 11
test-error [bitmap_t::lowest_index]: 21 10
test-error [bitmap_t::lowest_index]: 22 9
test-error [bitmap_t::lowest_index]: 23 8
test-error [bitmap_t::lowest_index]: 24 7
test-error [bitmap_t::lowest_index]: 25 6
test-error [bitmap_t::lowest_index]: 26 5
test-error [bitmap_t::lowest_index]: 27 4
test-error [bitmap_t::lowest_index]: 28 3
test-error [bitmap_t::lowest_index]: 29 2
test-error [bitmap_t::lowest_index]: 30 1
test-error [bitmap_t::lowest_index]: 31 0
test-error [bitmap_t::lowest_index]: 32 63
test-error [bitmap_t::lowest_index]: 33 62
test-error [bitmap_t::lowest_index]: 34 61
test-error [bitmap_t::lowest_index]: 35 60
test-error [bitmap_t::lowest_index]: 36 59
test-error [bitmap_t::lowest_index]: 37 58
test-error [bitmap_t::lowest_index]: 38 57
test-error [bitmap_t::lowest_index]: 39 56
test-error [bitmap_t::lowest_index]: 40 55
test-error [bitmap_t::lowest_index]: 41 54
test-error [bitmap_t::lowest_index]: 42 53
test-error [bitmap_t::lowest_index]: 43 52
test-error [bitmap_t::lowest_index]: 44 51
test-error [bitmap_t::lowest_index]: 45 50
test-error [bitmap_t::lowest_index]: 46 49
test-error [bitmap_t::lowest_index]: 47 48
test-error [bitmap_t::lowest_index]: 48 47
test-error [bitmap_t::lowest_index]: 49 46
test-error [bitmap_t::lowest_index]: 50 45
test-error [bitmap_t::lowest_index]: 51 44
test-error [bitmap_t::lowest_index]: 52 43
test-error [bitmap_t::lowest_index]: 53 42
test-error [bitmap_t::lowest_index]: 54 41
test-error [bitmap_t::lowest_index]: 55 40
test-error [bitmap_t::lowest_index]: 56 39
test-error [bitmap_t::lowest_index]: 57 38
test-error [bitmap_t::lowest_index]: 58 37
test-error [bitmap_t::lowest_index]: 59 36
test-error [bitmap_t::lowest_index]: 60 35
test-error [bitmap_t::lowest_index]: 61 34
test-error [bitmap_t::lowest_index]: 62 33
test-error [bitmap_t::lowest_index]: 63 32
test-error [bitmap_t::lowest_index]: 64 95
test-error [bitmap_t::lowest_index]: 65 94
test-error [bitmap_t::lowest_index]: 66 93
test-error [bitmap_t::lowest_index]: 67 92
test-error [bitmap_t::lowest_index]: 68 91
test-error [bitmap_t::lowest_index]: 69 90
test-error [bitmap_t::lowest_index]: 70 89
test-error [bitmap_t::lowest_index]: 71 88
test-error [bitmap_t::lowest_index]: 72 87
test-error [bitmap_t::lowest_index]: 73 86
test-error [bitmap_t::lowest_index]: 74 85
test-error [bitmap_t::lowest_index]: 75 84
test-error [bitmap_t::lowest_index]: 76 83
test-error [bitmap_t::lowest_index]: 77 82
test-error [bitmap_t::lowest_index]: 78 81
test-error [bitmap_t::lowest_index]: 79 80
test-error [bitmap_t::lowest_index]: 80 79
test-error-1 [bitmap_t::is_one_bit]: 0
test-error-1 [bitmap_t::is_one_bit]: 1
test-error-1 [bitmap_t::is_one_bit]: 2
test-error-1 [bitmap_t::is_one_bit]: 3
test-error-1 [bitmap_t::is_one_bit]: 4
test-error-1 [bitmap_t::is_one_bit]: 5
test-error-1 [bitmap_t::is_one_bit]: 6
test-error-1 [bitmap_t::is_one_bit]: 7
test-error-1 [bitmap_t::is_one_bit]: 8
test-error-1 [bitmap_t::is_one_bit]: 9
test-error-1 [bitmap_t::is_one_bit]: 10
test-error-1 [bitmap_t::is_one_bit]: 11
test-error-1 [bitmap_t::is_one_bit]: 12
test-error-1 [bitmap_t::is_one_bit]: 13
test-error-1 [bitmap_t::is_one_bit]: 14
test-error-1 [bitmap_t::is_one_bit]: 15
test-error-1 [bitmap_t::is_one_bit]: 16
test-error-1 [bitmap_t::is_one_bit]: 17
test-error-1 [bitmap_t::is_one_bit]: 18
test-error-1 [bitmap_t::is_one_bit]: 19
test-error-1 [bitmap_t::is_one_bit]: 20
test-error-1 [bitmap_t::is_one_bit]: 21
test-error-1 [bitmap_t::is_one_bit]: 22
test-error-1 [bitmap_t::is_one_bit]: 23
test-error-1 [bitmap_t::is_one_bit]: 24
test-error-1 [bitmap_t::is_one_bit]: 25
test-error-1 [bitmap_t::is_one_bit]: 26
test-error-1 [bitmap_t::is_one_bit]: 27
test-error-1 [bitmap_t::is_one_bit]: 28
test-error-1 [bitmap_t::is_one_bit]: 29
test-error-1 [bitmap_t

Re: [computer-go] Bitmap Go revisited and mockup implementation

2009-08-25 Thread Michael Williams

That doesn't seem to have any effect on the results.

René van de Veerdonk wrote:

Hi Micheal,

Thanks for the test (Intel - AMD, Windows XP - Windows 7, x32 - x64, 
great, three birds with one stone!). So much for portability. But, 
hooray for test-cases!


This may be related to the __lzcnt intrinsic, giving you a completely 
different result, i.e., 32 - my result. Could you try replacing this 
function in bitmap.cpp? I believe I tested this alternative during 
development and it generates only slightly worse performing code.


__forceinline
unsigned int bitmap_t::lowest_index () const {
  const __m128i comp = _mm_cmpeq_epi32 (_mm_setzero_si128 (), board);
  unsigned long m = _mm_movemask_epi8 (comp) ^ 0x;
  if (!_BitScanForward (m, m)) return 127;
  /* offending instruction */
  //return 8*m + __lzcnt (board.m128i_u32[m/4]);
  /* new code follows */
  unsigned long n;
  _BitScanForward (n, board.m128i_u32[m/4]);
  return 8*m + n;
}

René

PS. x64 ... new playground, you could use __lzcnt64 ... so many things 
to try!


On Tue, Aug 25, 2009 at 5:43 PM, Michael Williams 
michaelwilliam...@gmail.com mailto:michaelwilliam...@gmail.com wrote:


(AMD Phenom CPU)


Michael Williams wrote:

It came through fine the first time.  Gmail probably hid the
duplicate text from you for convenience since it saw that it was
text that you already sent out. Or something.

I can compile the original (9x9) bitmap Go files in Windows 7
x64, but when I run it I get this:

test-error [bitmap_t::lowest_index]: 0 31
test-error [bitmap_t::lowest_index]: 1 30
test-error [bitmap_t::lowest_index]: 2 29
test-error [bitmap_t::lowest_index]: 3 28
test-error [bitmap_t::lowest_index]: 4 27
test-error [bitmap_t::lowest_index]: 5 26
test-error [bitmap_t::lowest_index]: 6 25
test-error [bitmap_t::lowest_index]: 7 24
test-error [bitmap_t::lowest_index]: 8 23
test-error [bitmap_t::lowest_index]: 9 22
test-error [bitmap_t::lowest_index]: 10 21
test-error [bitmap_t::lowest_index]: 11 20
test-error [bitmap_t::lowest_index]: 12 19
test-error [bitmap_t::lowest_index]: 13 18
test-error [bitmap_t::lowest_index]: 14 17
test-error [bitmap_t::lowest_index]: 15 16
test-error [bitmap_t::lowest_index]: 16 15
test-error [bitmap_t::lowest_index]: 17 14
test-error [bitmap_t::lowest_index]: 18 13
test-error [bitmap_t::lowest_index]: 19 12
test-error [bitmap_t::lowest_index]: 20 11
test-error [bitmap_t::lowest_index]: 21 10
test-error [bitmap_t::lowest_index]: 22 9
test-error [bitmap_t::lowest_index]: 23 8
test-error [bitmap_t::lowest_index]: 24 7
test-error [bitmap_t::lowest_index]: 25 6
test-error [bitmap_t::lowest_index]: 26 5
test-error [bitmap_t::lowest_index]: 27 4
test-error [bitmap_t::lowest_index]: 28 3
test-error [bitmap_t::lowest_index]: 29 2
test-error [bitmap_t::lowest_index]: 30 1
test-error [bitmap_t::lowest_index]: 31 0
test-error [bitmap_t::lowest_index]: 32 63
test-error [bitmap_t::lowest_index]: 33 62
test-error [bitmap_t::lowest_index]: 34 61
test-error [bitmap_t::lowest_index]: 35 60
test-error [bitmap_t::lowest_index]: 36 59
test-error [bitmap_t::lowest_index]: 37 58
test-error [bitmap_t::lowest_index]: 38 57
test-error [bitmap_t::lowest_index]: 39 56
test-error [bitmap_t::lowest_index]: 40 55
test-error [bitmap_t::lowest_index]: 41 54
test-error [bitmap_t::lowest_index]: 42 53
test-error [bitmap_t::lowest_index]: 43 52
test-error [bitmap_t::lowest_index]: 44 51
test-error [bitmap_t::lowest_index]: 45 50
test-error [bitmap_t::lowest_index]: 46 49
test-error [bitmap_t::lowest_index]: 47 48
test-error [bitmap_t::lowest_index]: 48 47
test-error [bitmap_t::lowest_index]: 49 46
test-error [bitmap_t::lowest_index]: 50 45
test-error [bitmap_t::lowest_index]: 51 44
test-error [bitmap_t::lowest_index]: 52 43
test-error [bitmap_t::lowest_index]: 53 42
test-error [bitmap_t::lowest_index]: 54 41
test-error [bitmap_t::lowest_index]: 55 40
test-error [bitmap_t::lowest_index]: 56 39
test-error [bitmap_t::lowest_index]: 57 38
test-error [bitmap_t::lowest_index]: 58 37
test-error [bitmap_t::lowest_index]: 59 36
test-error [bitmap_t::lowest_index]: 60 35
test-error [bitmap_t::lowest_index]: 61 34
test-error [bitmap_t::lowest_index]: 62 33
test-error [bitmap_t::lowest_index]: 63 32
test-error [bitmap_t::lowest_index]: 64 95
test-error [bitmap_t::lowest_index]: 65 94
test-error [bitmap_t::lowest_index]: 66 93
test-error [bitmap_t::lowest_index]: 67 92
test-error

Re: [computer-go] Bitmap Go revisited and mockup implementation

2009-08-25 Thread Michael Williams

Debug build:
testing _BitScanForward (m, 0): 0 842032512
testing _BitScanForward (m, 1): 1 0
testing _BitScanForward (m, 256): 1 8
testing _BitScanReverse (m, 0): 0 840277132
testing _BitScanReverse (m, 1): 1 0
testing _BitScanReverse (m, 256): 1 8

Release build:
testing _BitScanForward (m, 0): 0 16843009
testing _BitScanForward (m, 1): 1 0
testing _BitScanForward (m, 256): 1 8
testing _BitScanReverse (m, 0): 0 4
testing _BitScanReverse (m, 1): 1 0
testing _BitScanReverse (m, 256): 1 8

Sucks when they produce different results.


René van de Veerdonk wrote:

Micheal,

Thanks for trying. Could you try one or two more things?

(1) Replace the _BitScanForward in the new code to _BitScanReverse. This 
probably won't help.


(2) Add this to bitmapgo.cpp:

/* sandbox */
const bool sandbox = true;
void test_sandbox () {
  unsigned long m = 220;
  unsigned char test_it = _BitScanForward (m, 0);
  std::cout  testing _BitScanForward (m, 0): 
 (int) test_it m  \n;
  test_it = _BitScanForward (m, 1);
  std::cout  testing _BitScanForward (m, 1): 
 (int) test_it m  \n;
  test_it = _BitScanForward (m, 256);
  std::cout  testing _BitScanForward (m, 256): 
 (int) test_it m  \n;
  test_it = _BitScanReverse (m, 0);
  std::cout  testing _BitScanReverse (m, 0): 
 (int) test_it m  \n;
  test_it = _BitScanReverse (m, 1);
  std::cout  testing _BitScanReverse (m, 1): 
 (int) test_it m  \n;
  test_it = _BitScanReverse (m, 256);
  std::cout  testing _BitScanReverse (m, 256): 
 (int) test_it m  \n;
}

and add a line something like this in the main program:
  if (test  sandbox) test_sandbox (); /* new line */
  if (test  verify) test = test_bitmap_t::test (); /* already there */

That does not solve anything, but it may tell me if those functions are 
doing for you what they do for me.


My output is:
testing _BitScanForward (m, 0): 0 16843009
testing _BitScanForward (m, 1): 1 0
testing _BitScanForward (m, 256): 1 8
testing _BitScanReverse (m, 0): 0 3432104
testing _BitScanReverse (m, 1): 1 0
testing _BitScanReverse (m, 256): 1 8

Thanks, I really appreciate your help !

René

On Tue, Aug 25, 2009 at 6:38 PM, Michael Williams 
michaelwilliam...@gmail.com mailto:michaelwilliam...@gmail.com wrote:


That doesn't seem to have any effect on the results.


René van de Veerdonk wrote:

Hi Micheal,

Thanks for the test (Intel - AMD, Windows XP - Windows 7, x32
- x64, great, three birds with one stone!). So much for
portability. But, hooray for test-cases!

This may be related to the __lzcnt intrinsic, giving you a
completely different result, i.e., 32 - my result. Could you try
replacing this function in bitmap.cpp? I believe I tested this
alternative during development and it generates only slightly
worse performing code.

__forceinline
unsigned int bitmap_t::lowest_index () const {
 const __m128i comp = _mm_cmpeq_epi32 (_mm_setzero_si128 (), board);
 unsigned long m = _mm_movemask_epi8 (comp) ^ 0x;
 if (!_BitScanForward (m, m)) return 127;
 /* offending instruction */
 //return 8*m + __lzcnt (board.m128i_u32[m/4]);
 /* new code follows */
 unsigned long n;
 _BitScanForward (n, board.m128i_u32[m/4]);
 return 8*m + n;
}

René

PS. x64 ... new playground, you could use __lzcnt64 ... so many
things to try!

On Tue, Aug 25, 2009 at 5:43 PM, Michael Williams
michaelwilliam...@gmail.com
mailto:michaelwilliam...@gmail.com
mailto:michaelwilliam...@gmail.com
mailto:michaelwilliam...@gmail.com wrote:

   (AMD Phenom CPU)


   Michael Williams wrote:

   It came through fine the first time.  Gmail probably hid the
   duplicate text from you for convenience since it saw that
it was
   text that you already sent out. Or something.

   I can compile the original (9x9) bitmap Go files in Windows 7
   x64, but when I run it I get this:

   test-error [bitmap_t::lowest_index]: 0 31
   test-error [bitmap_t::lowest_index]: 1 30
   test-error [bitmap_t::lowest_index]: 2 29
   test-error [bitmap_t::lowest_index]: 3 28
   test-error [bitmap_t::lowest_index]: 4 27
   test-error [bitmap_t::lowest_index]: 5 26
   test-error [bitmap_t::lowest_index]: 6 25
   test-error [bitmap_t::lowest_index]: 7 24
   test-error [bitmap_t::lowest_index]: 8 23
   test-error [bitmap_t::lowest_index]: 9 22
   test-error [bitmap_t::lowest_index]: 10 21
   test-error [bitmap_t::lowest_index]: 11 20
   test-error [bitmap_t::lowest_index]: 12 19
   test-error [bitmap_t::lowest_index]: 13 18
   test-error [bitmap_t::lowest_index]: 14 17

Re: [computer-go] Bitmap Go revisited and mockup implementation

2009-08-25 Thread Michael Williams

No.  The code is now:

__forceinline
unsigned int bitmap_t::lowest_index () const {
  const __m128i comp = _mm_cmpeq_epi32 (_mm_setzero_si128 (), board);
  unsigned long m = _mm_movemask_epi8 (comp) ^ 0x;
  if (!_BitScanForward (m, m)) return 127;
  /* offending instruction */
  //return 8*m + __lzcnt (board.m128i_u32[m/4]);
  /* new code follows */
  unsigned long n;
  _BitScanForward (n, board.m128i_u32[m/4]);
  return 8*m + (32-n);
}


Debug:
testing _BitScanForward (m, 0): 0 1099227377
testing _BitScanForward (m, 1): 1 0
testing _BitScanForward (m, 256): 1 8
testing _BitScanReverse (m, 0): 0 1103042705
testing _BitScanReverse (m, 1): 1 0
testing _BitScanReverse (m, 256): 1 8
test-error [bitmap_t::lowest_index]: 0 32

Release:
testing _BitScanForward (m, 0): 0 16843009
testing _BitScanForward (m, 1): 1 0
testing _BitScanForward (m, 256): 1 8
testing _BitScanReverse (m, 0): 0 4
testing _BitScanReverse (m, 1): 1 0
testing _BitScanReverse (m, 256): 1 8
test-error [bitmap_t::lowest_index]: 0 32


René van de Veerdonk wrote:

Micheal,

Your output is actually correct. The output is undefined when the second 
argument to _BitScanForward is zero and that is what I am explicitly 
testing for in the method bitmap_t::lowest_index, which is supposed to 
return an index to any set bit (despite the name). Your output shows 
that it returns a number that is off in a very predictable way (it seems 
that replacing 8*m + n with 8*m + (32-n) on the last line may do the 
trick for you, but it breaks my local copy). So, now I am positively 
baffled.


Help?

René

On Tue, Aug 25, 2009 at 7:25 PM, Michael Williams 
michaelwilliam...@gmail.com mailto:michaelwilliam...@gmail.com wrote:


Debug build:
testing _BitScanForward (m, 0): 0 842032512

testing _BitScanForward (m, 1): 1 0
testing _BitScanForward (m, 256): 1 8
testing _BitScanReverse (m, 0): 0 840277132

testing _BitScanReverse (m, 1): 1 0
testing _BitScanReverse (m, 256): 1 8

Release build:

testing _BitScanForward (m, 0): 0 16843009
testing _BitScanForward (m, 1): 1 0
testing _BitScanForward (m, 256): 1 8
testing _BitScanReverse (m, 0): 0 4

testing _BitScanReverse (m, 1): 1 0
testing _BitScanReverse (m, 256): 1 8

Sucks when they produce different results.



René van de Veerdonk wrote:

Micheal,

Thanks for trying. Could you try one or two more things?

(1) Replace the _BitScanForward in the new code to
_BitScanReverse. This probably won't help.

(2) Add this to bitmapgo.cpp:

/* sandbox */
const bool sandbox = true;
void test_sandbox () {
 unsigned long m = 220;
 unsigned char test_it = _BitScanForward (m, 0);
 std::cout  testing _BitScanForward (m, 0): 
(int) test_it m  \n;
 test_it = _BitScanForward (m, 1);
 std::cout  testing _BitScanForward (m, 1): 
(int) test_it m  \n;
 test_it = _BitScanForward (m, 256);
 std::cout  testing _BitScanForward (m, 256): 
(int) test_it m  \n;
 test_it = _BitScanReverse (m, 0);
 std::cout  testing _BitScanReverse (m, 0): 
(int) test_it m  \n;
 test_it = _BitScanReverse (m, 1);
 std::cout  testing _BitScanReverse (m, 1): 
(int) test_it m  \n;
 test_it = _BitScanReverse (m, 256);
 std::cout  testing _BitScanReverse (m, 256): 
(int) test_it m  \n;
}

and add a line something like this in the main program:
 if (test  sandbox) test_sandbox (); /* new line */
 if (test  verify) test = test_bitmap_t::test (); /* already
there */

That does not solve anything, but it may tell me if those
functions are doing for you what they do for me.

My output is:
testing _BitScanForward (m, 0): 0 16843009
testing _BitScanForward (m, 1): 1 0
testing _BitScanForward (m, 256): 1 8
testing _BitScanReverse (m, 0): 0 3432104
testing _BitScanReverse (m, 1): 1 0
testing _BitScanReverse (m, 256): 1 8

Thanks, I really appreciate your help !

René

On Tue, Aug 25, 2009 at 6:38 PM, Michael Williams
michaelwilliam...@gmail.com
mailto:michaelwilliam...@gmail.com
mailto:michaelwilliam...@gmail.com
mailto:michaelwilliam...@gmail.com wrote:

   That doesn't seem to have any effect on the results.


   René van de Veerdonk wrote:

   Hi Micheal,

   Thanks for the test (Intel - AMD, Windows XP - Windows
7, x32
   - x64, great, three birds with one stone!). So much for
   portability. But, hooray for test-cases!

   This may be related to the __lzcnt intrinsic, giving you a
   completely different result, i.e., 32 - my result. Could
you try
   replacing

Re: [computer-go] Bitmap Go revisited and mockup implementation

2009-08-24 Thread Michael Williams

If an engine (or an engine's playout policy) needs to check the legality of 
every move before making a selection, this could still be a benefit.

René van de Veerdonk wrote:

David,

Confession: I have not tested 19x19. As you have noted, and others 
before you over the years, a 19x19 board does not fit in one but three 
128-bit registers and there would be a rather big penalty as a result, 
perhaps (likely?) wiping out all of the benefits of bitmaps. Antoine 
voiced his disappointment about the speed advantage even on 9x9 in the 
e-mail to the list that served as my basis. My hope, as Hideko Kato 
points out, is in longer registers or perhaps being able to port this to 
a GPU. A 64-bit OS with twice the number registers would also surely 
help out. Nevertheless, I was surprised that I was able to get to almost 
the same level of speed as Libego provides.


The goals for this mockup were very humble: (1) to provide a basic 
implementation to see what it can do (and if I could do it), and (2) 
learn how to work with assembly and/or intrinsic functions (I had never 
done that before). It may not be too hard to try 19x19 and just see what 
happens. I may attempt this as a follow-up.


René van de Veerdonk

2009/8/23 David Fotland fotl...@smart-games.com 
mailto:fotl...@smart-games.com


How much would you lose for 19x19 board?  A board representation is
not very interesting unless it scales to 19 line boards.

 


David

 


*From:* computer-go-boun...@computer-go.org
mailto:computer-go-boun...@computer-go.org
[mailto:computer-go-boun...@computer-go.org
mailto:computer-go-boun...@computer-go.org] *On Behalf Of *René
van de Veerdonk
*Sent:* Sunday, August 23, 2009 1:11 PM
*To:* computer-go@computer-go.org mailto:computer-go@computer-go.org
*Subject:* [computer-go] Bitmap Go revisited and mockup implementation

 


Hi all,

 


After years of reading this very interesting list, I decided to make
my first contribution this week after reading once again about
bitmap go. There is no freely available implementation of a bitmap
based engine that I know of, so here is a start. Note that I am not
a professional programmer, self-taught, and this is a part-time
hobby, so do not expect perfect form.

 


The attachment is an attempt to create an efficient implementation
of a bitmap based light playout engine, following mostly the
recommendations as spelled out by Antoine de Maricourt in his
November 2006 message to this list. The application is single
threaded and achieves around 75-80 kpps on my Centrino Duo 2.4 GHz
Intel labtop. The mockup was developed in C/C++ using the Microsoft
Visual Studio 2008 IDE for Windows XP (32-bit) and undoubtedly
suffers from portability issues as a result. The 128-bit SSE
instructions are called through intrinsic functions, hopefully at
least these interfaces are the same for other compilers. The single
goal of this mockup was to do some benchmarking, so there is no
gtp-interface, but that would be rather easy to add for those
skilled in the art. The standard rules are used with one exception,
the Brown eye-rule is used. Multi-stone suicide is explicitly
forbidden. No superko checks are performed during playouts, and
there is no mercy-rule either.

 


I would be particularly interested to know if a 64-bit OS will
improve the performance significantly, as it does have a lot less
register pressure. Moving to a 64-bit OS will also make some
instructions available that allow for further
simplifications/efficiency improvements in the code. As will
enabling SSE3 or SSE4.1 instructions.

 


One note, the random number generator used is from Agner Fog's
public library and was not included in the attachment. You will have
to provide a random number generator yourself or download the
appropriate version from his well-known website
(www.agner.org/optimize http://www.agner.org/optimize)

 


I hope this is the start of a discussion about further improvements
that can be made, but you may use this code as you wish with no
restrictions or guarantees. See the readme.txt file included in the
attachment for more details (also partially included below).

 


Comments and feedback welcome,

 


René van de Veerdonk

 


Excerpts from the readme.txt file:

 


Introduction:

=

 


Mockup of a high performance implementation of the game of Go using
bitmaps

as the principle datastructures. This implementation is limited to
measuring

the performance of the principle components by playing random
playouts from

an empty 9x9 board, using Chinese scoring, not allowing pass moves until

no other moves are available. Suicide is not allowed, neither for single

or multi-stone groups. No checks are 

Re: [computer-go] Bitmap Go revisited and mockup implementation

2009-08-24 Thread Michael Williams
For many people on this list, Computer Go is a hobby and that means that it is important to do whatever you find interesting and motivating, event if it may not 
be the best or most promising direction in order to become the next world champion program.  There is room for pushing limits in all directions, IMO.



Brian Sheppard wrote:
Maven was fast enough, but it was clearly the slowest 
of all major Scrabble programs. Some programs were 5x 
faster than Maven. Maven was slow because it was a 
lot more than a move generator: it played the full 
game with competent positional scoring. Scoring 
requires much more time than move generation. So why 
bother optimizing move generation?


I am finding that the same lesson applies to Go. But 
more so because Scrabble is largely first-order 
whereas Go is recursive. Pebbles averages ~10K trials 
per turn. Aya is clearly stronger at 10K trials than 
Pebbles. Fuego is stronger than Aya. Valkyria is 
stronger than Fuego, and my impression is that Zen 
trumps us all. Zen could be better than Pebbles + 400 
rating points at 10K trials.


Now look at scaling. When Fuego runs a machine that 
is ~20x as fast as mine, then Fuego is comparable to 
Zen. Valkyria plays in 19x19 tournaments running on a 
Pentium M, and scores 50% against much more powerful 
computers. My conclusion is that the analytic skills 
of Zen and Valkyria are worth a factor of 20, and I 
expect the advantage will increase with computer 
speeds.


The crucial issue is to support intelligence. Check 
out David’s description of MFoG, and Remi’s papers 
about CrazyStone. I am sure those programs pay 
attention to speed, but the real issue is whether the 
engine can do the necessary analysis. Magnus’s posts 
to this list lament that Valkyria is so slow, but 
Magnus is clearly excited that his engine supports 
great analysis.


So de-emphasize speed. Can you build a great pattern 
matcher using bit boards? Can you solve life  death 
positions better? Can you read ladders faster or more 
accurately? Do bit boards make the program easier to 
program and debug?


Pebbles started with a bit board move generator, but 
I have been adding other knowledge entities, like 
liberty counts, string iterators, and eyespace 
detectors. I am convinced that emphasizing domain 
knowledge structures will pay off.  (That being said, 
I will borrow your intrinsic functions for my 9x9 
template specialization. ☺ Every little bit helps.)


Best,
Brian

___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/



___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/


Re: [computer-go] Monte-Carlo Simulation Balancing

2009-08-13 Thread Michael Williams
In future papers they should avoid using a strong authority like Fuego for the training and instead force it to learn from a naive uniform random playout policy 
(with 100x or 1000x more playouts) and then build on that with an iterative approach (as was suggested in the paper).


I also had another thought.  Since they are training the policy to maximize the balance and not the winrate, wouldn't you be able to extract more information 
from each trial by using the score instead of the game result?  The normal pitfalls to doing so do not apply here.




Isaac Deutsch wrote:
I admit I had trouble understanding the details of the paper. What I 
think is the biggest problem for applying this to bigger (up to 19x19) 
games is that you somehow need access to the true value of a move, 
i.e. it's a win or a loss. On the 5x5 board they used, this might be 
approximated pretty well, but there's no chance on 19x19 to do so.



Am 13.08.2009 um 05:14 schrieb Michael Williams:

After about the 5th reading, I'm concluding that this is an excellent 
paper.  Is anyone (besides the authors) doing research based on this?  
There is a lot to do.




___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/



___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/


Re: [computer-go] Monte-Carlo Simulation Balancing

2009-08-12 Thread Michael Williams

After about the 5th reading, I'm concluding that this is an excellent paper.  
Is anyone (besides the authors) doing research based on this?  There is a lot 
to do.


David Silver wrote:

Hi everyone,

Please find attached my ICML paper with Gerry Tesauro on automatically 
learning a simulation policy for Monte-Carlo Go. Our preliminary results 
show a 200+ Elo improvement over previous approaches, although our 
experiments were restricted to simple Monte-Carlo search with no tree on 
small boards.





Abstract

In this paper we introduce the first algorithms for efficiently learning 
a simulation policy for Monte-Carlo search. Our main idea is to optimise 
the balance of a simulation policy, so that an accurate spread of 
simulation outcomes is maintained, rather than optimising the direct 
strength of the simulation policy. We develop two algorithms for 
balancing a simulation policy by gradient descent. The first algorithm 
optimises the balance of complete simulations, using a policy gradient 
algorithm; whereas the second algorithm optimises the balance over every 
two steps of simulation. We compare our algorithms to reinforcement 
learning and supervised learning algorithms for maximising the strength 
of the simulation policy. We test each algorithm in the domain of 5x5 
and 6x6 Computer Go, using a softmax policy that is parameterised by 
weights for a hundred simple patterns. When used in a simple Monte-Carlo 
search, the policies learnt by simulation balancing achieved 
significantly better performance, with half the mean squared error of a 
uniform random policy, and equal overall performance to a sophisticated 
Go engine.


-Dave




___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/


___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/


Re: [computer-go] Fuego 04 native Windows

2009-08-09 Thread Michael Williams

Very nice!  Thank you.

Jacques Basaldúa wrote:
I have made a native Windows Fuego build compiled with MS Visual Studio 
2008.


Thanks to the Fuego team for making such a nice program free software !!

I will use it to measure some tree metrics to tune my own program and 
for a validation
experiment for an evaluation function I have developed. I will post 
results when I have any.


To test the binary I made it play on todays KGS tournament and won 1 
game of 3 against

MFOG and 1 game of 3 against Aya + all the other games.

It was running on an overclocked (3.6 GHz) i7.

The settings were:

uct_param_search max_nodes 1250
uct_param_player reuse_subtree 1
uct_param_player ponder 1
go_rules kgs
sg_param time_mode real
uct_param_search number_threads 8
uct_param_search lock_free 1
uct_param_search virtual_loss 1
uct_param_search number_playouts 2

The binary does around 36k games/sec in the opening rising to 50-60k 
later. Which is a lot
more than the 23.5K of the cygwin version. AFAIK it works Ok with 
multithreading with

and without locking. It is also much smaller and has no .dll dependencies.

If someone wants to test it more, it is here:

http://www.dybot.com/fuego04nw/fuego.zip

And the source code Windows developers always dreamt of but were too shy 
to ask ;-)


(All relevant parts of boost included, 0 static lib dependencies, 0 
dynamic lib dependencies,

compiles with MS Visual Studio 2008 0 errors 0 warnings.)

http://www.dybot.com/fuego04nw/fuego.7z

(Compressed with 7z. 7z is free software available at: 
http://www.7-zip.org/
The command line version is the best option if you don't like programs 
integrating in Explorer.)



Jacques.
___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/



___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/


Re: [computer-go] Fuego 04 native Windows

2009-08-09 Thread Michael Williams

Unpack to C:\ETC\Fuego in order for it to compile.  Or modify the list of 
include folders in the project configuration.



Jacques Basaldúa wrote:
I have made a native Windows Fuego build compiled with MS Visual Studio 
2008.


Thanks to the Fuego team for making such a nice program free software !!

I will use it to measure some tree metrics to tune my own program and 
for a validation
experiment for an evaluation function I have developed. I will post 
results when I have any.


To test the binary I made it play on todays KGS tournament and won 1 
game of 3 against

MFOG and 1 game of 3 against Aya + all the other games.

It was running on an overclocked (3.6 GHz) i7.

The settings were:

uct_param_search max_nodes 1250
uct_param_player reuse_subtree 1
uct_param_player ponder 1
go_rules kgs
sg_param time_mode real
uct_param_search number_threads 8
uct_param_search lock_free 1
uct_param_search virtual_loss 1
uct_param_search number_playouts 2

The binary does around 36k games/sec in the opening rising to 50-60k 
later. Which is a lot
more than the 23.5K of the cygwin version. AFAIK it works Ok with 
multithreading with

and without locking. It is also much smaller and has no .dll dependencies.

If someone wants to test it more, it is here:

http://www.dybot.com/fuego04nw/fuego.zip

And the source code Windows developers always dreamt of but were too shy 
to ask ;-)


(All relevant parts of boost included, 0 static lib dependencies, 0 
dynamic lib dependencies,

compiles with MS Visual Studio 2008 0 errors 0 warnings.)

http://www.dybot.com/fuego04nw/fuego.7z

(Compressed with 7z. 7z is free software available at: 
http://www.7-zip.org/
The command line version is the best option if you don't like programs 
integrating in Explorer.)



Jacques.
___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/



___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/


Re: [computer-go] RAVE problems

2009-08-07 Thread Michael Williams

Although I've never done a RAVE implementation (soon, very soon), this is 
related in the sense that AMAF is related to RAVE:

I have recently (yesterday, actually) done some experiments on AMAF with 5-vertex patterns (normal AMAF can be considered 1-vertex patterns).  I was not able to 
observe any improvement in any of the experiments -- small/large number of playouts per move, various AMAF enhancements turned on/off.  Very frustrating since 
it seems like such a reasonable idea.  My implementation was as follows:  If a playout move did NOT match the vertex's pattern at the root, normal AMAF credit 
was given.  If a playout move DID match the vertex's pattern at root, then the credit was multiplied.  So a pattern credit multiplier of 1.0 is equivalent to 
straight AMAF.  I tried values in 1.1 to 2.0.  As I said, I couldn't find any improvement.  I should try 9-vertex patterns too, but I was discouraged by the 
5-vertex results.



Brian Sheppard wrote:

I have traced many, many bad moves to RAVE failures. This post
is a brain dump on what I have learned.

SYMPTOMS

I classify two failure modes:

1) RAVE searches a bad move because it is good later.
2) RAVE won't search the best move because it is bad later.

The first failure mode causes inefficiency. That is, if RAVE
Likes a move then it will be searched and accumulate actual UCT 
trials, and then it must be refuted before the best move can

be found.

If inefficiency only cost an occasional factor of 2, then I
would not worry about it. Unfortunately, RAVE will probably
like a move for several ply, which means that inefficiency 
applies recursively. If you can play several forcing moves to 
delay consequences, then inefficiency can be fatal.


The second failure mode is more problematic, because it is not 
clear how many moves have to be refuted in order for RAVE to 
give the best move a trial. Moreover, every trial for every 
alternative move creates another probably bad RAVE trial for

the best move.


EXPLANATION IN CAUSALITY TERMS
---
RAVE finds moves that correlate with winning. RAVE wants moves 
that *cause* winning.



EXPLANATION IN DOMAIN TERMS

Failure mode 1 above occurs because some moves are only playable 
when we win. For example, we succeed in breaking into the 
opponent's territory and therefore a move in that region 
becomes good.


Failure mode 2 above occurs when a move that is vital to winning 
now stops being able to win in the future. For example, suppose 
that you have a critical semeai. If you don't play a winning 
move now, then all of those moves become losing moves in the 
future.



PEBBLES vs FUEGO

I suspect that RAVE problems are more severe in Pebbles than in 
Fuego. There are three differences:


1) Fuego has a larger exploration coefficient. (0.7 vs 0.25)
2) Fuego combines UCT and RAVE and then adds the UCT exploration 
term, whereas Pebbles applies separate RAVE and UCT exploration 
terms.

3) Fuego's RAVE bonus decreases with distance.

In the first two cases, I have measured that Pebbles choices are 
optimal for Pebbles, despite the problems that ensue. I should 
test the third difference, but have not yet.



WHAT I HAVE DONE ABOUT IT
-
I have made some headway using special cases.

For example, there is a special case involving approach moves: 
if a move A is self-atari, and the *other* liberty B of that 
string is not self-atari, then the RAVE score of B will be the 
higher of the RAVE score of A and the RAVE score of B. (Magnus's 
idea, BTW.)


There are also policies in the playouts that reduce RAVE 
failures. Fuego has clump correction, for example. RAVE 
receives better information when the playouts identify better 
local moves.


I have also tested alternatives in the exploration policy. For 
example, a exploring positions that seem to be losing more 
broadly than positions that seem to be winning. And the Orego 
team's suggestion to use the beta distribution to measure 
variance.


These refinements can have large benefits, but they do not 
completely solve the problem.



WHAT SHOULD BE DONE
---
IMO, we have to redesign RAVE. I have been slow to do so because 
RAVE is so powerful. Really, our programs would not play well at 
all without RAVE. Still, as it is presently conceived, RAVE 
places a scalability limit on the program. It will have to be 
addressed eventually.


Hillis has proposed that moves have context codes that we can 
compare against the current context, and only score RAVE if the 
codes match. My instinct is that this is the right direction.


Dave Fotland said that testing 3x3 neighborhoods yielded no 
benefit. My inference is that contexts should not limit RAVE 
collection too much.


I think that Hillis and Dailey reported tests that allowed RAVE 
matching against the opponent's moves, with results that were 
possibly beneficial.


Most likely the 

Re: [computer-go] Double/Triple Ko situation

2009-08-06 Thread Michael Williams

You should set the limit to whatever yields the highest ELO in YOUR program.

Harry Fearnley wrote:

Darren Cook wrote:

The largest nakade shape is the rabbity six. My wild guess would be to
outlaw self-atari for groups of 7+ stones.


The fun thing about computer go is how hard it is to make hard and fast
rules:
http://senseis.xmp.net/?BiggestKnownEyeSpaceForWhichThereIsANakade

Outlawing self-atari of 18+ stones is probably okay, but not quite so
useful :-).


  http://www.dgob.de/dgoz/trmdpe/

Shows where not defending 20 stones in atari is best.  This
position is easily modified to give a position where self
atari is best.  Clearly this, as well as the 18-stone
nakade, is pathological and will _never_ occur in a real
game ...  :-)

I would guess that there will be a fair number of self-atari
of up to 11 stones (especially on the edge, or in the corner,
and where there are cutting points) where the self-atari
would be the best move.


Harry

-+-+-+-+-+-+
ha...@goban.demon.co.uk38 Henley St, Oxford, OX4 1ES, UK
http://www.goban.demon.co.ukTel: +44 1865 248775
http://harryfearnley.com   *** NEW site ***

Oxford Go Club:http://www.britgo.org/clubs/oxford_c.html
___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/



___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/


Re: [computer-go] Random weighted patterns

2009-07-15 Thread Michael Williams

If your weights are all between 0 and 1:

do
   double r = rand(0 to 1)
   int i = rand(0 to weightCount - 1)
until weight[i]  r

I think that's right.


Mark Boon wrote:

When using patterns during the playout I had improvised some code to
select patterns randomly, but favour those with higher weights more or
less proportionally to the weight..

I was wondering though if there's an established algorithm for
something like this. To be a little more precise, if I have a set of
values and two of those are represented by A and B. If A is twice as
high as B it should have twice the chance to be selected. If there's a
third value C that is 1.5 times A then it should be 1.5 times as
likely to be selected as A and 3 times as likely as B. Etc.

There are many strategies I can think of that make a randomly weighted
selection from a set. But none of them are really straightforward. So
I'd be interested to hear how others handled something like this. And
if there's maybe a standard known algorithm, this kind of thing must
appear in a lot of fields.

Mark
___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/



___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/


Re: [computer-go] Big trees

2009-07-12 Thread Michael Williams

If I think something will overflow a 4-byte, I use an 8-byte.

Yeah, I should add the ability to write out an SGF for a part of the tree.


Jason House wrote:
What do use for your counters? 32 bit numbers max out at 4 billion, and 
you're already beyond that.


Is it possible to generate an SGF file showing the dominant variations 
with the number of wins and losses? It'd be interesting to see what the 
bot considers to be the best sequences are...


Sent from my iPhone

On Jul 10, 2009, at 10:10 PM, Michael Williams 
michaelwilliam...@gmail.com wrote:


Now that I have this system of generating really big game trees, what 
sort of interesting things could I do with it?  The exact number of 
nodes I can store is not exact because I'm doing various things to 
reduce each node's footprint when it goes to disk.  I'm currently 
building a tree that is bushy at the root (heavy exploration term) and 
normal UCT beneath that.  It is at 28 billion nodes now and projecting 
a capacity of 122 billion.  The current node rate is about 130k per 
second (on 1 Core2 core).  This is on a 9x9 board.  I'm still using 
Libego for playouts.  And I'm deleting symmetrically-equivalent moves 
from the tree.  That is all that gets pruned.


___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/

___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/



___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/


[computer-go] GTP commands for CGOS

2009-07-11 Thread Michael Williams

The CGOS page should have a list of the GTP commands required by CGOS.
___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/


[computer-go] Big trees

2009-07-10 Thread Michael Williams
Now that I have this system of generating really big game trees, what sort of interesting things could I do with it?  The exact number of nodes I can store is 
not exact because I'm doing various things to reduce each node's footprint when it goes to disk.  I'm currently building a tree that is bushy at the root (heavy 
exploration term) and normal UCT beneath that.  It is at 28 billion nodes now and projecting a capacity of 122 billion.  The current node rate is about 130k per 
second (on 1 Core2 core).  This is on a 9x9 board.  I'm still using Libego for playouts.  And I'm deleting symmetrically-equivalent moves from the tree.  That 
is all that gets pruned.


___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/


[computer-go] Re: Big trees

2009-07-10 Thread Michael Williams
So far, E5 and E6 are neck-and-neck for the favored opening move (E5 was leading almost the whole time until recently).  The deepest part of the tree is 35 ply. 
 About 18% of run time is spent swapping to disk.  40% is traversing the tree.  14% is Libego.


Michael Williams wrote:
Now that I have this system of generating really big game trees, what 
sort of interesting things could I do with it?  The exact number of 
nodes I can store is not exact because I'm doing various things to 
reduce each node's footprint when it goes to disk.  I'm currently 
building a tree that is bushy at the root (heavy exploration term) and 
normal UCT beneath that.  It is at 28 billion nodes now and projecting a 
capacity of 122 billion.  The current node rate is about 130k per second 
(on 1 Core2 core).  This is on a 9x9 board.  I'm still using Libego for 
playouts.  And I'm deleting symmetrically-equivalent moves from the 
tree.  That is all that gets pruned.





___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/


[computer-go] Prediction

2009-07-08 Thread Michael Williams

Prediction:

First, developers and algorithm gurus will expend huge amounts of effort to 
parallelize code to take advantage of multi-core chips.

Then, hardware engineers and physics gurus will give us light-based CPUs and 
orders of magnitude improvement in single-core performance.

___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/


Re: [computer-go] Really basic question

2009-07-06 Thread Michael Williams
That's the beauty of MC!  It really is a beautiful system.  Initially, they were totally random playouts.  But the more powerful MC Go engines do not do 
completely random playouts; they do heavy playouts.  But if you were to look at a heavy playout, it would still look like a very weak Go player's game.  In 
addition to heavy playouts, there is the tree aspect, which you did not mention.  One way to catagorize and MC engine would be whether or not it is MCTS (MC 
Tree Search).  If so, it will play much stronger and can make statements about scalability.  Pure MC does not use a tree.



Fred Hapgood wrote:

I have a really basic question about how MC works in the context of Go.

Suppose the problem is to make the first move in a game, and suppose we
have accepted as a constraint that we will abstain from just copying
some joseki out of a book -- we are going to use MC to figure out the
first move de novo. We turn on the software and it begins to play out
games. My question is: how does the software pick its first move?  Does
it move entirely at random? Sometimes it sounds that way MC works is by
picking each move at random, from the first to the last, for a million
games or so. The trouble is that the number of possible Go games is so
large that a million games would not even begin to explore the
possibilities.  It is hard to imagine anything useful emerging from
examining such a small number. So I'm guessing that the moves are not
chosen at random.  But even if you reduce the possibilities to two
options per move, which would be pretty impressive, you'd still run out
of your million games in only twenty moves, after which you would be
back to picking at random again.

What am I missing??  





http://www.BostonScienceAndEngineeringLectures.com
http://www.pobox.com/~fhapgood

___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/



___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/


Re: [computer-go] Hash tables

2009-07-06 Thread Michael Williams

I thought you had really heavy nodes?  Like 1k bytes or so?  But no 8 byte 
pointers to children?

Peter Drake wrote:

Well, there is one slight catch...

Nodes do not contain pointers to their children. To find the node after 
making a move, I make the move on the board, then use the Zobrist hash 
of the new board as a key to search for the child node in the hash 
table. So traversing the tree would involve re-playing all of the moves 
from the root. Worse, in the interest of speed, my play code (modeled on 
LibEGO) doesn't support undoing. To do a recursive traversal like this, 
I therefore have to perform a board copy every time I backtrack.


On the other hand, I think I could get away with only traversing the 
part of the tree that is still relevant (probably a small fraction of 
the nodes in use), then traversing the set of nodes linearly to rebuild 
the free list. In other words, I would perform a mark-and-sweep garbage 
collection.


Peter Drake
http://www.lclark.edu/~drake/



On Jul 6, 2009, at 8:02 PM, Michael Williams wrote:

If you are talking about 128k nodes, I don't think traversing them 
will take very long.


___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/



___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/


Re: [computer-go] Complicated seki with Ko

2009-07-01 Thread Michael Williams

Suicide?  Do you mean self-atari?  But there must be more to it than that 
because you don't have a rule that prevents all self-atari, right?

David Fotland wrote:

X can't fill J6 because that would be suicide.  For the moment, H5 is an
eye.

David


-Original Message-
From: computer-go-boun...@computer-go.org [mailto:computer-go-
boun...@computer-go.org] On Behalf Of Brian Sheppard
Sent: Wednesday, July 01, 2009 4:09 AM
To: computer-go@computer-go.org
Subject: [computer-go] Complicated seki with Ko


With X to move, Many Faces immediately gives about a 1% win rate, and

after

a few seconds, resigns, showing 23742 playouts with 0.5% win rate.  10

ply

principal variation, staring with A7.  I don't have any special code to
detect superko or give-2, get-1 in playouts, but the playouts don't

generate

self- atari moves in a seki, so I think it never tries J6 for either

side.

How does MF recognize that it is a seki without analyzing what happens in
the ko?
The eye on H5 is false if X can fill J6, so it is premature to use the
both
sides have an eye with only shared liberties rule.


  1 2 3 4 5 6 7 8 9
A - O - O X - - X -
B - X O - O X - O O
C - O O - O - X O -
D X X X O O O O O O
E - O X X X O X O O
F - - O X O X X X X
G - - X X O O X X -
H - O X O - O O X X
J - O X O O - X - X
X to play.

___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/


___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/



___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/


Re: [computer-go] Re: fuego strength

2009-06-24 Thread Michael Williams

Turn off Windows update or put the CGOS connect script in the startup folder 
and set an automatic login.


David Fotland wrote:

I can have a reduced version of Many Faces up all the time on an old
computer, but I don't monitor it, so someone would have to email and remind
me when it goes down (usually because of a Microsoft automatic reboot :( )

David


-Original Message-
From: computer-go-boun...@computer-go.org [mailto:computer-go-
boun...@computer-go.org] On Behalf Of Magnus Persson
Sent: Wednesday, June 24, 2009 5:55 AM
To: computer-go; Don Dailey
Subject: Re: [computer-go] Re: fuego strength

On 9x9 I have been worrying of the lack of strong anchors but not
enough to complain about. What I think is more important is that
stronger programs are actually active on CGOS for longer periods of
time. I tried to contribute more by having versions of Valkyria online
with a fixed number of playouts. The nice part of that is that I can
then run other tests on the same machine that all uses fixed number of
playouts and still get proper results. If I run a full strength
version of Valkyria on CGOS I cannot have anything else running.

So, I think if more people with strong programs had reduced versions
running, we could have many middle strength programs it would also
become more meaningful to play with full strength programs.

I am looking forward to the new server because I think everyone
would/should be eager to login to it.

Magnus

Quoting Don Dailey dailey@gmail.com:


2009/6/24 Christian Nentwich christ...@modeltwozero.com


 Don,

you might have your work cut out if you try to control inflation

directly,

that can turn into a black art very quickly. Multiple anchors would be
preferable. An offline, X * 1000 game playoff between gnugo and another
candidate anchor would be enough to fix their rating difference. If

their

bilateral winnings drift away during continuous play, the anchor rating
could be tweaked.


It's all a black art anyway.  The anchor itself absorbs (or gives away)
rating points into the pool.  There is not much difference if I just use

it

to monitor the inflation/deflation and control it directly - except that

I

have the ability to control the magnitude of this adjustment.   And the
advantage is that the anchor player becomes a monitor of the inflation
level.

Don't worry, I don't plan to change it from what I'm doing.The

anchor

can still monitor inflation if I track what adjustment I would normally

make

to it if it were not an anchor.   For instance if the opponent

adjustments

tended to be more negative than positive it would indicate that the

entire

pool was overrated.   A way to help compensate is to adjust the initial
rating of new players.  However, the first game against a brand new

player

is not rated for the established player and the K constant is so low

(for

the new players opponents) that it hardly matters. Each player

starts

with a high K and it gradually drops to 3.   But this K is modified from

0%

to 100% depending on the opponents K - so the first game against a

player

a

new player is effectively not rated for his opponent.But I think the
initial value does have an impact on deflation/inflation of the entire

pool.





I'm not sure if the worries voiced on this list about anchors are not
somewhat overdone.


I'm pretty sure it's overdone, but I reserve judgment.  I know the
phenomenon of self-play intransitivity exists,  but it's minor.   This

is

something that can easily be tested privately with a 100,000 games or so

to

get the amount nailed down - at least for specific trio's of players.

I

think I may try gnugo vs fuego at 2 different levels.

I think that MCTS are all similar and that this is the bigger issue.

And

as you say,  gnugo introduces bias too, it's unavoidable.



Other bots, with improvements, may do just as well against an old

version

of Fuego as the full Fuego does, we don't know. Maybe they would do

better

than new versions of Fuego. All this reliance on gnugo introduces bias,

too,

and after all the anchor player is not a single control variable that
determines the destiny of the server. Players will still play many

different

opponents. If Fuego keeps beating the anchor player but losing to

everybody

else, it still won't get a higher rank.

For me, gnugo as an anchor is fine, as I am still experimenting around

a

low ELO level. For authors of strong programs: I am quite surprised

that

you

are not insisting on a much more highly rated anchor. I remember when

KGS

was anchored in the kyu ranks, many years ago. I found myself 7 dan one

day,

until somebody intervened and reanchored the server. The territory far

above

a single anchor player is unsafe.


The thought has occured to me that I should not worry about low resource
anchors and that I should simply bite the bullet and insist, as you say,

on

much stronger anchor players. But the tone of these discussions

indicate

that 

Re: [computer-go] CGOS 19x19 anchor

2009-06-23 Thread Michael Williams
Fuego gets an advantage because when it plays the anchor, it is playing a version of itself.  That's bad for the same reason that it's bad to test against a 
version of your own program -- inflated results.  But I don't think it's a big deal.  What about using both Fuego and Mogo as anchors?  Don't they both satisfy 
those requirements?




Don Dailey wrote:



On Tue, Jun 23, 2009 at 10:10 AM, Hiroshi Yamashita y...@bd.mbn.or.jp 
mailto:y...@bd.mbn.or.jp wrote:


I restarted the 19x19 server.


Thank you. I started my bot.


I'm thinking about making some specified version of fuego


I think using Fuego for anchor is good idea.
One problem is maybe latest Fuego will be overrated from
weak Fuego anchor.


Can you explain this?  I don't understand what you are saying.

- Don
  

 




Regards,
Hiroshi Yamashita


___
computer-go mailing list
computer-go@computer-go.org mailto:computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/





___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/


___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/


Re: [computer-go] Re: fuego strength

2009-06-23 Thread Michael Williams

If it were me, I'd run all anchor candidates against the current CGOS to 
determine the anchor value to use for that anchor candidate.


Hideki Kato wrote:
I'm running Fatman1, GNU Go and GNU Go MC version for 9x9 and two 
instances of GNU Go for 13x13, five programs in total, on a dual-core 
Athlon at home.


I strongly believe current anchors are resource friendly enough for 
older pentium 3, 4 or even Celeron processors and not necessary being 
changed.


Changing anchors is a big problem, similar to changing the 
International prototypes.  Also, GNU Go is used as a reference in 
almost every computer-go research these days.


I'm against that idea, especially for 19x19.

Hideki

Don Dailey: 5212e61a0906231524k4f068be1q50a2f2806b678...@mail.gmail.com:

I'm trying now to get a rough idea about the strength of fuego and it's
suitablity as the anchor player.

Right now the numbers are very rough as I need more samples.   I'm currently
looking at:

 1.  9x9 fuego at 1000 simulations

 2. 19x19 fuego at 3000 simulations.


I'm testing against the current CGOS anchors,  so FatMan vs fuego at 9x9 and
gnugo-3.7.10 at 19x19.


At 9x9 fuego appears to be substantially stronger than FatMan, perhaps
100-200 ELO.   It also is far faster at 1000 simulation than fatman which
requires many more simulations to reach anchor strength.   So there is no
questions about fuego being a capable anchor for small boards.  At this
level on 9x9 FatMan is also stronger than gnugo, so fuego is far stronger
than gnugo on 9x9 and is very resource friendly too.

At 19x19 the story is a bit different.  gnugo appears to be significantly
stronger, but about twice as slow.   There is not enough data to narrow this
down much, but it appears to be over 200 ELO weaker at this level.

Since fuego is using only about half the CPU resources of gnugo,  I can
increase the level.I've only played 30 games at 19x19, so this
conclusion is subject to signficant error, but it's enough to conclude that
it's almost certainly weaker at this level but perhaps not when run at the
same CPU intensity as gnugo.

Of course at higher levels yet, fuego would be far stronger than
gnugo-3.7.10 as seen in the 19x19 cgos tables.   But I'm hoping not to push
the anchors too hard - hopefully they can be run on someones older spare
computer or set unobtrusively in the background on someones desktop
machine.


- Don
 inline file
___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/

--
g...@nue.ci.i.u-tokyo.ac.jp (Kato)
___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/



___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/


Re: [computer-go] 1x1 patterns?!

2009-06-22 Thread Michael Williams
I had never considered using AMAF with larger pattern.  That's an interesting idea.  Perhaps a 5-vertex cross-shaped pattern or a 3x3 pattern.  Has anyone tried 
this?



Magnus Persson wrote:
Probably 1x1 patterns implies that different priorities are assigned to 
the absolute position of empty moves. AMAF can be seen this way. AMAF 
learns statistics of 1x1 patterns if the move is played in the playout 
but ignores all information surrounding the move at the time it is 
played. Another example would be to have lower priorities for the moves 
at the first and second line.


-Magnus

Quoting Peter Drake dr...@lclark.edu:


I've seen reference in some papers to 1x1 patterns. What does that even
mean? A point is either black, white, or vacant, and it's illegal to
play there unless it's vacant.


___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/



___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/


Re: [computer-go] 1x1 patterns?!

2009-06-22 Thread Michael Williams
Why not start with the 5-vertex cross pattern?  Going from 1x1 to 3x3 is a huge jump in complexity and debugability.  With 5-vertex patterns, you can enumerate 
the patterns on paper (there are around 3^4 == 81 of them, ignoring symmetries) to sanity-check the details and see if the general idea works at all.  There are 
too many to enumerate with 9-vertex 3x3 patterns (around 3^8 == 6561, ignoring symmetries).



dhillism...@netscape.net wrote:
Yes. I think it's a good idea, but the devil is in the details. I've 
become pretty disenchanted with trying to use 3x3 or 5x5 patterns. 
Currently, I have about 300 1x1 patterns (I call them context codes) 
that I'm playing around with.


You can also do the same for RAVE without needing any more memory. You 
only adjust the RAVE values, at a node, after filtering out moves, in 
the playouts, that don't match the context/pattern for that position at 
that node.


- Dave Hillis


-Original Message-
From: Michael Williams michaelwilliam...@gmail.com
To: computer-go computer-go@computer-go.org
Sent: Mon, Jun 22, 2009 3:02 pm
Subject: Re: [computer-go] 1x1 patterns?!

I had never considered using AMAF with larger pattern. That's an 
interesting idea. Perhaps a 5-vertex cross-shaped pattern or a 3x3 
pattern. Has anyone tried this? 
 
Magnus Persson wrote: 
  Probably 1x1 patterns implies that different priorities are assigned 
to  the absolute position of empty moves. AMAF can be seen this way. 
AMAF  learns statistics of 1x1 patterns if the move is played in the 
playout  but ignores all information surrounding the move at the time 
it is  played. Another example would be to have lower priorities for 
the moves  at the first and second line. 
   -Magnus 
   Quoting Peter Drake dr...@lclark.edu mailto:dr...@lclark.edu: 
   I've seen reference in some papers to 1x1 patterns. What does that 
even 
  mean? A point is either black, white, or vacant, and it's illegal to 
  play there unless it's vacant. 
   ___ 
  computer-go mailing list 
  computer-go@computer-go.org mailto:computer-go@computer-go.org 
  http://www.computer-go.org/mailman/listinfo/computer-go/ 
   
___ 
computer-go mailing list 
computer-go@computer-go.org mailto:computer-go@computer-go.org 
http://www.computer-go.org/mailman/listinfo/computer-go/ 



Save energy, paper and money -- *get the Green Toolbar 
http://toolbar.aol.com/green/download.html?ncid=emlweusdown0037.*





___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/


___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/


Re: [computer-go] Havannah - Go - LittleGolem

2009-06-21 Thread Michael Williams

Are the games archived?  Does the public have access to those archives?

Ingo Althöfer wrote:

Hello,

some time ago I had asked if discussions on 
computer Havannah were welcome here in the list.

The reactions were positive, but (by different
reasons) actors preferred not to use the opportunity.

In the meantime a computer Havannah scene has
developed on the game server
http://www.littlegolem.net

There it is possible to play Havannah on many different
board sizes (side lengths 4, 5, 6, 7, 8, 9, 10).
Active programmers are Thomas Reinhardt (D, with TOBRT), 
Richard Lorentz (US, with Wanderer), Richard Pijl (NL, with
gambler), ab (=anonymous, D, with havai). On small boards 
(4 and 5) the computers are doing really well in the meantime,

but from size 6 on their games look strange.

It is also possible to run  *** GO  bots *** there, for instance
Gnugo is doing so.


Some more information on LittleGolem:

* Registration is required, but it is without cost, easy,
and without complications.

* Thinking time per move is 36 hours in the average (with
a buffer of 240 hours; and 20 days of vacation per year).

* It is good style to choose names of the type xxx_c for 
computer accounts. If you do not do this, you should write at 
least in the profile that a computer is playing.


* Some participants on LittleGolem are not playing, but only
participating in the interesting fora (one general forum; one
special forum for each game). For new players it reqires to
have some games completed, otherwise you can not write, but only
read. (This is a measure against spam bots.)

* At the moment there is, for each player, only one go rating 
(showing performance on 9, 13, 19) and only one Havannah performance,

mixed over all board sizes. But I think there is some hope that this
general rating will be split in size-dependent ratings again.

Feel free to join LittleGolem.
Ingo.

PS: My account on Little Golem is Ingo Althofer.
http://www.littlegolem.net/jsp/info/player.jsp?plid=11860


___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/


Re: [computer-go] Paper: Beta Distribution

2009-06-18 Thread Michael Williams
Section 3.2 describes a pair of tests that took about 4.2 minutes each (if my calculations are correct).  Why not play more games and have each game contain 
more simulations?  Writing the code and the paper is the hard part, waiting for a computer to run your code is easy.


Peter Drake wrote:

An improvement on the UCB/UCT formula:

Stogin, J., Chen, Y.-P., Drake, P., and Pellegrino, S. (2009) “The Beta 
Distribution in the UCB Algorithm Applied to Monte-Carlo Go”. In 
Proceedings of the 2009 International Conference on Artificial 
Intelligence, CSREA Press.


http://webdisk.lclark.edu/drake/publications/BetaDistribution.pdf

Peter Drake
http://www.lclark.edu/~drake/



___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/



___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/


Re: [computer-go] New CGOS - need your thoughts.

2009-06-16 Thread Michael Williams

I vote for 2 venues, each optional.  Separate rating pools is a must.


Łukasz Lew wrote:

Maybe we could agree that 1 day out of 7 in a week would be played on
6 times faster time controls.
The same bots, connections, logins, the same number of games per week.
Different rating of course.
This would be a problem only for hardcoded bots with no time control.

The advantage would be that we would see how different algorithms (bots) scale.
If the ratings would be very similar for most bots, it would mean that
we can get faster testing of new ideas.
We would know which ideas can be tested of fast time control.

Lukasz

2009/6/16 Don Dailey dailey@gmail.com:

From what I can see, there is resistance to this idea - so what I'm going
to do is to provide venues which are standalone but makes it possible later
to add a time control.In other words for now there will be only 1 time
control per board size but the server will be flexible enough that other
venues can be added if the server ever gets popular enough that we have 40
or 50 players always on line.   But they will be separate venues scheduled
independently.


- Don


On Tue, Jun 16, 2009 at 8:08 AM, Isaac Deutsch i...@gmx.ch wrote:

I'm voting for 2 time settings: One normal and one fast (so maybe 5 min
and 1 min on 9x9).
--
GRATIS für alle GMX-Mitglieder: Die maxdome Movie-FLAT!
Jetzt freischalten unter http://portal.gmx.net/de/go/maxdome01
___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/


___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/


___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/



___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/


Re: [computer-go] Core i7 performance in computer-go

2009-06-06 Thread Michael Williams

i always buy at the low end because you get so much better of a deal. But I'd 
guess the i7 is as excellent at Go as it is at everything else.
Łukwasz Lew wrote:

Hi

I have few days to buy a computer for Monte-carlo Go program.
There is not enough money for a multi processor, so I have to decide between
- core i7 2.66 GHz
- some core2 quad
both subjected to over-clocking.

Have you observed that Monte-Carlo Go program is faster on core i7
than on core2 ?

Lukasz
PS
Or have you found some cheap solutions for shared memory dual processor?
___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/



___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/


Re: [computer-go] Tweak to MCTS selection criterion

2009-06-06 Thread Michael Williams
Another strategy to be considered is to not allow the thinking to cease until the maximum win rate and the maximum visit count agree on the same move. 
Obviously this requires some extra code to make sure you don't lose on time, etc.


Brian Sheppard wrote:

When a UCT search is completed, the usual selection criterion is
choose the move that has the most trials. This is more stable
than choosing the move that has the highest percentage of wins,
since it is possible to have an unreliably high percentage if the
number of trials is small.

I have a small tweak to that criterion. Pebbles uses choose the
move that has the most wins. This rule selects the same move as
the conventional criterion in almost every case. The reason why
Pebbles' rule is superior is revealed in the case where the moves
differ.

When Pebbles chooses a different move than the conventional criterion,
it is because Pebbles move has more wins in fewer trials. When that
happens, Pebbles move would inevitably become the move with the most
trials if searching were to continue. So there is actually no downside.
Of course, the upside is minor, too.

For validation, Pebbles has been using both strategies on CGOS games.
At present, the conventional selection strategy has won 341/498 = 68.47%.
Pebbles strategy has won 415/583 = 71.18%. This isn't statistically
conclusive or anything (0.7 standard deviations; we would need 4 to 8
times as many trials for strong statistical evidence). But Pebbles'
strategy should be better by a small amount, and it has been, so I
present it to you with confidence.

Best,
Brian

___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/



___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/


Re: [computer-go] UCT tree pruning

2009-06-05 Thread Michael Williams

Łukasz Lew wrote:

On Wed, Jun 3, 2009 at 00:56, Michael Williams
michaelwilliam...@gmail.com wrote:

Two things:  Firstly, I'm storing (only in RAM) the precalculated Winrate
and InvSqrtVisits and keeping them updated.
So my UCT formula went from

   Wins / Visits + sqrt(lnParentVisits / Visits)

to

   WinRate + sqrtLnParentVisits * InvSqrtVisits;

This has a memory cost, but I don't care so much about RAM since I can send
the nodes to disk.

And the second thing is to store in the parent node a reference to what is
likely the UCT-best child node.  If the parent has been visited
100*boardspaces times, I will go directly to the likely-best child with
probability 2047/2048.  Anytime a proper UCT loop occurs, the likely-best
reference is updated (about 90% of the time there is no change, so I think
it's safe).


This is quite similar to epsilon trick described here:
http://www.mimuw.edu.pl/~lew/files/epsilon_trick.pdf

in short when you calculate best UCT child you visit it
max(best.visit_count * epsilon, 1) times
with epsilon = 0.05 for instance
It works well both for new and old nodes, but you have to keep the
counter of visits.
The soft way would be to recalculate best child with probability
min(1, 1/(best.visit_count*epsilon)).

Both variants of ET can give you some guarantees about the way the
tree is explored.

Łukasz



I switched to this method.  Thanks, Lukasz.

___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/


Re: [computer-go] UCT tree pruning

2009-06-02 Thread Michael Williams

Update:  After concentrating on tightening the UCT loop, I've optimized myself 
back into needing the SDD  :/

But now I should be able to get to 20B nodes in just one day.

(still only doing 7x7 Go)


Michael Williams wrote:
Yes, when memory is full, I save and free all leaf nodes (which is the 
vast majority).  Nodes are loaded as needed.


Don Dailey wrote:



On Mon, Jun 1, 2009 at 4:57 PM, Michael Williams 
michaelwilliam...@gmail.com mailto:michaelwilliam...@gmail.com wrote:


I've optimized my disk access to the point where I'm mostly CPU
limited now, even when using a standard hard disk instead of an SSD.
 I can now create trees of up to about 30 billion nodes, which would
take about a week.  The simulation rate is continuously going down
because so much time is spent in UCT loops in the huge tree.


That's impressive.   Are you doing things which move parts of the tree 
onto the disk and back when needed? I'm curious about the details!


- Don


 





Don Dailey wrote:



On Mon, Jun 1, 2009 at 11:22 AM, Isaac Deutsch i...@gmx.ch
mailto:i...@gmx.ch mailto:i...@gmx.ch mailto:i...@gmx.ch 
wrote:



 Well, I'll take that over crashing with an out-of-memory
error. :)

   Still, pruning seems better to me and has the same effect. ;p


But is it better?   I think it's not so obvious without thorough
testing.

Pruning throw away information that is lost forever and may need
to be recalculated.   Requiring more simulations does not throw
out results, but results in some inefficiencies.   So it's not
clear to me which is better - it may even be that it depends on
how much you push it.   I am just guessing but I would guess
that pruning is better in the short term, worse in the longer
term.   Imagine a search at a corespondence level, where the
computer thinks for 24 hours.   Which method is best there?  
Could you use hard disk or SSD?   Using some kind of caching

system,  where you relegate the oldest unvisited nodes to the
hard dirve.   It may be that nodes you might normally prune are
unlikely to get used again but if they do you still have the
data.This is no good unless you can guarantee that the disk
is used very infrequently - but with SSD it may be more 
practical.



- Don





   --

   Nur bis 31.05.: GMX FreeDSL Komplettanschluss mit DSL 6.000
Flatrate und
   Telefonanschluss nur 17,95 Euro/mtl.!*
http://portal.gmx.net/de/go/dsl02
   ___
   computer-go mailing list
   computer-go@computer-go.org
mailto:computer-go@computer-go.org
mailto:computer-go@computer-go.org
mailto:computer-go@computer-go.org

   http://www.computer-go.org/mailman/listinfo/computer-go/








___
computer-go mailing list
computer-go@computer-go.org mailto:computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/


___
computer-go mailing list
computer-go@computer-go.org mailto:computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/





___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/





___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/


Re: [computer-go] UCT tree pruning

2009-06-02 Thread Michael Williams

I mean SSD.

Michael Williams wrote:
Update:  After concentrating on tightening the UCT loop, I've optimized 
myself back into needing the SDD  :/


But now I should be able to get to 20B nodes in just one day.

(still only doing 7x7 Go)


Michael Williams wrote:
Yes, when memory is full, I save and free all leaf nodes (which is the 
vast majority).  Nodes are loaded as needed.


Don Dailey wrote:



On Mon, Jun 1, 2009 at 4:57 PM, Michael Williams 
michaelwilliam...@gmail.com mailto:michaelwilliam...@gmail.com 
wrote:


I've optimized my disk access to the point where I'm mostly CPU
limited now, even when using a standard hard disk instead of an SSD.
 I can now create trees of up to about 30 billion nodes, which would
take about a week.  The simulation rate is continuously going down
because so much time is spent in UCT loops in the huge tree.


That's impressive.   Are you doing things which move parts of the 
tree onto the disk and back when needed? I'm curious about the 
details!


- Don


 





Don Dailey wrote:



On Mon, Jun 1, 2009 at 11:22 AM, Isaac Deutsch i...@gmx.ch
mailto:i...@gmx.ch mailto:i...@gmx.ch mailto:i...@gmx.ch 
wrote:



 Well, I'll take that over crashing with an out-of-memory
error. :)

   Still, pruning seems better to me and has the same effect. ;p


But is it better?   I think it's not so obvious without thorough
testing.

Pruning throw away information that is lost forever and may need
to be recalculated.   Requiring more simulations does not throw
out results, but results in some inefficiencies.   So it's not
clear to me which is better - it may even be that it depends on
how much you push it.   I am just guessing but I would guess
that pruning is better in the short term, worse in the longer
term.   Imagine a search at a corespondence level, where the
computer thinks for 24 hours.   Which method is best there?  
Could you use hard disk or SSD?   Using some kind of caching

system,  where you relegate the oldest unvisited nodes to the
hard dirve.   It may be that nodes you might normally prune are
unlikely to get used again but if they do you still have the
data.This is no good unless you can guarantee that the disk
is used very infrequently - but with SSD it may be more 
practical.



- Don




   --
   Nur bis 31.05.: GMX FreeDSL Komplettanschluss mit DSL 6.000
Flatrate und
   Telefonanschluss nur 17,95 Euro/mtl.!*
http://portal.gmx.net/de/go/dsl02
   ___
   computer-go mailing list
   computer-go@computer-go.org
mailto:computer-go@computer-go.org
mailto:computer-go@computer-go.org
mailto:computer-go@computer-go.org

   http://www.computer-go.org/mailman/listinfo/computer-go/








___
computer-go mailing list
computer-go@computer-go.org mailto:computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/


___
computer-go mailing list
computer-go@computer-go.org mailto:computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/





___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/








___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/


Re: [computer-go] UCT tree pruning

2009-06-02 Thread Michael Williams

Two things:  Firstly, I'm storing (only in RAM) the precalculated Winrate and 
InvSqrtVisits and keeping them updated.
So my UCT formula went from

Wins / Visits + sqrt(lnParentVisits / Visits)

to

WinRate + sqrtLnParentVisits * InvSqrtVisits;

This has a memory cost, but I don't care so much about RAM since I can send the 
nodes to disk.

And the second thing is to store in the parent node a reference to what is likely the UCT-best child node.  If the parent has been visited 100*boardspaces 
times, I will go directly to the likely-best child with probability 2047/2048.  Anytime a proper UCT loop occurs, the likely-best reference is updated (about 
90% of the time there is no change, so I think it's safe).



Jason House wrote:

That sounds like a good optimization. What did you do?

Sent from my iPhone

On Jun 2, 2009, at 3:16 PM, Michael Williams 
michaelwilliam...@gmail.com wrote:


Update:  After concentrating on tightening the UCT loop, I've 
optimized myself back into needing the SDD  :/


But now I should be able to get to 20B nodes in just one day.

(still only doing 7x7 Go)


Michael Williams wrote:
Yes, when memory is full, I save and free all leaf nodes (which is 
the vast majority).  Nodes are loaded as needed.

Don Dailey wrote:



On Mon, Jun 1, 2009 at 4:57 PM, Michael Williams 
michaelwilliam...@gmail.com mailto:michaelwilliam...@gmail.com 
wrote:


   I've optimized my disk access to the point where I'm mostly CPU
   limited now, even when using a standard hard disk instead of an SSD.
I can now create trees of up to about 30 billion nodes, which would
   take about a week.  The simulation rate is continuously going down
   because so much time is spent in UCT loops in the huge tree.


That's impressive.   Are you doing things which move parts of the 
tree onto the disk and back when needed? I'm curious about the 
details!


- Don






   Don Dailey wrote:



   On Mon, Jun 1, 2009 at 11:22 AM, Isaac Deutsch i...@gmx.ch
   mailto:i...@gmx.ch mailto:i...@gmx.ch mailto:i...@gmx.ch 
wrote:



Well, I'll take that over crashing with an out-of-memory
   error. :)

  Still, pruning seems better to me and has the same effect. ;p


   But is it better?   I think it's not so obvious without thorough
   testing.

   Pruning throw away information that is lost forever and may need
   to be recalculated.   Requiring more simulations does not throw
   out results, but results in some inefficiencies.   So it's not
   clear to me which is better - it may even be that it depends on
   how much you push it.   I am just guessing but I would guess
   that pruning is better in the short term, worse in the longer
   term.   Imagine a search at a corespondence level, where the
   computer thinks for 24 hours.   Which method is best 
there?  Could you use hard disk or SSD?   Using some kind of 
caching

   system,  where you relegate the oldest unvisited nodes to the
   hard dirve.   It may be that nodes you might normally prune are
   unlikely to get used again but if they do you still have the
   data.This is no good unless you can guarantee that the disk
   is used very infrequently - but with SSD it may be more 
practical.



   - Don




  --
  Nur bis 31.05.: GMX FreeDSL Komplettanschluss mit DSL 6.000
   Flatrate und
  Telefonanschluss nur 17,95 Euro/mtl.!*
   http://portal.gmx.net/de/go/dsl02
  ___
  computer-go mailing list
  computer-go@computer-go.org
   mailto:computer-go@computer-go.org
   mailto:computer-go@computer-go.org
   mailto:computer-go@computer-go.org

  http://www.computer-go.org/mailman/listinfo/computer-go/



   
 




   ___
   computer-go mailing list
   computer-go@computer-go.org mailto:computer-go@computer-go.org
   http://www.computer-go.org/mailman/listinfo/computer-go/


   ___
   computer-go mailing list
   computer-go@computer-go.org mailto:computer-go@computer-go.org
   http://www.computer-go.org/mailman/listinfo/computer-go/



 



___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/


___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/

___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/



___
computer-go

Re: [computer-go] UCT tree pruning

2009-06-02 Thread Michael Williams

Jason House wrote:
On Jun 2, 2009, at 6:56 PM, Michael Williams 
michaelwilliam...@gmail.com wrote:


Two things:  Firstly, I'm storing (only in RAM) the precalculated 
Winrate and InvSqrtVisits and keeping them updated.

So my UCT formula went from

   Wins / Visits + sqrt(lnParentVisits / Visits)

to

   WinRate + sqrtLnParentVisits * InvSqrtVisits;



Which equations do you use for the incremental updates? Or do you just 
recompute the values?




It's not incremental.

  WinRate = Wins / Visits;
  InvSqrtVisits = 1 / sqrt(Visits);




This has a memory cost, but I don't care so much about RAM since I can 
send the nodes to disk.


And the second thing is to store in the parent node a reference to 
what is likely the UCT-best child node.  If the parent has been 
visited 100*boardspaces times, I will go directly to the likely-best 
child with probability 2047/2048.  Anytime a proper UCT loop occurs, 
the likely-best reference is updated (about 90% of the time there is 
no change, so I think it's safe).



What is a proper UCT loop?



By that I meant finding the the child that maximizes the UCT formula.





Jason House wrote:

That sounds like a good optimization. What did you do?
Sent from my iPhone
On Jun 2, 2009, at 3:16 PM, Michael Williams 
michaelwilliam...@gmail.com wrote:
Update:  After concentrating on tightening the UCT loop, I've 
optimized myself back into needing the SDD  :/


But now I should be able to get to 20B nodes in just one day.

(still only doing 7x7 Go)


Michael Williams wrote:
Yes, when memory is full, I save and free all leaf nodes (which is 
the vast majority).  Nodes are loaded as needed.

Don Dailey wrote:



On Mon, Jun 1, 2009 at 4:57 PM, Michael Williams 
michaelwilliam...@gmail.com mailto:michaelwilliam...@gmail.com 
wrote:


  I've optimized my disk access to the point where I'm mostly CPU
  limited now, even when using a standard hard disk instead of an 
SSD.
   I can now create trees of up to about 30 billion nodes, which 
would

  take about a week.  The simulation rate is continuously going down
  because so much time is spent in UCT loops in the huge tree.


That's impressive.   Are you doing things which move parts of the 
tree onto the disk and back when needed? I'm curious about the 
details!


- Don






  Don Dailey wrote:



  On Mon, Jun 1, 2009 at 11:22 AM, Isaac Deutsch i...@gmx.ch
  mailto:i...@gmx.ch mailto:i...@gmx.ch mailto:i...@gmx.ch 
wrote:



   Well, I'll take that over crashing with an out-of-memory
  error. :)

 Still, pruning seems better to me and has the same 
effect. ;p



  But is it better?   I think it's not so obvious without 
thorough

  testing.

  Pruning throw away information that is lost forever and may 
need

  to be recalculated.   Requiring more simulations does not throw
  out results, but results in some inefficiencies.   So it's not
  clear to me which is better - it may even be that it depends on
  how much you push it.   I am just guessing but I would guess
  that pruning is better in the short term, worse in the longer
  term.   Imagine a search at a corespondence level, where the
  computer thinks for 24 hours.   Which method is best 
there?  Could you use hard disk or SSD?   Using some kind 
of caching

  system,  where you relegate the oldest unvisited nodes to the
  hard dirve.   It may be that nodes you might normally prune are
  unlikely to get used again but if they do you still have the
  data.This is no good unless you can guarantee that the disk
  is used very infrequently - but with SSD it may be more 
practical.



  - Don




 --
 Nur bis 31.05.: GMX FreeDSL Komplettanschluss mit DSL 6.000
  Flatrate und
 Telefonanschluss nur 17,95 Euro/mtl.!*
  http://portal.gmx.net/de/go/dsl02
 ___
 computer-go mailing list
 computer-go@computer-go.org
  mailto:computer-go@computer-go.org
  mailto:computer-go@computer-go.org
  mailto:computer-go@computer-go.org

 http://www.computer-go.org/mailman/listinfo/computer-go/



  
 




  ___
  computer-go mailing list
  computer-go@computer-go.org 
mailto:computer-go@computer-go.org

  http://www.computer-go.org/mailman/listinfo/computer-go/


  ___
  computer-go mailing list
  computer-go@computer-go.org mailto:computer-go@computer-go.org
  http://www.computer-go.org/mailman/listinfo/computer-go/



 



___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go

Re: [computer-go] UCT tree pruning

2009-06-01 Thread Michael Williams
I've optimized my disk access to the point where I'm mostly CPU limited now, even when using a standard hard disk instead of an SSD.  I can now create trees of 
up to about 30 billion nodes, which would take about a week.  The simulation rate is continuously going down because so much time is spent in UCT loops in the 
huge tree.



Don Dailey wrote:



On Mon, Jun 1, 2009 at 11:22 AM, Isaac Deutsch i...@gmx.ch 
mailto:i...@gmx.ch wrote:



  Well, I'll take that over crashing with an out-of-memory error. :)

Still, pruning seems better to me and has the same effect. ;p


But is it better?   I think it's not so obvious without thorough testing.

Pruning throw away information that is lost forever and may need to be 
recalculated.   Requiring more simulations does not throw out results, 
but results in some inefficiencies.   So it's not clear to me which is 
better - it may even be that it depends on how much you push it.   I am 
just guessing but I would guess that pruning is better in the short 
term, worse in the longer term.   Imagine a search at a corespondence 
level, where the computer thinks for 24 hours.   Which method is best 
there?  

Could you use hard disk or SSD?   Using some kind of caching system,  
where you relegate the oldest unvisited nodes to the hard dirve.   It 
may be that nodes you might normally prune are unlikely to get used 
again but if they do you still have the data.This is no good unless 
you can guarantee that the disk is used very infrequently - but with SSD 
it may be more practical.



- Don




 



--
Nur bis 31.05.: GMX FreeDSL Komplettanschluss mit DSL 6.000 Flatrate und
Telefonanschluss nur 17,95 Euro/mtl.!* http://portal.gmx.net/de/go/dsl02
___
computer-go mailing list
computer-go@computer-go.org mailto:computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/





___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/


___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/


Re: [computer-go] UCT tree pruning

2009-06-01 Thread Michael Williams

Yes, when memory is full, I save and free all leaf nodes (which is the vast 
majority).  Nodes are loaded as needed.

Don Dailey wrote:



On Mon, Jun 1, 2009 at 4:57 PM, Michael Williams 
michaelwilliam...@gmail.com mailto:michaelwilliam...@gmail.com wrote:


I've optimized my disk access to the point where I'm mostly CPU
limited now, even when using a standard hard disk instead of an SSD.
 I can now create trees of up to about 30 billion nodes, which would
take about a week.  The simulation rate is continuously going down
because so much time is spent in UCT loops in the huge tree.


That's impressive.   Are you doing things which move parts of the tree 
onto the disk and back when needed? I'm curious about the details!


- Don


 





Don Dailey wrote:



On Mon, Jun 1, 2009 at 11:22 AM, Isaac Deutsch i...@gmx.ch
mailto:i...@gmx.ch mailto:i...@gmx.ch mailto:i...@gmx.ch wrote:


 Well, I'll take that over crashing with an out-of-memory
error. :)

   Still, pruning seems better to me and has the same effect. ;p


But is it better?   I think it's not so obvious without thorough
testing.

Pruning throw away information that is lost forever and may need
to be recalculated.   Requiring more simulations does not throw
out results, but results in some inefficiencies.   So it's not
clear to me which is better - it may even be that it depends on
how much you push it.   I am just guessing but I would guess
that pruning is better in the short term, worse in the longer
term.   Imagine a search at a corespondence level, where the
computer thinks for 24 hours.   Which method is best there?  
Could you use hard disk or SSD?   Using some kind of caching

system,  where you relegate the oldest unvisited nodes to the
hard dirve.   It may be that nodes you might normally prune are
unlikely to get used again but if they do you still have the
data.This is no good unless you can guarantee that the disk
is used very infrequently - but with SSD it may be more practical.


- Don




 


   --
   Nur bis 31.05.: GMX FreeDSL Komplettanschluss mit DSL 6.000
Flatrate und
   Telefonanschluss nur 17,95 Euro/mtl.!*
http://portal.gmx.net/de/go/dsl02
   ___
   computer-go mailing list
   computer-go@computer-go.org
mailto:computer-go@computer-go.org
mailto:computer-go@computer-go.org
mailto:computer-go@computer-go.org

   http://www.computer-go.org/mailman/listinfo/computer-go/






___
computer-go mailing list
computer-go@computer-go.org mailto:computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/


___
computer-go mailing list
computer-go@computer-go.org mailto:computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/





___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/


___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/


Re: [computer-go] Extended AMAF

2009-05-29 Thread Michael Williams

Back in the days of Don's reference bot, I made some similar modifications to 
them and posted the results (slight improvement).  The postings were around 
10/28/08.



Ingo Althöfer wrote:

Hello,

maybe this is old stuff for the insiders.

In my lecture today a clever student (Hagen Riedel)
brought up the following idea to extend AMAF.
He counts in four ways moves on a specific square:
(1) How often did player A make this move in random games
which he won?
(2) How often did player A make this move in random games
which he lost?
(3) How often did opponent B make this move in random games
which A won?
(4) How often did opponent B make this move in random
games which A lost.

Let n(1), ... n(4) be these numbers,
and q(1), ..., q(4) the respective quota.
Would it make sense to combine them by a linear combination, like
lamda(1)*q(1) + lamda(2)*q(2),
where the lamda's are appropriate positve or negative weights.

Any comments, experiences, ...?

Ingo.


___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/


Re: [computer-go] Go + code + environment

2009-05-23 Thread Michael Williams

MoGo was inspired by Crazy Stone?  I've never heard that before.

Ian Osgood wrote:


On May 23, 2009, at 3:17 AM, Joshua Shriver wrote:

I know with the Chess community, it's looked down upon to use others 
code w/ respect to competing in tournaments. I'm curious, how is it 
with Go?


Even more so.  A decade ago, a couple of North Korean programs were 
alleged to have been plagiarized from the successful Chinese program 
Handtalk.  The stigma was so strong that a decade later one of the 
programs, KCC Igo, was refused entry to the 2008 Computer Olympiad.


From my understanding, many projects are inter-linked, and even some 
of the highest programs are derivatives of other engines. In the chess 
world that would be considered a clone and instantly banned and 
looked down upon.


Perhaps I'm mistaken in my reading, but isn't Mogo a clusterized and 
highly tuned version of gnugo? Things like that made me want to make 
this post. As I find the Go programming community more open to sharing 
ideas and code than my chess world counter part.


You are thinking of the cluster research program SlugGo.  That developer 
and the GNU Go team have the friendly agreement not to both compete in 
the same tournament at the same time.  GNU Go only participated in the 
2008 US computer Go championship when SlugGo could not get its new 
cluster working in time to participate.


MoGo itself was inspired by French compatriot Crazy Stone. Both of these 
programs are academic research projects which publish their research 
(though they don't share code as far as I know).  The field of Computer 
Go owes them and the Indigo team a great debt for publishing their Monte 
Carlo tree search results.  Early Go programmers Bruce Wilcox, David 
Fotland, and Mark Boon were also very generous to explain the internals 
of their programs in great detail.


Will gladly stand corrected w/ Mogo if i'm wrong. Though curious to 
hear everyones input.


-Josh



___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/



___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/


Re: [computer-go] Reflections on a disaster

2009-05-21 Thread Michael Williams

Cool idea.

Magnus Persson wrote:
Valkyria computes AMAF win rates for all moves including those that are 
pruned or illegal in the position. What I noticed is that in cases of 
critical semeais the AMAF values of moves that are for example illegal 
can get very high since they only get legal when you win the semeai and 
thus win the game


Therefore Valkyria takes the AMAF values of moves that cannot be played 
yet, and try to find approach moves that will enable playing them and 
replaces the AMAF values of the approach move with the AMAF value of the 
illegal move if it is higher.


This is a costly computation so it is only done if the position has been 
visited several times.


Without this AMAF-hack Valkyria sometimes has a problem finding F1. It 
also seems to take a longer time to find F1 in all cases where does find 
it.


I have not yet tested the effect on the playing strength from this.


___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/


[computer-go] 7x7 komi

2009-05-21 Thread Michael Williams

What was the consensus on 7x7 komi?  It was discussed back during Don's 
scalability study, but I couldn't find the number itself.  Was it 9.0?
___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/


Re: [computer-go] Libego compiling

2009-05-16 Thread Michael Williams

Michael Williams wrote:

Ben Shoemaker wrote:
Success!  I was able to build on WinXP using Scons and minGW (with 
gcc4.3.3).  Here's what (finally) worked for me:


1. Install Python 2.6.2
http://www.python.org/ftp/python/2.6.2/python-2.6.2.msi

2. Install minGW (using TDM's installer on empty minGW directory)
http://downloads.sourceforge.net/tdm-gcc/tdm-mingw-1.902.0-f1.exe

  ...

Is there a nice installer like this anywhere for 64-bit (Windows 7)?



I'm just using the 32-bit version.  But something is not right:

 g++.exe -o example.exe ego/ego.cpp example/main.cpp -O3 -Iego 
-fomit-frame-pointer -ffast-math -frename-registers -march=i686

In file included from ego/ego.cpp:49:
ego/fast_random.cpp: In member function 'void FastRandom::test()':
ego/fast_random.cpp:76: error: 'printf' was not declared in this scope
ego/fast_random.cpp: In member function 'void FastRandom::test2(uint, uint)':
ego/fast_random.cpp:90: error: 'printf' was not declared in this scope
In file included from example/main.cpp:27:
example/uct.cpp: In member function 'std::string Stat::to_string(bool)':
example/uct.cpp:82: error: 'sprintf' was not declared in this scope
example/main.cpp: In function 'int main(int, char**)':
example/main.cpp:51: error: 'stdout' was not declared in this scope
example/main.cpp:51: error: 'setbuf' was not declared in this scope
example/main.cpp:52: error: 'stderr' was not declared in this scope

It's like it can't find stdio.  Any ideas?  Process Monitor says that it is getting BUFFER OVERFLOW when accessing that file.  I don't know what that means so 
it may or may not be normal.  But probably not.

___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/


Re: [computer-go] Digital Mars

2009-05-15 Thread Michael Williams

Ben Shoemaker wrote:

Success!  I was able to build on WinXP using Scons and minGW (with gcc4.3.3).  
Here's what (finally) worked for me:

1. Install Python 2.6.2
http://www.python.org/ftp/python/2.6.2/python-2.6.2.msi

2. Install minGW (using TDM's installer on empty minGW directory)
http://downloads.sourceforge.net/tdm-gcc/tdm-mingw-1.902.0-f1.exe

 ...

Is there a nice installer like this anywhere for 64-bit (Windows 7)?

___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/


Re: [computer-go] Implications of a CPU vs Memory trend on MCTS

2009-05-14 Thread Michael Williams
C# does.  It should only take 30 bytes per node to store the information I need to have.  But somehow that turns into 50 bytes.  Byte alignment plus class 
overhead, I guess.



Matthew Woodcraft wrote:

Michael Williams wrote:

I want to correct that last statement.  With about 350M nodes currently
in the tree (~30M of which fit into memory), I am averaging 0.06 disk
reads per tree traversal.


What makes the nodes so big?

-M-
___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/



___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/


Re: [computer-go] Implications of a CPU vs Memory trend on MCTS

2009-05-14 Thread Michael Williams

It's on my list of things to improve.

Michael Williams wrote:
C# does.  It should only take 30 bytes per node to store the information 
I need to have.  But somehow that turns into 50 bytes.  Byte alignment 
plus class overhead, I guess.



Matthew Woodcraft wrote:

Michael Williams wrote:

I want to correct that last statement.  With about 350M nodes currently
in the tree (~30M of which fit into memory), I am averaging 0.06 disk
reads per tree traversal.


What makes the nodes so big?

-M-
___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/






___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/


Re: [computer-go] Implications of a CPU vs Memory trend on MCTS

2009-05-14 Thread Michael Williams

I am not using rave yet.  Also on list.

David Fotland wrote:

Are you not using rave?  If you keep rave counters for each legal move in
the node it should be much bigger than this.

David


-Original Message-
From: computer-go-boun...@computer-go.org [mailto:computer-go-
boun...@computer-go.org] On Behalf Of Michael Williams
Sent: Thursday, May 14, 2009 7:08 AM
To: computer-go@computer-go.org
Subject: Re: [computer-go] Implications of a CPU vs Memory trend on MCTS

C# does.  It should only take 30 bytes per node to store the information I
need to have.  But somehow that turns into 50 bytes.  Byte alignment plus
class
overhead, I guess.


Matthew Woodcraft wrote:

Michael Williams wrote:

I want to correct that last statement.  With about 350M nodes currently
in the tree (~30M of which fit into memory), I am averaging 0.06 disk
reads per tree traversal.

What makes the nodes so big?

-M-
___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/


___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/


___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/



___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/


Re: [computer-go] Re: Implications of a CPU vs Memory trend on MCTS

2009-05-13 Thread Michael Williams

Plus, they are both made out of the same stuff so one would expect them to 
scale at about the same rate.

Mark Boon wrote:

I'm a bit late reading this thread and the discussion seems to have
veered from the original topic a bit.

As to the CPU vs. memory discussion, it's not so clear-cut to me that
CPU speeds are improving faster than memory. Twenty years ago you had
CPUs in the 4-8Mhz range and around 1Mb of memory. Today both are
about 1000 times higher. CPU speeds are not necessarily only
represented by hertz of course, but both CPU and memory seemed to have
progressed with roughly the same speed.

The thing is, they don't progress evenly. So maybe at the moment CPUs
are going a bit faster than memory. But this could be temporary, not
necessarily a sustainable trend. Also, CPU speeds of a single
processor has stalled for a few years now. Using multiple CPUs or
cores you get easy doubles by going to two and four. But it also gets
more and more expensive. And doubling the CPUs doesn't double the
power really.

A bit over ten years ago we made a tsume-go program using PN search.
There we also had problems keeping the tree in memory, so we designed
a tree-structure that would automatically swap part of the tree out to
disk. But after that there was a period that this code seemed to have
become superfluous, as memory suddenly became abundant. If we now have
a memory shortage with respect to CPU power it's quite possible this
is something cyclical.

Mark
___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/



___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/


Re: [computer-go] Implications of a CPU vs Memory trend on MCTS

2009-05-13 Thread Michael Williams
I want to correct that last statement.  With about 350M nodes currently in the tree (~30M of which fit into memory), I am averaging 0.06 disk reads per tree 
traversal.  Must less than several.  In hindsight, several wasn't a good guess.  The 0.06 number will get a little worse as the tree gets bigger, but 
probably not much.



Michael Williams wrote:
Those numbers are the average after the tree has grown to 1B nodes.  I'm 
sure the cache hates me.  Each tree traversal will likely make several 
reads from random locations in a 50 GB file.



Don Dailey wrote:
So you are saying that use disk memory for this?  
This could be pretty deceiving if most of your reads and writes are 
cached.What happens when your tree gets much bigger than available 
memory?


- Don



On Tue, May 12, 2009 at 1:18 PM, Michael Williams 
michaelwilliam...@gmail.com mailto:michaelwilliam...@gmail.com wrote:


In my system, I can retrieve the children of any node at a rate of
about 100k nodes/sec.

And I can save nodes at a rate of over 1M nodes/sec (this is much
faster because in my implementation, the operation is sequential on
disk).

Those numbers are from 6x6 testing.


Don Dailey wrote:

This is probably a good solution.   I don't believe the memory
has to be very fast at all because even with light playouts you
are doing a LOT of computation between memory accesses.  
All of this must be tested of course. In fact I was

considering if disk memory could not be utilized as a kind of
cache.   The secret would be to store complete trees in disk
memory, trees that are not likely to be utilized but can be
utilized in a pinch.   The tree store and retrieved must
outweigh by a large factor the amount of time spent creating the
tree in the first place in order for this to pay off.
My guess is that this is impractical, but it's fun to think
about how it might be done.   I'm not sure how to do it without
having a caching nightmare.


- Don



On Tue, May 12, 2009 at 12:41 PM, Michael Williams
michaelwilliam...@gmail.com
mailto:michaelwilliam...@gmail.com
mailto:michaelwilliam...@gmail.com
mailto:michaelwilliam...@gmail.com wrote:

   Don Dailey wrote:

   On Tue, May 12, 2009 at 12:16 PM, Michael Williams
   michaelwilliam...@gmail.com
mailto:michaelwilliam...@gmail.com
   mailto:michaelwilliam...@gmail.com
mailto:michaelwilliam...@gmail.com
   mailto:michaelwilliam...@gmail.com
mailto:michaelwilliam...@gmail.com

   mailto:michaelwilliam...@gmail.com
mailto:michaelwilliam...@gmail.com wrote:

  I have a trick  ;)

  I am currently creating MCTS trees of over a billion
nodes on
   my 4GB
  machine.


   Ok,  I'll bite.What is your solution?


   I use an SSD.  There are many details, of course.  But it's
still in
   the works and I'm still making lots of changes and
adjustments.  I
   seem to be able to solve (there are lots of definitions)
6x6 Go in
   that when I use a komi of 3.5, it is unable to find a winning
line
   for white and when I use 4.5, it is unable to find a 
winning line

   for black.


   ___
   computer-go mailing list
   computer-go@computer-go.org
mailto:computer-go@computer-go.org
mailto:computer-go@computer-go.org
mailto:computer-go@computer-go.org

   http://www.computer-go.org/mailman/listinfo/computer-go/








___
computer-go mailing list
computer-go@computer-go.org mailto:computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/


___
computer-go mailing list
computer-go@computer-go.org mailto:computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/





___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/





___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/


[computer-go] Fuego project site

2009-05-12 Thread Michael Williams

The Projects link (http://fuego.sourceforge.net/projects.html) on the Fuego 
site (http://fuego.sourceforge.net/) is broken.
___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/


Re: [computer-go] Implications of a CPU vs Memory trend on MCTS

2009-05-12 Thread Michael Williams

I have a trick  ;)

I am currently creating MCTS trees of over a billion nodes on my 4GB machine.

___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/


Re: [computer-go] Implications of a CPU vs Memory trend on MCTS

2009-05-12 Thread Michael Williams

Don Dailey wrote:
On Tue, May 12, 2009 at 12:16 PM, Michael Williams 
michaelwilliam...@gmail.com mailto:michaelwilliam...@gmail.com wrote:


I have a trick  ;)

I am currently creating MCTS trees of over a billion nodes on my 4GB
machine.


Ok,  I'll bite.What is your solution?


I use an SSD.  There are many details, of course.  But it's still in the works and I'm still making lots of changes and adjustments.  I seem to be able to 
solve (there are lots of definitions) 6x6 Go in that when I use a komi of 3.5, it is unable to find a winning line for white and when I use 4.5, it is unable 
to find a winning line for black.


___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/


Re: [computer-go] Implications of a CPU vs Memory trend on MCTS

2009-05-12 Thread Michael Williams
It depends on how you use it and how much you pay for it.  If you get a high-end Intel SSD, you can treat it however you like.  But I can't afford that.  I got 
a cheap SSD and so I had shape my algorithm around which kind of disk operations it likes and which ones it doesn't.



steve uurtamo wrote:

is the ssd fast enough to be practical?

s.

On Tue, May 12, 2009 at 12:41 PM, Michael Williams
michaelwilliam...@gmail.com wrote:

Don Dailey wrote:

On Tue, May 12, 2009 at 12:16 PM, Michael Williams
michaelwilliam...@gmail.com mailto:michaelwilliam...@gmail.com wrote:

   I have a trick  ;)

   I am currently creating MCTS trees of over a billion nodes on my 4GB
   machine.


Ok,  I'll bite.What is your solution?

I use an SSD.  There are many details, of course.  But it's still in the
works and I'm still making lots of changes and adjustments.  I seem to be
able to solve (there are lots of definitions) 6x6 Go in that when I use a
komi of 3.5, it is unable to find a winning line for white and when I use
4.5, it is unable to find a winning line for black.

___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/


___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/



___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/


Re: [computer-go] Implications of a CPU vs Memory trend on MCTS

2009-05-12 Thread Michael Williams
Those numbers are the average after the tree has grown to 1B nodes.  I'm sure the cache hates me.  Each tree traversal will likely make several reads from 
random locations in a 50 GB file.



Don Dailey wrote:
So you are saying that use disk memory for this?   

This could be pretty deceiving if most of your reads and writes are 
cached.What happens when your tree gets much bigger than available 
memory?


- Don



On Tue, May 12, 2009 at 1:18 PM, Michael Williams 
michaelwilliam...@gmail.com mailto:michaelwilliam...@gmail.com wrote:


In my system, I can retrieve the children of any node at a rate of
about 100k nodes/sec.

And I can save nodes at a rate of over 1M nodes/sec (this is much
faster because in my implementation, the operation is sequential on
disk).

Those numbers are from 6x6 testing.


Don Dailey wrote:

This is probably a good solution.   I don't believe the memory
has to be very fast at all because even with light playouts you
are doing a LOT of computation between memory accesses.  
All of this must be tested of course. In fact I was

considering if disk memory could not be utilized as a kind of
cache.   The secret would be to store complete trees in disk
memory, trees that are not likely to be utilized but can be
utilized in a pinch.   The tree store and retrieved must
outweigh by a large factor the amount of time spent creating the
tree in the first place in order for this to pay off.
My guess is that this is impractical, but it's fun to think
about how it might be done.   I'm not sure how to do it without
having a caching nightmare.


- Don



On Tue, May 12, 2009 at 12:41 PM, Michael Williams
michaelwilliam...@gmail.com
mailto:michaelwilliam...@gmail.com
mailto:michaelwilliam...@gmail.com
mailto:michaelwilliam...@gmail.com wrote:

   Don Dailey wrote:

   On Tue, May 12, 2009 at 12:16 PM, Michael Williams
   michaelwilliam...@gmail.com
mailto:michaelwilliam...@gmail.com
   mailto:michaelwilliam...@gmail.com
mailto:michaelwilliam...@gmail.com
   mailto:michaelwilliam...@gmail.com
mailto:michaelwilliam...@gmail.com

   mailto:michaelwilliam...@gmail.com
mailto:michaelwilliam...@gmail.com wrote:

  I have a trick  ;)

  I am currently creating MCTS trees of over a billion
nodes on
   my 4GB
  machine.


   Ok,  I'll bite.What is your solution?


   I use an SSD.  There are many details, of course.  But it's
still in
   the works and I'm still making lots of changes and
adjustments.  I
   seem to be able to solve (there are lots of definitions)
6x6 Go in
   that when I use a komi of 3.5, it is unable to find a winning
line
   for white and when I use 4.5, it is unable to find a winning line
   for black.


   ___
   computer-go mailing list
   computer-go@computer-go.org
mailto:computer-go@computer-go.org
mailto:computer-go@computer-go.org
mailto:computer-go@computer-go.org

   http://www.computer-go.org/mailman/listinfo/computer-go/






___
computer-go mailing list
computer-go@computer-go.org mailto:computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/


___
computer-go mailing list
computer-go@computer-go.org mailto:computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/





___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/


___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/


Re: [computer-go] Implications of a CPU vs Memory trend on MCTS

2009-05-12 Thread Michael Williams
That's basically what I'm doing.  Except that there is no depth limit and only the parts of the tree that you need get loaded back into memory.  It's not a 
playing engine yet so it can't build the tree as it plays games.  Currently it just ponders the empty board.



terry mcintyre wrote:
Are we approaching a point where it would be practical to precompute the 
opening tree to some depth, cache the results on SSD, and incrementally 
improve that knowledge based upon subsequent games?
 
Terry McIntyre terrymcint...@yahoo.com


On general principles, when we are looking for a solution of a social 
problem, we must expect to reach conclusions quite opposed to the usual 
opinions on the subject; otherwise it would be no problem. We must 
expect to have to attack, not what is commonly regarded as 
objectionable, but what is commonly regarded as entirely proper and normal.



– John Beverley Robinson, 1897



*From:* Michael Williams michaelwilliam...@gmail.com
*To:* computer-go computer-go@computer-go.org
*Sent:* Tuesday, May 12, 2009 10:18:28 AM
*Subject:* Re: [computer-go] Implications of a CPU vs Memory trend on MCTS

In my system, I can retrieve the children of any node at a rate of about 
100k nodes/sec.


And I can save nodes at a rate of over 1M nodes/sec (this is much faster 
because in my implementation, the operation is sequential on disk).


Those numbers are from 6x6 testing.


Don Dailey wrote:
  This is probably a good solution.  I don't believe the memory has to 
be very fast at all because even with light playouts you are doing a LOT 
of computation between memory accesses. 
  All of this must be tested of course.In fact I was considering if 
disk memory could not be utilized as a kind of cache.  The secret would 
be to store complete trees in disk memory, trees that are not likely to 
be utilized but can be utilized in a pinch.  The tree store and 
retrieved must outweigh by a large factor the amount of time spent 
creating the tree in the first place in order for this to pay off.
  My guess is that this is impractical, but it's fun to think about how 
it might be done.  I'm not sure how to do it without having a caching 
nightmare.

 
 
  - Don
 
 
 
  On Tue, May 12, 2009 at 12:41 PM, Michael Williams 
michaelwilliam...@gmail.com mailto:michaelwilliam...@gmail.com 
mailto:michaelwilliam...@gmail.com 
mailto:michaelwilliam...@gmail.com wrote:

 
 Don Dailey wrote:
 
 On Tue, May 12, 2009 at 12:16 PM, Michael Williams
 michaelwilliam...@gmail.com mailto:michaelwilliam...@gmail.com
 mailto:michaelwilliam...@gmail.com 
mailto:michaelwilliam...@gmail.com
 mailto:michaelwilliam...@gmail.com 
mailto:michaelwilliam...@gmail.com
 mailto:michaelwilliam...@gmail.com 
mailto:michaelwilliam...@gmail.com wrote:

 
 I have a trick  ;)
 
 I am currently creating MCTS trees of over a billion nodes on
 my 4GB
 machine.
 
 
 Ok,  I'll bite.What is your solution?
 
 
 I use an SSD.  There are many details, of course.  But it's still in
 the works and I'm still making lots of changes and adjustments.  I
 seem to be able to solve (there are lots of definitions) 6x6 Go in
 that when I use a komi of 3.5, it is unable to find a winning line
 for white and when I use 4.5, it is unable to find a winning line
 for black.
 
 
 ___
 computer-go mailing list
 computer-go@computer-go.org mailto:computer-go@computer-go.org 
mailto:computer-go@computer-go.org mailto:computer-go@computer-go.org

   http://www.computer-go.org/mailman/listinfo/computer-go/

 
 
 
  
 
  ___
  computer-go mailing list
  computer-go@computer-go.org mailto:computer-go@computer-go.org
  http://www.computer-go.org/mailman/listinfo/computer-go/

___
computer-go mailing list
computer-go@computer-go.org mailto:computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/




___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/


___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/


Re: [computer-go] Implications of a CPU vs Memory trend on MCTS

2009-05-12 Thread Michael Williams
It often gets interrupted by me so that I can change some code, etc.  And I often break backwards compatibility, so I have to delete the file and start from 
scratch.  In the past it has run for up to around 24 hours, but that was an older, slower version.  I just kicked-off a 7x7 run.  I expect it will reach it's 
current capacity of around 2B nodes in about 12 hours.



terry mcintyre wrote:

How long has it been pondering?
 
Terry McIntyre terrymcint...@yahoo.com


On general principles, when we are looking for a solution of a social 
problem, we must expect to reach conclusions quite opposed to the usual 
opinions on the subject; otherwise it would be no problem. We must 
expect to have to attack, not what is commonly regarded as 
objectionable, but what is commonly regarded as entirely proper and normal.



– John Beverley Robinson, 1897



*From:* Michael Williams michaelwilliam...@gmail.com
*To:* computer-go computer-go@computer-go.org
*Sent:* Tuesday, May 12, 2009 1:09:41 PM
*Subject:* Re: [computer-go] Implications of a CPU vs Memory trend on MCTS

That's basically what I'm doing.  Except that there is no depth limit 
and only the parts of the tree that you need get loaded back into 
memory.  It's not a playing engine yet so it can't build the tree as it 
plays games.  Currently it just ponders the empty board.



terry mcintyre wrote:
  Are we approaching a point where it would be practical to precompute 
the opening tree to some depth, cache the results on SSD, and 
incrementally improve that knowledge based upon subsequent games?
   Terry McIntyre terrymcint...@yahoo.com 
mailto:terrymcint...@yahoo.com

 
  On general principles, when we are looking for a solution of a social 
problem, we must expect to reach conclusions quite opposed to the usual 
opinions on the subject; otherwise it would be no problem. We must 
expect to have to attack, not what is commonly regarded as 
objectionable, but what is commonly regarded as entirely proper and normal.

 
 
  – John Beverley Robinson, 1897
 
 
  
  *From:* Michael Williams michaelwilliam...@gmail.com 
mailto:michaelwilliam...@gmail.com
  *To:* computer-go computer-go@computer-go.org 
mailto:computer-go@computer-go.org

  *Sent:* Tuesday, May 12, 2009 10:18:28 AM
  *Subject:* Re: [computer-go] Implications of a CPU vs Memory trend on 
MCTS

 
  In my system, I can retrieve the children of any node at a rate of 
about 100k nodes/sec.

 
  And I can save nodes at a rate of over 1M nodes/sec (this is much 
faster because in my implementation, the operation is sequential on disk).

 
  Those numbers are from 6x6 testing.
 
 
  Don Dailey wrote:
This is probably a good solution.  I don't believe the memory has 
to be very fast at all because even with light playouts you are doing a 
LOT of computation between memory accesses.   All of this must be 
tested of course.In fact I was considering if disk memory could not 
be utilized as a kind of cache.  The secret would be to store complete 
trees in disk memory, trees that are not likely to be utilized but can 
be utilized in a pinch.  The tree store and retrieved must outweigh by a 
large factor the amount of time spent creating the tree in the first 
place in order for this to pay off.
My guess is that this is impractical, but it's fun to think about 
how it might be done.  I'm not sure how to do it without having a 
caching nightmare.

   
   
- Don
   
   
   
On Tue, May 12, 2009 at 12:41 PM, Michael Williams 
michaelwilliam...@gmail.com mailto:michaelwilliam...@gmail.com 
mailto:michaelwilliam...@gmail.com 
mailto:michaelwilliam...@gmail.com 
mailto:michaelwilliam...@gmail.com mailto:michaelwilliam...@gmail.com 
mailto:michaelwilliam...@gmail.com 
mailto:michaelwilliam...@gmail.com wrote:

   
   Don Dailey wrote:
   
   On Tue, May 12, 2009 at 12:16 PM, Michael Williams
   michaelwilliam...@gmail.com 
mailto:michaelwilliam...@gmail.com mailto:michaelwilliam...@gmail.com 
mailto:michaelwilliam...@gmail.com
   mailto:michaelwilliam...@gmail.com 
mailto:michaelwilliam...@gmail.com mailto:michaelwilliam...@gmail.com 
mailto:michaelwilliam...@gmail.com
   mailto:michaelwilliam...@gmail.com 
mailto:michaelwilliam...@gmail.com mailto:michaelwilliam...@gmail.com 
mailto:michaelwilliam...@gmail.com
   mailto:michaelwilliam...@gmail.com 
mailto:michaelwilliam...@gmail.com mailto:michaelwilliam...@gmail.com 
mailto:michaelwilliam...@gmail.com wrote:

   
   I have a trick  ;)
   
   I am currently creating MCTS trees of over a billion 
nodes on

   my 4GB
   machine.
   
   
   Ok,  I'll bite.What is your solution?
   
   
   I use an SSD.  There are many details, of course.  But it's 
still in

   the works and I'm still making lots of changes

Re: [computer-go] Re: Implications of a CPU vs Memory trend on MCTS

2009-05-12 Thread Michael Williams

Where does your 99% figure come from?

Dave Dyer wrote:

Storing an opening book for the first 10 moves requires 
331477745148242200 nodes.  Even with some reduction for symmetry,
I don't see that much memory becoming available anytime soon, and you still
have to evaluate them somehow.

Actually storing a tree, except for extremely limited special cases, is not
even conceptually possible, and doesn't save much time.  Consider that if
you store the tree you saw at the previous move, by the time you get to
use the stored tree 99% of it is useless because your opponent chose his move.

___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/



___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/


Re: [computer-go] Re: Implications of a CPU vs Memory trend on MCTS

2009-05-12 Thread Michael Williams
You have made the assumption that the move that your opponent selected was on average explored equally as much as all of the other moves.  That seems a bit 
pessimistic.  One would expect that the opponent selected a strong move and one would also expect that your tree explored that strong move more than it did 
other moves.  I'm not saying keeping the tree is a huge benefit.  I'm just saying that I don't think your 99% number is fair.




Dave Dyer wrote:

At 02:13 PM 5/12/2009, Michael Williams wrote:

Where does your 99% figure come from?


1/361  1%

by endgame there are still easily 100 empty spaces
on the board.


___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/



___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/


[computer-go] Mogo on supercomputer

2009-05-11 Thread Michael Williams

When Mogo runs on the supercomputer with long-ish time limits, how big does the 
search tree get?
___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/


[computer-go] Fuego save uct tree as sgf

2009-05-10 Thread Michael Williams

Does anyone know how to interpret the data at each node of a SGF created by the 
Fuego command uct_savetree?

It looks like this:


MoveCount 35955
PosCount 35963
Mean 0.50

Rave:
D4 0.50 (31635.70)
B2 0.50 (27049.71)
C2 0.50 (28288.84)
D2 0.50 (29368.09)
E2 0.50 (27690.41)
F2 0.50 (27246.91)
G2 0.50 (28080.39)
H2 0.50 (27464.24)
...

___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/


Re: [computer-go] Fuego Binary for Intel Mac

2009-05-08 Thread Michael Williams

The Fuego documentation doesn't seem to contain any information about 
command-line options (if there are any).

Ian Osgood wrote:


On May 8, 2009, at 11:57 AM, Ech Naton wrote:

  Hello 
  I made a binary of Fuego 0.3.2 for Intel Mac. It is build on OS X 10.4.
  So I don't know if it runs also under 10.5. But since it is not that 
easy to build,

  maybe somebody is interested in a ready executable.
  
  Simply unzip the files in a directory and call fuego032 from your GTP 
client.

  There is no need for library installation or root rights.
  
  Regards Patrick

fuego.zip


Thank you very much! Works fine under Sente Goban (tested on OS X 10.4).

1. Preferences  Players  New Player  Program (GTP)
  Give path to fuego032, and any arguments for setting number of threads 
and such.

  (Can you set any of the GTP settings from the command line?)
  (You can create multiple instances with different settings if you wish.)

  There is no interface for editing the name (Anonymous), so quit and 
edit the prefs by hand.

  a. quit and edit ~/Library/Preferences/ch.sente.Goban.plist
  b. edit Players  (class GobanGTPPlayer)  object  name
  c. change string to Fuego 0.3.2
  d. save and restart Goban

2. New  Info  Rules and Players
  You can change the players at the bottom
  as well as the board size, handicap, and komi.
  (Rules are stuck on Japanese and time controls are disabled for some 
reason)

  These settings are retained for subsequent games.

Ian




___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/


___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/


Re: [computer-go] Re: Fuego technical report

2009-05-07 Thread Michael Williams

What is the meaning of the value returned by uct_score?

Martin Mueller wrote:
How do you set the number of threads that you want Fuego to use?  


E.g. for 4 threads

uct_param_search number_threads 4

This can go e.g. in a config file, or you can set it in GoGui in the Uct 
Param Search dialog.
You could also play with pondering on, and reuse the subtree from 
the previous search.

Also, if you have memory, you can increase the node limit.

uct_param_player ponder 1

uct_param_player reuse_subtree 1

uct_param_search max_nodes 1000


Does the windows version support multiple threads?


It should.
Please test and report.

Thank you

Martin




___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/


___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/


Re: [computer-go] Re: Fuego technical report

2009-05-07 Thread Michael Williams

Once again, I found it right after sending that.  Copied here if anyone else 
cares:


Score position with all stones safe and only simple eyes.

This is a fast scoring function (e.g. suitable for Monte-Carlo), that can be used if playing continues as long as there are legal moves which do not fill the 
player's single point eyes. All stones are considered safe, all empty points must be single empty points surrounded by one color. The score is counted using 1 
point for all black stones or empty points with only black stones adjacent, and -1 point for white stones or empty points with only white stones adjacent. Komi 
of board is taken into account.




Michael Williams wrote:

What is the meaning of the value returned by uct_score?

Martin Mueller wrote:
How do you set the number of threads that you want Fuego to use?  


E.g. for 4 threads

uct_param_search number_threads 4

This can go e.g. in a config file, or you can set it in GoGui in the 
Uct Param Search dialog.
You could also play with pondering on, and reuse the subtree from the 
previous search.

Also, if you have memory, you can increase the node limit.

uct_param_player ponder 1

uct_param_player reuse_subtree 1

uct_param_search max_nodes 1000


Does the windows version support multiple threads?


It should.
Please test and report.

Thank you

Martin




___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/





___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/


Re: [computer-go] Fuego technical report

2009-05-07 Thread Michael Williams

I found an error in the documentation:

===
void GoUctCommands::CmdParamPlayer ( GtpCommand  cmd ) 
===
Get and set GoUctPlayer parameters.

This command is compatible with the GoGui analyze command type param.

Parameters:
   auto_param  See GoUctPlayer::AutoParam
   early_pass  See GoUctPlayer::EarlyPass
   ignore_clock  See GoUctPlayer::IgnoreClock
   reuse_subtree  See GoUctPlayer::ReuseSubtree
   use_root_filter  See GoUctPlayer::UseRootFilter
   max_games  See GoUctPlayer::MaxGames
   resign_min_games  See GoUctPlayer::ResignMinGames
   resign_threshold  See GoUctPlayer::ResignThreshold
   search_mode playout|uct|one_ply  See GoUctPlayer::SearchMode
===

The last line should read:
   search_mode playout_policy|uct|one_ply  See GoUctPlayer::SearchMode





Martin Mueller wrote:

Our technical report describing the Fuego framework is now available on
http://www.cs.ualberta.ca/research/techreports/2009/TR09-08.php

I will probably make at least one more revision, so all feedback and 
suggestions are welcome.


Thank you

Martin
___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/



___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/


[computer-go] Fuego on a small board

2009-05-07 Thread Michael Williams

After starting Fuego and issuing these commands:

boardsize 4
komi 1.5
book_clear
go_param timelimit 600
uct_param_search number_threads 1
go_param_rules ko_rule pos_superko
uct_param_search max_nodes 3000
reg_genmove_toplay

I get this result:

SgRandom::SetSeed: 1241728335
SgDefaultTimeControl: timeLeft=600/1 remaining=1 timeMove=600
SgUctSearch: move cannot change anymore
Count  8.64857e+06
Nodes  11566693
Time   3.9e+02
GameLen19.8 dev=nan min=7.0 max=47.0
InTree 19.6 dev=nan min=0.0 max=38.0
Aborted0%
Games/s22214.2
Value  0.68
Sequence   B2 C3 B3 C2 C4 B1 D3 A2 D2 C1 A4 PASS D4 PASS PASS
TimeRootFilter 0.00
= B2


For the same commands but with a second thread:

boardsize 4
komi 1.5
book_clear
go_param timelimit 600
uct_param_search number_threads 2
go_param_rules ko_rule pos_superko
uct_param_search max_nodes 3000
reg_genmove_toplay

I get this result:

SgRandom::SetSeed: 1241729082
SgDefaultTimeControl: timeLeft=600/1 remaining=1 timeMove=600
[0] SgUctSearch: move cannot change anymore
[1] SgUctSearch: move cannot change anymore
Count  1.03816e+07
Nodes  17472903
Time   5e+02
GameLen20.9 dev=nan min=7.0 max=48.0
InTree 20.5 dev=nan min=0.0 max=42.0
Aborted0%
Games/s20593.9
Value  0.21
Sequence   B2 C3 C2 B3 B4 A2 D3 D2 D1 C4 B1 A3 A1 A4 D2 PASS PASS
TimeRootFilter 0.00
= B2

Using a second thread has negatively affected the evaluation of the position.  
The position is won for black.


Also, I think the documentation could be improved by indicating what the defaults are for various parameters.  For instance, I don't know whether the statement 
above that sets the ko rule was necessary or if it already defaults to pos_superko.


___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/


Re: [computer-go] Fuego technical report

2009-05-06 Thread Michael Williams

How do you set the number of threads that you want Fuego to use?  Does the 
windows version support multiple threads?



Michael Williams wrote:
Very nice.  I do have one suggestion for Fuego.  Make use of the ability 
to filter certain root moves out of the UCT tree to remove symmetrically 
equivalent moves.  Or if it is not cost-prohibitive, throughout the tree.



Martin Mueller wrote:

Our technical report describing the Fuego framework is now available on
http://www.cs.ualberta.ca/research/techreports/2009/TR09-08.php

I will probably make at least one more revision, so all feedback and 
suggestions are welcome.


Thank you

Martin





___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/


Re: [computer-go] Re: Fuego technical report

2009-05-06 Thread Michael Williams

Thanks.  Yes, it works in Windows.


Martin Mueller wrote:
How do you set the number of threads that you want Fuego to use?  


E.g. for 4 threads

uct_param_search number_threads 4

This can go e.g. in a config file, or you can set it in GoGui in the Uct 
Param Search dialog.
You could also play with pondering on, and reuse the subtree from 
the previous search.

Also, if you have memory, you can increase the node limit.

uct_param_player ponder 1

uct_param_player reuse_subtree 1

uct_param_search max_nodes 1000


Does the windows version support multiple threads?


It should.
Please test and report.

Thank you

Martin




___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/


___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/


Re: [computer-go] Re: Fuego technical report

2009-05-06 Thread Michael Williams

Is there a way to get Fuego to do a certain number of playouts per turn?

uct_param_search number_playouts N looked promising, but that is something 
different I think.


Martin Mueller wrote:
How do you set the number of threads that you want Fuego to use?  


E.g. for 4 threads

uct_param_search number_threads 4

This can go e.g. in a config file, or you can set it in GoGui in the Uct 
Param Search dialog.
You could also play with pondering on, and reuse the subtree from 
the previous search.

Also, if you have memory, you can increase the node limit.

uct_param_player ponder 1

uct_param_player reuse_subtree 1

uct_param_search max_nodes 1000


Does the windows version support multiple threads?


It should.
Please test and report.

Thank you

Martin




___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/


___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/


Re: [computer-go] Re: Fuego technical report

2009-05-06 Thread Michael Williams

I found it right after sending that (of course):

uct_param_player max_games N


Michael Williams wrote:

Is there a way to get Fuego to do a certain number of playouts per turn?

uct_param_search number_playouts N looked promising, but that is 
something different I think.



Martin Mueller wrote:
How do you set the number of threads that you want Fuego to use?  


E.g. for 4 threads

uct_param_search number_threads 4

This can go e.g. in a config file, or you can set it in GoGui in the 
Uct Param Search dialog.
You could also play with pondering on, and reuse the subtree from the 
previous search.

Also, if you have memory, you can increase the node limit.

uct_param_player ponder 1

uct_param_player reuse_subtree 1

uct_param_search max_nodes 1000


Does the windows version support multiple threads?


It should.
Please test and report.

Thank you

Martin




___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/





___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/


Re: [computer-go] Fuego technical report

2009-05-05 Thread Michael Williams
Very nice.  I do have one suggestion for Fuego.  Make use of the ability to filter certain root moves out of the UCT tree to remove symmetrically equivalent 
moves.  Or if it is not cost-prohibitive, throughout the tree.



Martin Mueller wrote:

Our technical report describing the Fuego framework is now available on
http://www.cs.ualberta.ca/research/techreports/2009/TR09-08.php

I will probably make at least one more revision, so all feedback and 
suggestions are welcome.


Thank you

Martin


___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/


[computer-go] Re: Monte Carlo on GPU

2009-05-04 Thread Michael Williams

Michael Williams wrote:

See the April 30 2009 posting:   http://www.tobiaspreis.de/




The CUDA SDK also comes with a sample called Monte-Carlo Option Pricing
___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/


[computer-go] Monte Carlo on GPU

2009-05-04 Thread Michael Williams

See the April 30 2009 posting:   http://www.tobiaspreis.de/
___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/


Re: [computer-go] Monte-Carlo Simulation Balancing

2009-04-30 Thread Michael Williams

I wish I was smart   :(


David Silver wrote:

Hi Remi,

I understood this. What I find strange is that using -1/1 should be 
equivalent to using 0/1, but your algorithm behaves differently: it 
ignores lost games with 0/1, and uses them with -1/1.


Imagine you add a big constant to z. One million, say. This does not 
change the problem. You get either 100 or 101 as outcome of a 
playout. But then, your estimate of the gradient becomes complete noise.


So maybe using -1/1 is better than 0/1 ? Since your algorithm depends 
so much on the definition of the reward, there must be an optimal way 
to set the reward. Or there must a better way to define an algorithm 
that would not depend on an offset in the reward.


There is still something wrong that I don't understand. There may be a 
way to quantify the amount of noise in the unbiased gradient estimate, 
and it would depend on the average reward. Probably setting the 
average reward to zero is what would minimize noise in the gradient 
estimate. This is just an intuitive guess.


Okay, now I understand your point :-) It's a good question - and I think 
you're right. In REINFORCE any baseline can be subtracted from the 
reward, without affecting the expected gradient, but possibly reducing 
its variance. The baseline leading to the best estimate is indeed the 
average reward.  So it should be the case that  {-1,+1} would estimate 
the gradient g more efficiently than {0,1}, assuming that we see similar 
numbers of black wins as white wins across the training set.


So to answer your question, we can safely modify the algorithm to use 
(z-b) instead of z, where b is the average reward. This would then make 
the {0,1} and {-1,+1} cases equivalent (with appropriate scaling of 
step-size). I don't think this would have affected the results we 
presented (because all of the learning algorithms converged anyway, at 
least approximately, during training) but it could be an important 
modification for larger boards.


-Dave

___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/



___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/


Re: [computer-go] Monte-Carlo Simulation Balancing

2009-04-29 Thread Michael Williams

David Silver wrote:

Hi Michael,

But one thing confuses me: You are using the value from Fuego's 10k 
simulations as an approximation of the actual value of the position.  
But isn't the actual
value of the position either a win or a loss?  On such small boards, 
can't you assume that Fuego is able to correctly determin who is 
winning and round it's
evaluation to the nearest win/loss?  i.e. if it evaluates the position 
to 0.674, that gets rounded to 1.  If such an assumption about Fuego's 
ability to read
the position on a small board is valid, then it should improve the 
results of your balanced simulation strategy, right?  Or am I missing 
something?


It's true that 5x5 Go is solved, so in principle we could have used the 
true minimax values. However we chose to use an approach that can scale 
to larger boards, which means that we should treat the expert 
evaluations as approximate. And in fact Fuego was not always accurate on 
6x6 boards, as we used only 10k simulations in our training set.


Also, I think it really helps to have soft rather than hard expert 
evaluations. We want a simulation policy that helps differentiate e.g. a 
90% winning position from an 85% winning position. Rounding all the 
expert evaluations to 0 or 1 would lose much of this advantage.


-Dave


By this argument (your last paragraph), you need to do some magical
number of simulations for the training data.  Not enough simulations
and you have too much noise.  And infinite simulations gives you hard
0 or 1 results.  But I can't argue with your results.

___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/


Re: [computer-go] Justification for c==0

2009-04-28 Thread Michael Williams

I will ignore Magnus's comments about AMAF while I respond directly to your 
comments.

If you do one or two simulations from a leaf node and they happen to result in losses, you would never simulate that node again?  And never expand it into it's 
child nodes?  It is very possible that the winning move will result in a playout loss the first time it is tried.



Brian Sheppard wrote:
The Mogo team has published that their UCT exploration coefficient is 
zero, and further state
that this is the optimal setting for Mogo. Other studies have confirmed 
that finding. Yet, the
suspicion persists that this result is somehow related to Mogo's 
structure, perhaps because it

runs massively parallel or because of some twist in its internals.
 
This post provides theoretical and heuristic justification for c==0. 
First the theoretical:
 
Theorem: In a finite game tree with no cycles, with binary rewards, the 
UCT algorithm with c==0
converges (in the absence of computational limitations) to the game 
theoretic optimal policy.
 
The proof is by induction on the depth of the tree. The base case is one 
ply before a terminal state.
In the base case, UCT will eventually try a winning move if one exists. 
Thereafter, UCT will repeat
that move indefinitely because there is no exploration. It follows that 
the UCT value of the base
case will converge to the game theoretic value for both winning and 
losing states. For the induction
step, assume that we have N  1 plies remaining. Each trial produces a 
node at depth N-1 at most.
(Note: for this to be true, we have to count ply depth according to the 
longest path to terminal node.)
With sufficient numbers of trials, each of those nodes will converge to 
the game-theoretic value.
This implies that if there is a winning play, it will eventually be 
discovered.
 
Note that the binary rewards condition is required. Without it, the 
UCT policy cannot know that

winning is the best possible outcome, so it would have to explore.
 
The point of this theorem is that Mogo's is safe; its exploration policy 
does not prevent it from

eventually playing perfectly.
 
Now, there is no implication in this proof that the c==0 policy is 
computationally optimal, or even
efficient. But we do have Mogo's experimental result, so it is 
worthwhile to speculate whether

c==0 should be optimal. Some heuristic reasoning follows.
 
If UCT has to choose between trying a move that wins 55% and a move that 
wins 54%, then why
*shouldn't* it try the move that wins more frequently? What we are 
trying to do (at an internal node)
is to prove that our opponent's last play was losing, and we would do 
this most efficiently by

sampling the move that has the highest success.
 
Another angle: at the root of the tree, we will choose the move that has 
the largest number of trials.
We would like that to be a winning move. From the theorem above, we know 
that the value of the
moves will converge to either 0 or 1. By spending more effort on the 
move with higher reward, we
provide the maximum confirmation of the quality of the chosen move. If 
the reward of that move starts

to drift downward, then it is good that we spent the effort.
 
Another angle: we can spend time on either move A or move B, with A 
higher. If A is winning, then
it is a waste of time to search B even one time. So in that case c==0 is 
optimal. The harder case
is where A is losing: we have spent more time on A and it has a higher 
win rate, so we would
choose move A unless something changes. There are two strategies: invest 
in A to prove that it is
not as good as it looks, or invest in B to prove that it is better than 
it seems. With only two move
choices, these alternatives are probably about equal. But what if we had 
hundreds of alternatives?
We would have a hard time guessing the winning play. So even when move A 
is losing we might
be better off investing effort to disprove it, which would allow an 
alternative to rise.
 
One more thought: Suppose that move A wins 56 out of 100 trials, and 
move B wins 5 out of 9.
Which represents better evidence of superiority? Move A is more standard 
deviations over 50%.

Does that suggest a new exploration policy?
 
OK, so you don't have to worry if you set c==0. It might even be best. 
Just a note: in very preliminary
experiments, c==0 is not best for Pebbles. If longer experiments confirm 
that, I presume it is because
Pebbles runs on a very slow computer and searches only small trees. So 
your mileage may vary.

But if c==0 tests well, then there is no reason not to use it.
 
Best,

Brian




___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/


___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/


Re: [computer-go] Monte-Carlo Simulation Balancing

2009-04-27 Thread Michael Williams

Finally!  I guess you can add this technique to your list, Lukasz.


David Silver wrote:

Hi everyone,

Please find attached my ICML paper with Gerry Tesauro on automatically 
learning a simulation policy for Monte-Carlo Go. Our preliminary results 
show a 200+ Elo improvement over previous approaches, although our 
experiments were restricted to simple Monte-Carlo search with no tree on 
small boards.





Abstract

In this paper we introduce the first algorithms for efficiently learning 
a simulation policy for Monte-Carlo search. Our main idea is to optimise 
the balance of a simulation policy, so that an accurate spread of 
simulation outcomes is maintained, rather than optimising the direct 
strength of the simulation policy. We develop two algorithms for 
balancing a simulation policy by gradient descent. The first algorithm 
optimises the balance of complete simulations, using a policy gradient 
algorithm; whereas the second algorithm optimises the balance over every 
two steps of simulation. We compare our algorithms to reinforcement 
learning and supervised learning algorithms for maximising the strength 
of the simulation policy. We test each algorithm in the domain of 5x5 
and 6x6 Computer Go, using a softmax policy that is parameterised by 
weights for a hundred simple patterns. When used in a simple Monte-Carlo 
search, the policies learnt by simulation balancing achieved 
significantly better performance, with half the mean squared error of a 
uniform random policy, and equal overall performance to a sophisticated 
Go engine.


-Dave




___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/


___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/


Re: [computer-go] Monte-Carlo Simulation Balancing

2009-04-27 Thread Michael Williams

My favorite part:
One natural idea is to use the learned simulation policy in Monte-Carlo search, and 
generate new deep search values, in an iterative cycle.

But one thing confuses me: You are using the value from Fuego's 10k simulations as an approximation of the actual value of the position.  But isn't the actual 
value of the position either a win or a loss?  On such small boards, can't you assume that Fuego is able to correctly determin who is winning and round it's 
evaluation to the nearest win/loss?  i.e. if it evaluates the position to 0.674, that gets rounded to 1.  If such an assumption about Fuego's ability to read 
the position on a small board is valid, then it should improve the results of your balanced simulation strategy, right?  Or am I missing something?





David Silver wrote:

Hi everyone,

Please find attached my ICML paper with Gerry Tesauro on automatically 
learning a simulation policy for Monte-Carlo Go. Our preliminary results 
show a 200+ Elo improvement over previous approaches, although our 
experiments were restricted to simple Monte-Carlo search with no tree on 
small boards.





Abstract

In this paper we introduce the first algorithms for efficiently learning 
a simulation policy for Monte-Carlo search. Our main idea is to optimise 
the balance of a simulation policy, so that an accurate spread of 
simulation outcomes is maintained, rather than optimising the direct 
strength of the simulation policy. We develop two algorithms for 
balancing a simulation policy by gradient descent. The first algorithm 
optimises the balance of complete simulations, using a policy gradient 
algorithm; whereas the second algorithm optimises the balance over every 
two steps of simulation. We compare our algorithms to reinforcement 
learning and supervised learning algorithms for maximising the strength 
of the simulation policy. We test each algorithm in the domain of 5x5 
and 6x6 Computer Go, using a softmax policy that is parameterised by 
weights for a hundred simple patterns. When used in a simple Monte-Carlo 
search, the policies learnt by simulation balancing achieved 
significantly better performance, with half the mean squared error of a 
uniform random policy, and equal overall performance to a sophisticated 
Go engine.


-Dave




___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/


___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/


Re: [computer-go] Digital Mars

2009-04-24 Thread Michael Williams

According to my math, that comes out to around 205 cycles per playout move.  
Pretty damn good, I'd say.


Łukasz Lew wrote:

On Fri, Apr 24, 2009 at 01:52, Łukasz Lew lukasz@gmail.com wrote:

I get
g++-4.1  35 kpps/GHz
g++-4.2  45 kpps/GHz
g++-4.3  40 kpps/GHz
I'm happy it's quite consistent on core2

I'm curious about 4.4 as well.


g++-4.4 45 kpps/GHz
package gcc-snapshot on ubuntu

$ /usr/lib/gcc-snapshot/bin/g++ --version
g++ (Ubuntu 20081024-0ubuntu1) 4.4.0 20081024 (experimental) [trunk
revision 141342]

so quite old.

Lukasz


Lukasz

PS

On Fri, Apr 24, 2009 at 01:29, Adrian Grajdeanu adria...@cox.net wrote:

I have two benchmarks:

On an: Intel(R) Core(TM)2 CPU T7200  @ 2.00GHz stepping 06
g++ --version
g++ (GCC) 4.1.2 20070925 (Red Hat 4.1.2-33)
I had to modify SConstruct to refer to the default g++, not g++.4.2 and
had to remove -march=native

= Benchmarking, please wait ...

= 20 playouts in 2.72759 seconds
73.3249 kpps
36.5657 kpps/GHz (clock independent)
105316/94359 (black wins / white wins)

= 20 playouts in 2.73858 seconds
73.0304 kpps
36.4108 kpps/GHz (clock independent)
104924/94746 (black wins / white wins)

= 20 playouts in 2.72858 seconds
73.2981 kpps
36.5291 kpps/GHz (clock independent)
105097/94582 (black wins / white wins)

= 20 playouts in 2.76258 seconds
72.3961 kpps
36.1141 kpps/GHz (clock independent)
105139/94547 (black wins / white wins)

= 20 playouts in 2.74358 seconds
72.8974 kpps
36.3124 kpps/GHz (clock independent)
104896/94794 (black wins / white wins)

= Try 'help'



on an: Intel(R) Core(TM)2 Quad CPUQ9650  @ 3.00GHz stepping 0a
g++ --version
g++ (GCC) 4.3.0 20080428 (Red Hat 4.3.0-8)
(with -march=native flag)
= Benchmarking, please wait ...

= 20 playouts in 1.65575 seconds
120.791 kpps
40.2566 kpps/GHz (clock independent)
105316/94359 (black wins / white wins)

= 20 playouts in 1.65275 seconds
121.011 kpps
40.3069 kpps/GHz (clock independent)
104924/94746 (black wins / white wins)

= 20 playouts in 1.65375 seconds
120.937 kpps
40.2789 kpps/GHz (clock independent)
105097/94582 (black wins / white wins)

= 20 playouts in 1.65475 seconds
120.864 kpps
40.2917 kpps/GHz (clock independent)
105139/94547 (black wins / white wins)

= 20 playouts in 1.65175 seconds
121.084 kpps
40.3084 kpps/GHz (clock independent)
104896/94794 (black wins / white wins)

= Try 'help'


I'd be curious g++ 4.4 what gives?

Cheers,
Adrian

___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/


___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/



___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/


Re: [computer-go] Digital Mars

2009-04-22 Thread Michael Williams

I do have a core2, but it complained about that switch:

ego/ego.cpp:1: error: bad value (core2) for -march= switch
ego/ego.cpp:1: error: bad value (core2) for -mtune= switch
example/main.cpp:1: error: bad value (core2) for -march= switch
example/main.cpp:1: error: bad value (core2) for -mtune= switch


When using i686, it did not complain, and I get these results:

23.0972 kpps/GHz


Łukasz Lew wrote:

2009/4/22 Michael Williams michaelwilliam...@gmail.com:

This worked for me:
C:\Libego\lukaszlew-libego-476a46885f80e1f4d83494bb632398b3974e901bg++ -o
engine.exe ego/ego.cpp example/main.cpp -O3 -Iego -fomit-frame-pointer
-ffast-math -frename-registers

(I removed the -march switch)

22.5101 kpps/GHz


No too much :)
Can you try -march=i686 and -march=core2 (if you have core2) ?



And I was able to create a DLL like this:

C:\Libego\lukaszlew-libego-476a46885f80e1f4d83494bb632398b3974e901bg++
-shared -o libego.dll ego/eg
o.cpp exported.cpp -O3 -Iego -fomit-frame-pointer -ffast-math
-frename-registers

46274.8727441 pps

SUCCESS!  Thanks for everyone's help.


Here are the contents of exported.cpp:


This is almost the same as Benchmark::do_playout in benchmark.cpp



#include ego/ego.h

__declspec(dllexport) void DoPlayouts(int playout_cnt, int * blackWins, int
* whiteWins)
{
 SimplePolicy policy;
 Board board [1];
 Board mc_board [1];
 PlayoutSimplePolicy playout(policy, mc_board);

 for (int i = 0; i != playout_cnt; i++) {
   mc_board-load(board);
   playout_status_t status = playout.run ();
   if (status != too_long)
   {
 int score = mc_board - score ();
 if (score  0)
 {
   (*blackWins)++;
 }
 else
 {
   (*whiteWins)++;
 }
   }
 }
}


Łukasz Lew wrote:

Please download newest version, I made some ifdefWIN 32 ... to aid
mingw porting.
http://github.com/lukaszlew/libego/zipball/master

Under linux I can cross compile to windows binary with a following command
$ i586-mingw32msvc-g++ -o engine.exe ego/ego.cpp example/main.cpp -O3
-march=native -Iego -fomit-frame-pointer -ffast-math
-frename-registers

It might just work :)

FYI
$ i586-mingw32msvc-g++ --version
i586-mingw32msvc-g++ (GCC) 4.2.1-sjlj (mingw32-2)

And the performance I get is around 32 kpps/GHz

Lukasz

2009/4/22 Michael Williams michaelwilliam...@gmail.com:

Ok, I have Mingw installed now.  That sounds like the way to go.  But I
still don't know how to compile it  :/

According to the SConstruct file, I should be doing something like this
to
build, but it complains:

C:\Libego g++ /Fobuild\ego\dbg\ego.obj /c ego\ego.cpp -DDEBUG -ggdb3
-Wall
-Wextra -Wswitch-enum -fno-inline /nologo /Iego

g++: /Fobuild\ego\dbg\ego.obj: No such file or directory
g++: /c: No such file or directory
g++: /nologo: No such file or directory
g++: /Iego: No such file or directory
In file included from ego\ego.h:27,
   from ego\ego.cpp:47:
ego\gtp.h:73: warning: `class Gtp' has virtual functions but non-virtual
destructor
In file included from ego\ego.cpp:54:
ego\player.cpp: In constructor `Player::Player()':
ego\player.cpp:27: warning: converting of negative value `-0x1'
to
`uint'
In file included from ego\ego.cpp:55:
ego\color.cpp: In constructor `Color::Color()':
ego\color.cpp:27: warning: converting of negative value `-0x1' to
`uint'


I also tried the build command for the optimized version:


C:\Libego g++ /Fobuild\ego\opt\ego.obj /c ego\ego.cpp -DDEBUG -ggdb3
-Wall
-Wextra -Wswitch-enum -O3 -march=native -fomit-frame-pointer -ffast-math
-frename-registers /nologo /Iego

g++: /Fobuild\ego\opt\ego.obj: No such file or directory
g++: /c: No such file or directory
g++: /nologo: No such file or directory
g++: /Iego: No such file or directory
ego\ego.cpp:1: error: bad value (native) for -march= switch
ego\ego.cpp:1: error: bad value (native) for -mtune= switch


Sorry for my ignorance.



Łukasz Lew wrote:

2009/4/21 Łukasz Lew lukasz@gmail.com:

mingw rules!
I compiled libego with it and got a decent 32kpps / GHz ( native g++
was 44kpps / GHz)

I used wine to run resulting exe on linux:)


Lukasz

2009/4/21 Don Dailey dailey@gmail.com:

I use mingw to produce cros platform executables.   I can build
executables
for linux, win32 and win64, which for my chess program is a must since
it's
64 bit.

- Don


On Tue, Apr 21, 2009 at 5:33 AM, Łukasz Lew lukasz@gmail.com
wrote:

On Tue, Apr 21, 2009 at 11:23, elife elife2...@gmail.com wrote:

I forgot about cygwin indeed. It is a good idea.
But can you ran the binary on a system without cygwin?

We can run the binary on a system without cygwin if we provide
cygwin1.dll.

That is great.
Another good idea is mingw.

BTW
I would like to recommend stackoverflow.com for programming
questions.
I asked this question there



http://stackoverflow.com/questions/771756/what-is-the-difference-between-cygwin-and-mingw
and got few good answers within a minute.

Lukasz


___
computer-go mailing list
computer-go

Re: [computer-go] Digital Mars

2009-04-22 Thread Michael Williams

After I used a better MinGW build, with a newer gcc (the one Ben suggested), I 
get must better results with no compiler warnings:

40.0609 kpps/GHz

Lukasz, the march options of native, i686 and core2 all worked and came out to 
similar results with i686 being slightly faster for me.


Łukasz Lew wrote:

2009/4/22 Michael Williams michaelwilliam...@gmail.com:

This worked for me:
C:\Libego\lukaszlew-libego-476a46885f80e1f4d83494bb632398b3974e901bg++ -o
engine.exe ego/ego.cpp example/main.cpp -O3 -Iego -fomit-frame-pointer
-ffast-math -frename-registers

(I removed the -march switch)

22.5101 kpps/GHz


No too much :)
Can you try -march=i686 and -march=core2 (if you have core2) ?



And I was able to create a DLL like this:

C:\Libego\lukaszlew-libego-476a46885f80e1f4d83494bb632398b3974e901bg++
-shared -o libego.dll ego/eg
o.cpp exported.cpp -O3 -Iego -fomit-frame-pointer -ffast-math
-frename-registers

46274.8727441 pps

SUCCESS!  Thanks for everyone's help.


Here are the contents of exported.cpp:


This is almost the same as Benchmark::do_playout in benchmark.cpp



#include ego/ego.h

__declspec(dllexport) void DoPlayouts(int playout_cnt, int * blackWins, int
* whiteWins)
{
 SimplePolicy policy;
 Board board [1];
 Board mc_board [1];
 PlayoutSimplePolicy playout(policy, mc_board);

 for (int i = 0; i != playout_cnt; i++) {
   mc_board-load(board);
   playout_status_t status = playout.run ();
   if (status != too_long)
   {
 int score = mc_board - score ();
 if (score  0)
 {
   (*blackWins)++;
 }
 else
 {
   (*whiteWins)++;
 }
   }
 }
}


Łukasz Lew wrote:

Please download newest version, I made some ifdefWIN 32 ... to aid
mingw porting.
http://github.com/lukaszlew/libego/zipball/master

Under linux I can cross compile to windows binary with a following command
$ i586-mingw32msvc-g++ -o engine.exe ego/ego.cpp example/main.cpp -O3
-march=native -Iego -fomit-frame-pointer -ffast-math
-frename-registers

It might just work :)

FYI
$ i586-mingw32msvc-g++ --version
i586-mingw32msvc-g++ (GCC) 4.2.1-sjlj (mingw32-2)

And the performance I get is around 32 kpps/GHz

Lukasz

2009/4/22 Michael Williams michaelwilliam...@gmail.com:

Ok, I have Mingw installed now.  That sounds like the way to go.  But I
still don't know how to compile it  :/

According to the SConstruct file, I should be doing something like this
to
build, but it complains:

C:\Libego g++ /Fobuild\ego\dbg\ego.obj /c ego\ego.cpp -DDEBUG -ggdb3
-Wall
-Wextra -Wswitch-enum -fno-inline /nologo /Iego

g++: /Fobuild\ego\dbg\ego.obj: No such file or directory
g++: /c: No such file or directory
g++: /nologo: No such file or directory
g++: /Iego: No such file or directory
In file included from ego\ego.h:27,
   from ego\ego.cpp:47:
ego\gtp.h:73: warning: `class Gtp' has virtual functions but non-virtual
destructor
In file included from ego\ego.cpp:54:
ego\player.cpp: In constructor `Player::Player()':
ego\player.cpp:27: warning: converting of negative value `-0x1'
to
`uint'
In file included from ego\ego.cpp:55:
ego\color.cpp: In constructor `Color::Color()':
ego\color.cpp:27: warning: converting of negative value `-0x1' to
`uint'


I also tried the build command for the optimized version:


C:\Libego g++ /Fobuild\ego\opt\ego.obj /c ego\ego.cpp -DDEBUG -ggdb3
-Wall
-Wextra -Wswitch-enum -O3 -march=native -fomit-frame-pointer -ffast-math
-frename-registers /nologo /Iego

g++: /Fobuild\ego\opt\ego.obj: No such file or directory
g++: /c: No such file or directory
g++: /nologo: No such file or directory
g++: /Iego: No such file or directory
ego\ego.cpp:1: error: bad value (native) for -march= switch
ego\ego.cpp:1: error: bad value (native) for -mtune= switch


Sorry for my ignorance.



Łukasz Lew wrote:

2009/4/21 Łukasz Lew lukasz@gmail.com:

mingw rules!
I compiled libego with it and got a decent 32kpps / GHz ( native g++
was 44kpps / GHz)

I used wine to run resulting exe on linux:)


Lukasz

2009/4/21 Don Dailey dailey@gmail.com:

I use mingw to produce cros platform executables.   I can build
executables
for linux, win32 and win64, which for my chess program is a must since
it's
64 bit.

- Don


On Tue, Apr 21, 2009 at 5:33 AM, Łukasz Lew lukasz@gmail.com
wrote:

On Tue, Apr 21, 2009 at 11:23, elife elife2...@gmail.com wrote:

I forgot about cygwin indeed. It is a good idea.
But can you ran the binary on a system without cygwin?

We can run the binary on a system without cygwin if we provide
cygwin1.dll.

That is great.
Another good idea is mingw.

BTW
I would like to recommend stackoverflow.com for programming
questions.
I asked this question there



http://stackoverflow.com/questions/771756/what-is-the-difference-between-cygwin-and-mingw
and got few good answers within a minute.

Lukasz


___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go

[computer-go] Libego benchmarking

2009-04-22 Thread Michael Williams

Here is my full set of numbers.  I wonder why the known kpps/GHz but unknown 
kpps.



= Benchmarking, please wait ...

= 20 playouts in 0 seconds
1.#INF kpps
40.0245 kpps/GHz (clock independent)
105316/94359 (black wins / white wins)

= 20 playouts in 0 seconds
1.#INF kpps
40.0721 kpps/GHz (clock independent)
104924/94746 (black wins / white wins)

= 20 playouts in 0 seconds
1.#INF kpps
40.0454 kpps/GHz (clock independent)
105097/94582 (black wins / white wins)

= 20 playouts in 0 seconds
1.#INF kpps
40.0458 kpps/GHz (clock independent)
105139/94547 (black wins / white wins)

= 20 playouts in 0 seconds
1.#INF kpps
40.082 kpps/GHz (clock independent)
104896/94794 (black wins / white wins)

___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/


Re: [computer-go] Reply to Lukasz and Don + Roadmap 2020

2009-04-21 Thread Michael Williams

Mention the program so that the author can either refute your claim or fix the 
bug.


terry mcintyre wrote:
Is it reasonable to expect pro players to use 6-dan programs as a tool 
for analysis? The pro players are markedly better - at a rough guess, a 
pro player could give a 6 dan amateur human or program a 3 stone handicap.


On the other end of the scale, beginning players and mid kyu players 
could indeed make good use of an analysis mode by a program which is 
better than themselves.


Lastly, an analysis mode would be helpful to developers, methinks. After 
winning a game, I like to back up a few moves and find out when the 
program realized that it was behind. This often happens several moves 
after the fatal blow has already been struck. I know the feeling too 
well, when stronger players deftly skewer my group and I only discover 
the problem five moves later. What do they know that I don't? What do 
they know that the program doesn't?


We have a saying, you learn the most from reviewing games which you have 
lost. An analysis mode can help developers to discover when their pride 
and joy first begins to miss the target.
 
Lately, I have been playing quite a bit with a commercially available 
program. An almost-ladder which has an extra liberty will apparently be 
evaluated the same as a true ladder, and the program can be tricked into 
trying to capture my ladder-like position. This sort of predictable flaw 
might provide a clue to improve the next version.


Terry McIntyre terrymcint...@yahoo.com

Government is an association of men who do violence to the rest of us.
- Leo Tolstoy





___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/


___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/


Re: [computer-go] Digital Mars

2009-04-21 Thread Michael Williams

Ok, I have Mingw installed now.  That sounds like the way to go.  But I still 
don't know how to compile it  :/

According to the SConstruct file, I should be doing something like this to 
build, but it complains:

C:\Libego g++ /Fobuild\ego\dbg\ego.obj /c ego\ego.cpp -DDEBUG -ggdb3 -Wall 
-Wextra -Wswitch-enum -fno-inline /nologo /Iego

g++: /Fobuild\ego\dbg\ego.obj: No such file or directory
g++: /c: No such file or directory
g++: /nologo: No such file or directory
g++: /Iego: No such file or directory
In file included from ego\ego.h:27,
 from ego\ego.cpp:47:
ego\gtp.h:73: warning: `class Gtp' has virtual functions but non-virtual 
destructor
In file included from ego\ego.cpp:54:
ego\player.cpp: In constructor `Player::Player()':
ego\player.cpp:27: warning: converting of negative value `-0x1' to 
`uint'
In file included from ego\ego.cpp:55:
ego\color.cpp: In constructor `Color::Color()':
ego\color.cpp:27: warning: converting of negative value `-0x1' to `uint'


I also tried the build command for the optimized version:


C:\Libego g++ /Fobuild\ego\opt\ego.obj /c ego\ego.cpp -DDEBUG -ggdb3 -Wall -Wextra -Wswitch-enum -O3 -march=native -fomit-frame-pointer -ffast-math 
-frename-registers /nologo /Iego


g++: /Fobuild\ego\opt\ego.obj: No such file or directory
g++: /c: No such file or directory
g++: /nologo: No such file or directory
g++: /Iego: No such file or directory
ego\ego.cpp:1: error: bad value (native) for -march= switch
ego\ego.cpp:1: error: bad value (native) for -mtune= switch


Sorry for my ignorance.



Łukasz Lew wrote:

2009/4/21 Łukasz Lew lukasz@gmail.com:

mingw rules!
I compiled libego with it and got a decent 32kpps / GHz ( native g++
was 44kpps / GHz)


I used wine to run resulting exe on linux:)


Lukasz

2009/4/21 Don Dailey dailey@gmail.com:

I use mingw to produce cros platform executables.   I can build executables
for linux, win32 and win64, which for my chess program is a must since it's
64 bit.

- Don


On Tue, Apr 21, 2009 at 5:33 AM, Łukasz Lew lukasz@gmail.com wrote:

On Tue, Apr 21, 2009 at 11:23, elife elife2...@gmail.com wrote:

I forgot about cygwin indeed. It is a good idea.
But can you ran the binary on a system without cygwin?

We can run the binary on a system without cygwin if we provide
cygwin1.dll.

That is great.
Another good idea is mingw.

BTW
I would like to recommend stackoverflow.com for programming questions.
I asked this question there

http://stackoverflow.com/questions/771756/what-is-the-difference-between-cygwin-and-mingw
and got few good answers within a minute.

Lukasz


___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/


___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/


___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/


___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/



___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/


[computer-go] Digital Mars

2009-04-20 Thread Michael Williams
I got Libego compiled to a Windows DLL using Visual Studio and was able to call it, but I was only getting around 5k pps on my Core2.  So I wanted to try 
another compiler.  Has anyone used the Digital Mars C++ compiler?  Or is there another compiler I should try?

___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/


Re: [computer-go] Tree Contention

2009-04-15 Thread Michael Williams

You can change the value all you want.  You just can't change the key.


Jason House wrote:
On Apr 14, 2009, at 7:57 PM, Rémi Coulom remi.cou...@univ-lille3.fr 
wrote:



Jason House wrote:
Out of curiosity, how do you intelligently delete old nodes? 
Reference counting won't always work due to cycles, and a nieve scan 
of the tree could block all threads.


I store a date of birth in every node. At the beginning of a new 
search, I increment time, and refresh the date of birth of all the 
descendants of the new root. When allocating a new node, I can reuse 
old hash entries.


Reuse hash entries? I assume you don't mean reuse entries because a 
later hash value matches (should be quite rare, even with 32 bit hash 
codes). The lockless hash you gave links to does not handle ever 
changing a hash value once it's set.


If you CAS the tombstone value before the key, I guess it'd be 
reasonably safe, but not guaranteed. Did you add any new states to 
guarantee safety?


Or am I thinking about this the wrong way?  
___

computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/



___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/


Re: [computer-go] Tree Contention

2009-04-15 Thread Michael Williams
I think your hash value is your first-try index into the hash table.  So a 32-bit hash would be a 4E9 sized table.  Probably too big for Remi's computer.  I'd 
guess that he's using something between 16 and 32 bits in his hash hey.



Jason House wrote:



On Apr 15, 2009, at 6:50 PM, Michael Williams 
michaelwilliam...@gmail.com wrote:



You can change the value all you want.  You just can't change the key.


Right... That's the design in the google talk. Remi said he can reuse 
cache entries and so avoids resizing / copying (greatly simplifying the 
algorithm). I find that 32 bit zobrist hashing takes a few minutes 
before reusing a single hash value. That's too infrequent to use in 
place of real cleanup. Smaller hashes (such as 16 bit) would have too 
much ovelap to be useful... So rejecting that possibility leaves me 
clueless about what reusing a hash entry could mean besides replacing a 
complete slot in the table.









Jason House wrote:
On Apr 14, 2009, at 7:57 PM, Rémi Coulom remi.cou...@univ-lille3.fr 
wrote:

Jason House wrote:
Out of curiosity, how do you intelligently delete old nodes? 
Reference counting won't always work due to cycles, and a nieve 
scan of the tree could block all threads.


I store a date of birth in every node. At the beginning of a new 
search, I increment time, and refresh the date of birth of all the 
descendants of the new root. When allocating a new node, I can reuse 
old hash entries.
Reuse hash entries? I assume you don't mean reuse entries because a 
later hash value matches (should be quite rare, even with 32 bit hash 
codes). The lockless hash you gave links to does not handle ever 
changing a hash value once it's set.
If you CAS the tombstone value before the key, I guess it'd be 
reasonably safe, but not guaranteed. Did you add any new states to 
guarantee safety?
Or am I thinking about this the wrong way?  
___

computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/


___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/

___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/



___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/


[computer-go] Tree Contention

2009-04-13 Thread Michael Williams
What tricks are people doing to minimize the performance degradation due to multiple threads contending for access to the tree (in MCTS)?  Do you only lock a 
portion of the tree?  How would that work?


___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/


Re: [computer-go] Tree Contention

2009-04-13 Thread Michael Williams
I considered something similar.  But instead of using a win count and a loss count, I use a win count and a simulation count.  In that scenario, you would 
update the simulation count immediately, and then maybe update the wincount once you know the result.  But I haven't tried it either.




Álvaro Begué wrote:

I haven't implemented this successfully, so I probably shouldn't be
giving advice to anyone, but what I was trying to do when we stopped
developing dimwit was the following:
 * When a thread enters a node of the UCT tree, increment the number
of losses (This will discourage other threads from entering the same
branch).
 * When you want find out if the playout was actually a win or a loss,
increment the wins counter and decrement the losses counter.

All the manipulations can be done without locks with a tiny little bit
of assembly or with intrinsic functions.

If you need details, I can try to get you sample code for Mac OS X or
Linux (both on x86).

Álvaro.


On Mon, Apr 13, 2009 at 6:08 PM, Rémi Coulom remi.cou...@univ-lille3.fr wrote:

Michael Williams wrote:

What tricks are people doing to minimize the performance degradation due
to multiple threads contending for access to the tree (in MCTS)?  Do you
only lock a portion of the tree?  How would that work?

___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/

If you are motivated, you can try a completely lockless solution:
http://computer-go.org/pipermail/computer-go/2008-March/014537.html
It scales well up to 16 cores:
http://computer-go.org/pipermail/computer-go/2008-March/014547.html

Using a single global lock is really very inefficient, especially for 9x9 or
if you have many cores.

Rémi
___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/


___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/



___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/


Re: [computer-go] UCT-MC process

2009-04-11 Thread Michael Williams

no.  just don't prune the tree.  or allow unpruning.


compgo...@aol.com wrote:

Following is a description of the nature and process of the UCT-MC method.

For a given Go board position P, let Np denote the total number of all 
possble end of game positions. Let Ei denote each of the end of game 
position (i=1,...,Np).


Let Mip denote all possible move sequences that starts from the position 
P and ends at position Ei.


Assume the most simple MC simulation is used and there is no prunning at 
all except the detection of the end of the game. Then the average of N 
number of MC simulation gives the following ratio.


F=(sum of Mip where black wins)/(sum of all Mip)

Now the question is for F  0.5 does it mean that P is a wnning position 
for black? The anwser is not necessarily. Statistically for more than 
50% of the cases it's true. This is the reason why the MC evaluation 
works. It's also the reason why MC alone cannot be used to evaluate the 
game. The reason above happens is that there exist narrow paths in the 
game space. The searching part of the UCT-MC method is actually trying 
to identify these narrow paths.


With the so called heavy playout the situationis a little dfferent. Here 
the playout itself gets involved in the identifcation of the narrow paths.


In most of the cases the rules used in the heavy playout are not 
perfect. This results in the incorrect prunning even in small number of 
the cases. Generally the searching part of the UCT-MC method can 
compensate for this error. However, one has to be carefull here, because 
it's not guaranted. For example, it can hapen if the playout and the 
searching part uses the same prunning rules. Could it be true that for 
more powerful computers one should use lighter playout?


DL



Check all of your email inboxes from anywhere on the web. Try the new 
Email Toolbar now 
http://toolbar.aol.com/mail/download.html?ncid=txtlnkusdown0027!





___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/


___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/


Re: [computer-go] Libego for Windoze

2009-04-10 Thread Michael Williams

If I have only that file in the project, and fix some header includes, I am 
left with many errors still.  The first few are complaining about this block:

uint64 FastTimer::get_cc_time () volatile {
  uint64 ret;
  __asm__ __volatile__(rdtsc : =A (ret) : :);
  return ret;
}


Łukasz Lew wrote:

I might have back to revert to make/cmake (from scons) after all.
There is some hope in google software construction toolkit and in
scons on google summer of code.

In libego a lot have changed. Now ego is truely a library and is
compiled separately.
ego/ego.cpp is enough to compile library. Then example/main.cpp is an
gtp engine.

Lukasz

On Fri, Apr 10, 2009 at 04:34, Darren Cook dar...@dcook.org wrote:

Has anyone created VC++ project files for Libego?  Or any Libego Windows
build?

Have you tried starting a new project and dragging in main.cpp and
gtp.cpp, then seeing if it compiles?

(I've only compiled on linux; the libego I have on my development
machine is from June 2007, presumably before scons support as I wrote my
own makefile, but main.cpp and gtp.cpp seem to be the only top-level files.)

Darren

P.S. I used scons for a couple of years, but got frustrated by how hard
it made trying to do something they'd not allowed for (e.g. having my
unit tests compile and run in a specific order). I've also used jam and
ant, but the past 3 or 4 years my make replacement of choice is... drum
roll please... make. It turns out despite its poor design decisions
(such as treating tab and space differently), at least I can always get
the job done with it.

--
Darren Cook, Software Researcher/Developer
http://dcook.org/mlsn/ (English-Japanese-German-Chinese-Arabic
   open source dictionary/semantic network)
http://dcook.org/work/ (About me and my work)
http://dcook.org/blogs.html (My blogs and articles)
___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/


___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/



___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/


  1   2   3   >