OpenAI Gym多智能体游戏环境

31

是否可以使用OpenAIgym环境进行多智能体游戏?具体而言,我想对四个玩家(智能体)的一种纸牌游戏建模。得分最高的玩家开始下一轮。如何建模玩家之间必要的协作(例如下一个回合是谁的)?最终,我希望对互相对战的四个智能体使用强化学习。


我也在尝试同样的事情,希望能够使用 keras-rl 来实现。 - cserpell
回到我的问题,经过一段时间的思考,看起来 https://ray.readthedocs.io/en/latest/rllib.html 是一个相当有趣的库,可以使用 Openai gym 环境进行多智能体强化学习。 - Martin Studer
4个回答

31
是的,可以使用OpenAI gym环境进行多智能体游戏。虽然在OpenAI gym社区中没有标准化接口用于多智能体环境,但很容易构建支持此功能的OpenAI gym。例如,在OpenAI对多智能体粒子环境的最新工作中,他们创建了一个多智能体环境,该环境继承自gym.Env,其形式如下:
class MultiAgentEnv(gym.Env):

    def step(self, action_n):
        obs_n    = list()
        reward_n = list()
        done_n   = list()
        info_n   = {'n': []}
        # ...
        return obs_n, reward_n, done_n, info_n

我们可以看到,step函数接收一系列动作(每个智能体一个),并返回一系列观察、奖励和完成状态,同时推进环境。这个接口代表了马尔可夫博弈,在该博弈中,所有智能体同时采取行动,并各自观察到自己的后续观察和奖励。
然而,这种马尔可夫博弈接口可能不适用于所有多智能体环境。特别是轮流进行的游戏(如纸牌游戏)可能更适合作为交替马尔可夫博弈,智能体们轮流(即采取行动)一次。针对这种环境,您可能需要在状态的表示中包括哪个智能体正在执行操作,然后您的step函数将只采取一个动作,并返回单个观察、奖励和完成状态。

一个基于回合制的步骤函数是否适用于奖励不是“零和”的游戏?也许这更多地与代理的设计有关,而不是环境。在非零和游戏中,代理可以学会相互勾结,给彼此人为地赋予更高的分数,并通过环境泄露勾结信息。 - thinkski

4
你需要的是PettingZoo,它是一个带有多智能体设置的环境集合,并且具有处理多智能体环境的特定类/语法。
这是一个有趣的库,因为你还可以将其与ray / rllib一起使用,以使用已实现的算法,如PPO / Q-learning。就像在这个例子中一样。 Rllib也有多智能体环境的实现。但你需要深入文档才能理解它。

2

0

有一个专门为强化学习设计的多智能体环境在这里。它支持使用任何编程语言编写的任意数量的智能体。已经实现了一个示例游戏,恰好是一款卡片游戏。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接