1 个版本 (0 个不稳定版本)
1.0.0-alpha.7 | 2023 年 1 月 20 日 |
---|
#2081 in 游戏开发
13KB
井字棋 - MENACE 版本
这是一个玩具项目,旨在创建一个可以由任何两位玩家玩的游戏。最终目的是创建一个游戏,既可以由人类玩,也可以由计算机玩。计算机将使用 MENACE 算法来学习如何玩游戏。
构建
平台 | Rust 版本 | 状态 |
---|---|---|
Linux | 稳定 测试版 夜间版 MSRV (1.64.0) |
|
Windows | 稳定 测试版 夜间版 MSRV (1.64.0) |
|
macOS | 稳定 测试版 夜间版 MSRV (1.64.0) |
|
MENACE
机器可教育的井字棋引擎 (MENACE) 是第一个机器学习系统的实现之一。它在 1961 年由 Donald Michie 开发。原始系统是在一段时间内使用一叠火柴盒开发的,被称为火柴盒可教育井字棋引擎 (MENACE)。
这是第一个使用强化学习来学习玩游戏并证明机器可以学习玩游戏而不需要明确编程的系统。
经典 MENACE 系统由 304 个火柴盒组成。每个火柴盒代表游戏的一个可能状态。每个火柴盒里面有一系列珠子,珠子的数量和颜色代表下一步要做的移动。系统会玩一局井字棋,并记录整个游戏过程中的移动。之后,根据游戏的结果(赢、输、平局),系统会通过向火柴盒中添加或移除珠子来“奖励”或“惩罚”自己。然后系统会再玩一局,并重复这个过程。
有关 MENACE 的更多信息,请参阅 这里。
项目结构
此项目使用 Cargo 的 workspace 功能将项目组织成多个包。以下是每个包的简要描述:
tttm
:这是一个二进制包,负责实际运行游戏。这个包计划托管与 GUI 或 TUI 的玩家交互,随着进展。lib_ttt
:这是一个库包,包含游戏的核心逻辑。这个包负责游戏逻辑、游戏状态和游戏规则。lib_player
:这是一个库包,有两个用途。首先,它为可以 插入 游戏的不同类型的玩家提供了一个通用接口。其次,它为人类玩家提供了一个基本实现。lib_menace_c
:这是一个库包,实现了MENACE-C系统。该系统的实现基于lib_player
中定义的接口。lib_menace_s
:这是一个库包,实现了MENACE-S系统。该系统的实现基于lib_player
中定义的接口。
MENACE实现
由于MENACE最初设计时不需要计算机,因此我们需要对基于Matchbox的系统进行调整以适应基于计算机的系统。在我们的实现中,我们将遵循以下原则:
- 火柴盒将由一个二维的
u8
值数组来表示。每个值将表示火柴盒中的珠子数量。 - 我们将使用HashMap来存储游戏状态。键将是棋盘状态的字符串表示,值将是二维数组中火柴盒的索引。
此外,原始的MENACE实现使用了一个人工编制的可能游戏状态的列表,将这些旋转对称的棋盘状态视为等价。由于我们不受虚拟火柴盒数量的限制,我们将以两种口味实现MENACE系统:
- MENACE-C:这将是一个经典的MENACE系统,将旋转对称的棋盘状态视为等价。
- MENACE-S:这将是一个MENACE系统,将旋转对称的棋盘状态视为不同。
路线图
该项目目前处于早期开发阶段。以下是将要实现的功能列表:
- 实现基本游戏逻辑.
- 实现人类玩家.
- 实现MENACE-C系统.
- 实现MENACE-S系统.
- 实现命令行界面.
- 添加一个TUI。(很可能是使用tui-rs)。
- 添加一个GUI。(实现细节待定)。
贡献
欢迎对项目的贡献。有关更多信息,请参阅贡献指南。
此项目已启用Gitpod。您可以使用Gitpod对项目进行贡献,而无需在本地机器上安装任何依赖项。只需单击下面的按钮即可启动Gitpod工作区。
许可
此项目在MIT许可证和Apache许可证(版本2.0)下双许可。
行为准则
本项目遵循贡献者守则。通过参与,您应遵守此守则。
致谢
如果没有Rust社区在推广和培训方面的努力,这个项目是不可能完成的。
我特别提到以下人员和项目:
- Chris Krycho和New Rustacean播客。
- Bogdan Pshonyak和Let's Get Rusty YouTube频道。
- Tris Oaten (NAMTAO)和他的No Boilerplate YouTube频道。
- 我亲爱的家人,感谢他们的支持和鼓励。