国际象棋开放健身环境
gym-chess的Python项目详细描述
国际象棋:国际象棋的OpenAI健身房环境
目录
简介
国际象棋为 国际象棋比赛。它附带了一个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-v0
和
ChessAlphaZero-v0
有健身房的环境:
>>>importgym>>>importgym_chess>>>gym.envs.registry.all()dict_values([...EnvSpec(Chess-v0),EnvSpec(ChessAlphaZero-v0)])
国际象棋-v0
体操象棋定义了一个基本的Chess-v0
环境,它代表
作为chess.Board
和chess.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]
可以用encode
和decode
将移动转换为动作和副作用
有助于调试和试验的方法:
>>> 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包。在
- 项目
标签: