Direct link:
http://www.mimuw.edu.pl/~lew/download.php?file_no=8

Łukasz

On 1/22/07, Łukasz Lew <[EMAIL PROTECTED]> 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;
}

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

Reply via email to