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

RE: computer-go: Most simple Go rules




-----Original Message-----
From:	Nick Wedd [SMTP:nick@xxxxxxxxxxxxxxxxx]
Sent:	Monday, June 25, 2001 9:59 AM
To:	computer-go@xxxxxxxxxxxxxxxxx
Subject:	Re: computer-go: Most simple Go rules

Bob Myers <rtm@xxxxxxxxxxxxxxxxx> writes

>2) What ruleset would you consider ideal for a computer go tournament?

However this message is also in reply to a private email from Robert
Jasiek.


I have to specify the rules for the CG event in the European Go
Congress, in Dublin on August 1st.  Here is what I propose:

  Chinese (area) scoring.
  Standard ko rule, i.e. 2-cycles forbidden.
  Komi 6.5.
  No suicide allowed.

Here are my reasons.

__ Chinese (area) scoring.
    In Ing 2000, in David Fotland's words, "Three crucial games were
decided by a program messing around in the opponent's territory ([names
listed]). The worst offender was [name given], which played on for 90
moves after the dame were filled. In all three cases, the program
messing around eventually won, so it seems that for computer vs computer
go, this is an important feature."
    This kind of "messing around" is not pretty, and should not be
rewarded.  The best way to avoid rewarding it is for programs to make
defensive moves inside their own territory.  They will be unwilling to
do this if territory scoring is used.

__ Standard ko rule, i.e. 2-cycles forbidden.
    Implementing superko is difficult.  Some of the programs at Dublin
will not be world leaders, they will be newcomers to CG.  I do not want
to make things difficult for them.

__ Komi 6.5.
    I think that this is the right number.  I see no reason to prefer a
different number.  I don't feel strongly about it.

__ No suicide allowed.
    Some programs do not allow suicide.  If suicide is allowed, and is
attempted against such a program, it refuses to accept the move, and
therefore loses.
    Ing rules allow suicide.  If a program had entered Ing98, and played
random bad moves, except that it made a suicide move in every game, it
would have won against opponents which failed to accept suicide, and
scored above average.
    I do not want to encourage programs to make meaningless suicide
moves in the hope of winning in this way.  The ideal solution is to
persuade programmers to support suicide.  In a world-class event this
may be appropriate.  But in Dublin, I prefer to be supportive of new
programs.


Bob - I would like to see some standardisation of CG rules, and would
like to co-operate with you in this.

Nick
--
Nick Wedd




Perhaps it would be worthwhile agreeing on a computer referee programme to 
manage computer games.  Obviously this would require some one-off work from 
the computer go programmers, but if agreement could be reached then the 
referee could be used in most (?) computer go tournaments and should
i) save human referees from having to make difficult decisions
ii) let competitors know exactly where they stand
iii) decrease the workload during the competition

As an illustration of the kind of thing I mean, I have written some pseudo 
C++ code.
This is not meant as a model of programming style but feel free to 
critisize anyway

enum result{BLACK, WHITE, DRAW};
enum colour{BLACK, WHITE};

const GAMETIME=3600;// each side has this many seconds
const MAXMOVES=500;// a draw will be declared after this many moves

result referee(player *blackplayer,player *whiteplayer){
  //the function is passed pointers to player objects which are implemented 
by the competitors
   player *nextplayer;
   clock *nextplayersclock,*otherplayersclock;
   move nextplayersmove=nomove;//special value used only at start of game
   registerplayers(blackplayer,whiteplayer);//so that they can be 
referenced given colour

   clock blackclock,whiteclock;
   blackclock.set(GAMETIME);
   whiteclock.reset(GAMETIME);
   registerclocks(&blackclock,&whiteclock);//so that they can be referenced 
given colour

   blackplayer->emptyboard();//message to tell black to start with an empty 
board
   whiteplayer->emptyboard();
   board gameboard;//a board to keep track of the game on
   colour nextplayercolour=BLACK;
   int passcount=0;//number of consecutive passes made at current point in 
game

   for(movenumber=1;movenumber<=MAXMOVES;movenumber++){
      nextplayer=getplayer(nextplayercolour);
      nextplayersclock=getclock(nextplayercolour);
      otherplayersclock=getclock(toggle(nextplayercolour));
      nextplayersclock->on();
      nextplayer->yourtimeleft(nextplayersclock->timeleft());//inform the 
player of his remaining time
      nextplayer->oppstimeleft(otherplayersclock->timeleft());//and of his 
opponents remaining time
      nextplayersmove=nextplayer->getmove(nextplayersmove);//inform him of 
his opponents move and get his response
      nextplayersclock->off();
      if(gameboard.illegalp(nextplayersmove,nextplayercolour))//is move 
illegal?
	 return converttoresult(toggle(nextplayercolour));
         //nextplayer has forfitted by making an illegal move
      passcount = nextplayersmove == PASS ? passcount+1 : 0;
      if(passcount==2)return gameboard.tromp_taylor();//two passes mean end 
of game
      gameboard.makemove(nextplayersmove,nextplayercolour);
      nextplayercolour=toggle(nextplayercolour);
   }
   return DRAW;//the maximum number of moves has been exceeded
}

void on_interrupt(){
   //I've forgotten how this kind of thing is implemented but the idea
   // is that this function is called when one of the clocks runs out
   // and causes referee() to return a win for the other player
}



Tom.