Prepa Help
Prepa Help › Cours › Informatique, 2e année

Jeux à deux joueurs : positions gagnantes, attracteurs et algorithme min-max, cours et exercices corrigés de prépa

Jeux d'accessibilité à deux joueurs sur un graphe, positions et coups, stratégie et position gagnante, calcul des attracteurs, arbre de jeu, algorithme min-max, fonction d'évaluation heuristique et profondeur limitée, complexités.

Les nombres sont ceux du chapitre complet ; chaque filière voit la partie qui correspond à son programme.

Dans un jeu à deux joueurs sans hasard, peut-on savoir d'avance qui gagne si chacun joue au mieux ? Le chapitre répond à cette question du programme d'informatique de deuxième année, en MP, PSI et TSI au Maroc et en MP, PC, PSI, PT, TSI et TPC en France. Il modélise un jeu par une arène, un graphe biparti dont les sommets sont les positions avec le joueur au trait, définit stratégie gagnante et position gagnante, et trouve les positions gagnantes en remontant depuis la fin, à la main et en Python, sur le jeu de cailloux où les multiples de 4 sont perdants. Il construit l'arbre de jeu, mesure son explosion sur le morpion et présente la notion d'heuristique. Pour MP, PSI, PC et PT en France et MP, PSI et TSI au Maroc, il calcule l'attracteur et en tire une stratégie, puis écrit l'algorithme min-max, exact puis avec une profondeur limitée ; ces deux algorithmes ne sont pas au programme de TSI et TPC en France, qui étudient l'heuristique sur le problème du sac à dos. Les problèmes reprennent des sujets de Mines-Ponts 2026 et 2025 et du CCINP 2024.

Ce que tu sauras faire

Au stand de la coopérative, les enfants jouent aux cailloux contre Ba Mbarek : chacun à son tour retire 1, 2 ou 3 cailloux d'une rangée, et celui qui prend le dernier gagne. Ba Mbarek gagne presque toujours. Peut-on savoir d'avance qui gagnera, si chacun joue au mieux ? Ce chapitre répond à cette question pour les jeux à deux joueurs sans hasard, puis montre comment faire jouer une machine quand le jeu est trop grand pour tout calculer.

L'essentiel : Stratégies et positions gagnantes Extrait gratuit

Un extrait de la fiche « L'essentiel » du chapitre. Les démonstrations sont dans le cours détaillé.

À retenir Définitions
  • Stratégie (sans mémoire) de JjJ_j : en chaque position non terminale qu'il contrôle, le coup qu'il joue ; liste coup, −1 ailleurs.
  • Stratégie gagnante depuis ss : toute partie conforme depuis ss est gagnée par JjJ_j, quels que soient les coups de l'adversaire.
  • Position gagnante pour JjJ_j : il a une stratégie gagnante depuis elle. Ce n'est pas forcément à lui de jouer. Jamais gagnante pour les deux ; parfois pour aucun (nul).
À retenir Remonter depuis la fin (joueur au trait)
  • Perdante : aucun coup, ou tous les coups mènent à une position gagnante pour l'adversaire.
  • Gagnante : au moins un coup mène à une position perdante pour l'adversaire.
  • Avec des nuls : gagne si un coup mène à une position perdue pour l'adversaire ; sinon nul si un coup mène à un nul ; sinon perd.
  • Jeu sans circuit : on calcule dans un ordre où les successeurs viennent avant, en O(∣S∣+∣A∣)O(\lvert S\rvert + \lvert A\rvert).
jeu du stand (retirer 1, 2 ou 3) positions perdantes pour le joueur au trait stratégie
celui qui prend le dernier gagne 0, 4, 8, 12... (multiples de 4) laisser un multiple de 4
celui qui prend le dernier perd 1, 5, 9... (nombres 4k+14k + 1) laisser un nombre 4k+14k + 1
def gagnantes_retrait(N, coups):
    g = [False] * (N + 1)
    for n in range(N + 1):
        for r in coups:
            if r <= n and not g[n - r]:
                g[n] = True
    return g

Une méthode du chapitre Extrait gratuit

Un exercice corrigé Extrait gratuit

Dans le chapitre complet

Le cours détaillé, toute la fiche « L'essentiel », 22 méthodes, 23 pièges corrigés, la carte mentale, 47 exercices corrigés, 3 problèmes de concours, les fiches à mémoriser et l'assistant qui répond à tes questions. Ce chapitre est offert : il s’ouvre en entier avec un compte d’essai gratuit.

Ouvrir l'essai gratuitVoir les offres

Plan du cours

Les méthodes du chapitre

Chaque méthode est une fiche : quand l'utiliser, le rappel de cours, les étapes, la rédaction attendue sur la copie, un exemple traité, les erreurs à éviter.

  1. Modéliser un jeu
  2. Construire l'arène et vérifier qu'elle est bipartie
  3. Dérouler une partie et dire qui gagne
  4. Représenter une stratégie et vérifier qu'elle est gagnante
  5. Trouver les positions gagnantes à la main en remontant depuis la fin
  6. Programmer la remontée pour un jeu sans circuit
  7. Programmer un plateau : coups possibles, vainqueur, jouer un coup sans modifier la position
  8. Construire un arbre de jeu, compter ses nœuds, distinguer positions et parties
  9. Estimer la taille d'une exploration et conclure sur sa faisabilité
  10. Écrire et tester une fonction d'évaluation heuristique
  11. Justifier qu'un programme de jeu termine et compter ses appels
  12. Calculer un attracteur à la main, couche par couche, avec les rangs
  13. Déduire les positions gagnantes des deux joueurs et les nuls
  14. Construire une stratégie gagnante à partir du rang
  15. Programmer l'attracteur et justifier terminaison, correction et complexité
  16. Remonter les valeurs min-max à la main et choisir le coup
  17. Écrire le min-max récursif
  18. Limiter la profondeur avec une heuristique, et discuter coût et qualité
  19. Ne pas réévaluer une position : la mémoïsation
  20. Présenter une heuristique gloutonne sur le sac à dos
  21. Énumérer tous les choix d'un petit sac à dos et compter le coût
  22. Montrer qu'une heuristique n'est pas exacte

Les exercices corrigés

Chaque exercice a ses indications, sa correction rédigée et ce qu'il faut en retenir.

Application directe (18)

Entraînement (22)

Approfondissement (7)

Les problèmes de concours

Des extraits de sujets réels, corrigés en entier, avec la durée conseillée et les méthodes mobilisées.

Questions fréquentes

Comment trouver les positions gagnantes d'un jeu de cailloux ?

On raisonne pour le joueur qui doit jouer, en remontant depuis la fin de la partie. Une position est perdante pour lui s'il n'a aucun coup, ou si tous ses coups mènent à une position gagnante pour l'adversaire. Elle est gagnante si au moins un de ses coups mène à une position perdante pour l'adversaire. Dans le jeu où chacun retire à son tour 1, 2 ou 3 cailloux et où celui qui prend le dernier gagne, 0 caillou est perdant, puisque le joueur ne peut plus jouer. Les positions 1, 2 et 3 sont gagnantes : on prend tout. La position 4 est perdante : tout coup laisse 3, 2 ou 1 caillou à l'adversaire. Les positions perdantes sont donc les multiples de 4, et la stratégie gagnante consiste à laisser un multiple de 4. En Python, une liste de booléens remplie de 0 à N donne ce résultat en un temps proportionnel au nombre de positions et de coups. Si celui qui prend le dernier perd, les positions perdantes deviennent 1, 5, 9, de la forme 4k + 1.

Qu'est-ce que l'arène d'un jeu, et pourquoi est-elle un graphe biparti ?

L'arène est le graphe orienté dont les sommets sont les positions du jeu et les arcs les coups. Une position contient l'état du jeu et le joueur qui doit jouer : avec 4 cailloux sur la table, il y a deux positions, selon que c'est au premier ou au second joueur de jouer, et elles n'ont pas la même issue pour lui. Chaque coup fait passer la main : il va d'une position où joue le premier joueur à une position où joue le second, ou l'inverse. En partageant les sommets entre les positions de chaque joueur, aucun arc ne relie deux sommets du même ensemble : le graphe est biparti. Si l'on oublie le joueur au trait et que l'on prend pour sommets les seuls nombres de cailloux, le graphe n'est pas biparti, car les arcs de 2 vers 1, de 1 vers 0 et de 2 vers 0 forment un triangle. Une partie est un chemin de l'arène qui part de l'état initial ; une partie infinie, possible si l'arène a un circuit, est comptée nulle dans le cours.

Comment calcule-t-on l'attracteur d'un joueur ?

