reimplement time constraint
This commit is contained in:
parent
07a38b5c2b
commit
92cd90dd2f
3 changed files with 12 additions and 4 deletions
|
@ -1,6 +1,7 @@
|
||||||
#ifndef MYBT_H
|
#ifndef MYBT_H
|
||||||
#define MYBT_H
|
#define MYBT_H
|
||||||
|
|
||||||
|
#include <chrono>
|
||||||
#include <random>
|
#include <random>
|
||||||
|
|
||||||
#define WHITE 0
|
#define WHITE 0
|
||||||
|
@ -88,7 +89,7 @@ struct bt_t {
|
||||||
bool black_can_move_forward(int _line, int _col);
|
bool black_can_move_forward(int _line, int _col);
|
||||||
bool black_can_move_left(int _line, int _col);
|
bool black_can_move_left(int _line, int _col);
|
||||||
|
|
||||||
bt_move_t get_mcts_move(int);
|
bt_move_t get_mcts_move(double);
|
||||||
bt_move_t get_rand_move();
|
bt_move_t get_rand_move();
|
||||||
bool can_play(bt_move_t _m);
|
bool can_play(bt_move_t _m);
|
||||||
void play(bt_move_t _m);
|
void play(bt_move_t _m);
|
||||||
|
|
|
@ -58,7 +58,7 @@ void genmove() {
|
||||||
printf("= \n\n");
|
printf("= \n\n");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
bt_move_t m = B.get_mcts_move(100000);
|
bt_move_t m = B.get_mcts_move(1);
|
||||||
B.play(m);
|
B.play(m);
|
||||||
if (verbose) {
|
if (verbose) {
|
||||||
m.print(stderr, white_turn, B.nbl);
|
m.print(stderr, white_turn, B.nbl);
|
||||||
|
|
|
@ -283,7 +283,11 @@ void print_vec(bt_t board, std::vector<bt_node_t *> v) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bt_move_t bt_t::get_mcts_move(int max_it) {
|
bt_move_t bt_t::get_mcts_move(double max_time) {
|
||||||
|
// Time constraint
|
||||||
|
auto now = std::chrono::steady_clock::now();
|
||||||
|
std::chrono::duration<double> elapsed{};
|
||||||
|
|
||||||
// Init tree
|
// Init tree
|
||||||
bt_node_t *tree = new bt_node_t();
|
bt_node_t *tree = new bt_node_t();
|
||||||
tree->parent = nullptr;
|
tree->parent = nullptr;
|
||||||
|
@ -295,7 +299,7 @@ bt_move_t bt_t::get_mcts_move(int max_it) {
|
||||||
mcts_expansion(tree);
|
mcts_expansion(tree);
|
||||||
|
|
||||||
// MCTS
|
// MCTS
|
||||||
for (int it = 0; it < max_it; ++it) {
|
while (elapsed.count() < max_time) {
|
||||||
// Copy board
|
// Copy board
|
||||||
bt_t copy_b = *this;
|
bt_t copy_b = *this;
|
||||||
|
|
||||||
|
@ -310,6 +314,9 @@ bt_move_t bt_t::get_mcts_move(int max_it) {
|
||||||
|
|
||||||
// Update
|
// Update
|
||||||
mcts_back_propagation(result, is_win);
|
mcts_back_propagation(result, is_win);
|
||||||
|
|
||||||
|
// Update elapsed time
|
||||||
|
elapsed = std::chrono::steady_clock::now() - now;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Select best move
|
// Select best move
|
||||||
|
|
Reference in a new issue