Skip to content

Ynkcc/4x4

Repository files navigation

暗棋强化学习训练框架

一个基于强化学习的4x4暗棋训练项目,包含Elo自我对弈训练、持续学习、人机对战和可视化分析等完整功能。

项目结构

gym/
├── main.py                     # Elo自我对弈训练主入口
├── continuous_training.py      # 持续训练脚本
├── human_vs_ai.py             # 人机对战GUI界面
├── export_plots.py            # 训练数据可视化导出
├── README.md                   # 项目说明文档
├── game/                       # 游戏核心模块
│   ├── __init__.py
│   ├── environment.py          # 暗棋游戏环境(Gymnasium兼容)
│   └── policy.py               # 自定义CNN策略网络
├── training/                   # 训练相关模块
│   ├── __init__.py
│   ├── evaluator.py            # 模型评估器
│   ├── simple_agent.py         # 简单规则代理
│   └── trainer.py              # Elo自我对弈训练器
├── utils/                      # 工具模块
│   ├── __init__.py
│   ├── constants.py            # 全局配置和常量
│   ├── model_compatibility.py  # 模型兼容性处理
│   └── scheduler.py            # 学习率调度器
├── models/                     # 模型存储目录
│   ├── train_simple.zip        # 基础训练模型
│   ├── train_simple_v2.zip     # 改进版基础模型
│   ├── continuous_train/       # 持续训练模型
│   │   ├── current_model.zip   # 当前训练模型
│   │   ├── backup_model.zip    # 备份模型
│   │   └── best_model_session_*.zip  # 各阶段最佳模型
│   └── self_play_final/        # Elo自我对弈最终模型
│       ├── main_opponent.zip   # 主要对手模型
│       └── challenger.zip      # 挑战者模型
├── tensorboard_logs/           # TensorBoard日志
│   └── self_play_final/        # 训练监控日志
└── training_plots/            # 训练图表
    ├── rollout_ep_*.png        # 回合统计图表
    ├── train_*.png             # 训练损失图表
    └── time_fps.png            # 性能监控图表

游戏规则

游戏概述

4x4暗棋是一种在4×4棋盘上进行的中国象棋变体游戏。游戏开始时,所有棋子背面朝上随机分布在棋盘上,双方轮流进行翻棋和移动棋子。

棋子类型与价值

游戏包含7种不同的棋子,每种棋子都有特定的价值和数量:

棋子类型 价值 数量(每方) 英文名
4分 2个 SOLDIER
10分 1个 CANNON
10分 1个 HORSE
10分 1个 CHARIOT
10分 1个 ELEPHANT
20分 1个 ADVISOR
30分 1个 GENERAL

胜利条件:率先获得60分的玩家获胜。

基本操作

1. 翻棋

  • 玩家可以翻开任意一个未翻开的棋子
  • 翻棋后该棋子变为明棋,归属确定
  • 翻棋消耗回合

2. 移动

  • 只有已翻开的己方棋子可以移动
  • 普通棋子只能向上下左右四个方向移动一格
  • 未翻开的棋子无法移动

吃子规则

等级制度

棋子遵循严格的等级制度,高等级棋子可以吃掉低等级和同等级的棋子:

等级顺序(从低到高)

兵 < 炮 < 马 < 车 < 象 < 士 < 将

基本吃子规则

  • 高等级棋子可以吃掉所有低等级和同等级的敌方棋子
  • 低等级棋子无法吃掉高等级棋子
  • 例如:车可以吃兵、炮、马、车,但不能吃象、士、将

特殊规则

  1. 兵克将:兵可以吃掉敌方的将(唯一例外)
  2. 将怕兵:将不能吃掉敌方的兵
  3. 暗棋不可吃:除炮以外,所有棋子都不能吃掉未翻开的棋子

炮的特殊机制

炮是游戏中最特殊的棋子,具有独特的攻击方式:

炮的攻击规则

  • 不能普通移动:炮不能移动到相邻的空格
  • 隔子攻击:炮只能通过"隔一个棋子攻击"的方式改变位置
  • 攻击条件:炮与目标之间必须恰好有一个棋子作为"炮架"
  • 攻击方向:只能在水平或垂直方向进行隔子攻击

炮的攻击目标

炮可以攻击:

  • 所有敌方棋子(包括已翻开和未翻开的)
  • 未翻开的己方棋子
  • 不能攻击:已翻开的己方棋子

炮架规则

  • 炮架可以是任意棋子(己方、敌方、明棋、暗棋均可)
  • 炮架不会被消耗或影响
  • 攻击路径上只能有一个炮架

游戏结束条件

胜利条件

  1. 积分胜利:率先获得60分的玩家获胜
  2. 无棋可走:对手无任何合法动作时,当前玩家获胜

平局条件

  1. 回合限制:连续24个回合没有吃子发生
  2. 步数限制:游戏总步数达到100步

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages