Re: [computer-go] GTPv3

2007-03-05 Thread Don Dailey
On Mon, 2007-03-05 at 20:00 -0600, Matt Gokey wrote:
> I'm entering this discussion a bit late, but what about the following
> idea?
> 
> Perhaps we could start from scratch and create the protocol we want
> with 
> no compromises based perhaps on an async event message model - a
> model 
> everyone probably is quite familiar with. It could move beyond ASCII 
> messages on stdout and be designed for extensibility.  Add all the 
> common features we are looking for to really make a modern, robust
> and 
> complete system.  Since something like this would be a superset of
> GTP, 
> a reference implementation of the new protocol could also include a 
> proxy implementation of GTP using the new protocol.  This would allow 
> the best of both worlds - programs can continue to use GTP if they 
> wanted, operating in a more constrained context than programs that 
> implement and use the new protocol.  Years into the future we won't
> have 
> the baggage of GTP still as likely all programs would eventually move
> to 
> the new standard.
> 
> Just a thought...
> 
> -Matt

Hi Matt,

There are two potential problems with this.  

  1.  If you get too far away from the current GTP protocol,  
  it won't be accepted.

  2.  In either case, if you push for the new protocol you will
  hurt the computer go community.

I don't pretend to know how likely these scenario's are, but it's
my fear.

If I WERE to do something from scratch, I would start with UCI from
the chess world and make only minor changes to make it more 
appropriate for GO.  Not because I'm also a chess programmer, but 
because it's a fully tested protocol and because it rocks. 

I would point out that the chess world has 2 main protocols, one
that wasn't really planned but evolved from the xboard/winboard
projects.   This is still a problem - if you get a chess engine
and a chess user-interface you have to make sure they are compatible,
because some engines use only one or the other and some interfaces
use one or the other although most good interfaces try to work 
with both.   But I don't really want this to happen with computer
go.   (Of course there is GMP, but it's not a serious contender
for a quality user interface.)

I also hate to break away from the gnu project - it's their good
work that has set the standard for GTP.I believe if they solve
this problem with some kind of asynchronous protocol and build it
into gnugo, it will be accepted.

- Don




 

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


Re: [computer-go] GTPv3

2007-03-05 Thread Matt Gokey

Don Dailey wrote:

On Mon, 2007-03-05 at 10:10 +0100, Heikki Levanto wrote:

On Sat, Mar 03, 2007 at 04:10:16PM -0500, Don Dailey wrote:

And you CAN compare GTP directly to UCI because both are designed for
the same purpose and both are simple text based protocols and the
similarities are much greater than the differences.

GTP has many purposes. One of them is to sit betwene an engine and an
UI, but that is not the only one. It is also used for test scripts to
validate engines, and to debug them.

So, what even asynchronous extensions you are adding to GTP, please keep
the simple synchronous mode still available, for it has many uses too!


If I were designing the asynchronous extentions I was mandate that the
core doesn't change - that you can continue to use GTP as is without any
suprises.


I'm entering this discussion a bit late, but what about the following idea?

Perhaps we could start from scratch and create the protocol we want with 
no compromises based perhaps on an async event message model - a model 
everyone probably is quite familiar with. It could move beyond ASCII 
messages on stdout and be designed for extensibility.  Add all the 
common features we are looking for to really make a modern, robust and 
complete system.  Since something like this would be a superset of GTP, 
a reference implementation of the new protocol could also include a 
proxy implementation of GTP using the new protocol.  This would allow 
the best of both worlds - programs can continue to use GTP if they 
wanted, operating in a more constrained context than programs that 
implement and use the new protocol.  Years into the future we won't have 
the baggage of GTP still as likely all programs would eventually move to 
the new standard.


Just a thought...

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


[computer-go] Go hardware?

2007-03-05 Thread Chris Fant

Maybe this would make a good Go card:

http://gizmodo.com/gadgets/peripherals/nvidia-ships-128core-graphics-cards-for-highend-film-editors-graphics-pros-apple-excited-241478.php
___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/


[computer-go] March KGS bot tournament results

2007-03-05 Thread Nick Wedd
Congratulations to MoGo for winning both divisions, with a total of 12 
wins and no losses, despite the fast time limits and large boards!  I 
must confess I did not expect this.  It is a most impressive result.


My report is at http://www.weddslist.com/kgs/past/24/index.html.  I fear 
it probably contains as many errors as usual.


Nick
--
Nick Wedd[EMAIL PROTECTED]
___
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/


Re: [computer-go] How did MoGo do it?

2007-03-05 Thread Don Dailey
On Mon, 2007-03-05 at 11:58 -0300, Eduardo Sabbatella wrote:
> Also sometimes it scales but not lineal, thats an
> issue to. A big one.
> 
> Like raw MC, you can get a very good move with less
> than 70k simulations, to get a really good move
> perhaps you need 400 billons.
> I remember there is a paper about this with a 'oracle'
> MC engine and they used it to compare to different mc
> implementations.
> 
> MC oracle was a MC engine running like 100 billon
> simulations for every move.

But this doesn't scale to perfect play.  Without the
tree search beneath it,  it doesn't matter how many
trillions of simulations you do,  even trivial errors
like incorrect auto-atari's cannot be solved because
it might statistically be the very best move against
random play.

- Don



> 
> --- Don Dailey <[EMAIL PROTECTED]> escribió:
> 
> > Sylvain,
> > 
> > What you say is no surpise to me about the
> > constraints.  I knew that if
> > you improved things, you would eventually have to
> > improve or reduce 
> > the constraints.
> > 
> > The simple question I always ask about a feature is
> > whether the idea
> > is infinitely scalable.   Some idea are very good in
> > the short term,
> > but in the long term form a barrier to improvement. 
> >  Of course that
> > doesn't mean the idea shouldn't be used because it
> > might be helping
> > you.   But at some point you know your program will
> > out-grow the
> > idea and then it will be holding you back.
> > 
> > A good example of this is piece square tables in
> > computer chess.  It
> > was a wonderful way to add a lot of knowledge to a
> > chess program
> > without slowing it down any.   It's based on the
> > idea of looking
> > at the starting position,  making a lot of stategic
> > decisions before
> > you even begin searching (by filling the table with
> > values) and then
> > doing the search.   This idea has serious limitation
> > when you search
> > incredibly deep,  but really worked well in the days
> > when programs
> > could not search  deeply. I think some programs
> > still use
> > this today but to a lesser extent - they have
> > adjusted accordingly 
> > with much more dynamic evaluation. 
> > 
> > I have this theory that if something isn't "properly
> > scalable", then
> > you are probably doing it wrong - at least in an
> > idealistic sense.
> > >From a practical standpoint I have no trouble doing
> > these non-scalable
> > things if there is no obvious scalable solution that
> > can give me the
> > same
> > short-term improvement.
> > 
> > AnchorMan is a clear example of this non-scalable
> > approach.  A hackery
> > of non-scalable patches to try to stop it from
> > playing the ugliest of
> > moves!   
> > 
> > - Don
> > 
> > 
> > 
> > 
> > 
> > 
> > On Mon, 2007-03-05 at 10:52 +0100, Sylvain Gelly
> > wrote:
> > > Hello Peter, Hello Don, Hello all,
> > > 
> > > It is true that I have been mainly working to
> > improve the level of
> > > MoGo in 19x19. It turned out in my experiments,
> > that improving its
> > > level in 9x9 with very little simulations was
> > significant for the
> > > level in 19x19, so it is one reason why the
> > limited version of MoGo
> > > are running on cgos. So even if the goal was 19x19
> > improvements, the
> > > improvements appeared in all boardsizes. 
> > > 
> > > Our first approach to 19x19 was, as you say Don,
> > to constrain the
> > > board (as explained in our paper), and it brought
> > improvements.
> > > However, now it is quite the contrary what is
> > happening, each
> > > improvement allows to remove constrains on 19x19,
> > and making it play
> > > as if it was a 9x9 board (I mean in the
> > parameters). As you may have
> > > noticed for example, MoGo is not playing locally
> > anymore on 19x19
> > > (which gives it an ugly style :-)). 
> > > The number of simulations done in this tournament
> > was from 10k to 50k
> > > per move, depending on the context and the move
> > number (simple time
> > > management stopping early the thinking if one move
> > is clearly better
> > > than the others). 
> > > For all the details on the improvements, we
> > submitted a paper, and I
> > > am writing them in my thesis, so you will all
> > know, just wait for them
> > > to be written :-/.
> > > I still strongly believe in the future of MC even
> > in 19x19. 
> > > 
> > > Bye,
> > > Sylvain
> > > 
> > > 
> > > 2007/3/5, Don Dailey <[EMAIL PROTECTED]>:
> > > > I'm pretty sure I read that the MoGo team is
> > shifting their efforts
> > > > towards 19x19 GO.   There are lot's of
> > possibilites for research, 
> > > > but Mogo already does things to constrain the
> > board on 19x19, they
> > > > are probably just refining this stuff.
> > > > 
> > > > - Don
> > > > 
> > > > 
> > > > On Sun, 2007-03-04 at 19:58 -0800, Peter Drake
> > wrote: 
> > > > > Congratulations to MoGo on winning the KGS
> > tournament held earlier
> > > > > today:
> > > > >
> > > > >
> > http://www.gokgs.com/tournEntrants.jsp?sort=s&id=270
> > > > >
> 

Re: [computer-go] GTPv3

2007-03-05 Thread Don Dailey
I don't think it should work that way either.  I was just suggesting
that it's
possible to do everything required without any anynchronous changes to
GTP,
but I certainly don't recommend this method.

- Don


On Mon, 2007-03-05 at 10:07 -0600, Nick Apperson wrote:
> I do not think that genmove should work that way.  It makes more sense
> for you to have a genmove command and an async_endsearch command or
> somethinglike that.  The program is allowed to keep searching as long
> as it doesn't receive that command.  genmove doesn't need to have an
> async mode really.  You could have async_genmove return the programs
> best guess at the moment, but it wouldn't be considered final until
> genmove returns. 
> 
> On 3/5/07, Don Dailey <[EMAIL PROTECTED]> wrote:
> Yes, it's possible to do all of this with GTP as is and
> the addition of a few commands that stay blocking, nothing
> but pure GTP extensions and no asyncronous communication.
> 
> I already mentioned this as polling.   Instead of genmove, 
> you send inc_genmove, which is designed to return very
> quickly and does only a partial search.   The controller
> continues to send a long series of consecutive inc_genmove
> until the engine makes a move.   And the controller can 
> stop sending inc_genmove if it wants to abort.   In fact
> it doesn't even need to tell the engine to abort.
> 
> I think this is really rather ugly however.   You are
> adding a LOT of extra communication and things will 
> be sluggish if you don't send these at least 3 or 4
> times per second.
> 
> - Don
> 
> 
> On Mon, 2007-03-05 at 09:50 -0300, Eduardo Sabbatella wrote:
> > Actually gen_move blocks because every engine uses the 
> > same thread for both the engine and the comm link.
> >
> > you can have a couple of sub commands for get_move
> > like: get_complete_percent, get_current_best_move,
> > chat, etc.
> >
> > If the engine doesn't support "realtime" gtp, they 
> > will be answer after the gen_move response. one at a
> > time.
> >
> > I don't know, perhaps I'm pushing too much the gtp
> > protocol... I don't think so, but perhaps
> >
> > 
> > --- Nick Apperson <[EMAIL PROTECTED]> escribió:
> >
> > > I think you are mostly correct.  But, the problem is
> > > that GTP was designed
> > > to block on the genmove command.  This is a problem 
> > > because genmove is
> > > usually not quick to return.  Therefore, there is no
> > > way with the current
> > > scheme to be able to issue commands while an engine
> > > is thinking.  It would 
> > > require a redesign perhaps using polling instead if
> > > GTP is to remain
> > > blocking.
> > >
> > > On 3/5/07, Eduardo Sabbatella
> > > <[EMAIL PROTECTED]> wrote:
> > > >
> > > > Don,
> > > >
> > > > Perhaps I'm completelly wrong, but pondering is up
> > > to
> > > > the engine, the controller, nobody outside the 
> > > engine
> > > > will know / have to know if the engine is
> > > pondering.
> > > >
> > > > I think in the threads we are confusing the fact
> > > that
> > > > the engine and the gtp line controller could be in 
> > > two
> > > > different process threads.
> > > >
> > > > GTP line could 'answer' questions like: cpu usage,
> > > > current best move, at realtime comunicating with 
> > > the
> > > > engine thread. Also, the engine could publish
> > > stats
> > > > info sending that to the gtp line thread.
> > > >
> > > > That is not related to the protocol at all. Adding 
> > > a
> > > > couple of new commands will be enough. (and
> > > processing
> > > > them on realtime from another thread).
> > > >
> > > > If the engine doesnt supports 'abort' 
> > > > the controller after a couple of seconds will
> > > receive
> > > > 'move blah blah' 'command don't understood'.
> > > >
> > > >
> > > > 
> > > > --- Don Dailey <[EMAIL PROTECTED]> escribió:
> > > >
> > > > > I like GTP and I champion it.However, there
> > > are
> > > > > some weaknesses 
> > > > > and they are not easily fixed without a major
> > > > > paridigm change.
> > > > >
> > > > >   1.  There is no way to STOP a program from
> > > > > thinking.  This is 
> > > > >   needed for a high quality user interface.
> > > > >
> > > > >   2.  There is no natuaral way to 

Re: [computer-go] GTPv3

2007-03-05 Thread Nick Apperson

I do not think that genmove should work that way.  It makes more sense for
you to have a genmove command and an async_endsearch command or
somethinglike that.  The program is allowed to keep searching as long as it
doesn't receive that command.  genmove doesn't need to have an async mode
really.  You could have async_genmove return the programs best guess at the
moment, but it wouldn't be considered final until genmove returns.

On 3/5/07, Don Dailey <[EMAIL PROTECTED]> wrote:


Yes, it's possible to do all of this with GTP as is and
the addition of a few commands that stay blocking, nothing
but pure GTP extensions and no asyncronous communication.

I already mentioned this as polling.   Instead of genmove,
you send inc_genmove, which is designed to return very
quickly and does only a partial search.   The controller
continues to send a long series of consecutive inc_genmove
until the engine makes a move.   And the controller can
stop sending inc_genmove if it wants to abort.   In fact
it doesn't even need to tell the engine to abort.

I think this is really rather ugly however.   You are
adding a LOT of extra communication and things will
be sluggish if you don't send these at least 3 or 4
times per second.

- Don


On Mon, 2007-03-05 at 09:50 -0300, Eduardo Sabbatella wrote:
> Actually gen_move blocks because every engine uses the
> same thread for both the engine and the comm link.
>
> you can have a couple of sub commands for get_move
> like: get_complete_percent, get_current_best_move,
> chat, etc.
>
> If the engine doesn't support "realtime" gtp, they
> will be answer after the gen_move response. one at a
> time.
>
> I don't know, perhaps I'm pushing too much the gtp
> protocol... I don't think so, but perhaps
>
>
> --- Nick Apperson <[EMAIL PROTECTED]> escribió:
>
> > I think you are mostly correct.  But, the problem is
> > that GTP was designed
> > to block on the genmove command.  This is a problem
> > because genmove is
> > usually not quick to return.  Therefore, there is no
> > way with the current
> > scheme to be able to issue commands while an engine
> > is thinking.  It would
> > require a redesign perhaps using polling instead if
> > GTP is to remain
> > blocking.
> >
> > On 3/5/07, Eduardo Sabbatella
> > <[EMAIL PROTECTED]> wrote:
> > >
> > > Don,
> > >
> > > Perhaps I'm completelly wrong, but pondering is up
> > to
> > > the engine, the controller, nobody outside the
> > engine
> > > will know / have to know if the engine is
> > pondering.
> > >
> > > I think in the threads we are confusing the fact
> > that
> > > the engine and the gtp line controller could be in
> > two
> > > different process threads.
> > >
> > > GTP line could 'answer' questions like: cpu usage,
> > > current best move, at realtime comunicating with
> > the
> > > engine thread. Also, the engine could publish
> > stats
> > > info sending that to the gtp line thread.
> > >
> > > That is not related to the protocol at all. Adding
> > a
> > > couple of new commands will be enough. (and
> > processing
> > > them on realtime from another thread).
> > >
> > > If the engine doesnt supports 'abort'
> > > the controller after a couple of seconds will
> > receive
> > > 'move blah blah' 'command don't understood'.
> > >
> > >
> > >
> > > --- Don Dailey <[EMAIL PROTECTED]> escribió:
> > >
> > > > I like GTP and I champion it.However, there
> > are
> > > > some weaknesses
> > > > and they are not easily fixed without a major
> > > > paridigm change.
> > > >
> > > >   1.  There is no way to STOP a program from
> > > > thinking.  This is
> > > >   needed for a high quality user interface.
> > > >
> > > >   2.  There is no natuaral way to get useful
> > > > information from the
> > > >   go program, such as it's thinking process.
> >   A
> > > > quality user
> > > >   interface should be able to show the user
> > the
> > > > thinking process
> > > >   of the program,  when it changes it's mind
> > > > about the move choice,
> > > >   it's current opinion of the score, etc.
> > > >
> > > >   This can be implemented with "polling" by
> > > > adding a GTP command
> > > >   to request information from the engine
> > every
> > > > second or two, but
> > > >   this feels like a hack.
> > > >
> > > > Thinking on the opponents time (pondering) is
> > > > supported naturally by
> > > > the UCI protocol.  Actually, the engine doesn't
> > need
> > > > to know much
> > > > about this,  the controller simply tells the
> > engine
> > > > to start thinking
> > > > on a given move and so the engine doesn't even
> > know
> > > > it's thinking on
> > > > the opponents time.   However, the engine does
> > > > communicate to the
> > > > controller what the ponder move is.
> > > >
> > > > This could ALMOST be implemented directly in
> > GTP,
> > > > except for the fact
> > > > that you cannot stop the engine from searching
> > once
> > > > it begins.  If
> > > > I'm pondering, but the opponent doesn't play the
> >

