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

tictactoe_menace_player

带有Menace AI的Tic Tac Toe游戏

1个版本 (0个不稳定版本)

1.0.0-alpha.72023年1月20日

#2215 in 游戏开发

MIT/Apache

43KB
282

Tic Tac Toe - MENACE版本

GitHub release (latest by date including pre-releases) GitHub tag (latest SemVer) Continuous integration Contribute with Gitpod

GitHub issues GitHub code size in bytes GitHub (Pre-)Release Date GitHub commits since latest release (by SemVer including pre-releases) GitHub contributors

这是一个玩具项目,旨在创建一个任何两位玩家都可以玩的游戏。这里的最终目的是创建一个游戏,使其既可以由人类和计算机玩。计算机将使用MENACE算法来学习如何玩游戏。

构建

平台 Rust版本 状态
Linux 稳定版
beta版
nightly版
MSRV (1.64.0)
Ubuntu x Stable Rust
Ubuntu x Beta Rust
Ubuntu x Nightly Rust
Ubuntu x MSRV Rust
Windows 稳定版
beta版
nightly版
MSRV (1.64.0)
macos x Stable Rust
macos x Beta Rust
macos x Nightly Rust
macos x MSRV Rust
macOS 稳定版
beta版
nightly版
MSRV (1.64.0)
Windows x Stable Rust
Windows x Beta Rust
Windows x Nightly Rust
Windows x MSRV Rust

MENACE

机器可教育的井字棋引擎(MENACE)是第一个机器学习系统的实现之一。它在1961年由Donald Michie开发。原始系统是在一段时间内使用一叠火柴盒开发的,被称为火柴盒可教育井字棋引擎(MENACE)。

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

经典MENACE系统由304个火柴盒组成。每个火柴盒代表游戏的一种可能状态。每个火柴盒内部有一定数量的珠子,珠子的数量和颜色代表下一步要做的动作。系统会玩一局井字棋并记录游戏过程中的所有动作。之后,根据游戏的结果(赢、输、平局),系统会通过向火柴盒中添加或移除珠子来“奖励”或“惩罚”。然后系统会再玩一局并重复这个过程。

有关MENACE的更多信息,请参阅此处

项目结构

此项目使用Cargo的工作区功能将项目组织成多个crate。以下是每个crate的简要描述

  • tttm:这是一个二进制crate,负责实际运行游戏。随着项目的发展,此crate计划托管与GUI或TUI的玩家交互。
  • lib_ttt:这是一个库crate,包含游戏的核心逻辑。此crate负责游戏逻辑、游戏状态和游戏规则。
  • lib_player:这是一个库crate,具有两个用途。首先,它为可以插入到游戏中的不同类型的玩家提供了一个通用接口。其次,它为人类玩家提供了一个基本实现。
  • lib_menace_c:这是一个库crate,实现了MENACE-C系统。该系统的实现基于lib_player中定义的接口。
  • lib_menace_s:这是一个库crate,实现了MENACE-S系统。该系统的实现基于lib_player中定义的接口。

MENACE实现

由于MENACE最初的设计不需要计算机,我们在将其基于Matchbox的系统适配到基于计算机的系统时必须做出某些调整。我们的实现将遵循以下原则:

  • 抽屉盒将由一个二维的u8值数组表示。每个值将代表抽屉盒中的珠子数量。
  • 我们将使用HashMap来存储游戏状态。键将是棋盘状态的字符串表示,值将是二维数组中抽屉盒的索引。

此外,原始MENACE实现使用了一个手动整理的可能游戏状态列表,将旋转对称的棋盘状态视为等效。由于我们不受虚拟抽屉盒数量的限制,我们将以两种风味实现MENACE系统:

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

路线图

该项目目前处于开发的早期阶段。以下是在未来将要实现的功能列表:

贡献

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

此项目支持Gitpod。您可以使用Gitpod在不安装任何本地依赖项的情况下为项目做出贡献。只需单击下面的按钮即可启动Gitpod工作区。

Open in Gitpod

许可

此项目受MIT许可Apache许可证(版本2.0)的双重许可。

行为准则

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

致谢

本项目离不开Rust社区的推广和培训工作。

我特别提到以下人员和项目:

  • Chris Krycho和New Rustacean播客。
  • Bogdan Pshonyak和Let's Get Rusty YouTube频道。
  • Tris Oaten(NAMTAO)和他的No Boilerplate YouTube频道。
  • 我的爱人和家人,感谢他们的支持和鼓励。

依赖项