J'ai une question simple concernant l'algorithme minimax: par exemple pour le jeu TIC-TAC-TOE, comment puis-je déterminer la fonction utilitaire pour chaque joueur joue? Cela ne fait pas cela automatiquement, n'est-ce pas? Je dois coder les valeurs du jeu dans le jeu, cela ne peut pas les apprendre en soi, n'est-ce pas? P>
4 Réponses :
Non, un minimax n'apprend pas. C'est une version plus intelligente d'une recherche d'arborescence brute-force. p>
Comme il s'agit d'un algorithme de force brute, il est important d'optimiser cela en utilisant quelque chose comme une taille d'alpha-bêta. en.wikipedia.org/wiki/alpha-beta_pruning
Berrick: Oui, bien sûr. Mais Alpha / Beta est généralement implicite, certainement quand on parle de Negamax.
TIC-TAC-TOE est assez petit pour exécuter le jeu à la fin et assigner 1 pour la victoire, 0 pour dessiner et -1 pour perdre. P>
Sinon, vous devez fournir une fonction qui détermine la valeur d'une position de manière heuristique. Dans les échecs, par exemple, un gros facteur est la valeur du matériau, mais également qui contrôle le centre ou la manière dont les morceaux peuvent bouger. P>
Quant à l'apprentissage, vous pouvez ajouter des facteurs de poids à différents aspects de la position et essayer d'optimiser ceux en jouant à plusieurs reprises. P>
Comment déterminent la fonction utilitaire pour chaque pièce de lecture? em> p>
soigneusement ;-) Ce montre comment une fonction d'évaluation légèrement imparfaite (une pour ex. qui ne va pas «profonde» suffisamment en regardant à l'avenir dans l'arbre des plis possibles, ou celui qui ne capture pas de capturer la force relative des positions de la carte) résulte dans un algorithme global faible (celui qui perd plus souvent). P>
il ne peut pas les apprendre en soi, n'est-ce pas? em> p>
Non, ça ne le fait pas. Cependant, il existe des moyens de rendre l'ordinateur apprendre la force relative des positions du conseil d'administration. Par exemple, en regardant dans Donald Mitchie et son programme Menace Strong> Vous verrez comment un processus stochastique peut être utilisé pour apprendre le tableau sans une connaissance priori em>, mais les règles du jeu. La pièce amusante est que, même si cela peut être mis en œuvre dans des ordinateurs, quelques centaines de billes colorées et de boîtes de match sont nécessaires, grâce à la taille relativement petite de l'espace de jeu, ainsi que de diverses symétries. p>
Après avoir appris une méthode aussi fraîche d'enseigner à l'ordinateur comment jouer, nous ne serons peut-être pas intéressés à revenir à Minmax comme appliqué à TIC-TAC-TOE. Après tout Nous pouvons regarder dans la "boîte de match" associée à la pièce suivante (c'est-à-dire ne pas aller au fond) et utilisez le pourcentage de billes associées à chaque carré, en tant que facteur supplémentaire. Nous pouvons ensuite évaluer un arbre traditionnel, mais seulement aller, dire 2 ou 3 bouge de profondeur (une profondeur peu profonde à l'avenir qui se terminerait généralement par des pertes ou des tirs) et évaluerait chaque mouvement suivant sur la base du simple -1 ( Perte), 0 (dessiner / inconnu), +1 (gagnez) Note. En combinant ensuite le pourcentage des perles et la note simple (par exemple, l'ajout, certainement pas par la multiplication), nous sommes en mesure d'utiliser efficacement MINMAX d'une manière plus semblable à la manière dont il est utilisé dans des cas où il n'est pas possible d'évaluer l'arbre de jeu à sa fin. P>
En bas de la ligne: dans le cas de TIC-TAC-TOE, MINMAX ne devient que plus intéressant (par exemple, pour nous aider à explorer l'efficacité d'une fonction utilitaire particulière) lorsque nous supprimons la nature déterministe du jeu, associée à la facilité Évaluez l'arbre complet. Une autre façon de faire le jeu [mathématiquement] est de jouer avec un adversaire qui fait des erreurs ... p>
Généralement, vous impliqueriez directement la fonction utilitaire. Dans ce cas, l'algorithme n'apprendrait pas à jouer au jeu, il utiliserait les informations que vous aviez explicitement codée explicitement dans la mise en œuvre. p>
Cependant, il serait possible d'utiliser Programmation génétique (GP) ou une technique équivalente pour dériver automatiquement une fonction d'utilité. Dans ce cas, vous n'auriez pas à encoder une stratégie explicite. Au lieu de cela, l'évolution découvrirait sa propre façon de bien jouer au jeu. P>
Vous pouvez soit combiner votre code Minimax et le code GP en un seul programme adaptatif (probablement très lent), ou vous pouvez d'abord exécuter le GP, trouver une bonne fonction utilitaire, puis ajouter cette fonction à votre code minimax tout comme vous serait une fonction codée à la main? p>