Re: [computer-go] GTPv3

2007-03-05 Thread Don Dailey
Yes, it's possible to do all of this with GTP as is and
the addition of a few commands that stay blocking, nothing
but pure GTP extensions and no asyncronous communication.

I already mentioned this as polling.   Instead of genmove,
you send inc_genmove, which is designed to return very 
quickly and does only a partial search.   The controller
continues to send a long series of consecutive inc_genmove
until the engine makes a move.   And the controller can
stop sending inc_genmove if it wants to abort.   In fact
it doesn't even need to tell the engine to abort.

I think this is really rather ugly however.   You are
adding a LOT of extra communication and things will
be sluggish if you don't send these at least 3 or 4
times per second.  

- Don


On Mon, 2007-03-05 at 09:50 -0300, Eduardo Sabbatella wrote:
> Actually gen_move blocks because every engine uses the
> same thread for both the engine and the comm link.
> 
> you can have a couple of sub commands for get_move
> like: get_complete_percent, get_current_best_move,
> chat, etc.
> 
> If the engine doesn't support "realtime" gtp, they
> will be answer after the gen_move response. one at a
> time.
> 
> I don't know, perhaps I'm pushing too much the gtp
> protocol... I don't think so, but perhaps
> 
> 
> --- Nick Apperson <[EMAIL PROTECTED]> escribió:
> 
> > I think you are mostly correct.  But, the problem is
> > that GTP was designed
> > to block on the genmove command.  This is a problem
> > because genmove is
> > usually not quick to return.  Therefore, there is no
> > way with the current
> > scheme to be able to issue commands while an engine
> > is thinking.  It would
> > require a redesign perhaps using polling instead if
> > GTP is to remain
> > blocking.
> > 
> > On 3/5/07, Eduardo Sabbatella
> > <[EMAIL PROTECTED]> wrote:
> > >
> > > Don,
> > >
> > > Perhaps I'm completelly wrong, but pondering is up
> > to
> > > the engine, the controller, nobody outside the
> > engine
> > > will know / have to know if the engine is
> > pondering.
> > >
> > > I think in the threads we are confusing the fact
> > that
> > > the engine and the gtp line controller could be in
> > two
> > > different process threads.
> > >
> > > GTP line could 'answer' questions like: cpu usage,
> > > current best move, at realtime comunicating with
> > the
> > > engine thread. Also, the engine could publish
> > stats
> > > info sending that to the gtp line thread.
> > >
> > > That is not related to the protocol at all. Adding
> > a
> > > couple of new commands will be enough. (and
> > processing
> > > them on realtime from another thread).
> > >
> > > If the engine doesnt supports 'abort'
> > > the controller after a couple of seconds will
> > receive
> > > 'move blah blah' 'command don't understood'.
> > >
> > >
> > >
> > > --- Don Dailey <[EMAIL PROTECTED]> escribió:
> > >
> > > > I like GTP and I champion it.However, there
> > are
> > > > some weaknesses
> > > > and they are not easily fixed without a major
> > > > paridigm change.
> > > >
> > > >   1.  There is no way to STOP a program from
> > > > thinking.  This is
> > > >   needed for a high quality user interface.
> > > >
> > > >   2.  There is no natuaral way to get useful
> > > > information from the
> > > >   go program, such as it's thinking process.
> >   A
> > > > quality user
> > > >   interface should be able to show the user
> > the
> > > > thinking process
> > > >   of the program,  when it changes it's mind
> > > > about the move choice,
> > > >   it's current opinion of the score, etc.
> > > >
> > > >   This can be implemented with "polling" by
> > > > adding a GTP command
> > > >   to request information from the engine
> > every
> > > > second or two, but
> > > >   this feels like a hack.
> > > >
> > > > Thinking on the opponents time (pondering) is
> > > > supported naturally by
> > > > the UCI protocol.  Actually, the engine doesn't
> > need
> > > > to know much
> > > > about this,  the controller simply tells the
> > engine
> > > > to start thinking
> > > > on a given move and so the engine doesn't even
> > know
> > > > it's thinking on
> > > > the opponents time.   However, the engine does
> > > > communicate to the
> > > > controller what the ponder move is.
> > > >
> > > > This could ALMOST be implemented directly in
> > GTP,
> > > > except for the fact
> > > > that you cannot stop the engine from searching
> > once
> > > > it begins.  If
> > > > I'm pondering, but the opponent doesn't play the
> > > > ponder move,  there
> > > > is not way in GTP to say, STOP searching NOW
> > because
> > > > the move is not
> > > > relevant!
> > > >
> > > > So GTP could not easily be used to build a high
> > > > quality user interface,
> > > > say
> > > > for a commercial program.   At least not one
> > that
> > > > had the better
> > > > features,
> > > > even given that you can extend the command set
> > with
> > > > additional commands.
> > > >
> > > > It COULD be done, just 

Re: [computer-go] GTPv3

2007-03-05 Thread Don Dailey
On Mon, 2007-03-05 at 09:32 -0300, Eduardo Sabbatella wrote:
> Don,
> 
> Perhaps I'm completelly wrong, but pondering is up to
> the engine, the controller, nobody outside the engine
> will know / have to know if the engine is pondering.

My program Lazarus ponders on CGOS, without any help
from the cgos client program, so you are right, extensions
are not necessary to implement pondering.  

However, UCI explicity supports pondering and it makes
it a no-brainer to implement.   If you implement pondering
you will discover that it's far from trivial, but with
help from UCI (or GTP) it comes for free.

This does not prevent you from implementing it internally
your own way.   The model UCI uses is that your program
informs the controller about which move it would ponder
and the controller, at the appropriate time just sends
the command to start thinking on the appopriate position.
Your program does not have to manage the complexity of
when to abort, etc.   However, it can if it wants to.

So extensions to GTP do not have to support this notion
of "supported pondering",  however there is something 
that cannot be faked that GTP does not support.   In 
a commercial quality product,  there is no GTP endorsed
way to stop a program from thinking.   Imagine playing
a program at a super high level and getting impatient
and wanting to see a move.Sorry, not possible with
GTP.

Another cool feature that is not possible is what chess
people call analysis mode.   You sit in front of the 
program with your mouse making moves and the program
is "following the game."   It constantly updates it's
opinion of the position, showing you scores, principal
variations, etc.   But you can make a move anytime
you want for either side and the program instantly
adjusts, starting a new infinite level search from the
new position.   It's just sitting in the background
watching you place stones.   It's a very cool and
useful feature.   Sorry, can't do this with GTP.



> I think in the threads we are confusing the fact that
> the engine and the gtp line controller could be in two
> different process threads.

I'm not confusing this issue, you can implement pondering
this way but this still doesn't address the above issues.
We still need to have some asyncronous commands to get
cool user interfaces.

I don't really care if GTP holds your hand with pondering,
it's just a nice feature UCI has and it lowers the barrier
for implementing pondering for newer less experienced
programmers.


> GTP line could 'answer' questions like: cpu usage,
> current best move, at realtime comunicating with the
> engine thread. Also, the engine could publish stats
> info sending that to the gtp line thread.
> 
> That is not related to the protocol at all. Adding a
> couple of new commands will be enough. (and processing
> them on realtime from another thread). 
> 
> If the engine doesnt supports 'abort'
> the controller after a couple of seconds will receive
> 'move blah blah' 'command don't understood'.

I may have lost you here.  Are you suggesting that we
can do all of this without any asyncronous commands?

- Don



> 
> 
> --- Don Dailey <[EMAIL PROTECTED]> escribió:
> 
> > I like GTP and I champion it.However, there are
> > some weaknesses
> > and they are not easily fixed without a major
> > paridigm change.
> > 
> >   1.  There is no way to STOP a program from
> > thinking.  This is 
> >   needed for a high quality user interface.
> > 
> >   2.  There is no natuaral way to get useful
> > information from the
> >   go program, such as it's thinking process.   A
> > quality user
> >   interface should be able to show the user the
> > thinking process
> >   of the program,  when it changes it's mind
> > about the move choice,
> >   it's current opinion of the score, etc.   
> > 
> >   This can be implemented with "polling" by
> > adding a GTP command
> >   to request information from the engine every
> > second or two, but
> >   this feels like a hack.
> > 
> > Thinking on the opponents time (pondering) is
> > supported naturally by
> > the UCI protocol.  Actually, the engine doesn't need
> > to know much 
> > about this,  the controller simply tells the engine
> > to start thinking
> > on a given move and so the engine doesn't even know
> > it's thinking on
> > the opponents time.   However, the engine does
> > communicate to the
> > controller what the ponder move is.   
> > 
> > This could ALMOST be implemented directly in GTP,
> > except for the fact
> > that you cannot stop the engine from searching once
> > it begins.  If
> > I'm pondering, but the opponent doesn't play the
> > ponder move,  there
> > is not way in GTP to say, STOP searching NOW because
> > the move is not
> > relevant!
> > 
> > So GTP could not easily be used to build a high
> > quality user interface,
> > say
> > for a commercial program.   At least not one that
> > had the better
> > features,
> > even given that you can extend the command s

