国际象棋开放健身环境

gym-chess的Python项目详细描述


国际象棋:国际象棋的OpenAI健身房环境

目录

  1. Introduction
  2. Installation
  3. Chess-v0
  4. ChessAlphaZero-v0
  5. Acknowledgements

简介

国际象棋为 国际象棋比赛。它附带了一个board和move的实现 在AlphaZero中使用的编码, 但是,您可以自由地通过包装器定义自己的编码。在

让我们看一个随机的代理与自己对抗:

>>>importgym>>>importgym_chess>>>importrandom>>>env=gym.make('Chess-v0')>>>print(env.render())>>>env.reset()>>>done=False>>>whilenotdone:>>>action=random.sample(env.legal_moves)>>>env.step(action)>>>print(env.render(mode='unicode'))>>>env.close()

安装

健身象棋需要Python3.6或更高版本。在

要安装gym chess,请运行:

^{pr2}$

导入gym chess将自动注册Chess-v0ChessAlphaZero-v0有健身房的环境:

>>>importgym>>>importgym_chess>>>gym.envs.registry.all()dict_values([...EnvSpec(Chess-v0),EnvSpec(ChessAlphaZero-v0)])

国际象棋-v0

体操象棋定义了一个基本的Chess-v0环境,它代表 作为chess.Boardchess.Move类型对象的观察和行为, 分别。这些课程来自 python-chess包,它实现 游戏逻辑。在

>>>env=gym.make('Chess-v0')>>>state=env.reset()>>>type(state)chess.Board>>>print(env.render(mode='unicode'))>>>move=chess.Move.from_uci('e2e4')>>>env.step(move)>>>print(env.render(mode='unicode'))

当前位置的合法移动列表通过legal_moves公开 财产:

>>> env.reset()
>>> env.legal_moves
[Move.from_uci('g1h3'),
 Move.from_uci('g1f3'),
 Move.from_uci('b1c3'),
 Move.from_uci('b1a3'),
 Move.from_uci('h2h3'),
 Move.from_uci('g2g3'),
 Move.from_uci('f2f3'),
 Move.from_uci('e2e3'),
 Move.from_uci('d2d3'),
 Move.from_uci('c2c3'),
 Move.from_uci('b2b3'),
 Move.from_uci('a2a3'),
 Move.from_uci('h2h4'),
 Move.from_uci('g2g4'),
 Move.from_uci('f2f4'),
 Move.from_uci('e2e4'),
 Move.from_uci('d2d4'),
 Move.from_uci('c2c4'),
 Move.from_uci('b2b4'),
 Move.from_uci('a2a4')]

使用普通Python对象(而不是NumPy数组)作为代理接口 可以说是非正统的。这种方法的一个直接后果是 Chess-v0没有定义良好的observation_space和{};因此 这些成员变量被设置为None。然而,这种设计允许我们 将游戏的implementation与它的representation分开,这将留待 包装类。在

代理通过移动来为两个玩家,黑白的玩家打球 依次为任意一种颜色。当一个玩家获胜时(即经纪人 做出一个使对手玩家陷入对决的动作),或游戏结果 在平局中(例如,达到僵局、材料不足或 或更多其他绘图条件 FIDE Rules of Chess)。 请注意,目前经纪人没有让球员辞职或 自愿平局。在

当白人玩家做出一个获胜的动作时,代理人将获得+1的奖励, 当黑人球员做出一个获胜的动作时,奖励-1。所有其他奖励 都是零。在

切萨尔法泽罗-v0

提出了一种用棋盘和棋盘编码的实现方法 通过AlphaZero(见Silver et al., 2017)。在

>>>env=gym.make('ChessAlphaZero-v0')>>>env.observation_spaceBox(8,8,119)>>>env.action_spaceDiscrete(4672)

有关这些编码如何工作的详细描述,请考虑阅读 论文或参考相应类的docstring。在

除了legal_moves,ChessAlphaZero-v0还公开了所有 法律行动(即编码的法律行动):

>>>env.legal_actions[494,501,129,136,1095,1022,949,876,803,730,657,584,1096,1023,950,877,804,731,658,585]

可以用encodedecode将移动转换为动作和副作用 有助于调试和试验的方法:

>>> move = chess.Move.from_uci('e2e4')
>>> env.encode(move)
877
>>> env.encode(move) in env.legal_actions
True

>>> env.decode(877)
Move.from_uci('e2e4')

在内部,编码是通过包装类实现的 (gym_chess.alphazero.BoardEncoding和{}, 可以独立使用。这给了你 灵活地定义您自己的电路板和移动表示,并且 在它们之间切换。在

>>>importgym_chess>>>fromgym_chess.alphazeroimportBoardEncoding>>>env=gym.make('Chess-v0')>>>env=BoardEncoding(env,history_length=4)>>>env=MyEsotericMoveEncoding(env)

致谢

感谢@niklasf提供的 python-chess包。在

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java收回EhCache中的所有元素   java创建带有箭头的组合框,以在其中增加值   在Java中使用JsonPath解析JSON中的数组   java如何在应用程序类不可见的模块中获取上下文?   exoplayer中的java Recyclerview不起作用   java MS Access无法打开更多表   从xmlschema到java的unicode拉丁脚本子集的正则表达式   在spring sts模型中,java时间戳格式必须为yyyymmdd hh:mm:ss   java将XPath转换为Jsoup的CssSelector   java Solr运算符类似于SQL中的类反向运算符   java使第三方类不可变   java跳过自定义卡片堆栈视图的动画   java如何修复“使用Spring AOP,我想更改返回值,但返回类不是我的返回方法”   java使用正则表达式解析字符串   java泛型与遗留代码的兼容性为什么foreach在运行时失败,而迭代器工作正常   hibernate如何使用java持久性重试锁定等待超时?