search method

dynamic search(
  1. S rootState, {
  2. int iterations = 100,
})

Implementation

dynamic search(S rootState, {int iterations = 100}) {
  final root = MCTSNode<S>(rootState);
  for (var i = 0; i < iterations; i++) {
    final leaf = _select(root);
    if (!isTerminal(leaf.state)) {
      _expand(leaf);
      if (leaf.children.isNotEmpty) {
        final child = leaf.children[_rand.nextInt(leaf.children.length)];
        final value = _simulate(child.state);
        _backup(child, value);
      } else {
        final value = _simulate(leaf.state);
        _backup(leaf, value);
      }
    } else {
      final value = reward(leaf.state);
      _backup(leaf, value);
    }
  }
  // return best action
  if (root.children.isEmpty) return null;
  root.children.sort((a, b) => b.visits.compareTo(a.visits));
  return root.children.first.actionFromParent;
}