HER(Hindsight Experience Replay) 伪代码理解

HER 是一种用于目标条件强化学习的算法,它通过重用失败的经验来解决稀疏奖励问题。

HER 算法的核心思想是,即使在没有达到原始目标的情况下,也可以从失败的经历中学习到如何实现其他可能的目标。通过将当前经历与不同目标关联起来,算法可以更有效地利用回放缓冲区中的数据,从而提高学习效率。

伪代码:

  • 初始化一个离策略强化学习算法(如 DQN、DDPG、NAF、SDQN)和一个采样目标的策略。
  • 初始化一个回放缓冲区 R。
  • 对于每个 episode:
    • 采样一个目标 g 和一个初始状态 s0。
    • 对于每个时间步 t:
      • 根据当前的目标 g 采样一个动作 at。
      • 执行动作 at 并观察新的状态 st+1。
    • 对于每个时间步 t:
      • 使用当前的目标 g 更新奖励 rt。
      • 将转换 (st||g, at, rt, st+1||g) 存储在回放缓冲区 R 中。
    • 采样一组额外的目标 G 用于回放。
    • 对于 G 中的每个目标 g':
      • 使用 g' 更新奖励 rt。
      • 将转换 (st||g', at, rt, st+1||g') 存储在回放缓冲区 R 中。
      • (g 是当前经验中使用的原始目标,而 g' 是采样自环境的替代目标)
    • 对于 N 次迭代:
      • 从回放缓冲区 R 中采样一个批次 B。
      • 使用算法 A 和批次 B 进行一步优化。

 示例代码:

import gym
import numpy as np
from stable_baselines3 import DDPG
from stable_baselines3.common.vec_env import DummyVecEnv

class HER:
    def __init__(self, env, algorithm, n_sampled_goals=4, goal_sampler=None):
        # 初始化环境和算法
        self.env = env
        self.algorithm = algorithm
        self.n_sampled_goals = n_sampled_goals
        self.goal_sampler = goal_sampler or self.env.sample_goals
        
    def train(self, n_episodes, callback=None):
        # 使用HER对代理进行训练,指定的episode数量
        for i_episode in range(n_episodes):
            observation, _ = self.env.reset()
            done = False
            total_reward = 0
            
            while not done:
                # 根据当前观测值预测一个动作
                action = self.algorithm.predict(observation)
                
                # 在环境中执行该动作
                next_observation, reward, done, _ = self.env.step(action)
                total_reward += reward
                
                # 应用Hindsight Experience Replay
                # 采样新的目标用于回放
                goals = self.goal_sampler(i_episode)
                
                # 对于采样的每个目标,使用当前经验创建一个新的过渡
                # 即将原始奖励替换为基于新目标的奖励
                for goal in goals:
                    # 将过渡存储在算法的回放缓冲区中
                    self.algorithm.remember((observation, action, reward, next_observation, goal))
                
                observation = next_observation
            
            if callback:
                callback(i_episode, total_reward)
        
        # 使用回放缓冲区中的经验对算法进行训练
        self.algorithm.learn()

def main():
    env_id = "FetchReach-v1"
    n_episodes = 1000
    
    # 初始化环境
    env = DummyVecEnv([lambda: gym.make(env_id)])
    
    # 初始化算法
    algorithm = DDPG("MlpPolicy", env)
    
    # 初始化HER
    her = HER(env, algorithm, n_sampled_goals=4)
    
    # 使用HER训练代理
    her.train(n_episodes)

if __name__ == "__main__":
    main()

### 多目标点路径规划算法及其实现 多目标点路径规划涉及在复杂的环境中找到一条满足多种约束条件的最佳路径。常见的方法包括启发式搜索算法(如A*)、强化学习以及混合优化技术。 #### 改进的A*算法 一种广泛使用的路径规划算法是A*,它结合了Dijkstra和贪婪最佳优先搜索的特点[^1]。祁玄玄等人提出的改进版A*算法针对无人车场景进行了调整,在传统A*的基础上引入动态障碍物处理机制和伪目标的概念,从而提高了实时性和适应性。该算法的核心在于重新定义代价函数 \( f(n) = g(n) + h(n) \),其中 \( g(n) \) 表示从起点到节点n的实际成本,而\( h(n) \) 是估计剩余距离的成本。 对于多目标点的情况,可以采用分阶段的方式依次逼近各个子目标,或者构建全局图模型一次性求解最优序列。具体而言: ```python def multi_objective_a_star(start, goals, heuristic_func): open_set = PriorityQueue() open_set.put((heuristic_func(start), start)) came_from = {} cost_so_far = {start: 0} while not open_set.empty(): current_cost, current_node = open_set.get() if current_node in goals: # 当到达某个目标时记录路径并移除已访问的目标 reconstruct_path(came_from, current_node) goals.remove(current_node) if not goals: break for neighbor in get_neighbors(current_node): new_cost = cost_so_far[current_node] + move_cost(current_node, neighbor) if neighbor not in cost_so_far or new_cost < cost_so_far[neighbor]: cost_so_far[neighbor] = new_cost priority = new_cost + heuristic_func(neighbor) open_set.put((priority, neighbor)) came_from[neighbor] = current_node return reconstruct_final_path(came_from, goals[-1]) ``` 上述代码片段展示了如何扩展标准A*以支持多个目标点。注意这里假设`goals`是一个列表形式表示所有待访问的位置集合。 #### 强化学习中的Hindsight Experience Replay (HER) 另一种解决策略来源于深度强化学习领域内的 HER 方法 [^2] 。Andrychowicz 提出了利用事后经验回放的思想来增强稀疏奖励环境下的探索效率。不同于传统的 Q-learning 或者 Policy Gradient 技术仅依赖原始轨迹反馈信号,HER 将未成功完成的任务实例转换成其他可能成功的案例来进行训练。这种方法特别适合那些具有长期信用分配难题的应用场合,比如机器人抓取物体或多智能体协作导航等问题。 然而需要注意的是,尽管 HER 能够显著提升样本利用率,但它仍然存在一些局限性,例如当目标空间较大时可能导致泛化性能下降;另外由于其本质仍属于试错型框架因此收敛速度较慢且难以保证绝对安全性。 #### 遗传算法应用于路径寻优 除了以上提到的传统与现代手段之外,还有研究尝试借助进化类元启发法——即遗传算法(Genetic Algorithms ,GA)—去攻克此类挑战[Cui et al., 2010][^3]。这类方法模仿自然界生物种群演化规律操作个体编码串并通过交叉变异等算子不断生成新代直至达到预期效果为止。相比单纯依靠数学解析表达式的经典方式来说具备更强鲁棒特性尤其面对非凸连续变量情形表现优异。 以下是简单版本 GA 实现概览: ```matlab function bestPath = geneticAlgorithmForMultiObjectivePathPlanning(popSize,maxGen,distanceMatrix) population = initializePopulation(popSize,length(distanceMatrix)); for gen=1:maxGen fitnessValues = calculateFitness(population,distanceMatrix); % Select parents using roulette wheel selection. parentIndices = selectParents(fitnessValues,popSize/2); parents = population(parentIndices,:); offspring = []; for i=1:size(parents)/2 childPair = crossover(parents(i,:),parents(i+size(parents)/2,:)); mutatedChildren = mutate(childPair); offspring=[offspring;mutatedChildren]; end combinedPop = [population;offspring]; sortedCombinedPop = sort(combinedPop,'descend'); population = sortedCombinedPop(1:popSize,:); end bestPath = findBestIndividual(population,distanceMatrix); end ``` 此脚本提供了基本流程说明,实际部署需考虑更多细节因素诸如参数调校、终止准则设定等等。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值