首頁  >  文章  >  科技週邊  >  使用Dyna-Q擴展Q-Learning以增強決策能力

使用Dyna-Q擴展Q-Learning以增強決策能力

尊渡假赌尊渡假赌尊渡假赌
尊渡假赌尊渡假赌尊渡假赌轉載
2024-01-02 11:02:212259瀏覽

Q-Learning是強化學習中至關重要的無模型演算法,專注於學習特定狀態下動作的價值或「Q 值」。這種方法在具有不可預測性的環境中表現出色,因為它不需要周圍環境的預定義模型。它有效地適應隨機轉換和各種獎勵,使其適用於結果不確定的場景。這種靈活性使 Q-Learning 成為需要自適應決策的強大工具,而無需事先了解環境動態。

使用Dyna-Q擴展Q-Learning以增強決策能力

使用Dyna-Q 擴充Q-Learning 以增強決策能力

探索Dyna-Q,這是一種先進的強化學習演算法,透過將真實體驗與模擬規劃相結合來擴展Q-Learning。

Q-Learning 是強化學習中一種至關重要的無模型演算法,專注於學習特定狀態下動作的價值或「Q 值」。這種方法在具有不可預測性的環境中表現出色,因為它不需要周圍環境的預定義模型。它有效地適應隨機轉換和各種獎勵,使其適用於結果不確定的場景。這種靈活性使 Q-Learning 成為需要自適應決策的強大工具,而無需事先了解環境動態。

學習過程

Q-learning 的工作原理是更新每個狀態下每個動作的 Q 值表。它使用貝爾曼方程,根據觀察到的獎勵及其對未來獎勵的估計,迭代更新這些值。策略 - 選擇行動的策略 - 是從這些Q值中得出的。

  • Q值- 表示在給定狀態下採取特定動作可以獲得的預期未來獎勵
  • 更新規則- Q 值更新如下:
      ##Q (狀態,動作) ← Q (狀態,動作)  α (獎勵  最大γ Q (下一個狀態,a) − Q (狀態, 動作))
    • 學習率α表示新資訊的重要性,折扣係數γ表示未來獎勵的重要性。
提供的程式碼用作 Q-Learner 的訓練功能。它利用貝爾曼方程式來確定狀態之間最有效的轉換。

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 	
勘探與開發

Q-learning的一個關鍵方面是平衡探索(嘗試新的行動來發現他們的獎勵)和利用(使用已知資訊來最大化獎勵)。演算法通常使用ε貪婪等策略來維持這種平衡。

首先設定隨機操作的速率,以平衡探索和開發。實現衰減率,以隨著 Q 表累積更多資料而逐漸降低隨機性。這種方法保證了隨著時間的推移,隨著更多證據的積累,演算法越來越多地轉向利用。

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簡介

Dyna-Q 是傳統 Q-Learning 演算法的創新擴展,處於將真實體驗與模擬規劃相結合的最前沿。這種方法透過整合實際互動和模擬體驗,顯著增強了學習過程,使智能體能夠在複雜的環境中快速適應並做出明智的決策。透過利用從環境回饋中直接學習和透過模擬獲得的見解,Dyna-Q提供了一種全面而有效的策略,以應對真實世界資料稀缺或獲取成本高昂的挑戰。

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 	

结论

Dyna Q 代表了一种进步,我们追求设计能够在复杂和不确定的环境中学习和适应的代理。通过理解和实施 Dyna Q,人工智能和机器学习领域的专家和爱好者可以为各种实际问题设计出有弹性的解决方案。本教程的目的不是介绍概念和算法,而是在这个引人入胜的研究领域激发创造性应用和未来进展的创造力。

以上是使用Dyna-Q擴展Q-Learning以增強決策能力的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:dzone.com。如有侵權,請聯絡admin@php.cn刪除