Accueil / Factory / Algos ML / Monte Carlo Tree Search — factory / algos ML / planification par simulation

MONTE CARLO TREE SEARCH.

Une méthode de planification qui explore l'arbre des décisions possibles en simulant des milliers de fins au hasard. Elle concentre ses efforts sur les branches prometteuses, sans jamais tout énumérer. Associée à des réseaux de neurones, elle est au cœur d'AlphaGo, vainqueur en 2016 du champion de go Lee Sedol.

PlanificationOrdonnancementSimulationRecherche arborescenteNiveau : avancé

FICHE D'IDENTITÉ

notes sur 5 · usage entreprise
PerformanceTrès bonnes décisions sur des arbres immenses, sans données
InterprétabilitéLes visites par branche montrent pourquoi un choix l'emporte
VitesseDes milliers de simulations à chaque décision
Facilité de réglageDeux réglages : budget de simulations et constante d'exploration
Tolérance aux données brutesPas de données, mais un simulateur fidèle du problème
EN 30 SECONDES

Un joueur d'échecs pressé ne calcule pas tous les coups. Il joue mentalement beaucoup de parties rapides à partir des coups qui lui semblent bons, et revient plus souvent sur ceux qui mènent à des victoires.

1. Sélection

On descend dans l'arbre des décisions déjà explorées en choisissant à chaque niveau la branche qui combine un bon score moyen et peu de visites (règle UCT).

2. Expansion

Arrivé à une branche jamais essayée, on l'ajoute à l'arbre : ici, placer une commande de plus dans le planning.

3. Simulation

On termine le scénario au hasard, en plaçant les commandes restantes dans un ordre aléatoire, et on calcule le résultat.

4. Rétropropagation

Le résultat remonte le long du chemin parcouru : chaque branche met à jour son nombre de visites et son score cumulé. Au bout du budget, on retient la branche la plus visitée.

LE CAS MÉTIER

industrie · ordonnancement d'atelier
EN ENTRÉE

8 commandes à passer sur une machine

Chaque commande a une durée, une heure de livraison promise et un poids : une heure de retard chez un client clé coûte trois fois plus. Il existe plus de 40 000 ordres de passage possibles.

EN SORTIE

Un planning ordonné

MCTS construit le planning commande après commande, en suivant les branches les plus visitées. Le résultat est un ordre de passage directement utilisable par l'atelier.

CE QU'ON MESURE

Le retard pondéré, face à la règle maison

Dans l'exemple Python, après 20 000 simulations, MCTS obtient un retard pondéré de 28 contre 33 pour la règle classique « la plus urgente d'abord », qui ignore l'importance des clients.

QUAND LE SORTIR, QUAND L'ÉVITER

OUI

  • Décisions en séquence avec un très grand nombre de combinaisons : planning, tournées, jeux
  • Un simulateur ou une formule de coût exacte existe, mais aucune donnée historique
  • Besoin d'une décision disponible à tout moment : plus on laisse de temps de calcul, meilleure elle est
  • Problème où les règles métier simples laissent de la valeur sur la table

NON

  • Planning industriel de grande taille avec contraintes strictes : un solveur de programmation par contraintes ou linéaire est plus sûr
  • Décision à prendre en quelques millisecondes : le budget de simulations ne suffira pas
  • Pas de modèle du problème (coûts, durées) : il n'y a rien à simuler
  • Simulations au hasard trop naïves pour être informatives : les guider par une heuristique ou un réseau entraîné, comme AlphaGo
LES 3 RÉGLAGES QUI COMPTENT

MCTS se programme sans package dédié. Trois choix pèsent sur la qualité du plan.

Budget de simulations

Nombre d'itérations avant de décider (20 000 dans l'exemple). Plus il est grand, meilleur est le plan, avec des rendements décroissants.

Constante d'exploration (C)

Dans la règle UCT, elle arbitre entre creuser les branches qui marchent et visiter les autres. Elle doit être à l'échelle des scores : 30 dans l'exemple, pour des retards pondérés de quelques dizaines d'heures.

Politique de simulation