Re: [computer-go] GTPv3

2007-03-05 Thread Nick Apperson

just a thought...

prefix all async commands with "async_" so that it is clear.  Also, that way
there can be a version of the command that is async and one that blocks and
an engine can support one or both.  This could be useful for commands that
query on state (or estimated score or whatever).  An engine might not be
able to easily support that async, but another engine might be able to.  The
controller can query using get_commands (or whatever the function is called)
and know that it can call it anytime or only when the engine isn't
thinking.  Also, it would make it clearer how a command operates and a
command can be assumed to be blocking unless it has that prefix and if we
change the behavior of the async versions from the blocking ones an engine
can still support both.

- Nick

On 3/5/07, Eduardo Sabbatella <[EMAIL PROTECTED]> wrote:


We got consensus :-)

Yes some messages are async, some are synqued. If an
async message/reply is received in the wrong time, it
could be ignored as they use to be information only
values, no state change of the game.

cool :-)

--- Don Dailey <[EMAIL PROTECTED]> escribió:

> I agree with you.  My idea is to not have a specific
> aync
> command, but to have anycronous versions of
> commands.   The
> engine is free to accept or reject them.   Having an
> async
> command doesn't do anything if you haven't
> implemented the
> useful needed extensions.Of course it could
> change the
> meaning of existing commands but I think it's
> cleaner to
> simply have new GTP commands that are understood to
> be
> asyncrounous.
>
> Even UCI doesn't allow the engine to say anything it
> wants
> whenever it wants.   It is still semi-syncronous.
> All
> communication sent from an engine is still a
> response to
> some command sent from the controller.   The rule is
> that
> you ignore any communication sent out of context and
> this avoids syncronization issues such as when the
> controller
> says to stop searching but the engine sends a move
> before
> this is noticed.
>
> So it's really not as complicated as you might
> think.
>
> "chat" I assume is about informational messages from
> a
> searching engine.   So it's a legitimate response to
> an asyncronous command to search a position, but if
> you are not searching a position it would be ignored
> by the controller.
>
> Abort is the same,  it really means "stop searching
> if you are currently searching"  and so is ignored
> if
> you happen to have stopped at  almost the same
> instant you recieved the command.
>
> - Don
>
>
>
>
>
> On Mon, 2007-03-05 at 09:08 -0300, Eduardo
> Sabbatella wrote:
> > Just an small thought
> >
> > GTP could implement "async" commands. Adding
> commands
> > like:
> > CHAT
> > ABORT
> > etc.
> >
> > Its up to the engine to read them as soon as
> possible,
> > or wait to read/process them after processing a
> > get_move command.
> >
> > I think just adding a couple of new commands that
> some
> > engines could implement them 'in real time' its
> good
> > enough for everybody.
> >
> > I wouldn't add complexity adding a true async
> channel,
> > out of band or whatever.
> >
> > I mean, commands are ordered, as before, as
> always,
> > that wouldn't break current implementations.
> >
> >
> > By the way, I use a lot of stderr, I love it for
> > debuging purposes, please don't use it as a second
> > stream of comunication with the engine.
> >
> > With stdin/out and a thread with a couple of
> mutexes
> > is all you need. (or thread safe queues if you
> like)
> >
> >
> > My 2 cents
>
> ___
> computer-go mailing list
> computer-go@computer-go.org
>
http://www.computer-go.org/mailman/listinfo/computer-go/
>







__
Preguntá. Respondé. Descubrí.
Todo lo que querías saber, y lo que ni imaginabas,
está en Yahoo! Respuestas (Beta).
¡Probalo ya!
http://www.yahoo.com.ar/respuestas

___
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] GTPv3

2007-03-05 Thread Eduardo Sabbatella
We got consensus :-)

Yes some messages are async, some are synqued. If an
async message/reply is received in the wrong time, it
could be ignored as they use to be information only
values, no state change of the game.

cool :-)

--- Don Dailey <[EMAIL PROTECTED]> escribió:

> I agree with you.  My idea is to not have a specific
> aync
> command, but to have anycronous versions of
> commands.   The
> engine is free to accept or reject them.   Having an
> async
> command doesn't do anything if you haven't
> implemented the
> useful needed extensions.Of course it could
> change the
> meaning of existing commands but I think it's
> cleaner to
> simply have new GTP commands that are understood to
> be
> asyncrounous.
> 
> Even UCI doesn't allow the engine to say anything it
> wants
> whenever it wants.   It is still semi-syncronous.  
> All
> communication sent from an engine is still a
> response to
> some command sent from the controller.   The rule is
> that
> you ignore any communication sent out of context and
> this avoids syncronization issues such as when the
> controller
> says to stop searching but the engine sends a move
> before
> this is noticed.  
> 
> So it's really not as complicated as you might
> think.  
> 
> "chat" I assume is about informational messages from
> a
> searching engine.   So it's a legitimate response to
> an asyncronous command to search a position, but if
> you are not searching a position it would be ignored
> by the controller.
> 
> Abort is the same,  it really means "stop searching
> if you are currently searching"  and so is ignored
> if
> you happen to have stopped at  almost the same 
> instant you recieved the command.
> 
> - Don
> 
>  
> 
> 
> 
> On Mon, 2007-03-05 at 09:08 -0300, Eduardo
> Sabbatella wrote:
> > Just an small thought
> > 
> > GTP could implement "async" commands. Adding
> commands
> > like: 
> > CHAT
> > ABORT
> > etc.
> > 
> > Its up to the engine to read them as soon as
> possible,
> > or wait to read/process them after processing a
> > get_move command.
> > 
> > I think just adding a couple of new commands that
> some
> > engines could implement them 'in real time' its
> good
> > enough for everybody.
> > 
> > I wouldn't add complexity adding a true async
> channel,
> > out of band or whatever.
> > 
> > I mean, commands are ordered, as before, as
> always,
> > that wouldn't break current implementations.
> > 
> > 
> > By the way, I use a lot of stderr, I love it for
> > debuging purposes, please don't use it as a second
> > stream of comunication with the engine. 
> > 
> > With stdin/out and a thread with a couple of
> mutexes
> > is all you need. (or thread safe queues if you
> like)
> > 
> > 
> > My 2 cents 
> 
> ___
> computer-go mailing list
> computer-go@computer-go.org
>
http://www.computer-go.org/mailman/listinfo/computer-go/
> 







__ 
Preguntá. Respondé. Descubrí. 
Todo lo que querías saber, y lo que ni imaginabas, 
está en Yahoo! Respuestas (Beta). 
¡Probalo ya! 
http://www.yahoo.com.ar/respuestas 

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


Re: [computer-go] GTPv3

2007-03-05 Thread Don Dailey
I agree with you.  My idea is to not have a specific aync
command, but to have anycronous versions of commands.   The
engine is free to accept or reject them.   Having an async
command doesn't do anything if you haven't implemented the
useful needed extensions.Of course it could change the
meaning of existing commands but I think it's cleaner to
simply have new GTP commands that are understood to be
asyncrounous.

Even UCI doesn't allow the engine to say anything it wants
whenever it wants.   It is still semi-syncronous.   All
communication sent from an engine is still a response to
some command sent from the controller.   The rule is that
you ignore any communication sent out of context and
this avoids syncronization issues such as when the controller
says to stop searching but the engine sends a move before
this is noticed.  

So it's really not as complicated as you might think.  

"chat" I assume is about informational messages from a
searching engine.   So it's a legitimate response to
an asyncronous command to search a position, but if
you are not searching a position it would be ignored
by the controller.

Abort is the same,  it really means "stop searching
if you are currently searching"  and so is ignored if
you happen to have stopped at  almost the same 
instant you recieved the command.

- Don

 



On Mon, 2007-03-05 at 09:08 -0300, Eduardo Sabbatella wrote:
> Just an small thought
> 
> GTP could implement "async" commands. Adding commands
> like: 
> CHAT
> ABORT
> etc.
> 
> Its up to the engine to read them as soon as possible,
> or wait to read/process them after processing a
> get_move command.
> 
> I think just adding a couple of new commands that some
> engines could implement them 'in real time' its good
> enough for everybody.
> 
> I wouldn't add complexity adding a true async channel,
> out of band or whatever.
> 
> I mean, commands are ordered, as before, as always,
> that wouldn't break current implementations.
> 
> 
> By the way, I use a lot of stderr, I love it for
> debuging purposes, please don't use it as a second
> stream of comunication with the engine. 
> 
> With stdin/out and a thread with a couple of mutexes
> is all you need. (or thread safe queues if you like)
> 
> 
> My 2 cents 

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


