Monte Carlo tree search (tsz. Monte Carlo tree searches)
A Monte Carlo Tree Search (MCTS) egy sztochasztikus, heurisztikus keresési algoritmus, amelyet leginkább játékok és döntési problémák megoldására alkalmaznak. Népszerűsége a számítógépes Go játékban való áttörő sikere után nőtt meg, és azóta számos más területen is alkalmazzák, például mesterséges intelligenciában, robotikában, tervezésben, vagy általános problémamegoldásban. Az MCTS hatékonyságát annak köszönheti, hogy intelligens módon egyesíti a valószínűségi szimulációkat és a faalapú keresést.
A Monte Carlo Tree Search fő célja, hogy a döntési lehetőségek közül a legjobbat válassza, anélkül, hogy az összes lehetőséget teljesen végigelemezné. Ehelyett a valószínűségek és mintavételezés (Monte Carlo szimulációk) alapján becslést ad az egyes döntések jövőbeli eredményességére.
Ez úgy működik, hogy a lehetséges állapotokat egy fa struktúrában képviseli, és különböző játékmeneteket (szimulációkat) futtat, hogy megtudja, mely ágak vezetnek a legjobb eredményekhez.
Az MCTS iteratív folyamatként működik. Minden iteráció négy fő lépésből áll:
A fa gyökércsomópontjától indulva követjük azokat az ágakat, amelyek ígéretesnek tűnnek. A kiválasztás során egy felfedezés–kihasználás egyensúlyt alkalmazó heurisztikát, például az UCB1 formulát (Upper Confidence Bound) használják. Ez a lépés addig tart, amíg el nem érünk egy olyan csomópontot, amely vagy:
Ha a kiválasztott csomópont nem terminális, bővítjük a fát egy vagy több gyermekcsomópont hozzáadásával, amely új lehetőséget reprezentál.
A kiválasztott új csomópontból véletlenszerűen lejátszunk egy játékot vagy végrehajtunk egy döntéssorozatot a végállapotig. Ez a Monte Carlo-szimuláció. A végén megkapjuk a játék eredményét vagy a döntés “hasznosságát”.
A szimuláció eredményét visszaterjesztjük azokon a csomópontokon, amelyeken keresztül a kiválasztás történt. Frissítjük az egyes csomópontok statisztikáit: pl. győzelmek száma, látogatások száma. Így egyre pontosabb becslést kapunk a csomópont hasznosságáról.
A kiválasztás lépéséhez az egyik legismertebb formula az UCB1 (Upper Confidence Bound):
Ez a képlet biztosítja, hogy ne csak a jól teljesítő csomópontokat vizsgáljuk, hanem néha újakat is felfedezzünk, hiszen a gyakorlatban nem garantált, hogy a jelenlegi legjobb a valóban legjobb.
Az alapsémát az idők során többféleképpen módosították, hogy gyorsabb, okosabb vagy megbízhatóbb legyen:
function MCTS(root): for i in 1 to N: leaf = select(root) child = expand(leaf) result = simulate(child) backpropagate(child, result) return best_child(root) function select(node): while node is fully expanded and not terminal: node = best_uct_child(node) return node function expand(node): if node is terminal: return node else: return add_random_untried_child(node) function simulate(node): while not terminal(node): node = select_random_action(node) return outcome(node) function backpropagate(node, result): while node != null: node.visits += 1 node.wins += result node = node.parent
struct Node {
State state;
Node* parent;
std::vector<Node*> children;
int wins = 0, visits = 0;
std::vector<Action> untriedMoves;
};
Node* select(Node* node) {
while (!node->untriedMoves.empty() && !isTerminal(node->state)) {
node = bestUCTChild(node);
}
return node;
}
// expand, simulate, backpropagate stb. ugyanígy
A Monte Carlo Tree Search egy rendkívül erős és adaptív algoritmus, amely megtalálta helyét az MI világában. Azáltal, hogy a tapasztalati tanulást és a keresést kombinálja, képes komplex, nem determinisztikus környezetekben is jó döntéseket hozni.
akkor az MCTS kiváló választás lehet.