跳到主要内容
ByteArena 使用文档

从编写、测试到竞技,快速上手 ByteArena。

了解如何创建智能体、理解判题限制、调试对局并提升排名。

平台概览

ByteArena 是一个面向回合制棋类智能体的编程竞技平台。你提交源码后,判题系统会在隔离环境中运行它,并记录结果、资源使用、日志、回放和排名。

1. 选择

选择游戏,阅读规则和 API。

2. 编写

实现并提交你的决策逻辑。

3. 优化

分析回放,挑战更多对手。

快速开始

  1. 打开“全部游戏”并选择一个竞技场。
  2. 阅读游戏规则、输入状态、合法着法格式和示例。
  3. 选择支持的语言,实现必需的决策函数。
  4. 提交源码,等待编译和校验。
  5. 发起对局,然后查看状态、日志和回放。

重要提示

程序必须严格输出当前游戏要求的着法格式。stdout 中的额外文本可能导致原本正确的着法被判为无效。

对局如何运行

每个回合中,runner 会使用当前游戏状态启动你的智能体,等待一次决策,验证输出,执行着法,然后推进游戏。除非游戏 API 明确保证,否则不要假设内存中的变量会跨回合保留。

  1. 读取当前回合的棋盘和元数据。
  2. 在配置的限制内计算一个合法动作。
  3. 仅将规定的决策写入 stdout。
  4. 可选的调试信息请写入 stderr。

时间与内存限制

限制适用于一次决策步骤,而不是整场对局。具体数值显示在各游戏页面上,并会在创建判题任务时固定。

限制适用范围超限结果
时间(ms)单个回合超出时间限制(TLE),通常判负
内存(KB)单个回合超出内存限制(MLE),通常判负
输出单个回合输出可能被截断或拒绝

排行榜中的“平均用时”和“平均内存”使用相同单位:毫秒和千字节。

调试

从回放开始

  1. 打开已完成的对局,选择“回放”。
  2. 逐步查看,找到棋盘第一次与预期不符的位置。
  3. 检查日志中的运行错误、无效着法、TLE 或 MLE 信息。

将调试输出写入 stderr

判题系统从 stdout 解析着法。调试输出应写入 stderr,以免破坏着法格式。

import sys
print("board=", board, file=sys.stderr)

C/C++: fprintf(stderr, ...) / std::cerr   Java: System.err.println(...)

排行榜与排名

排名指标使用你与每位对手的最新一组非锦标赛双回合对局。每组通常包含一局 A 方和一局 B 方,用于降低先手偏差。

计入统计的对局

  • 与每位对手的最新有效非锦标赛对局组会被计入。
  • 锦标赛对局不影响普通排行榜。
  • 即使更新的对局组取代旧数据用于排名计算,历史对局仍会保留。

指标与排序

胜率会综合你实际作为两方时的胜率。排名相同时,依次比较更高胜率、更低平均用时和更低平均内存。如果最近完成的对局尚未出现,请点击“刷新”。

游戏得分

每场完成的对局都会保存双方得分。得分含义取决于游戏;排行榜得分是聚合排名指标,不是所有游戏通用的原始分。

游戏得分含义
TicTacToe胜者 1 分,负者 0 分;和局为 0-0。
Trap Gomoku最长连续棋子数;5 表示达成胜利连线。
XGame终局棋盘上完整 X 图案的数量。
Tessella基于吃子的得分;分数越高表示消灭的对方棋子越多。
入门教程

井字棋:构建一个不败的智能体

A 方使用 X 并先行,B 方使用 O。目标是连成三子。可以先实现随机合法着法,再逐步加入更强的规则。

  1. 如果当前可以立即获胜,执行该着法。
  2. 否则,阻止对手下一步立即获胜。
  3. 创造双重威胁,或阻止对手的双重威胁。
  4. 优先选择中心,然后是对角、空角,最后是边格。

如需完美对弈,可以在较小的游戏树上实现 minimax:胜局给正分,负局给负分,和局为零。

def choose_move(board, legal_moves):
    move = find_winning_move(board, legal_moves, me)
    if move is not None:
        return move
    move = find_winning_move(board, legal_moves, opponent)
    if move is not None:
        return move
    return best_positional_move(board, legal_moves)

常见问题

为什么智能体会在回合之间“忘记”数据?

每次决策可能在新进程中运行。请从提供的棋盘和元数据重建状态,不要依赖全局变量。

“未输出决策”和“无效着法”是什么意思?

你的程序可能没有输出所需决策、输出格式错误、选择了已占用或越界的位置,或将调试文本混入了 stdout。

为什么排行榜上没有我?

你需要在该游戏中至少完成一场可计入的非锦标赛对局。如果对局刚结束,请稍等片刻后点击“刷新”。