Re: [computer-go] How did MoGo do it?

2007-03-05 Thread Eduardo Sabbatella
Also sometimes it scales but not lineal, thats an
issue to. A big one.

Like raw MC, you can get a very good move with less
than 70k simulations, to get a really good move
perhaps you need 400 billons.
I remember there is a paper about this with a 'oracle'
MC engine and they used it to compare to different mc
implementations.

MC oracle was a MC engine running like 100 billon
simulations for every move.


--- Don Dailey <[EMAIL PROTECTED]> escribió:

> Sylvain,
> 
> What you say is no surpise to me about the
> constraints.  I knew that if
> you improved things, you would eventually have to
> improve or reduce 
> the constraints.
> 
> The simple question I always ask about a feature is
> whether the idea
> is infinitely scalable.   Some idea are very good in
> the short term,
> but in the long term form a barrier to improvement. 
>  Of course that
> doesn't mean the idea shouldn't be used because it
> might be helping
> you.   But at some point you know your program will
> out-grow the
> idea and then it will be holding you back.
> 
> A good example of this is piece square tables in
> computer chess.  It
> was a wonderful way to add a lot of knowledge to a
> chess program
> without slowing it down any.   It's based on the
> idea of looking
> at the starting position,  making a lot of stategic
> decisions before
> you even begin searching (by filling the table with
> values) and then
> doing the search.   This idea has serious limitation
> when you search
> incredibly deep,  but really worked well in the days
> when programs
> could not search  deeply. I think some programs
> still use
> this today but to a lesser extent - they have
> adjusted accordingly 
> with much more dynamic evaluation. 
> 
> I have this theory that if something isn't "properly
> scalable", then
> you are probably doing it wrong - at least in an
> idealistic sense.
> >From a practical standpoint I have no trouble doing
> these non-scalable
> things if there is no obvious scalable solution that
> can give me the
> same
> short-term improvement.
> 
> AnchorMan is a clear example of this non-scalable
> approach.  A hackery
> of non-scalable patches to try to stop it from
> playing the ugliest of
> moves!   
> 
> - Don
> 
> 
> 
> 
> 
> 
> On Mon, 2007-03-05 at 10:52 +0100, Sylvain Gelly
> wrote:
> > Hello Peter, Hello Don, Hello all,
> > 
> > It is true that I have been mainly working to
> improve the level of
> > MoGo in 19x19. It turned out in my experiments,
> that improving its
> > level in 9x9 with very little simulations was
> significant for the
> > level in 19x19, so it is one reason why the
> limited version of MoGo
> > are running on cgos. So even if the goal was 19x19
> improvements, the
> > improvements appeared in all boardsizes. 
> > 
> > Our first approach to 19x19 was, as you say Don,
> to constrain the
> > board (as explained in our paper), and it brought
> improvements.
> > However, now it is quite the contrary what is
> happening, each
> > improvement allows to remove constrains on 19x19,
> and making it play
> > as if it was a 9x9 board (I mean in the
> parameters). As you may have
> > noticed for example, MoGo is not playing locally
> anymore on 19x19
> > (which gives it an ugly style :-)). 
> > The number of simulations done in this tournament
> was from 10k to 50k
> > per move, depending on the context and the move
> number (simple time
> > management stopping early the thinking if one move
> is clearly better
> > than the others). 
> > For all the details on the improvements, we
> submitted a paper, and I
> > am writing them in my thesis, so you will all
> know, just wait for them
> > to be written :-/.
> > I still strongly believe in the future of MC even
> in 19x19. 
> > 
> > Bye,
> > Sylvain
> > 
> > 
> > 2007/3/5, Don Dailey <[EMAIL PROTECTED]>:
> > > I'm pretty sure I read that the MoGo team is
> shifting their efforts
> > > towards 19x19 GO.   There are lot's of
> possibilites for research, 
> > > but Mogo already does things to constrain the
> board on 19x19, they
> > > are probably just refining this stuff.
> > > 
> > > - Don
> > > 
> > > 
> > > On Sun, 2007-03-04 at 19:58 -0800, Peter Drake
> wrote: 
> > > > Congratulations to MoGo on winning the KGS
> tournament held earlier
> > > > today:
> > > >
> > > >
> http://www.gokgs.com/tournEntrants.jsp?sort=s&id=270
> > > >
> > > > Even under borderline "blitz" conditions (18
> minutes sudden death
> > for
> > > > 19x19), MoGo managed to beat conventional
> programs like GNU Go.
> > > > (ManyFaces apparently had some
> connection/restarting glitch, so
> > its 
> > > > performance may not be representative.) Of
> course, MoGo also beat
> > all
> > > > the other MC/UCT programs.
> > > >
> > > > How did MoGo do it? I have three hypotheses:
> > > >
> > > > 1) MoGo is completing more runs per second.
> How many is it doing
> > on 
> > > > the machine used in the tournament.
> > > > 2) MoGo is somehow getting more out of the
> runs it does, using
> > things
> > > >

Re: [computer-go] How did MoGo do it?

2007-03-05 Thread Don Dailey
Sylvain,

What you say is no surpise to me about the constraints.  I knew that if
you improved things, you would eventually have to improve or reduce 
the constraints.

The simple question I always ask about a feature is whether the idea
is infinitely scalable.   Some idea are very good in the short term,
but in the long term form a barrier to improvement.   Of course that
doesn't mean the idea shouldn't be used because it might be helping
you.   But at some point you know your program will out-grow the
idea and then it will be holding you back.

A good example of this is piece square tables in computer chess.  It
was a wonderful way to add a lot of knowledge to a chess program
without slowing it down any.   It's based on the idea of looking
at the starting position,  making a lot of stategic decisions before
you even begin searching (by filling the table with values) and then
doing the search.   This idea has serious limitation when you search
incredibly deep,  but really worked well in the days when programs
could not search  deeply. I think some programs still use
this today but to a lesser extent - they have adjusted accordingly 
with much more dynamic evaluation. 

I have this theory that if something isn't "properly scalable", then
you are probably doing it wrong - at least in an idealistic sense.
>From a practical standpoint I have no trouble doing these non-scalable
things if there is no obvious scalable solution that can give me the
same
short-term improvement.

AnchorMan is a clear example of this non-scalable approach.  A hackery
of non-scalable patches to try to stop it from playing the ugliest of
moves!   

- Don






On Mon, 2007-03-05 at 10:52 +0100, Sylvain Gelly wrote:
> Hello Peter, Hello Don, Hello all,
> 
> It is true that I have been mainly working to improve the level of
> MoGo in 19x19. It turned out in my experiments, that improving its
> level in 9x9 with very little simulations was significant for the
> level in 19x19, so it is one reason why the limited version of MoGo
> are running on cgos. So even if the goal was 19x19 improvements, the
> improvements appeared in all boardsizes. 
> 
> Our first approach to 19x19 was, as you say Don, to constrain the
> board (as explained in our paper), and it brought improvements.
> However, now it is quite the contrary what is happening, each
> improvement allows to remove constrains on 19x19, and making it play
> as if it was a 9x9 board (I mean in the parameters). As you may have
> noticed for example, MoGo is not playing locally anymore on 19x19
> (which gives it an ugly style :-)). 
> The number of simulations done in this tournament was from 10k to 50k
> per move, depending on the context and the move number (simple time
> management stopping early the thinking if one move is clearly better
> than the others). 
> For all the details on the improvements, we submitted a paper, and I
> am writing them in my thesis, so you will all know, just wait for them
> to be written :-/.
> I still strongly believe in the future of MC even in 19x19. 
> 
> Bye,
> Sylvain
> 
> 
> 2007/3/5, Don Dailey <[EMAIL PROTECTED]>:
> > I'm pretty sure I read that the MoGo team is shifting their efforts
> > towards 19x19 GO.   There are lot's of possibilites for research, 
> > but Mogo already does things to constrain the board on 19x19, they
> > are probably just refining this stuff.
> > 
> > - Don
> > 
> > 
> > On Sun, 2007-03-04 at 19:58 -0800, Peter Drake wrote: 
> > > Congratulations to MoGo on winning the KGS tournament held earlier
> > > today:
> > >
> > > http://www.gokgs.com/tournEntrants.jsp?sort=s&id=270
> > >
> > > Even under borderline "blitz" conditions (18 minutes sudden death
> for
> > > 19x19), MoGo managed to beat conventional programs like GNU Go.
> > > (ManyFaces apparently had some connection/restarting glitch, so
> its 
> > > performance may not be representative.) Of course, MoGo also beat
> all
> > > the other MC/UCT programs.
> > >
> > > How did MoGo do it? I have three hypotheses:
> > >
> > > 1) MoGo is completing more runs per second. How many is it doing
> on 
> > > the machine used in the tournament.
> > > 2) MoGo is somehow getting more out of the runs it does, using
> things
> > > like the all-as-first heuristic.
> > > 3) Each of MoGo's runs is "smarter", through the use of
> heuristics 
> > > that bias the random games.
> > >
> > > My money is on #3. In the limit, of course, a very smart program
> > > could predict the outcome with one MC run for each move under
> > > consideration. 
> > >
> > > Would the MoGo authors (and anyone else) care to weigh in?
> > >
> > > 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
> > h

