#tic-tac-toe #menace #game #ai #rust

程序+库 tictacrustle

带有威胁性AI的井字棋游戏

2个版本

1.0.0-next.22024年2月28日
1.0.0-next.12024年2月26日

#179 in 机器学习

Download history 10/week @ 2024-03-09 1/week @ 2024-03-16 27/week @ 2024-03-30 9/week @ 2024-04-06

57 每月下载量

MIT/Apache

3MB
1K SLoC

Rust 662 SLoC // 0.1% comments JavaScript 408 SLoC // 0.1% comments Handlebars 72 SLoC // 0.1% comments Shell 49 SLoC // 0.4% comments TypeScript 21 SLoC // 0.8% comments

包含 (ELF 可执行文件/库, 410KB) ttrustle-x86_64-unknown-linux-musl, (Mach-o 可执行文件, 285KB) ttrustle-aarch64-apple-darwin, (ELF 可执行文件/库, 270KB) ttrustle-aarch64-unknown-linux-gnu, (ELF 可执行文件/库, 345KB) ttrustle-aarch64-unknown-linux-musl, (DOS 可执行文件, 275KB) ttrustle-i686-pc-windows-gnu, (ELF 可执行文件/库, 310KB) ttrustle-i686-unknown-linux-gnu 等等4个.

Tic-Tac-Rustle - 带有MENACE的井字棋游戏

GitHub Release (w/pre-release) GitHub Release Continuous integration Contribute with Gitpod GitHub issues REUSE Compliance

此项目开发了一个在Rust中实现的井字棋游戏,具有MENACE人工智能。它提供了一个服务器-客户端设置,用户可以与云托管的MENACE AI对战或在本地部署自己的游戏。

构建

稳定版 测试版 夜间版 MSRV (1.72.0)
Linux Ubuntu x Stable Rust Ubuntu x Beta Rust Ubuntu x Nightly Rust Ubuntu x MSRV Rust
Windows Windows x Stable Rust Windows x Beta Rust Windows x Nightly Rust Windows x MSRV Rust
macos macos x Stable Rust macos x Beta Rust macos x Nightly Rust macos x MSRV Rust

MENACE

可教育机器井字棋引擎(MENACE)是第一个机器学习系统的实现之一。Donald Michie于1961年在爱丁堡大学工作时开发了它。原始系统使用一系列标有可能游戏状态的火柴盒堆叠,以及强化学习算法,在一定数量的游戏中学习最佳策略。Michie将此系统称为火柴盒可教育井字棋引擎(MENACE)。

这是第一个使用强化学习来学习如何玩游戏并证明机器可以在没有明确编程的情况下学习如何玩游戏的系统。

经典的MENACE系统由304个火柴盒组成。每个火柴盒代表游戏的一个可能状态。每个火柴盒内最多有九颗彩色珠子,珠子的数量和颜色代表在3x3棋盘上的下一步棋。玩家先走一步,然后从与游戏状态匹配的火柴盒中随机抽取一颗珠子。这代表着MENACE选择进行的移动。这个过程会一直持续到玩家或MENACE赢得游戏。如果MENACE获胜,玩家需要将珠子放回火柴盒,并额外放入代表获胜步数的珠子。如果玩家获胜,则不需要将珠子放回火柴盒。这个过程会重复进行,直到MENACE获得最优策略。

有关MENACE的更多信息,请参阅这里

项目结构

本项目分为三个部分

  • lib_tictacrustle:这是一个库crate,包含游戏的核心理念。这个crate管理游戏逻辑、游戏状态和游戏规则。这个crate也负责MENACE系统。
  • ttrustle:这是一个二进制crate,负责实际运行游戏。这个crate负责处理玩家与GUI[^1]和TUI[^2]的交互,并在游戏进行中。
  • ttserver:这是一个二进制crate,负责托管MENACE AI。这个crate处理MENACE系统的运行,并为ttrustle二进制提供API进行交互。

MENACE实现

由于MENACE在互联网和消费型计算机之前,原始实现完全是基于火柴盒的。在将这个系统转换为现代版本时,我们遵循以下原则

  • 数据库替代了原始实现中使用的火柴盒。
  • 游戏作为客户端-服务器系统运行,客户端和服务器独立。
  • 服务器、数据库和API既可以在本地使用,也可以在云端使用。

原始的MENACE实现使用了一个手动编纂的可能游戏状态列表,将旋转对称的棋盘状态视为相同的。由于这个实现不受虚拟火柴盒数量的限制,我们构建了两种MENACE系统

  1. MENACE-C:这是经典的MENACE系统,将旋转对称的棋盘状态视为相同的。
  2. MENACE-S:这是将旋转对称的棋盘状态视为不同的MENACE系统。

路线图

本项目正处于开发初期阶段。以下列表包括我们计划在未来添加的功能

贡献

欢迎对项目的贡献。请参阅贡献指南以获取更多信息。

本项目支持Gitpod。您可以使用Gitpod在不安装任何依赖的情况下对项目进行贡献。您可以通过点击下面的按钮来启动一个包含完整开发环境的Gitpod工作区。

Open in Gitpod

许可证

本项目采用双重许可证,分别受MIT许可证Apache许可证(版本2.0)的约束。您可以选择在任何许可证下使用本项目,具体选择由您决定。其他不重要的文件受CC0许可证约束。请参阅LICENSES目录以获取更多信息。

此项目符合 REUSE 标准。您可以在此处找到有关 REUSE 的更多信息。

行为准则

本项目遵循贡献者公约行为准则。通过参与,您应遵守此准则。

致谢

如果没有 Rust 社区在推广和培训方面的努力,本项目将无法实现。

值得提及的特定个人和项目

[^1]: 图形用户界面 [^2]: 终端用户界面

依赖项

~4–6MB
~105K SLoC