优化蒙特卡洛算法笔记1


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])

今日就先优化那么点。

  • 5
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值