基于强化学习的多智能体对抗博弈环境构建(一)

📅 2026/7/14 17:46:03
基于强化学习的多智能体对抗博弈环境构建(一)
1. 多智能体对抗博弈环境的核心要素在构建红蓝战机2v2对抗这样的多智能体强化学习环境时我们需要明确定义几个核心模块。这就像搭积木一样每个模块都需要精心设计才能让整个系统稳定运行。首先得说清楚智能体的观测空间Observation Space。在我们的战机对抗场景中每个智能体需要感知的环境信息包括相对距离敌我战机之间的直线距离方位角敌方战机相对于自身航向的角度速度矢量包括自身速度和敌方速度武器状态比如冷却时间、剩余弹药等这些观测值会被组织成一个状态向量例如observation { relative_distance: 1.2, # 公里 bearing: 45, # 度 heading: 270, # 度 closing_speed: 50, # 米/秒 weapon_status: 0.8 # 武器准备度 }2. 动作空间与战机动力学模型战机的动作空间设计直接影响智能体的操控体验。我们采用离散动作空间包含5个基本操作指令左转最大转向角2.5度右转最大转向角2.5度加速最大加速度5m/s²减速最大减速度5m/s²保持航向维持当前状态战机的运动模型需要遵循牛顿力学def update_kinematics(self, action): # 更新转向角 self.heading self.heading_change[action] # 更新加速度 self.acceleration self.acceleration_value[action] # 更新速度考虑空气阻力 self.velocity self.acceleration * self.delta_t self.velocity np.clip(self.velocity, -self.max_velocity, self.max_velocity) # 更新位置 self.x self.velocity * np.cos(np.radians(self.heading)) * self.delta_t self.y self.velocity * np.sin(np.radians(self.heading)) * self.delta_t3. 奖励函数设计艺术奖励函数是强化学习的指挥棒好的设计能让智能体快速学到有效策略。在我们的对抗场景中采用分层奖励结构核心奖励项击毁奖励100成功消灭敌机存活惩罚-10每时间步的小惩罚鼓励速战速决被击毁惩罚-100任务完成奖励1存活到回合结束进阶设计技巧def calculate_reward(self): reward self.base_penalty # 基础存活惩罚 if self.destroyed_enemy: reward self.kill_reward elif self.is_destroyed: reward self.death_penalty # 添加距离奖励鼓励接近敌机 distance_reward -0.01 * self.min_enemy_distance reward distance_reward return reward4. 武器系统与战斗判定我们将武器简化为一个30度开口、2公里半径的扇形区域简化计算但保留战术本质。命中判定需要满足两个条件敌机位于武器扇形区内持续锁定超过2秒这部分的实现代码如下def check_hit(self, enemy): # 计算距离 distance np.sqrt((self.x - enemy.x)**2 (self.y - enemy.y)**2) if distance self.weapon_range: return False # 计算方位角 angle np.degrees(np.arctan2(enemy.y - self.y, enemy.x - self.x)) angle_diff (angle - self.heading 180) % 360 - 180 # 检查是否在扇形区内 return abs(angle_diff) self.weapon_angle/25. 环境架构与模块化设计一个好的训练环境应该像乐高积木一样可以灵活组合。我们采用面向对象的设计模式class CombatEnv: def __init__(self): self.red_team [Fighter() for _ in range(2)] self.blue_team [Fighter() for _ in range(2)] def reset(self): # 随机初始化战机位置 for fighter in self.red_team self.blue_team: fighter.reset() def step(self, actions): # 处理蓝队动作 for i, action in enumerate(actions[:2]): self.blue_team[i].execute(action) # 处理红队AI行为 red_actions self.red_ai() for i, action in enumerate(red_actions): self.red_team[i].execute(action) # 更新所有战机状态 self.update_states() # 检查战斗结果 done, reward self.check_terminal() return self.get_obs(), reward, done6. 训练框架与参数配置我们采用A3C算法进行训练关键参数配置如下表参数值说明学习率0.0007使用指数衰减折扣因子0.99长期回报系数并行worker数20加速训练批量大小128每次更新样本数熵系数0.01鼓励探索网络结构采用经典的Actor-Critic架构class ActorCritic(nn.Module): def __init__(self, input_dim, hidden_dim, output_dim): super().__init__() self.fc1 nn.Linear(input_dim, hidden_dim) self.fc2 nn.Linear(hidden_dim, hidden_dim) self.actor nn.Linear(hidden_dim, output_dim) self.critic nn.Linear(hidden_dim, 1) def forward(self, x): x F.relu(self.fc1(x)) x F.relu(self.fc2(x)) return F.softmax(self.actor(x), dim-1), self.critic(x)7. 实战中的调优经验在实际训练中有几个容易踩坑的地方值得注意奖励尺度问题初期发现智能体倾向于躲避战斗因为存活奖励的尺度远大于击毁奖励。通过调整奖励比例将击毁奖励提高到存活奖励的100倍解决了这个问题。动作频率设置最初设置的决策频率太高10Hz导致战机动作过于抖动。降低到2Hz后飞行轨迹变得更平滑。观测噪声添加原始环境观测过于理想化添加高斯噪声距离±5%角度±2度后策略的鲁棒性明显提升。课程学习策略先从简单场景固定位置1v1开始训练逐步过渡到完整2v2随机位置训练效率提升约40%。8. 可视化与效果评估训练过程中我们开发了基于PyGame的可视化工具可以实时观察战机轨迹不同颜色区分队伍武器扇形区半透明灰色实时奖励曲线Q值热力图评估指标包括胜率100局平均平均回合时长击杀/死亡比策略多样性指数一个典型的训练曲线如下图所示虽然这里是文字描述前1万步随机探索阶段胜率接近50%1-5万步开始形成基础战术胜率提升至65%5-10万步学会团队配合胜率稳定在85%以上9. 扩展性与进阶方向这个基础框架可以轻松扩展更多有趣的功能异构智能体添加侦察机、轰炸机等不同机型地形障碍引入不可飞越区域和掩体武器多样化导弹、机炮等不同武器系统不完全信息添加战争迷雾机制在星际争霸等RTS游戏中验证过的技巧如分层强化学习注意力机制模仿学习 都可以尝试引入到这个相对简单的环境中。