首页 > 编程语言 >优化蒙特卡洛算法笔记1

优化蒙特卡洛算法笔记1

时间:2024-08-04 22:28:29浏览次数:17  
标签:特征 treasure feature 笔记 奖励 算法 蒙特卡洛 reward obs


from kaiwu_agent.utils.common_func import create_cls, attached


SampleData = create_cls("SampleData", state=None, action=None, reward=None)


ObsData = create_cls("ObsData", feature=None)


ActData = create_cls("ActData", act=None)


@attached
def observation_process(raw_obs):
    # 默认仅使用位置信息作为特征, 如进行额外特征处理, 则需要对算法的Policy结构, predict, exploit, learn进行相应的改动
    # pos = int(raw_obs[0])
    # treasure_status = [int(item) for item in raw_obs[-10:]]
    # state = 1024 * pos + sum([treasure_status[i] * (2**i) for i in range(10)])
    # return ObsData(feature=int(state))

    return ObsData(feature=int(raw_obs[0]))


@attached
def action_process(act_data):
    return act_data.act


@attached
def sample_process(list_game_data):
    return [SampleData(**i.__dict__) for i in list_game_data]


def reward_shaping(frame_no, score, terminated, truncated, obs):
    reward = 0

    # Using the environment's score as the reward
    # 奖励1. 使用环境的得分作为奖励
    reward += score

    # Penalty for the number of steps
    # 奖励2. 步数惩罚
    if not terminated:
        reward += -1

    # The reward for being close to the finish line
    # 奖励3. 靠近终点的奖励:

    # The reward for being close to the treasure chest (considering only the nearest one)
    # 奖励4. 靠近宝箱的奖励(只考虑最近的那个宝箱)

    return reward

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

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

1.补充reward回报


def reward_shaping(frame_no, score, terminated, truncated, obs, config=REWARDS_CONFIG):
    reward = 0

    # 使用环境的得分作为奖励
    reward += score * config['score_weight']

    # 步数惩罚
    if not terminated:
        reward += config['step_penalty_weight']

    # 靠近终点的奖励,假设终点的位置是100
    distance_to_finish = 100 - obs[0] if obs[0] < 100 else 0
    reward += distance_to_finish * config['close_to_finish_bonus']

    # 靠近宝箱的奖励,假设宝箱位置存储在obs的最后几个元素中
    treasure_positions = obs[-10:]  # 假设最后10个元素是宝箱位置
    if treasure_positions:  # 确保有宝箱位置数据
        closest_treasure_distance = min(treasure_positions, key=lambda pos: abs(pos - obs[0]))
        reward += (1 / abs(obs[0] - closest_treasure_distance)) * config['close_to_treasure_bonus']

    return reward

2.特征工程的优化

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

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

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

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

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

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

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

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

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

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

# 特征转换函数:归一化
def normalize_feature(feature):
    return (feature - np.min(feature)) / (np.max(feature) - np.min(feature))

# 特征组合示例:位置和速度的组合
def combine_features(position, velocity):
    return np.array([position, velocity])

今日就先优化那么点。

标签:特征,treasure,feature,笔记,奖励,算法,蒙特卡洛,reward,obs
From: https://blog.csdn.net/yyyy2711/article/details/140892880

相关文章

  • 学习笔记第十七天
    1.Shell基本语法    1.注释:以#符号开始,直到行末,用于解释代码或暂时禁用某行代码。    2.命令:如echo、ls等,用于执行系统命令或调用外部程序。    3.控制结构:包括if语句、for循环、while循环等,用于控制脚本的流程。2.创建和执行脚本    1.......
  • KMP算法
     ......
  • KMP算法
    写在前面喜报:听了四遍都没学懂的KMP算法,终于在gyy大佬的耐心讲解下搞懂了,大佬orz!!!正文kmp算法本质上就是对模式串(要匹配的子串两个串中短的那个)中很多重复的前缀和后缀索引起来,使得在一个地方失配了也不要紧,不用重新来的算法(看不懂不要紧)下面我们就来详细介绍一下kmp的几个......
  • 《802.11无线网络权威指南-无线网络导论》-- 读书笔记1
    专业术语发射塔:celltower,指信号发射塔基站,接入点:accesspoint无线数据网络:wirelessdatanetwork基站:basestationauthorization:授权,认证serviceprovider:服务供应商hotspot:热点WAN:广域网络infraredlight:红外线频带:frequencyband带宽:bandwidth,即可供使用的频率......
  • KMP学习笔记
    KMP一种字符串单模匹配算法。原理当模式串\(s\)与文本串\(t\)进行匹配时,容易想到的一种朴素做法就是将模式串的第一位与文本串的每一位进行试配。但是这样效率过低,容易被数据卡成\(O(n^2)\)。KMP单模匹配算法引入了一个失配数组border。定义一个字符串的border为一......
  • QT 笔记
     HTTPSSSL配置下载配置子父对象QTimer*timer=newQTimer;//QTimerinheritsQObjecttimer->inherits("QTimer");//returnstruetimer->inherits("QObject");//returnstruetimer->inherits("QAbstractBut......
  • 【学习笔记】哈希
    【学习笔记】哈希Hash的核心思想在于,将输入映射到一个值域较小、可以方便比较的范围。主要用来判重!如何辨别哈希题?大概就通过一句话:当需要用\(O(1)\)的时间快速比较两个\(O(n)\)的东西时。应该对大部分题目都生效。字符串哈希感觉这一块OI_wiki讲得比较清楚。通常我......
  • 【秋招笔试】2024-08-03-科大讯飞秋招笔试题(算法岗)-三语言题解(CPP/Python/Java)
    ......
  • UE5学习笔记3-关于charactor的相机和弹簧臂组件
    一、环境说明,UE5.4+ vs2022 +win11二、相机和弹簧臂的作用    个人理解上,相机的作用相当于一个视角,我将其理解成是一个人在哪个地方朝向哪个方向看,弹簧臂的用用我将其理解成为一个将人的视角和人物模型或其他模型连接的桥梁三、相机和弹簧臂的代码    ......
  • 学习笔记486—Macbook 咖啡厅麦当劳热点无法认证/连不上的解决方法
    Macbook咖啡厅麦当劳热点无法认证/连不上的解决方法笔者用的设备是MacBookpro14寸,m1pro版本。macos版本为13.2。之前一直碰到在星巴克/麦当劳/tims连不上店铺热点,只能连自己手机或者ipad热点的尴尬情况,翻遍了国内外相关论坛和网站,死活找不到解决方案。今天终于在一个售后维......