Maison >développement back-end >Golang >Pourquoi mes valeurs Q-Learning explosent-elles ?
Valeurs Q-Learning dépassant le seuil
Dans votre implémentation de Q-Learning, vous avez rencontré un problème où les valeurs Q devenaient excessivement grandes, entraînant un débordement. Pour résoudre ce problème, examinons les concepts fondamentaux et les problèmes potentiels :
Fonction de récompense
La fonction de récompense fournie attribue une récompense positive pour chaque pas de temps, favorisant ainsi le long terme jouer plutôt que gagner. Ceci n'est pas souhaitable car l'agent doit être incité à lutter pour la victoire.
Mettre à jour l'équation
Le nœud du problème réside dans l'équation de mise à jour des valeurs Q :
agent.values[mState] = oldVal + (agent.LearningRate * (agent.prevScore + (agent.DiscountFactor * reward) - oldVal))
Ici, agent.prevScore représente la récompense de l'action d'état précédente. Cependant, dans votre implémentation, vous l'avez défini sur la valeur Q de l'étape précédente (c'est-à-dire oldVal). Cette erreur entraîne une augmentation illimitée des valeurs Q.
Solution
Après avoir corrigé cette erreur en attribuant agent.prevScore à la récompense de l'étape précédente, l'agent le comportement se normalise. Les valeurs Q mises à jour reflètent désormais la récompense totale attendue, incitant l'agent à poursuivre la victoire.
Plages de valeurs Q
Dans les problèmes typiques de Q-Learning, Q- les valeurs sont limitées par le maximum de récompenses et de pénalités possibles. Dans votre cas, la fonction de récompense limite les valeurs Q à [-1, 1], car elle attribue -1 pour une perte et 1 pour une victoire. Cependant, dans d’autres scénarios, la plage peut être plus large, voire illimitée. La récompense totale attendue est un facteur essentiel pour déterminer la plage des valeurs Q.
En résolvant ces problèmes, vous avez mis en œuvre avec succès le Q-Learning et pouvez désormais former un agent qui joue de manière plus stratégique, en donnant la priorité gagner sur un jeu prolongé.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!