Q-Learning ist ein entscheidender modellfreier Algorithmus beim verstärkenden Lernen, der sich auf das Erlernen des Werts oder „Q-Werts“ von Aktionen in einem bestimmten Zustand konzentriert. Dieser Ansatz funktioniert gut in Umgebungen mit Unvorhersehbarkeit, da kein vordefiniertes Modell der Umgebung erforderlich ist. Es passt sich effizient an zufällige Transformationen und verschiedene Belohnungen an und eignet sich daher für Szenarien mit ungewissem Ausgang. Diese Flexibilität macht Q-Learning zu einem leistungsstarken Werkzeug für Anwendungen, die eine adaptive Entscheidungsfindung ohne Vorkenntnisse der Umgebungsdynamik erfordern.
Q-Learning ist ein entscheidender modellfreier Algorithmus beim verstärkenden Lernen, der sich auf das Lernen des Werts oder „Q-Werts“ einer Aktion in einem bestimmten Zustand konzentriert. Dieser Ansatz funktioniert gut in Umgebungen mit Unvorhersehbarkeit, da kein vordefiniertes Modell der Umgebung erforderlich ist. Es passt sich effizient an zufällige Transformationen und verschiedene Belohnungen an und eignet sich daher für Szenarien mit ungewissem Ausgang. Diese Flexibilität macht Q-Learning zu einem leistungsstarken Werkzeug, wenn adaptive Entscheidungen ohne Vorkenntnisse der Umgebungsdynamik erforderlich sind.
Q-Learning funktioniert durch die Aktualisierung der Q-Wert-Tabelle für jede Aktion in jedem Zustand. Es verwendet die Bellman-Gleichung, um diese Werte basierend auf beobachteten Belohnungen und ihren Schätzungen zukünftiger Belohnungen iterativ zu aktualisieren. Aus diesen Q-Werten wird eine Policy – eine Strategie zur Auswahl von Aktionen – abgeleitet.
Der bereitgestellte Code wird als Trainingsfunktion von Q-Learner verwendet. Es nutzt die Bellman-Gleichung, um die effizientesten Übergänge zwischen Zuständen zu bestimmen.
def train_Q(self,s_prime,r): self.QTable[self.s,self.action] = (1-self.alpha)*self.QTable[self.s, self.action] + \ self.alpha * (r + self.gamma * (self.QTable[s_prime, np.argmax(self.QTable[s_prime])])) self.experiences.append((self.s, self.action, s_prime, r)) self.num_experiences = self.num_experiences + 1 self.s = s_prime self.action = action return action
Ein Schlüsselaspekt des Q-Learning ist das Ausbalancieren von Exploration (Ausprobieren neuer Aktionen, um ihre Belohnungen zu entdecken) und Ausbeutung (Nutzung bekannter Informationen, um Belohnungen zu maximieren). Algorithmen verwenden häufig Strategien wie ε-Greedy, um dieses Gleichgewicht aufrechtzuerhalten.
Beginnen Sie damit, die Rate der Zufallsoperationen festzulegen, um Erkundung und Ausbeutung in Einklang zu bringen. Implementieren Sie eine Abklingrate, um die Zufälligkeit schrittweise zu reduzieren, wenn die Q-Tabelle mehr Daten sammelt. Dieser Ansatz stellt sicher, dass der Algorithmus im Laufe der Zeit, je mehr Beweise sich ansammeln, zunehmend auf Ausbeutung umstellt.
if rand.random() >= self.random_action_rate: action = np.argmax(self.QTable[s_prime,:]) #Exploit: Select Action that leads to a State with the Best Reward else: action = rand.randint(0,self.num_actions - 1) #Explore: Randomly select an Action. # Use a decay rate to reduce the randomness (Exploration) as the Q-Table gets more evidence self.random_action_rate = self.random_action_rate * self.random_action_decay_rate
Dyna-Q ist eine innovative Erweiterung des traditionellen Q-Learning-Algorithmus und steht an der Spitze der Kombination realer Erfahrung mit simulierter Planung. Dieser Ansatz verbessert den Lernprozess erheblich, indem er tatsächliche Interaktionen und simulierte Erfahrungen integriert und es Agenten ermöglicht, sich in komplexen Umgebungen schnell anzupassen und fundierte Entscheidungen zu treffen. Durch die Nutzung des direkten Lernens aus Umweltrückmeldungen und durch Simulationen gewonnenen Erkenntnissen bietet Dyna-Q eine umfassende und effektive Strategie zur Bewältigung von Herausforderungen, bei denen reale Daten knapp oder kostspielig zu beschaffen sind.
def train_DynaQ(self,s_prime,r): self.QTable[self.s,self.action] = (1-self.alpha)*self.QTable[self.s, self.action] + \ self.alpha * (r + self.gamma * (self.QTable[s_prime, np.argmax(self.QTable[s_prime])])) self.experiences.append((self.s, self.action, s_prime, r)) self.num_experiences = self.num_experiences + 1 # Dyna-Q Planning - Start if self.dyna_planning_steps > 0: # Number of simulations to perform idx_array = np.random.randint(0, self.num_experiences, self.dyna) for exp in range(0, self.dyna): # Pick random experiences and update QTable idx = idx_array[exp] self.QTable[self.experiences[idx][0],self.experiences[idx][1]] = (1-self.alpha)*self.QTable[self.experiences[idx][0], self.experiences[idx][1]] + \ self.alpha * (self.experiences[idx][3] + self.gamma * (self.QTable[self.experiences[idx][2], np.argmax(self.QTable[self.experiences[idx][2],:])])) # Dyna-Q Planning - End if rand.random() >= self.random_action_rate: action = np.argmax(self.QTable[s_prime,:]) #Exploit: Select Action that leads to a State with the Best Reward else: action = rand.randint(0,self.num_actions - 1) #Explore: Randomly select an Action. # Use a decay rate to reduce the randomness (Exploration) as the Q-Table gets more evidence self.random_action_rate = self.random_action_rate * self.random_action_decay_rate self.s = s_prime self.action = action return action
Dyna Q 代表了一种进步,我们追求设计能够在复杂和不确定的环境中学习和适应的代理。通过理解和实施 Dyna Q,人工智能和机器学习领域的专家和爱好者可以为各种实际问题设计出有弹性的解决方案。本教程的目的不是介绍概念和算法,而是在这个引人入胜的研究领域激发创造性应用和未来进展的创造力。
Das obige ist der detaillierte Inhalt vonErweitern Sie Q-Learning mit Dyna-Q, um die Entscheidungsfindung zu verbessern. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!