Erweitern Sie Q-Learning mit Dyna-Q, um die Entscheidungsfindung zu verbessern

尊渡假赌尊渡假赌尊渡假赌
Freigeben: 2024-01-02 11:02:21
nach vorne
2332 Leute haben es durchsucht

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.

Erweitern Sie Q-Learning mit Dyna-Q, um die Entscheidungsfindung zu verbessern

Erweitern Sie Q-Learning, um die Entscheidungsfindung mit Dyna-Q zu verbessern.

Entdecken Sie Dyna-Q, einen fortschrittlichen Reinforcement-Learning-Algorithmus, der Q erweitert, indem er reale Erfahrungen mit simuliertem Planungs-Lernen kombiniert.

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.

Lernprozess

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.

  • Q-Wert – Stellt die erwartete zukünftige Belohnung dar, die durch Ergreifen einer bestimmten Aktion in einem bestimmten Zustand erhalten werden kann.
  • Aktualisierungsregel – Der Q-Wert wird wie folgt aktualisiert:
    • Q (Zustand, Aktion) ← Q (Zustand, Aktion) + α ( Belohnung + Maximum γ Q (nächster Zustand, a) − Q (Zustand, Aktion))
    • Die Lernrate α repräsentiert die Wichtigkeit neuer Informationen und der Rabattkoeffizient γ repräsentiert die Wichtigkeit zukünftiger Belohnungen.

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 	
Nach dem Login kopieren

Exploration vs. Ausbeutung

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
Nach dem Login kopieren

Einführung in Dyna-Q

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.

Dyna-Q的组件

  1. Q-Learning:从真实经验中学习
  2. 模型学习:学习环境模型
  3. 规划:使用模型生成模拟体验

模型学习

  • 该模型跟踪转换和奖励。对于每个状态-动作对 (s, a),模型存储下一个状态 s′ 和奖励 r。
  • 当智能体观察到转换 (s, a,r,s′) 时,它会更新模型。

使用模拟体验进行规划

  • 在每个步骤中,代理从真实体验更新其 Q 值后,还会根据模拟体验更新 Q 值。
  • 这些体验是使用学习模型生成的:对于选定的状态-动作对(s,a),它预测下一个状态和奖励,并且Q值被更新,就好像已经经历了这种转变一样。

算法 Dyna-Q

  1. 初始化所有状态-动作对的 Q 值 Q(s, a) 和模型 (s, a)。
  2. 循环(每集):
    • 初始化状态 s。
    • 循环(针对剧集的每个步骤):
      • 使用派生自 Q 从状态 s 中选择操作 a(例如,ε-greedy )
      • 采取行动 a,观察奖励 r,然后下一个状态 s′
      • 直接学习:使用观察到的跃迁(s、a、r、s′)更新 Q 值
      • 模型学习:使用转换(s、a、r、s′)更新模型
      • 计划:重复 n 次:
        • 随机选择以前经历过的状态-动作对 (s, a)。
        • 使用模型生成预测的下一个状态 s′ 并奖励 r
        • 使用模拟跃迁 (s, a,r,s′) 更新 Q 值
        • s← s′。
  3. 结束循环 此功能将 Dyna-Q 计划阶段合并到前面提到的 Q-Learner 中,从而能够指定在每一集中运行的所需模拟量,其中操作是随机选择的。此功能增强了 Q-Learn 的整体功能和多功能性。
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 	
Nach dem Login kopieren

结论

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!

Verwandte Etiketten:
Quelle:dzone.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage