当前位置:   article > 正文

优化蒙特卡洛算法笔记1

优化蒙特卡洛算法笔记1

  1. from kaiwu_agent.utils.common_func import create_cls, attached
  2. SampleData = create_cls("SampleData", state=None, action=None, reward=None)
  3. ObsData = create_cls("ObsData", feature=None)
  4. ActData = create_cls("ActData", act=None)
  5. @attached
  6. def observation_process(raw_obs):
  7. # 默认仅使用位置信息作为特征, 如进行额外特征处理, 则需要对算法的Policy结构, predict, exploit, learn进行相应的改动
  8. # pos = int(raw_obs[0])
  9. # treasure_status = [int(item) for item in raw_obs[-10:]]
  10. # state = 1024 * pos + sum([treasure_status[i] * (2**i) for i in range(10)])
  11. # return ObsData(feature=int(state))
  12. return ObsData(feature=int(raw_obs[0]))
  13. @attached
  14. def action_process(act_data):
  15. return act_data.act
  16. @attached
  17. def sample_process(list_game_data):
  18. return [SampleData(**i.__dict__) for i in list_game_data]
  19. def reward_shaping(frame_no, score, terminated, truncated, obs):
  20. reward = 0
  21. # Using the environment's score as the reward
  22. # 奖励1. 使用环境的得分作为奖励
  23. reward += score
  24. # Penalty for the number of steps
  25. # 奖励2. 步数惩罚
  26. if not terminated:
  27. reward += -1
  28. # The reward for being close to the finish line
  29. # 奖励3. 靠近终点的奖励:
  30. # The reward for being close to the treasure chest (considering only the nearest one)
  31. # 奖励4. 靠近宝箱的奖励(只考虑最近的那个宝箱)
  32. return reward

这是一段我在实现特征处理和样本处理的代码,接下来将完善和优化它

优化算法可以从几个方面入手:特征工程,设计回报,模型架构(卷积神经网络),选择优化器,算法剪枝等等。

1.补充reward回报

  1. def reward_shaping(frame_no, score, terminated, truncated, obs, config=REWARDS_CONFIG):
  2. reward = 0
  3. # 使用环境的得分作为奖励
  4. reward += score * config['score_weight']
  5. # 步数惩罚
  6. if not terminated:
  7. reward += config['step_penalty_weight']
  8. # 靠近终点的奖励,假设终点的位置是100
  9. distance_to_finish = 100 - obs[0] if obs[0] < 100 else 0
  10. reward += distance_to_finish * config['close_to_finish_bonus']
  11. # 靠近宝箱的奖励,假设宝箱位置存储在obs的最后几个元素中
  12. treasure_positions = obs[-10:] # 假设最后10个元素是宝箱位置
  13. if treasure_positions: # 确保有宝箱位置数据
  14. closest_treasure_distance = min(treasure_positions, key=lambda pos: abs(pos - obs[0]))
  15. reward += (1 / abs(obs[0] - closest_treasure_distance)) * config['close_to_treasure_bonus']
  16. return reward

2.特征工程的优化

  1. 特征选择:你目前使用的位置信息作为特征。考虑是否需要加入其他信息,比如速度、加速度、与目标的距离等,来提供更丰富的环境状态表示。

  2. 特征转换:考虑使用非线性变换来增强模型的表达能力,例如对特征进行对数变换、平方或开方等。

  3. 特征组合:尝试组合不同的特征来形成新的特征,例如,将位置和速度组合起来可能表示智能体的移动方向。

  4. 特征缩放:如果使用梯度下降算法,确保特征在一个合适的范围内,以避免数值稳定性问题。

  5. 特征归一化:将特征缩放到0到1之间或均值为0,标准差为1,以加快学习速度并提高模型性能。

  6. 特征编码:如果特征中包含类别数据,考虑使用独热编码或标签编码。

  7. 特征重要性评估:使用特征重要性分析来识别哪些特征对模型预测最为重要,这可以帮助去除冗余特征。

  8. 动态特征:考虑环境状态随时间变化的特性,可以设计一些基于时间序列的特征。

  9. 环境交互特征:考虑智能体与环境的交互,例如智能体的行为对环境的影响。

  10. 奖励塑形:你已经实现了奖励塑形,但可以进一步优化,比如根据智能体的行为或环境状态动态调整奖励权重。

  1. # 特征转换函数:归一化
  2. def normalize_feature(feature):
  3. return (feature - np.min(feature)) / (np.max(feature) - np.min(feature))
  4. # 特征组合示例:位置和速度的组合
  5. def combine_features(position, velocity):
  6. return np.array([position, velocity])

今日就先优化那么点。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/代码探险家/article/detail/928116
推荐阅读
相关标签
  

闽ICP备14008679号