Une méthode générique pour résoudre le mastermind est de conserver une liste de toutes les combinaisons possible et à chaque tours, proposer une combinaison possible et éliminer toutes les combinaisons qui ne sont plus possible d’après les indications donnés par l’autre joueur.
Tant que le nombre de combinaisons initiale est assez faible, un tel algo permet de trouver la bonne combinaison, mais pas forcément de manière optimale. En regardant l’algo de Knuth, ce que j’ai décris est assez similaire, sauf que plutôt que de choisir la prochaine proposition de manière optimale, on choisi la prochaine proposition parmi les combinaisons possibles. Choisir la première combinaisons possible d’une liste trié est probablement beaucoup moins efficace que en choisir une aléatoirement.
Au passage, l’algorithme de Knuth peut tout à fait s’implémenter quelque soit le nombre de pions et de couleurs. Par contre, le temps d’exécution risque de devenir trop long si le nombre de combinaisons est trop grand. Sans optimisation et si je me trompe pas, au premier tour le complexité de l’algo est O((3c2)p×K) avec c le nombre de couleurs, p le nombre de pions et K une truc polynomial en c et p (la complexité de l’algo qui détermine le nombre de pions de la bonne couleur bien/mal placés). Au delà de 6 couleurs et 4 pions (le mastermind standard), le temps d’exécutions sera probablement déjà trop long au début.
L’avantage de l’algo de Knuth, c’est qu’il calcul un score pour chaque proposition. Pour obtenir la solution au plus vite, on prends la proposition avec le meilleur score, mais il est aussi possible de prendre une solution avec un moins bon score si tu veux rendre l’IA plus simple à battre.
Dans les autres idées, il est tout à fait possible de créer d’autres algos (peu efficaces) pour résoudre le mastermind. Par exemple, l’IA peut commencer par des propositions de couleur uni jusqu’à savoir quels sont les couleurs de la combinaison à déduire et ensuite essayer de trouver l’ordre correcte. On peut aussi imaginer une amélioration possible où au lieux de tester des combinaisons uni, on teste n pions dont on connait la couleur et p−n de couleur uni pour savoir combien de pions de la nouvelle couleur sont dans la combinaison finale. Cela permet de glaner des informations de position plus tôt.