赞
踩
-
- 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.特征工程的优化
特征选择:你目前使用的位置信息作为特征。考虑是否需要加入其他信息,比如速度、加速度、与目标的距离等,来提供更丰富的环境状态表示。
特征转换:考虑使用非线性变换来增强模型的表达能力,例如对特征进行对数变换、平方或开方等。
特征组合:尝试组合不同的特征来形成新的特征,例如,将位置和速度组合起来可能表示智能体的移动方向。
特征缩放:如果使用梯度下降算法,确保特征在一个合适的范围内,以避免数值稳定性问题。
特征归一化:将特征缩放到0到1之间或均值为0,标准差为1,以加快学习速度并提高模型性能。
特征编码:如果特征中包含类别数据,考虑使用独热编码或标签编码。
特征重要性评估:使用特征重要性分析来识别哪些特征对模型预测最为重要,这可以帮助去除冗余特征。
动态特征:考虑环境状态随时间变化的特性,可以设计一些基于时间序列的特征。
环境交互特征:考虑智能体与环境的交互,例如智能体的行为对环境的影响。
奖励塑形:你已经实现了奖励塑形,但可以进一步优化,比如根据智能体的行为或环境状态动态调整奖励权重。
- # 特征转换函数:归一化
- 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])
今日就先优化那么点。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。