Contexte
MENACE ( M achine E ducable N oughts A nd C rosses E ngine) est un algorithme rudimentaire d'apprentissage automatique peu profond pour le jeu Noughts and Crosses, créé par l'informaticien britannique Donald Michie dans les années 1960. Il a été initialement mis en œuvre avec 304 boîtes d'allumettes, chacune étiquetée avec une position de planche et contenant des perles colorées (avec l'une des neuf couleurs, représentant les mouvements possibles). Michie a calculé que ces 304 boîtes d'allumettes étaient suffisantes pour chaque combinaison de mouvements sur le plateau.
Les plus mathématiques d'entre vous peuvent se rendre compte qu'il existe en réalité 19 683 combinaisons possibles de Noughts, Crosses et Blanks sur une carte N&C; cependant, il a calculé des façons de réduire ce nombre (pour accélérer l'algorithme, et probablement pour réduire les boîtes d'allumettes!). Tout d'abord, il a supprimé tous les mouvements non possibles, tels que:
-------
|X|0|X|
| |0| |
|X|X| |
-------
(deux noughts et quatre croix)
Ensuite, il a compensé les rotations. Par exemple, si sur la boîte d'allumettes, nous voyons:
-------
| |0|0|
|X| |X|
| |0| |
-------
nous pouvons utiliser la même boîte pour
-------
| |X| |
|0| |0|
| |X|0|
-------
Par conséquent, les perles colorées susmentionnées représentent des positions relatives et non absolues. Par exemple, si nous disons qu'une perle rouge signifie en haut à gauche, nous regardons l'image en haut de la boîte et voyons:
-------
| |0|0|
|X| |X|
| |0| |
-------
donc nous saurions que dans le cas où c'est la planche, alors la perle rouge signifierait:
-------
|R|0|0|
|X| |X|
| |0| |
-------
Mais si c'est le conseil:
-------
| |X| |
|0| |0|
| |X|0|
-------
la perle rouge signifierait
-------
| |X|R|
|0| |0|
| |X|0|
-------
Ces transformations s'appliquaient aux rotations et inversions (dans toutes les directions, y compris en diagonale). Encore une fois, vous n'avez qu'à enregistrer chaque boîte d'allumettes une fois de cette façon: ne faites pas de boîtes virtuelles séparées pour chaque transformation!
Une autre simplification que Michie a faite a été de s'assurer que l'ordinateur démarre en premier. De cette façon, il pourrait supprimer tous les mouvements de premier niveau, supprimant environ un cinquième des cases restantes. Enfin, il a supprimé toutes les cases de fin de jeu (car aucun autre `` contenu '' ou mouvement n'était requis pour ces étapes).
Bon, maintenant sur l'algorithme lui-même (c'est très simple):
- Décidez d'abord de ce que représentent les couleurs des perles. Vous aurez besoin de 9 couleurs pour représenter chacun des espaces sur le plateau.
- Au début du jeu, chacune des 304 boîtes d'allumettes contient des perles. Bien que les perles soient de couleur aléatoire (les doublons sont donc bien), ils devraient être des mouvements possibles (donc si l'image de l'état du tableau représente un `` O '' au milieu à droite, vous ne pouvez pas utiliser la perle qui représente le milieu) droite).
- Chaque fois que c'est le tour de MENACE (X), trouvez la boîte d'allumettes avec la position actuelle du plateau (ou une transformation de celle-ci) imprimée dessus.
- Ouvrez la boîte d'allumettes et choisissez n'importe quelle perle dedans au hasard.
- Découvrez comment l'état du tableau a été transformé pour accéder à l'image sur la boîte d'allumettes (par exemple, pivoté de 90 degrés dans le sens inverse des aiguilles d'une montre). Ensuite, appliquez cette transformation à la perle (par exemple en haut à gauche devient à gauche à gauche).
- Placez un X dans ce carré. Retirez la perle sélectionnée de la boîte d'allumettes. Si la boîte reste vide, placez trois perles aléatoires (possibles) dans la boîte et choisissez-en une pour le déplacement.
- Répétez 3-6 jusqu'à la fin de la partie.
- Si MENACE a gagné le match, revenez dans chaque boîte d'allumettes prise par MENACE. Ensuite, retracez la couleur de la perle utilisée lors de ce mouvement. Mettez deux de cette couleur de perle dans la boîte (afin qu'il y ait la perle d'origine + une de plus, augmentant ainsi la probabilité que MENACE fasse ce mouvement la prochaine fois qu'elle arrivera à cette position)
- Si MENACE a perdu le jeu, ne faites rien ( ne remplacez pas les billes qu'il a enlevées).
- Si MENACE a dessiné le jeu, remplacez la perle qu'il a utilisée dans chacun de ses mouvements, mais n'en ajoutez pas un de plus, de sorte que vous vous retrouvez avec ce que vous avez commencé.
Cela nous laisse un algorithme très simple, mais difficile à mettre en œuvre. Cela constitue la base de votre défi.
Si vous êtes toujours confus, consultez http://chalkdustmagazine.com/features/menace-machine-educable-noughts-crosses-engine/ - c'est ce que j'ai lu lorsque j'ai découvert cet algorithme pour la première fois
Défi
Faites une partie de Tic-Tac-Toe avec l'ordinateur. À chaque étape, affichez le contenu de toutes les boîtes d'allumettes.
Contributions
- Au début du programme, un nombre indiquant le nombre de matchs que vous souhaitez jouer contre MENACE
- Ensuite, après le premier tour de MENACE, vous entrez votre mouvement sous la forme d'une chaîne de deux caractères, la première lettre étant "L", "R" ou "M" (gauche, droite ou milieu) se référant à l'axe Y. Ensuite, vous entrez une autre lettre (encore une fois, "L", "R" ou "M"), cette fois en référence à l'axe X. Répétez pour tous les mouvements et jeux.
Les sorties
- Au début de chaque nouveau jeu, sortez "nouveau jeu".
- Après chaque mouvement du joueur, sortez le tableau dans n'importe quel format raisonnable. Il n'a pas besoin d'être joli (par exemple, un tableau de tableaux représentant les positions de la carte est très bien).
- Après chaque mouvement du joueur, MENACE devrait faire un mouvement. Sortie de la carte après le mouvement de MENACE
- Après chaque partie, affichez le contenu des 304 boîtes d'allumettes. Les perles peuvent être représentées par une lettre, le nom d'une couleur, un caractère ou n'importe quelle chaîne ou entier que vous aimez (pas de pointeurs, fonctions anonymes, etc.).
Règles
- C'est le code-golf , donc la réponse la plus courte en octets l'emporte.
- Je dois pouvoir saisir des mouvements après avoir vu la réponse de MENACE. Non, passez tous vos mouvements dans cette fonction et regardez comment le jeu se déroule.
- Le plateau doit être vidé entre les matchs.
- Les boîtes d'allumettes ne doivent pas être effacées entre les jeux (cela réinitialiserait l'apprentissage automatique)
- Vous devez avoir 304 boîtes d'allumettes. Tout le monde peut implémenter cet algorithme avec les 19 683 boîtes d'allumettes, mais l'apprentissage est lent (car il nécessite beaucoup de jeux pour les obtenir tous avec un contenu utile).
- La sortie peut être dans n'importe quel format raisonnable et l'entrée peut être prise selon les normes PPCG (tant qu'elle est conforme à la règle 2). Si vous avez besoin d'ajuster le format d'entrée (comme décrit dans la section « Entrée »), c'est OK tant que cela a du sens.
- Une partie se termine lorsqu'un joueur gagne (en obtenant trois d'affilée en diagonale, horizontalement ou verticalement) ou en cas d'égalité (le plateau est plein et il n'y a pas de gagnant)
- Bien que MENACE doive faire des mouvements possibles (et avoir seulement des perles possibles à l'intérieur de chaque boîte d'allumettes), pour le défi, vous n'avez pas besoin de valider l'entrée de l'utilisateur. S'ils tapent quelque chose de mal, votre programme peut faire n'importe quoi (devenir complètement fou, jeter une erreur, etc.) - vous pouvez supposer que l'entrée est correcte.
la source
[[0, 2, 6], [4, 8, 4, 3, 3], [7, 7, 7, 7, 7, 7, 7, 8], [1], ... [3, 3, 5, 4]]
.Réponses:
R , 839 octets
Essayez-le en ligne!
Une réponse assez longue, mais ce n'était pas un défi simple. Le lien TIO ici échouera car il attend une entrée interactive. Voici une version qui joue contre un deuxième joueur aléatoire qui choisit simplement une place au hasard. La sortie de cette deuxième version n'est que le gagnant (1, 2 ou 0 pour un match nul.) Les boîtes d'allumettes sont initialisées pour toutes les positions du plateau, mais uniquement utilisées pour les 304 selon la spécification. Ils sont implémentés sous forme de copies du tableau avec des nombres négatifs pour indiquer le nombre de perles sur chaque position. J'ai expérimenté une liste de vecteurs selon les spécifications d'origine, mais c'était moins intuitif.
Il s'agit d'une version moins golfée avec des commentaires (mais toujours des noms de variables courts). Notez qu'il n'imprime pas les boîtes d'allumettes car elles sont très longues. Il peut implémenter un joueur interactif 2, un joueur aléatoire 2 ou la même stratégie de matchbox pour le joueur 2.
la source