L'attracteur est au programme de MP, PSI, PC et PT en France et de MP, PSI et TSI au Maroc, pas de TSI et TPC en France. L'attracteur de la cible du premier joueur se construit par couches cumulées. La couche 0 est la cible. On ajoute ensuite les positions du premier joueur qui ont au moins un coup vers les couches précédentes, et les positions de l'adversaire qui ont au moins un coup et dont tous les coups y mènent. On recommence tant qu'une position entre. La condition « au moins un coup » écarte une position de l'adversaire sans successeur, que la seule règle « tous ses coups » ferait entrer à tort. Le rang d'une position est le numéro de la couche où elle entre. Quand les cibles sont des fins de partie, les positions gagnantes du premier joueur sont exactement celles de l'attracteur, et la stratégie gagnante joue vers un rang strictement plus petit. La propagation arrière calcule l'attracteur en un temps linéaire.

Comment fonctionne l'algorithme min-max ?

L'algorithme min-max est au programme de MP, PSI, PC et PT en France et de MP, PSI et TSI au Maroc, pas de TSI et TPC en France. Le jeu est à somme nulle : une seule valeur, vue du premier joueur, appelé MAX, suffit. Une fin de partie vaut +1 si MAX a gagné, -1 si l'adversaire, MIN, a gagné, 0 en cas de nul. Une position où MAX doit jouer vaut le maximum des valeurs de ses fils ; une position où MIN doit jouer vaut le minimum. On remonte des feuilles vers la racine, et le bon coup mène au fils qui porte la valeur de la racine, pas vers la meilleure feuille. Écrit récursivement, le min-max fait un appel par nœud de l'arbre : 549 946 appels pour le morpion depuis la grille vide, dont la valeur est 0, ce qui veut dire que la partie est nulle si les deux joueurs jouent au mieux. En gardant dans un dictionnaire la valeur de chaque grille déjà évaluée, on n'évalue plus que 5 478 positions.

Qu'est-ce qu'une heuristique, et que fait le min-max à profondeur limitée ?

Une heuristique est une méthode qui donne vite une solution acceptable, sans garantie que ce soit la meilleure. Dans un jeu, elle prend la forme d'une fonction d'évaluation, qui estime une position sans jouer la partie jusqu'au bout : au morpion, on peut compter les lignes encore ouvertes pour le premier joueur et retrancher celles de l'adversaire, avec des valeurs extrêmes pour une grille déjà gagnée. Toutes les classes étudient cette notion. Le min-max à profondeur limitée, au programme de MP, PSI, PC et PT en France et de MP, PSI et TSI au Maroc, explore l'arbre de jeu seulement jusqu'à une profondeur fixée et évalue les nœuds de cette profondeur par l'heuristique. Le test de fin de partie et de profondeur vient avant tout appel récursif. Le coût est de l'ordre de b puissance p appels pour b coups par position et une profondeur p. Plus la profondeur est grande, meilleur est le coup en général, sans garantie. En TSI et TPC en France, l'heuristique est présentée sur le problème du sac à dos, avec un algorithme glouton.

Pourquoi ne peut-on pas explorer tout l'arbre d'un grand jeu ?

L'arbre de jeu d'une position a pour racine cette position, pour fils les positions atteintes en un coup, et pour feuilles les fins de partie. Si chaque position offre b coups, l'arbre a b nœuds à la profondeur 1, b au carré à la profondeur 2 et b puissance p à la profondeur p : le nombre de nœuds croît exponentiellement. Pour un jeu d'alignement à 7 colonnes, six coups d'avance font déjà 117 649 nœuds ; avec 30 coups par position, la profondeur 6 en compte 729 millions. Même le petit morpion a 549 946 nœuds et 255 168 parties, pour seulement 5 478 positions différentes : une même grille est atteinte par plusieurs ordres de coups, et il ne faut pas confondre le nombre de positions et le nombre de parties. Une exploration complète fait un appel par nœud, si bien que l'arbre complet d'un grand jeu est hors de portée. On explore alors une petite profondeur et l'on estime le reste par une heuristique.

Comment y accéder

Ce chapitre fait partie des chapitres offerts : il s'ouvre en entier avec un compte d'essai gratuit pour les filières dont il est l'un des premiers chapitres. Créer un compte d'essai ou se connecter. Pour l'accès complet et les tarifs, vois les offres.

Toute ta prépa au même endroit

Pour chaque chapitre : le cours, l'essentiel, les méthodes, les pièges, les exercices corrigés, les problèmes de concours, et un assistant qui répond à tes questions. Programmes du Maroc et de France. Avec la plateforme vidéo YOUNESS SCHOOL offerte, dès 600 DH (60 $) par mois, sans engagement.

Prépas scientifiques : voir l'offrePrépas ECS et ECT : voir l'offreTu hésites encore ? Essaie gratuitement Prepa Help.

← Apprentissage automatique : k plus proches voisins et k-moyennes