从编写、测试到竞技,快速上手 ByteArena。
了解如何创建智能体、理解判题限制、调试对局并提升排名。
平台概览
ByteArena 是一个面向回合制棋类智能体的编程竞技平台。你提交源码后,判题系统会在隔离环境中运行它,并记录结果、资源使用、日志、回放和排名。
1. 选择
选择游戏,阅读规则和 API。
2. 编写
实现并提交你的决策逻辑。
3. 优化
分析回放,挑战更多对手。
快速开始
- 打开“全部游戏”并选择一个竞技场。
- 阅读游戏规则、输入状态、合法着法格式和示例。
- 选择支持的语言,实现必需的决策函数。
- 提交源码,等待编译和校验。
- 发起对局,然后查看状态、日志和回放。
重要提示
程序必须严格输出当前游戏要求的着法格式。stdout 中的额外文本可能导致原本正确的着法被判为无效。
对局如何运行
每个回合中,runner 会使用当前游戏状态启动你的智能体,等待一次决策,验证输出,执行着法,然后推进游戏。除非游戏 API 明确保证,否则不要假设内存中的变量会跨回合保留。
- 读取当前回合的棋盘和元数据。
- 在配置的限制内计算一个合法动作。
- 仅将规定的决策写入 stdout。
- 可选的调试信息请写入 stderr。
时间与内存限制
限制适用于一次决策步骤,而不是整场对局。具体数值显示在各游戏页面上,并会在创建判题任务时固定。
| 限制 | 适用范围 | 超限结果 |
|---|---|---|
| 时间(ms) | 单个回合 | 超出时间限制(TLE),通常判负 |
| 内存(KB) | 单个回合 | 超出内存限制(MLE),通常判负 |
| 输出 | 单个回合 | 输出可能被截断或拒绝 |
排行榜中的“平均用时”和“平均内存”使用相同单位:毫秒和千字节。
调试
从回放开始
- 打开已完成的对局,选择“回放”。
- 逐步查看,找到棋盘第一次与预期不符的位置。
- 检查日志中的运行错误、无效着法、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。目标是连成三子。可以先实现随机合法着法,再逐步加入更强的规则。
- 如果当前可以立即获胜,执行该着法。
- 否则,阻止对手下一步立即获胜。
- 创造双重威胁,或阻止对手的双重威胁。
- 优先选择中心,然后是对角、空角,最后是边格。
如需完美对弈,可以在较小的游戏树上实现 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。
为什么排行榜上没有我?
你需要在该游戏中至少完成一场可计入的非锦标赛对局。如果对局刚结束,请稍等片刻后点击“刷新”。