Finir les scénarios au hasard est le plus simple. Une heuristique métier, comme « la plus urgente d'abord », rend chaque simulation plus informative et accélère la convergence.

LE CODE MINIMAL

données simulées dans le code
# Ordonnancement d'atelier : Monte Carlo Tree Search en R
set.seed(42)
durees <- sample(2:9, 8, replace = TRUE)       # 8 commandes : durée en heures
echeances <- sample(5:39, 8, replace = TRUE)   # heure de livraison promise
poids <- sample(1:3, 8, replace = TRUE)        # pénalité par heure de retard (3 = client clé)

cout <- function(o) sum(poids[o] * pmax(cumsum(durees[o]) - echeances[o], 0))
cle <- function(debut) paste0("p", paste(debut, collapse = "-"))
S <- new.env()   # pour chaque début de planning : c(visites, score cumulé)
lire <- function(k) if (is.null(S[[k]])) c(0, 0) else S[[k]]

explorer <- function(debut) {
  reste <- setdiff(1:8, debut)
  if (length(reste) == 0) return(-cout(debut))   # planning complet
  j <- Filter(function(j) is.null(S[[cle(c(debut, j))]]), reste[sample.int(length(reste))])[1]
  if (!is.na(j)) {   # expansion d'une branche jamais vue, puis fin de planning tirée au hasard
    score <- -cout(c(debut, j, setdiff(reste, j)[order(runif(length(reste) - 1))]))
    S[[cle(c(debut, j))]] <- c(1, score)
  } else {                      # sélection UCT : bon score moyen ou branche peu explorée
    uct <- sapply(reste, function(j) { s <- S[[cle(c(debut, j))]]; s[2] / s[1] + 30 * sqrt(log(S[[cle(debut)]][1]) / s[1]) })
    score <- explorer(c(debut, reste[which.max(uct)]))
  }
  S[[cle(debut)]] <- lire(cle(debut)) + c(1, score)
  score
}

for (iteration in 1:20000) explorer(integer(0))
plan <- integer(0)
while (length(plan) < 8) {   # on suit la branche la plus visitée
  reste <- setdiff(1:8, plan)
  plan <- c(plan, reste[which.max(sapply(reste, function(j) lire(cle(c(plan, j)))[1]))])
}
cat("Planning MCTS :", plan, "| retard pondéré :", cout(plan), "| tri par échéance :", cout(order(echeances)), "\n")

QUESTIONS FRÉQUENTES

Comment fonctionne AlphaGo ?

AlphaGo combine MCTS avec deux réseaux de neurones : l'un propose les coups prometteurs, l'autre évalue les positions. Les réseaux rendent la recherche bien plus ciblée que des simulations au hasard. En 2016, AlphaGo a remporté 4 parties sur 5 contre Lee Sedol.

Qu'est-ce que la formule UCT ?

UCT (Upper Confidence bounds applied to Trees) choisit la branche qui maximise son score moyen plus un bonus d'exploration. Ce bonus est grand pour les branches peu visitées et diminue à mesure qu'on les explore. Aucune branche prometteuse n'est ainsi abandonnée trop tôt.

MCTS a-t-il besoin de données d'entraînement ?

Non, dans sa version de base. Il suffit de pouvoir simuler le problème : connaître les actions possibles et calculer le résultat final. C'est un atout quand l'historique est pauvre, et une limite quand le problème est mal connu.

LES ALGOS VOISINS

à comparer avant de choisir
la brique de base

Simulation Monte Carlo

Tirer des milliers de scénarios au hasard pour estimer un résultat. MCTS organise ces tirages en arbre pour décider.

Voir la fiche →
l'alternative en optimisation

Recuit simulé

Améliore une solution complète par petites modifications. Souvent plus simple pour un planning de grande taille.

Voir la fiche →
apprendre une fois pour toutes

Q-learning

Apprend une politique réutilisable, là où MCTS recalcule à chaque décision.

Voir la fiche →
— formation

Passer de la fiche à la pratique

Dataistudio forme les équipes au machine learning et à l'IA, sur des cas concrets.

Voir les formations →