Le Q-learning, avec un réseau de neurones à la place du tableau de valeurs. Le réseau estime la valeur de chaque action à partir de la situation, même jamais rencontrée. DeepMind l'a rendu célèbre en 2015 en lui faisant apprendre des dizaines de jeux Atari à partir des seuls pixels de l'écran et du score.
Au lieu d'un carnet qui note la valeur de chaque situation vécue, le vendeur développe un flair : face à une situation nouvelle, il estime ce que chaque décision va rapporter par ressemblance avec ce qu'il a déjà vu.
Il reçoit la situation, ici le stock et le jour de la semaine, et sort une valeur par action possible. On choisit l'action la mieux notée, avec un peu d'exploration.
Chaque essai est rangé dans une mémoire (replay buffer). Le réseau apprend sur des lots tirés au hasard dans cette mémoire, ce qui casse l'enchaînement des essais successifs et stabilise l'apprentissage.
La valeur visée, gain immédiat plus valeur de la suite, est calculée par une copie du réseau mise à jour seulement de temps en temps. Sans elle, le réseau poursuivrait une cible qui bouge à chaque pas.
Chaque jour, l'algorithme voit le stock et le jour de la semaine, puis commande 0, 10, 20 ou 30 unités. La demande est simulée, avec un pic le samedi. Le simulateur est écrit avec Gymnasium, la bibliothèque standard des environnements de renforcement.
Le réseau apprend quand commander et combien, en anticipant le pic du samedi. En production, on l'interroge chaque matin avec l'état du stock.
Chaque jour compte la marge sur ventes, moins les frais de commande, le coût du stock et une pénalité par vente manquée. On compare au gain de la règle en place, ici 10 unités par jour, sur les mêmes 50 scénarios de demande.
Noms donnés pour stable-baselines3, la bibliothèque Python de référence.
Part de l'entraînement pendant laquelle l'exploration décroît jusqu'à son niveau final (5 % des actions par défaut). Trop courte, le réseau se fige sur une stratégie médiocre.
Taille de la mémoire des expériences rejouées. Assez grande pour couvrir des situations variées, sans garder trop longtemps les essais d'une politique dépassée.
Nombre de pas entre deux mises à jour de la copie cible. Trop fréquent, l'apprentissage oscille ; trop rare, il ralentit.
Budget d'entraînement en pas simulés. Un DQN en demande souvent des centaines de milliers : on suit la récompense moyenne et on arrête quand elle plafonne.
# Réapprovisionnement d'un entrepôt : Deep Q-Network (DQN) en Python
import numpy as np
import gymnasium as gym
from stable_baselines3 import DQN
class Entrepot(gym.Env): # chaque jour : stock et jour de la semaine -> quantité à commander
observation_space = gym.spaces.Box(0.0, 1.0, shape=(2,), dtype=np.float32)
action_space = gym.spaces.Discrete(4) # commander 0, 10, 20 ou 30 unités
def reset(self, seed=None, options=None):
super().reset(seed=seed)
self.stock, self.jour = 20, 0
return np.array([0.2, 0.0], dtype=np.float32), {}
def step(self, action):
self.stock = min(self.stock + 10 * int(action), 100)
demande = self.np_random.poisson(20 if self.jour % 7 == 5 else 8) # pic le samedi
vendus = min(self.stock, demande)
self.stock, self.jour = self.stock - vendus, self.jour + 1
gain = 5 * vendus - 10 * (action > 0) - 0.2 * self.stock - 3 * (demande - vendus) # marge, commande, stock, rupture
obs = np.array([self.stock / 100, (self.jour % 7) / 6], dtype=np.float32)
return obs, float(gain), False, self.jour >= 28, {} # épisode = 4 semaines
modele = DQN("MlpPolicy", Entrepot(), learning_rate=1e-3, buffer_size=50_000, exploration_fraction=0.3,
target_update_interval=1_000, seed=42, verbose=0)
modele.learn(total_timesteps=150_000)
def evaluer(choix, env=Entrepot(), total=0.0): # gain moyen sur 50 périodes de 4 semaines
for i in range(50):
obs, fini = env.reset(seed=i)[0], False
while not fini:
obs, gain, _, fini, _ = env.step(choix(obs))
total += gain
return round(total / 50, 1)
print("DQN :", evaluer(lambda o: int(modele.predict(o, deterministic=True)[0])), "| 10 unités par jour :", evaluer(lambda o: 1))
Le DQN se pratique en Python (stable-baselines3, PyTorch, Gymnasium) : pas d'équivalent R utilisé en entreprise.
Le Q-learning stocke une valeur par situation et par action dans une table. Le DQN remplace cette table par un réseau de neurones, capable d'estimer la valeur de situations jamais rencontrées. Il ajoute deux mécanismes de stabilité : la mémoire d'expériences rejouées et le réseau cible.
En 2015, DeepMind a publié dans Nature un DQN qui recevait uniquement les pixels de l'écran et le score. Avec la même architecture et les mêmes réglages pour les 49 jeux testés, il a atteint un niveau comparable à celui d'un testeur humain professionnel sur une grande partie d'entre eux.
Pas pour un cas métier comme celui-ci : l'observation tient en quelques nombres et le réseau est petit, un processeur standard suffit. Le GPU devient utile quand l'observation est une image, comme dans les jeux Atari.
Même principe, avec une table au lieu d'un réseau. À préférer quand les situations sont peu nombreuses.
Voir la fiche → souvent plus stableApprend directement la stratégie et accepte les actions continues. Le choix par défaut de nombreuses équipes.
Voir la fiche → la brique utiliséeDans la plupart des cas métier, le réseau qui estime les valeurs Q est un simple perceptron multicouche.
Voir la fiche →Dataistudio forme les équipes au machine learning et à l'IA, sur des cas concrets.
Nous utilisons des cookies de mesure d'audience et de suivi publicitaire pour comprendre la fréquentation du site et l'efficacité de nos annonces. Rien n'est déposé sans votre accord. En savoir plus