Hi,

Few interesting things has happened so I decided to announce new version:

 - bug-fix: komi was too big (1 point) so program as white tended to
loose by 0.5 point

 - improve portability (if just "make" is not enough for You, please tell me)

 - simple_playout::run is a simplest playout loop (80% performance)
   You can use it as a starting point/tutorial for Your Monte-Carlo Go.
   (I dare to paste the code at the end of the message)

 - more convenient printing functions

 - column coordinates around the board printed as letters (was numbers)

 - faster RNG + more accurate performance measurement

 - performance
   43 kpps on 1.4 GHz
   70 kpps on 2.2 GHz
   will anybody send me info about 3.2 GHz?

 - no more darcs repository, will publish mercurial repository soon.



Best Regards,
Łukasz Lew

---- Code of simple playout loop ---


player::t run (board_t* board, player::t first_player) {

   v::t  v;
   bool  was_pass[player::cnt];
   uint  move_no;
   player::t act_player;

   act_player = first_player;
   player_for_each (pl)
     was_pass [pl] = false;
   move_no = 0;

   do {
     v = play_one (board, act_player);
     was_pass [act_player] = (v == v::pass);
     act_player = player::other (act_player);
     move_no++;

     if ((was_pass [player::black] & was_pass [player::white]) |
         (move_no > max_playout_length)) break;

   } while (true);

   return board->winner ();
}


v::t play_one (board_t* board, player::t player) {

   v::t v;
   uint start;

   // find random place in vector of empty vertices
   start = pm::rand_int (board->empty_v_cnt);

   // search for a move in start ... board->empty_v_cnt-1 interval
   for (uint ev_i = start; ev_i != board->empty_v_cnt; ev_i++) {
     v = board->empty_v [ev_i];
     if (!board->is_eyelike (player, v) &&
         board->play (player, v) != board_t::play_ss_suicide) return v;
   }

   // search for a move in 0 ... start interval
   for (uint ev_i = 0; ev_i != start; ev_i++) {
     v = board->empty_v [ev_i];
     if (!board->is_eyelike (player, v) &&
         board->play (player, v) != board_t::play_ss_suicide) return v;
   }

   board->check_no_more_legal (player); // powerfull check
   return v::pass;
}
_______________________________________________
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/

Reply via email to