Après vous être entraîné, essayez d'utiliser PyTorch pour apprendre automatiquement votre propre balayeur de mines. Il y a tellement de choses que je ne comprends pas, alors je prends des notes en étudiant diverses choses. Créez un mémo une fois et, si nécessaire, formatez-le plus tard.
Pour pouvoir effacer de manière stable le niveau débutant de la norme Windows (était) Démineur. Pour l'instant, visez un taux de réussite d'environ 90%.
J'ai copié le DQN de ici. Ce n'est pas assez, donc c'est facile.
Le réseau utilise un modèle séquentiel.
Le nombre de neurones dans la couche d'entrée (état $ s SIZE_MAG
.
Je me demande si je devrais mettre à l'échelle le nombre d'yeux sur le tableau pour le moment (approprié)
ReLU est utilisé comme fonction d'activation, et Adam (taux d'apprentissage 0,001) est utilisé comme méthode d'optimisation.
Le balayeur de mines est mon propre travail. J'ai pensé que je ferais de mon mieux en capturant les images, mais le sujet principal n'est pas là. L'algorithme est omis.
Les récompenses sont les suivantes.
variable | conditions |
---|---|
reward_win |
Jeu clair |
reward_failed |
Échec du jeu |
reward_miss |
Essayer d'ouvrir un carré déjà ouvert |
Tout d'abord, essayez de régler la taille du plateau sur 6x6 et le nombre de mines sur 5 pour voir si vous pouvez apprendre.
param
GAMMA = 0.99
NUM_EPISODES = 1000
CAPACITY = 10000
BATCH_SIZE = 200
SIZE_MAG = 8
reward_failed = -100
reward_win = 100
reward_miss = -1
Je peux gagner très rarement, mais j'ai l'impression de gagner par hasard. En regardant l'erreur, elle a été époustouflée à environ 4 chiffres en environ 2000 étapes. Ouais ... Même si vous regardez la simple somme des récompenses, vous essayez d'ouvrir uniquement les cases qui sont déjà ouvertes, et est-ce un problème avec les récompenses?
Alors fixez la récompense.
reward
reward_failed = -100
reward_win = 100
reward_miss = -10
reward_open = 1
award_open
est une récompense donnée quand une nouvelle case est ouverte.
L'erreur était plus calme qu'avant, mais elle a tremblé vers 10 heures.
J'ai joué avec, mais la vibration et la divergence ne se sont pas arrêtées. Même si vous regardez le comportement, il essaie toujours d'ouvrir le carré déjà ouvert. Le Q-Network cible fixe sera introduit ...
J'ai envisagé les possibilités suivantes.
Même si vous sélectionnez une cellule qui est déjà ouverte en tant qu'essai, si le jeu est terminé, l'erreur elle-même deviendra inférieure à 1. Lorsque la valeur de ε a été réduite (valeur initiale 0,5 → 0,2), l'erreur est devenue encore plus petite. (Environ 0,1-0,01) Cependant, comme le problème de la création d'un mini-lot n'a pas été résolu, nous allons implémenter la rediffusion d'expérience prioritaire. Le code est tel qu'il est
Même si j'essaye, ça ne marche pas. Eh bien, j'aurais aimé avoir une erreur de codage ( Même la cible Q-Network était toujours la valeur par défaut ...
Donc, en raison de sa réparation, cela n'a pas fonctionné. La récompense est-elle trop grande?
reward
reward_failed = -1
reward_win = 1
reward_miss = -1
reward_open = 1
Après tout, c'était inutile bébé ...
J'ai appris à chaque fois sur différentes planches, Est-il possible d'apprendre pour une seule planche ...? → J'ai pu le faire. Environ 200 à 300 épisodes avant que le taux de victoire n'atteigne 90%. Il est mignon que le taux de gain soit de 90% dès que vous pourrez l'effacer une fois.
Alors pourquoi ne pas le changer une fois en 150 épisodes? → Je ne peux pas du tout gagner. Il semble qu'il soit entraîné par les données d'apprentissage passées.
Eh bien, revenons en arrière pour changer la planche à chaque fois!
Recommended Posts