Re: [computer-go] GTPv3

2007-03-05 Thread Don Dailey
On Mon, 2007-03-05 at 10:10 +0100, Heikki Levanto wrote:
> On Sat, Mar 03, 2007 at 04:10:16PM -0500, Don Dailey wrote:
> > And you CAN compare GTP directly to UCI because both are designed for
> > the same purpose and both are simple text based protocols and the
> > similarities are much greater than the differences.
> 
> GTP has many purposes. One of them is to sit betwene an engine and an
> UI, but that is not the only one. It is also used for test scripts to
> validate engines, and to debug them.
> 
> So, what even asynchronous extensions you are adding to GTP, please keep
> the simple synchronous mode still available, for it has many uses too!

If I were designing the asynchronous extentions I was mandate that the
core doesn't change - that you can continue to use GTP as is without any
suprises.

- Don



> -Heikki
> 

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


Re: [computer-go] GTPv3

2007-03-05 Thread Heikki Levanto
On Mon, Mar 05, 2007 at 09:50:30AM -0300, Eduardo Sabbatella wrote:
> Actually gen_move blocks because every engine uses the
> same thread for both the engine and the comm link.

Yes. That is not a bug, it is a feature, when using GTP for debugging,
automatic tests, or something else that is based on scripts.

As has been said before, it would be possible to add a command like 
'start-thinking', which would return quickly, while the engine would be
thinking in the background. While in this state, more asynchrnous
commands could be issued. Perhaps the engine could also send status
responses and/or chat messages without a status request.

If an engine (or controller) does not support the new commands, they can
always fall back to the old, synchronous, commands.

> If the engine doesn't support "realtime" gtp, they
> will be answer after the gen_move response. one at a
> time.

I think it would be better to create new commands, and leave genmove as
it is, for maximizing the compatibility with old programs, and with new
ones that haven't got around to implementing the asynch stuff yet.

- Heikki


-- 
Heikki Levanto   "In Murphy We Turst" heikki (at) lsd (dot) dk

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


Re: [computer-go] GTPv3

2007-03-05 Thread Eduardo Sabbatella
Actually gen_move blocks because every engine uses the
same thread for both the engine and the comm link.

you can have a couple of sub commands for get_move
like: get_complete_percent, get_current_best_move,
chat, etc.

If the engine doesn't support "realtime" gtp, they
will be answer after the gen_move response. one at a
time.

I don't know, perhaps I'm pushing too much the gtp
protocol... I don't think so, but perhaps


--- Nick Apperson <[EMAIL PROTECTED]> escribió:

> I think you are mostly correct.  But, the problem is
> that GTP was designed
> to block on the genmove command.  This is a problem
> because genmove is
> usually not quick to return.  Therefore, there is no
> way with the current
> scheme to be able to issue commands while an engine
> is thinking.  It would
> require a redesign perhaps using polling instead if
> GTP is to remain
> blocking.
> 
> On 3/5/07, Eduardo Sabbatella
> <[EMAIL PROTECTED]> wrote:
> >
> > Don,
> >
> > Perhaps I'm completelly wrong, but pondering is up
> to
> > the engine, the controller, nobody outside the
> engine
> > will know / have to know if the engine is
> pondering.
> >
> > I think in the threads we are confusing the fact
> that
> > the engine and the gtp line controller could be in
> two
> > different process threads.
> >
> > GTP line could 'answer' questions like: cpu usage,
> > current best move, at realtime comunicating with
> the
> > engine thread. Also, the engine could publish
> stats
> > info sending that to the gtp line thread.
> >
> > That is not related to the protocol at all. Adding
> a
> > couple of new commands will be enough. (and
> processing
> > them on realtime from another thread).
> >
> > If the engine doesnt supports 'abort'
> > the controller after a couple of seconds will
> receive
> > 'move blah blah' 'command don't understood'.
> >
> >
> >
> > --- Don Dailey <[EMAIL PROTECTED]> escribió:
> >
> > > I like GTP and I champion it.However, there
> are
> > > some weaknesses
> > > and they are not easily fixed without a major
> > > paridigm change.
> > >
> > >   1.  There is no way to STOP a program from
> > > thinking.  This is
> > >   needed for a high quality user interface.
> > >
> > >   2.  There is no natuaral way to get useful
> > > information from the
> > >   go program, such as it's thinking process.
>   A
> > > quality user
> > >   interface should be able to show the user
> the
> > > thinking process
> > >   of the program,  when it changes it's mind
> > > about the move choice,
> > >   it's current opinion of the score, etc.
> > >
> > >   This can be implemented with "polling" by
> > > adding a GTP command
> > >   to request information from the engine
> every
> > > second or two, but
> > >   this feels like a hack.
> > >
> > > Thinking on the opponents time (pondering) is
> > > supported naturally by
> > > the UCI protocol.  Actually, the engine doesn't
> need
> > > to know much
> > > about this,  the controller simply tells the
> engine
> > > to start thinking
> > > on a given move and so the engine doesn't even
> know
> > > it's thinking on
> > > the opponents time.   However, the engine does
> > > communicate to the
> > > controller what the ponder move is.
> > >
> > > This could ALMOST be implemented directly in
> GTP,
> > > except for the fact
> > > that you cannot stop the engine from searching
> once
> > > it begins.  If
> > > I'm pondering, but the opponent doesn't play the
> > > ponder move,  there
> > > is not way in GTP to say, STOP searching NOW
> because
> > > the move is not
> > > relevant!
> > >
> > > So GTP could not easily be used to build a high
> > > quality user interface,
> > > say
> > > for a commercial program.   At least not one
> that
> > > had the better
> > > features,
> > > even given that you can extend the command set
> with
> > > additional commands.
> > >
> > > It COULD be done, just not easily.   You would
> have
> > > to do it all with
> > > polling.  You could even implement stop search
> by
> > > having a GTP command
> > > to do searching in tiny time slices.   The
> contoller
> > > would send
> > > commands such as "continue_search" which must
> return
> > > in a fraction of
> > > second, possibly with a move.This would be
> truly
> > > awkward but
> > > possible.
> > >
> > >
> > > - Don
> > >
> > >
> > >
> > > On Thu, 2007-03-01 at 17:10 -0700, Markus
> > > Enzenberger wrote:
> > > > On Thu March 1 2007 05:22, £ukasz Lew wrote:
> > > > > The most important thing is controller -
> engine
> > > architecture.
> > > > > There are situations that engine would like
> to
> > > have the control. For
> > > >
> > > > these requests come up once in a while, but
> IMO
> > > the clear separation between
> > > > who is the controller and the engine is a big
> > > advantage of GTP. It makes both
> > > > the implementation of engines and controllers
> much
> > > easier.
> > > >
> > > > Can you do simple, single-threaded controller
> > > scripts with UCI? Is it u

Re: [computer-go] GTPv3

2007-03-05 Thread Nick Apperson

I think you are mostly correct.  But, the problem is that GTP was designed
to block on the genmove command.  This is a problem because genmove is
usually not quick to return.  Therefore, there is no way with the current
scheme to be able to issue commands while an engine is thinking.  It would
require a redesign perhaps using polling instead if GTP is to remain
blocking.

On 3/5/07, Eduardo Sabbatella <[EMAIL PROTECTED]> wrote:


Don,

Perhaps I'm completelly wrong, but pondering is up to
the engine, the controller, nobody outside the engine
will know / have to know if the engine is pondering.

I think in the threads we are confusing the fact that
the engine and the gtp line controller could be in two
different process threads.

GTP line could 'answer' questions like: cpu usage,
current best move, at realtime comunicating with the
engine thread. Also, the engine could publish stats
info sending that to the gtp line thread.

That is not related to the protocol at all. Adding a
couple of new commands will be enough. (and processing
them on realtime from another thread).

If the engine doesnt supports 'abort'
the controller after a couple of seconds will receive
'move blah blah' 'command don't understood'.



--- Don Dailey <[EMAIL PROTECTED]> escribió:

