跳转到主要内容

使用PettingZoo的Gobblet棋盘游戏的交互式多智能体强化学习环境。

项目描述

gobblet-rl

pages-build-deployment pre-commit.ci status Code style: black PyPI version

使用PettingZoo和Pygame的Gobblet棋盘游戏的交互式多智能体强化学习环境。

允许用户在相同的环境中玩耍,甚至可以与使用Tianshou训练的RL智能体进行对战。

Gobblet棋盘游戏         使用Pygame渲染的Gobblet-rl游戏

安装

使用pip(推荐)

pip install gobblet-rl

本地

git clone hhttps://github.com/elliottower/gobblet-rl.git
cd gobblet-rl
pip install -e .

用法

设置基本环境

在Python shell中,运行以下命令

from gobblet_rl import gobblet_v1

env = gobblet_v1.env()

与贪婪智能体对战

在终端中,运行以下命令

python gobblet/example_tianshou_greedy.py --cpu-players 1

这将启动一场与贪婪智能体的游戏,这是一个非常强大的基线。该智能体考虑所有可能的移动,深度为2,如果可能则获胜,阻止对手获胜,甚至迫使对手做出失败的操作。

注意:此策略利用领域知识从观察(完美信息)中重建内部游戏板,并直接使用 board.py 中的函数。Tianshou 策略无法直接访问环境,只有观察和动作掩码。因此,贪婪代理不应与其他 RL 代理直接比较。

与使用 Tianshou 训练的 DQN 代理进行游戏

在终端中,运行以下命令

python gobblet/example_tianshou_DQN.py --epoch 50 --player 1 --cpu-players 2

这将使用 Tianshou 的 DQN 模型进行 50 个 epoch 的训练,并启动与预训练代理的交互式游戏。

使用参数 --cpu-player 来确定 CPU 代理的数量(1 或 2),并使用 --player 来选择哪个代理先行动(人类先动:0,CPU 先动:1)

使用参数 --self-play 来使用自我博弈训练代理。

进行交互式游戏

在终端中,运行以下命令

python gobblet/examples/example_user_input.py"

注意:可以使用参数 --num-cpu 1 在其他脚本中启用交互式游戏

要选择棋子大小,请按数字键 123,或按 space 键在棋子之间循环。放置棋子时,请在棋盘上点击一个方块。将出现一个预览,显示所选棋子大小的合法走法。点击已放置的棋子将拾取它,并提示您将其放置在新的位置(在同一位置重新放置是非法的)。

创建游戏的屏幕录制

在终端中,运行以下命令

python gobblet/examples/example_record_game.py"

这将把游戏的屏幕录制保存到 gobblet/examples/game.gif

观看两个基本 CPU 代理之间的比赛

在终端中,运行以下命令

python gobblet/examples/example_basic.py"

这将启动一个游戏,其中两个基本代理选择随机动作。此文件可以用作原型设计未来方法的起点。

命令行参数

游戏模式

example_basic.py 之外的所有脚本都接受以下参数

默认游戏模式是人与 CPU 对战,人类扮演红色,CPU 扮演黄色。

--player 1 将人类玩家设置为黄色,CPU 以红色开始移动。

--cpu-players 1 将启动一个包含一个 CPU 代理和一个人类代理的游戏。(默认值)

--cpu-players 0 将启动一个没有 CPU 代理的游戏,为两个代理获取交互式输入。

--cpu-player 2 将启动一个包含两个 CPU 代理的游戏,不进行交互式输入。

显示模式

example_basic.py 使用以下参数来更改显示模式

--render_mode="human" 将使用 pygame 可视化游戏板。玩家 1 扮演红色并先行动,玩家 2 扮演黄色。

Example using render_mode='human'

在交互式游戏时,可以通过将鼠标悬停在每个方框上来预览可能的走法。要移动已放置的棋子,只需点击它即可。

--render_mode="text" 将仅显示 3x3 棋盘,只显示最上面的棋子(被其他棋子覆盖或“吞没”的棋子是隐藏的)

TURN: 2, AGENT: player_1, ACTION: 51, POSITION: 6, PIECE: 3
       |       |       
  -    |   -   |   -3  
_______|_______|_______
       |       |       
  -    |   -   |   +2  
_______|_______|_______
       |       |       
  -    |   -   |   -   
       |       |       

--render_mode="text_full" 将渲染三个不同的 3x3 棋盘,分别代表小、中、大型棋子。这提供了有关被其他棋子覆盖或“吞没”的棋子的全部信息。

TURN: 3, AGENT: player_0, ACTION: 42, POSITION: 6, PIECE: 5
         SMALL                     MED                     LARGE           
       |       |                |       |                |       |       
  -    |   -   |   -       -    |   -   |   -       -    |   -   |   +5  
_______|_______|_______  _______|_______|_______  _______|_______|_______
       |       |                |       |                |       |       
  -    |   -   |   -2      -    |   -   |   -       -    |   -   |   -   
_______|_______|_______  _______|_______|_______  _______|_______|_______
       |       |                |       |                |       |       
  -    |   -   |   -       -    |   -   |   -       -    |   -   |   -6  
       |       |                |       |                |       |       

测试

测试可以通过 pytest 完成

git clone https://github.com/elliottower/gobblet-rl.git
cd gobblet-rl
pytest

项目详情


下载文件

下载适用于您的平台的文件。如果您不确定要选择哪个,请了解有关 安装包 的更多信息。

源代码分发

gobblet_rl-1.3.5.tar.gz (44.4 kB 查看哈希值)

上传于 源代码

构建分发

gobblet_rl-1.3.5-py3-none-any.whl (59.9 kB 查看哈希值)

上传于 Python 3

由以下支持