[computer-go] Re: libgoboard v0.97 released
Łukasz Lew
lukasz.lew at gmail.com
Mon Jan 22 09:48:34 PST 2007
Direct link:
http://www.mimuw.edu.pl/~lew/download.php?file_no=8
Łukasz
On 1/22/07, Łukasz Lew <lukasz.lew at gmail.com> wrote:
> 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;
> }
>
More information about the computer-go
mailing list