search method
dynamic
search(
- S rootState, {
- 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;
}