[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: computer-go: Engineering (was: Most simple Go rules)



Tromp/Taylor  does provides for   100%  accurate scoring and why  it's
ideal for this kind  of problem.  Anything  else is subject to "hacks"
like what  you  propose (I don't   mean this as  an  insult  because I
realize the difficulty of the problem.)

Your  protocol  has some  appeal  and  suggests an   OPTIONAL protocol
similar to yours which would work fine for  chinese style scoring: let
a player pass with a score announcement  and the next player can agree
with this score and pass thereby ending the game.  Or he can continue.
In either case this protocol is optional and no program is required to
implement it.

I was thinking about this discussion about protocols, implementations
of games servers and such and here is what I have sorted out,  I would
like to hear some opinions:

  1. If we want a better more modern protocol than gmp, go ahead and
     define it first.   Make sure this is independant of any particular 
     ruleset and supports them all.

  2. Don't break existing protocols (like gmp) because it's silly to
     require programmers to reprogram unless there is something pretty
     valuable at stake.  

     This can be accomplished by providing wrappers around gmp.  If
     you invent a new protocol,  you should make a gmp wrapper so 
     that these program automatically work.

     Make the minimal implementation of the new protocol simple enough
     that it can be expressed fully by gmp.

  3. After this, worry about how to write various utilities like GUI's
     for Go engines,  game servers,  autoplayers etc.


Anyway, you  have   probably done  a  lot of  work   here, so  I'm not
suggesting that anything is broken, perhaps what you have here is what
we need.

But as long  as you are trying   for Japanese scoring, you  are forced
into  some kind  of very  messy back  and forth communication protocol
that will be sure to cause lots of difficulty.

Don



   As for the 100% accurate scoring, I think that depends on your point of
   view. It's trivial if you require all the dead stones to be captured off the
   board. In all other cases you'll always have problems scoring 'unfinished'
   games. I don't think a perfet solution exists for that. The solution I chose
   to implement for Go is the following: as soon as any of the player plays a
   pass, the server gives back to both players what the score is going to be
   (what are points, which stones are alive, dead, etc...). If both players
   agree with the score from the server, they continue to pass and the game
   ends. If either player does not agree with the given score (which I hope
   will only happen in a small percentage of the cases), he may continue to
   play. From then on, each time a player passes, the other players is given an
   extra prisoner. This is to compensate for the loss of territory caused to
   prove some stones are dead. We'll have to see how well this works in
   reality, but I believe it's the closest you can get to automate scoring. And
   I find it much more preferable over a system where the players have to
   indicate themselves which stones are dead at the end of the game.

   This last bit is more complicated for programs, since they'll have to look
   at the scoring from the server and start doing something about it when they
   disagree. But if you have a fully automatic way to match two programs, it's
   little bother to play all the way to the end anyway, you just have to wait a
   little longer. The beauty of the scheme is that it works the same for both
   Japanese and Chinese rules.





   From: "Mark Boon" <tesuji@xxxxxxxxxxxxxxxxx>
   Date: Wed, 27 Jun 2001 19:32:26 +0200
   MIME-Version: 1.0
   Content-Transfer-Encoding: 7bit
   X-Priority: 3 (Normal)
   X-MSMail-Priority: Normal
   X-Mailer: Microsoft Outlook 8.5, Build 4.71.2173.0
   X-MimeOLE: Produced By Microsoft MimeOLE V5.00.2314.1300
   Importance: Normal
   Sender: owner-computer-go@xxxxxxxxxxxxxxxxx
   Precedence: bulk
   Reply-To: computer-go@xxxxxxxxxxxxxxxxx
   Content-Type: text/plain;
	   charset="iso-8859-1"
   Content-Length: 5405


   > -----Original Message-----
   > From: owner-computer-go@xxxxxxxxxxxxxxxxx
   > [mailto:owner-computer-go@xxxxxxxxxxxxxxxxx]On Behalf Of Don Dailey
   > Sent: Wednesday, June 27, 2001 5:45 PM
   > To: computer-go@xxxxxxxxxxxxxxxxx
   > Cc: computer-go@xxxxxxxxxxxxxxxxx
   > Subject: Re: computer-go: Engineering (was: Most simple Go rules)
   >
   >
   >
   >
   >    From: Christian Nentwich <c.nentwich@xxxxxxxxxxxxxxxxx>
   >    Organization: University College London
   >    Date: Wed, 27 Jun 2001 14:48:42 -0400
   >    X-Mailer: KMail [version 1.2]
   >    References: <000401c0fef6$f27afc10$093ba8c0@xxxxxxxxxxxxxxxxx>
   >    MIME-Version: 1.0
   >    Content-Transfer-Encoding: 8bit
   >    Sender: owner-computer-go@xxxxxxxxxxxxxxxxx
   >    Precedence: bulk
   >    Reply-To: computer-go@xxxxxxxxxxxxxxxxx
   >    Content-Type: text/plain; charset="iso-8859-1"
   >    Content-Length: 1283
   >
   >
   >    > I've never seen the GMP as a satisfactory solution. Wouldn't
   > it be much
   >    > better to use a Go server as a tournament referee, having
   > all the programs
   >    > communicate through TCP/IP? In straightforward cases, the
   > server can run on
   >
   >    This has come up before. The answer is noone is willing to invest time.
   >
   >    The truth is, the methods used by go servers on the internet
   > and GMP are
   >    adhoc and horribly out of date. All of the problems discussed
   > here can be
   >    addressed by proper software engineering.  Martin Mueller
   > wrote a paper a
   >    while ago in which he pointed out the benefits of rigorous software
   >    engineering as Go programs become large.
   >
   >    Interfaces to servers could be in a standard interface format
   > such as IDL or
   >    even in XML. A simple middleware such as XMLRPC could be used for
   >    communication (implementations exist for most programming
   > languages in use
   >    today). Interfaces and a unit test server could be defined and
   > managed by a
   >    group of individuals. Distribution would be hidden behind the
   > middleware and
   >    you could run your competition in any way you like, connection
   > multiple
   >    operating systems.
   >
   >    The crucial point would be that a competent group of
   > individuals (of which
   >    there seem to be many on this list), retains tight control of
   > interface
   >    specification.
   >
   >    Christian
   >
   >
   > I  would consider helping  if this was written  to be totally platform
   > independent,   and was  capable  of  full  game arbitration  including
   > scoring the final  outcome.   It would have  to  be able to score  the
   > final outcome accurately 100% of the time.
   >
   > Or is this illogical?
   >
   > The protocol should be trivial  to implement in  any language and  not
   > require complicated  supporting  libraries, although  these  could  be
   > provided for convienence.
   >
   >
   > Don

   At the moment I'm working with some friends on a solution to develop and
   deploy EJB enterprise software more easily and more cheaply. As a pilot
   project we made a game-server for several different kind of games, including
   Go of course.

   The game-server has been in an 'almost finished' state for over half a year
   now, since it's not very high priority for us. But we do have the intention
   to finish it this summer and allow people to use it to play all kinds of
   games on-line.

   The interface to the game-server is fairly straightforward and it can also
   be accessed through HTTP requests, so it's completely language independent.
   The problem is though that the XML that's passed to the HTTP requests (and
   back) is rather ad-hoc and should probably be replaced by something
   standardized. Still, it's much easier to access than servers like IGS. And
   in case you're using Java, I made an abstract class for computer-players to
   start games and play moves where you wouldn't need to write more than a a
   few dozen lines of code to hook into the server. Similar classes could be
   made for other languages.

   As for the 100% accurate scoring, I think that depends on your point of
   view. It's trivial if you require all the dead stones to be captured off the
   board. In all other cases you'll always have problems scoring 'unfinished'
   games. I don't think a perfet solution exists for that. The solution I chose
   to implement for Go is the following: as soon as any of the player plays a
   pass, the server gives back to both players what the score is going to be
   (what are points, which stones are alive, dead, etc...). If both players
   agree with the score from the server, they continue to pass and the game
   ends. If either player does not agree with the given score (which I hope
   will only happen in a small percentage of the cases), he may continue to
   play. From then on, each time a player passes, the other players is given an
   extra prisoner. This is to compensate for the loss of territory caused to
   prove some stones are dead. We'll have to see how well this works in
   reality, but I believe it's the closest you can get to automate scoring. And
   I find it much more preferable over a system where the players have to
   indicate themselves which stones are dead at the end of the game.

   This last bit is more complicated for programs, since they'll have to look
   at the scoring from the server and start doing something about it when they
   disagree. But if you have a fully automatic way to match two programs, it's
   little bother to play all the way to the end anyway, you just have to wait a
   little longer. The beauty of the scheme is that it works the same for both
   Japanese and Chinese rules.

       Mark