多智能体强化学习(Multi-Agent Reinforcement Learning, MARL)是人工智能领域的一个重要分支,它研究多个智能体如何在复杂环境中通过交互学习来优化自身策略。本文将聚焦于协作与竞争环境下的策略协调,介绍几种关键算法及其原理。
在协作环境中,多个智能体的目标是共同最大化全局回报。这要求智能体之间必须进行有效的策略协调,以避免冲突和冗余动作。
Q-learning 是一种经典的强化学习算法,它通过学习状态-动作对的值函数来指导智能体的行为。在多智能体场景中,每个智能体可以独立使用 Q-learning,但这种方法存在两个问题:一是环境动态变化,因为其他智能体的策略也在学习;二是智能体之间可能形成竞争关系,导致全局非最优解。
为了解决这些问题,研究者提出了集中训练-分散执行(Centralized Training with Decentralized Execution, CTDE)框架。在训练阶段,所有智能体的信息被集中起来用于策略更新,以确保全局一致性;在执行阶段,智能体仅使用自己的局部信息进行决策。
class MultiAgentQLearning:
def __init__(self, num_agents, num_states, num_actions, alpha, gamma):
self.q_tables = [{} for _ in range(num_agents)]
self.alpha = alpha # 学习率
self.gamma = gamma # 折扣因子
def choose_action(self, state, agent_id):
if state not in self.q_tables[agent_id]:
self.q_tables[agent_id][state] = np.zeros(num_actions)
return np.argmax(self.q_tables[agent_id][state])
def update_q_value(self, state, action, reward, next_state, agent_id):
best_next_action = np.argmax(self.q_tables[agent_id].get(next_state, np.zeros(num_actions)))
td_target = reward + self.gamma * self.q_tables[agent_id].get(next_state, {}).get(best_next_action, 0)
self.q_tables[agent_id][state][action] = (1 - self.alpha) * self.q_tables[agent_id][state][action] + self.alpha * td_target
在竞争环境中,智能体的目标是最大化自己的回报,这往往会导致智能体之间的冲突。因此,智能体需要学会如何在竞争中寻求合作机会,以实现个体与全局利益的平衡。
MADDPG 是一种基于深度确定性策略梯度(DDPG)的多智能体算法。它使用两个神经网络:一个演员(Actor)网络用于生成动作,一个评论家(Critic)网络用于评估动作的价值。每个智能体都有自己的演员和评论家网络,同时评论家网络还可以接收其他智能体的策略信息,从而考虑其他智能体的行为。
MADDPG 的核心在于集中式评论家(centralized critic),它允许评论家利用全局信息进行策略评估,而演员仍然只使用局部信息进行决策。这种方法有效解决了多智能体环境中的非平稳性问题。
class MADDPGAgent:
def __init__(self, state_dim, action_dim, other_action_dim):
self.actor = Actor(state_dim, action_dim)
self.critic = Critic(state_dim + other_action_dim, 1) # 假设只有一个智能体的动作被考虑
self.optimizer_actor = torch.optim.Adam(self.actor.parameters())
self.optimizer_critic = torch.optim.Adam(self.critic.parameters())
def select_action(self, state):
return self.actor(state).detach().numpy()
def update_parameters(self, state, action, reward, next_state, other_action):
target_action = self.target_actor(next_state).detach()
q_target = self.target_critic(torch.cat((next_state, other_action), dim=-1)).detach()
q_value = self.critic(torch.cat((state, action), dim=-1))
loss = (q_target - q_value).pow(2).mean()
self.optimizer_critic.zero_grad()
loss.backward()
self.optimizer_critic.step()
# 更新演员网络
actor_loss = -self.critic(torch.cat((state, self.actor(state)), dim=-1)).mean()
self.optimizer_actor.zero_grad()
actor_loss.backward()
self.optimizer_actor.step()
多智能体强化学习算法在协作与竞争环境下的策略协调是一个复杂而有趣的问题。通过集中训练-分散执行框架和集中式评论家机制,可以有效解决多智能体环境中的非平稳性和策略协调难题。未来,随着算法的不断优化和硬件能力的提升,多智能体强化学习将在更多领域展现出其巨大的应用潜力。