> I like GTP and I champion it.However, there are
> some weaknesses
> and they are not easily fixed without a major
> paridigm change.
>
>   1.  There is no way to STOP a program from
> thinking.  This is
>   needed for a high quality user interface.
>
>   2.  There is no natuaral way to get useful
> information from the
>   go program, such as it's thinking process.   A
> quality user
>   interface should be able to show the user the
> thinking process
>   of the program,  when it changes it's mind
> about the move choice,
>   it's current opinion of the score, etc.
>
>   This can be implemented with "polling" by
> adding a GTP command
>   to request information from the engine every
> second or two, but
>   this feels like a hack.
>
> Thinking on the opponents time (pondering) is
> supported naturally by
> the UCI protocol.  Actually, the engine doesn't need
> to know much
> about this,  the controller simply tells the engine
> to start thinking
> on a given move and so the engine doesn't even know
> it's thinking on
> the opponents time.   However, the engine does
> communicate to the
> controller what the ponder move is.
>
> This could ALMOST be implemented directly in GTP,
> except for the fact
> that you cannot stop the engine from searching once
> it begins.  If
> I'm pondering, but the opponent doesn't play the
> ponder move,  there
> is not way in GTP to say, STOP searching NOW because
> the move is not
> relevant!
>
> So GTP could not easily be used to build a high
> quality user interface,
> say
> for a commercial program.   At least not one that
> had the better
> features,
> even given that you can extend the command set with
> additional commands.
>
> It COULD be done, just not easily.   You would have
> to do it all with
> polling.  You could even implement stop search by
> having a GTP command
> to do searching in tiny time slices.   The contoller
> would send
> commands such as "continue_search" which must return
> in a fraction of
> second, possibly with a move.This would be truly
> awkward but
> possible.
>
>
> - Don
>
>
>
> On Thu, 2007-03-01 at 17:10 -0700, Markus
> Enzenberger wrote:
> > On Thu March 1 2007 05:22, £ukasz Lew wrote:
> > > The most important thing is controller - engine
> architecture.
> > > There are situations that engine would like to
> have the control. For
> >
> > these requests come up once in a while, but IMO
> the clear separation between
> > who is the controller and the engine is a big
> advantage of GTP. It makes both
> > the implementation of engines and controllers much
> easier.
> >
> > Can you do simple, single-threaded controller
> scripts with UCI? Is it used for
> > as many use cases as GTP is, ranging from
> regression testing to any kind of
> > automated experiments with Go engines?
> >
> > The Go server protocols are designed for humans
> and asynchronous sending of
> > messages between them at any time, but does it
> make sense for a computer
> > engine to allow it to start chatting, whenever it
> feels like it?
> >
> > I think that GTP should not be extended in a way
> that makes the implementation
> > of engines or controllers more complicated.
> >
> > > In gogui this is solved by using stderr to send
> those commands, but:
> > > - stderr is not network transparent
> >
> > Remi Coulom convinced me that it is more
> convenient for the engine to write to
> > standard error and he was right. Typically the GTP
> interface is only one of
> > several interfaces to lower level Go engine code
> and you don't want to make
> > lower level code aware of this.
> >
> > One idea I had in mind to address this was to
> allow the engine to send comment
> > lines before the ac

Re: [computer-go] GTPv3

2007-03-05 Thread Eduardo Sabbatella
Don,

Perhaps I'm completelly wrong, but pondering is up to
the engine, the controller, nobody outside the engine
will know / have to know if the engine is pondering.

I think in the threads we are confusing the fact that
the engine and the gtp line controller could be in two
different process threads.

GTP line could 'answer' questions like: cpu usage,
current best move, at realtime comunicating with the
engine thread. Also, the engine could publish stats
info sending that to the gtp line thread.

That is not related to the protocol at all. Adding a
couple of new commands will be enough. (and processing
them on realtime from another thread). 

If the engine doesnt supports 'abort'
the controller after a couple of seconds will receive
'move blah blah' 'command don't understood'.



--- Don Dailey <[EMAIL PROTECTED]> escribió:

> I like GTP and I champion it.However, there are
> some weaknesses
> and they are not easily fixed without a major
> paridigm change.
> 
>   1.  There is no way to STOP a program from
> thinking.  This is 
>   needed for a high quality user interface.
> 
>   2.  There is no natuaral way to get useful
> information from the
>   go program, such as it's thinking process.   A
> quality user
>   interface should be able to show the user the
> thinking process
>   of the program,  when it changes it's mind
> about the move choice,
>   it's current opinion of the score, etc.   
> 
>   This can be implemented with "polling" by
> adding a GTP command
>   to request information from the engine every
> second or two, but
>   this feels like a hack.
> 
> Thinking on the opponents time (pondering) is
> supported naturally by
> the UCI protocol.  Actually, the engine doesn't need
> to know much 
> about this,  the controller simply tells the engine
> to start thinking
> on a given move and so the engine doesn't even know
> it's thinking on
> the opponents time.   However, the engine does
> communicate to the
> controller what the ponder move is.   
> 
> This could ALMOST be implemented directly in GTP,
> except for the fact
> that you cannot stop the engine from searching once
> it begins.  If
> I'm pondering, but the opponent doesn't play the
> ponder move,  there
> is not way in GTP to say, STOP searching NOW because
> the move is not
> relevant!
> 
> So GTP could not easily be used to build a high
> quality user interface,
> say
> for a commercial program.   At least not one that
> had the better
> features,
> even given that you can extend the command set with
> additional commands.
> 
> It COULD be done, just not easily.   You would have
> to do it all with
> polling.  You could even implement stop search by
> having a GTP command
> to do searching in tiny time slices.   The contoller
> would send 
> commands such as "continue_search" which must return
> in a fraction of
> second, possibly with a move.This would be truly
> awkward but
> possible.
> 
> 
> - Don
> 
> 
> 
> On Thu, 2007-03-01 at 17:10 -0700, Markus
> Enzenberger wrote:
> > On Thu March 1 2007 05:22, £ukasz Lew wrote:
> > > The most important thing is controller - engine
> architecture.
> > > There are situations that engine would like to
> have the control. For
> > 
> > these requests come up once in a while, but IMO
> the clear separation between 
> > who is the controller and the engine is a big
> advantage of GTP. It makes both 
> > the implementation of engines and controllers much
> easier.
> > 
> > Can you do simple, single-threaded controller
> scripts with UCI? Is it used for 
> > as many use cases as GTP is, ranging from
> regression testing to any kind of 
> > automated experiments with Go engines?
> > 
> > The Go server protocols are designed for humans
> and asynchronous sending of 
> > messages between them at any time, but does it
> make sense for a computer 
> > engine to allow it to start chatting, whenever it
> feels like it?
> > 
> > I think that GTP should not be extended in a way
> that makes the implementation 
> > of engines or controllers more complicated.
> > 
> > > In gogui this is solved by using stderr to send
> those commands, but:
> > > - stderr is not network transparent
> > 
> > Remi Coulom convinced me that it is more
> convenient for the engine to write to 
> > standard error and he was right. Typically the GTP
> interface is only one of 
> > several interfaces to lower level Go engine code
> and you don't want to make 
> > lower level code aware of this.
> > 
> > One idea I had in mind to address this was to
> allow the engine to send comment 
> > lines before the actual response. Then you could
> tunnel the standard error 
> > output through a network connection in these
> comment lines, maybe starting 
> > with a special keyword.
> > 
> > It would need only a minor modification to
> existing controllers to ignore all 
> > text before the response. Alternatively, one could
> extend the tools GtpServer 
> > and NetGtp in the GoGui package to internally
>

Re: [computer-go] GTPv3

2007-03-05 Thread Eduardo Sabbatella
Just an small thought

GTP could implement "async" commands. Adding commands
like: 
CHAT
ABORT
etc.

Its up to the engine to read them as soon as possible,
or wait to read/process them after processing a
get_move command.

I think just adding a couple of new commands that some
engines could implement them 'in real time' its good
enough for everybody.

I wouldn't add complexity adding a true async channel,
out of band or whatever.

I mean, commands are ordered, as before, as always,
that wouldn't break current implementations.


By the way, I use a lot of stderr, I love it for
debuging purposes, please don't use it as a second
stream of comunication with the engine. 

With stdin/out and a thread with a couple of mutexes
is all you need. (or thread safe queues if you like)


My 2 cents



--- £ukasz Lew <[EMAIL PROTECTED]> escribió:

> On 3/2/07, Markus Enzenberger
> <[EMAIL PROTECTED]> wrote:
> > On Thu March 1 2007 05:22, £ukasz Lew wrote:
> > > The most important thing is controller - engine
> architecture.
> > > There are situations that engine would like to
> have the control. For
> >
> > these requests come up once in a while, but IMO
> the clear separation between
> > who is the controller and the engine is a big
> advantage of GTP. It makes both
> > the implementation of engines and controllers much
> easier.
> 
> I agree
> 
> >
> > Can you do simple, single-threaded controller
> scripts with UCI? Is it used for
> > as many use cases as GTP is, ranging from
> regression testing to any kind of
> > automated experiments with Go engines?
> >
> > The Go server protocols are designed for humans
> and asynchronous sending of
> > messages between them at any time, but does it
> make sense for a computer
> > engine to allow it to start chatting, whenever it
> feels like it?
> 
> I think it is sometimes important to allow the
> engine to sent some
> information including chatting.
> 
> >
> > I think that GTP should not be extended in a way
> that makes the implementation
> > of engines or controllers more complicated.
> 
> I agree.
> 
> So is there any solution not using stderr?
> 
> >
> > > In gogui this is solved by using stderr to send
> those commands, but:
> > > - stderr is not network transparent
> >
> > Remi Coulom convinced me that it is more
> convenient for the engine to write to
> > standard error and he was right. Typically the GTP
> interface is only one of
> > several interfaces to lower level Go engine code
> and you don't want to make
> > lower level code aware of this.
> 
> I would like to have GTP flexible enough to be the
> only interface needed.
> 
> >
> > One idea I had in mind to address this was to
> allow the engine to send comment
> > lines before the actual response. Then you could
> tunnel the standard error
> > output through a network connection in these
> comment lines, maybe starting
> > with a special keyword.
> 
> That is interesting.
> But why before the actual response?
> It should be allowed to sent it any time, and it's a
> matter of server
> implementation when
> It will parse it.
> 
> >
> > It would need only a minor modification to
> existing controllers to ignore all
> > text before the response. Alternatively, one could
> extend the tools GtpServer
> > and NetGtp in the GoGui package to internally
> transmit standard error text in
> > such a way, that would be transparent for the
> engine and controller on
> > different hosts.
> >
> > > 6. Position setup. I had conversation with
> Marcus about setup in GoGui.
> > > And we concluded that there should be a separate
> command for that.
> >
> > The coming version 1.0 of GoGui will support a
> setup command. It is a
> > simplified version of a suggestion I made a while
> ago to the GTP list and
> > uses a syntax like:
> >
> > gogui-setup b A1 b B2 w C3
> >
> > Originally I had an undoable setup command in mind
> to incrementally follow
> > setup stones in SGF trees, but it is much easier
> for engine programmers to
> > handle only full position setup on empty boards,
> so GoGui will follow the SGF
> > properties incrementally and translate setup nodes
> into clear_board /
> > gogui-setup sequences.
> >
> > - Markus
> > ___
> > 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/







__ 
Preguntá. Respondé. Descubrí. 
Todo lo que querías saber, y lo que ni imaginabas, 
está en Yahoo! Respuestas (Beta). 
¡Probalo ya! 
http://www.yahoo.com.ar/respuestas 

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


Re: [computer-go] How did MoGo do it?

2007-03-05 Thread Heikki Levanto
On Mon, Mar 05, 2007 at 10:52:23AM +0100, Sylvain Gelly wrote:
> I still strongly believe in the future of MC even in 19x19.

I would also like to try my hand at 19x19. Wouldn't it almost be time
for a playground server, like cgos, but on a larger board. Of course
there would have to be more time (say an hour per player), so the
ratings woudl take much longer to stabilize, but so what? I would like
to put a simple machine up for a week or two.

-H

-- 
Heikki Levanto   "In Murphy We Turst" heikki (at) lsd (dot) dk

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


Re: [computer-go] How did MoGo do it?

2007-03-05 Thread Sylvain Gelly

Hello Peter, Hello Don, Hello all,

It is true that I have been mainly working to improve the level of MoGo in
19x19. It turned out in my experiments, that improving its level in 9x9 with
very little simulations was significant for the level in 19x19, so it is one
reason why the limited version of MoGo are running on cgos. So even if the
goal was 19x19 improvements, the improvements appeared in all boardsizes.

Our first approach to 19x19 was, as you say Don, to constrain the board (as
explained in our paper), and it brought improvements. However, now it is
quite the contrary what is happening, each improvement allows to remove
constrains on 19x19, and making it play as if it was a 9x9 board (I mean in
the parameters). As you may have noticed for example, MoGo is not playing
locally anymore on 19x19 (which gives it an ugly style :-)).
The number of simulations done in this tournament was from 10k to 50k per
move, depending on the context and the move number (simple time management
stopping early the thinking if one move is clearly better than the others).
For all the details on the improvements, we submitted a paper, and I am
writing them in my thesis, so you will all know, just wait for them to be
written :-/.
I still strongly believe in the future of MC even in 19x19.

Bye,
Sylvain


2007/3/5, Don Dailey <[EMAIL PROTECTED]>:

I'm pretty sure I read that the MoGo team is shifting their efforts
towards 19x19 GO.   There are lot's of possibilites for research,
but Mogo already does things to constrain the board on 19x19, they
are probably just refining this stuff.

- Don


On Sun, 2007-03-04 at 19:58 -0800, Peter Drake wrote:
> Congratulations to MoGo on winning the KGS tournament held earlier
> today:
>
> http://www.gokgs.com/tournEntrants.jsp?sort=s&id=270
>
> Even under borderline "blitz" conditions (18 minutes sudden death for
> 19x19), MoGo managed to beat conventional programs like GNU Go.
> (ManyFaces apparently had some connection/restarting glitch, so its
> performance may not be representative.) Of course, MoGo also beat all
> the other MC/UCT programs.
>
> How did MoGo do it? I have three hypotheses:
>
> 1) MoGo is completing more runs per second. How many is it doing on
> the machine used in the tournament.
> 2) MoGo is somehow getting more out of the runs it does, using things
> like the all-as-first heuristic.
> 3) Each of MoGo's runs is "smarter", through the use of heuristics
> that bias the random games.
>
> My money is on #3. In the limit, of course, a very smart program
> could predict the outcome with one MC run for each move under
> consideration.
>
> Would the MoGo authors (and anyone else) care to weigh in?
>
> 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/

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

Re: [computer-go] GTPv3

2007-03-05 Thread Nick Apperson

In my view, the most important features of GTP are its ability to mediate
for tournements.  It lowers the bar for building a program.  Anything that
changes that is bad news.  However, there are some problems with the current
protocol such as its inability to handle rules.  I feel it is a step in the
right direction, but it does need to be improved.  However, anything not
completely essential should be made an extension for GTP in my opinion.
Asynchronous functions seem to me to be unecessary as anything more than an
extension.

On 3/5/07, Heikki Levanto <[EMAIL PROTECTED]> wrote:


On Sat, Mar 03, 2007 at 04:10:16PM -0500, Don Dailey wrote:
> And you CAN compare GTP directly to UCI because both are designed for
> the same purpose and both are simple text based protocols and the
> similarities are much greater than the differences.

GTP has many purposes. One of them is to sit betwene an engine and an
UI, but that is not the only one. It is also used for test scripts to
validate engines, and to debug them.

So, what even asynchronous extensions you are adding to GTP, please keep
the simple synchronous mode still available, for it has many uses too!

-Heikki

--
Heikki Levanto   "In Murphy We Turst" heikki (at) lsd (dot) dk

___
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] GTPv3

2007-03-05 Thread Heikki Levanto
On Sat, Mar 03, 2007 at 04:10:16PM -0500, Don Dailey wrote:
> And you CAN compare GTP directly to UCI because both are designed for
> the same purpose and both are simple text based protocols and the
> similarities are much greater than the differences.

GTP has many purposes. One of them is to sit betwene an engine and an
UI, but that is not the only one. It is also used for test scripts to
validate engines, and to debug them.

So, what even asynchronous extensions you are adding to GTP, please keep
the simple synchronous mode still available, for it has many uses too!

-Heikki

-- 
Heikki Levanto   "In Murphy We Turst" heikki (at) lsd (dot) dk

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


Re: [computer-go] GTPv3

2007-03-05 Thread Eduardo Sabbatella
It would be nice to have a reference implementation.

I can do that on Java (yes Its not C but its reference
implementation and for free, I would do a lot of
JUnits in exchange).

What do you think ?


--- £ukasz Lew <[EMAIL PROTECTED]> escribió:

> Hi,
> 
> There are some issues that are not so well defined
> in GTP v2.
> Maybe GTP v3 should be released to avoid too much
> legacy later?
> 
> 1.
> The most important thing is controller - engine
> architecture.
> There are situations that engine would like to have
> the control. For instance
> When he want to send commands to GUI to draw
> something while he is working.
> 
> In gogui this is solved by using stderr to send
> those commands, but:
> - stderr is not network transparent
> - syntax is not standardized
> - there is no confirmation about success / failure
> for those commands.
> 
> 2.
> The second thing is that there are many variables in
> the engine (komi,
> board size, time, etc).
> Developers tend to have more of them to control
> various parameters of
> the engine.
> End users could like to have some control over
> strength of the algorithm, etc.
> 
> 3. If GTP would supports chats, KGS would probably
> implement it.
> 
> 4. Opponent identification.
> 
> 5. Interrupt. Users do not always want to wait until
> the program finish work.
>   GoGui uses comment "#interrupt" to do it, but this
> is a hack.
>  (this is somewhat related to 1.)
> 
> 6. Position setup. I had conversation with Marcus
> about setup in GoGui.
> And we concluded that there should be a separate
> command for that.
> 
> Would You like to have those issues solved?
> I hope we can get somewhere. :)
> 
> Best Regards,
> £ukasz
> > ___
> computer-go mailing list
> computer-go@computer-go.org
>
http://www.computer-go.org/mailman/listinfo/computer-go/







__ 
Preguntá. Respondé. Descubrí. 
Todo lo que querías saber, y lo que ni imaginabas, 
está en Yahoo! Respuestas (Beta). 
¡Probalo ya! 
http://www.yahoo.com.ar/respuestas 

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