Keyboard shortcuts

Press ← or → to navigate between chapters

Press ? to show this help

Press Esc to hide this help

模型回答什么

Ants 的动作是一个 JSON 数组,观测的 mine 列表中每只蚂蚁对应一个字符串。它由裁判生成:裁判读取你计算图的策略头来得到它,所以本页是你的输出张量必须满足的契约。

字符串移动
N行 −1
E列 +1
S行 +1
W列 −1
-原地不动

每一步移动在地图边界处环绕。契约中没有斜向移动、目的地、蚂蚁标识符或动作对象。

每只蚂蚁一条指令

对于 mine: [[12, 30], [13, 30]],动作 ["N", "E"] 让第一只蚂蚁走向 [11, 30],第二只走向 [13, 31]。动作为 mine 中的每只蚂蚁各含一条指令,按 mine 的顺序排列;没有蚂蚁时就是 []。

两种策略头形状

你的清单声明一个输出,形状为下面两种之一。两者都带五个通道,顺序为 N, E, S, W, -,裁判取 argmax。

声明的形状含义
[1, 5, "H", "W"]逐格策略。地图上每个格子的每种移动各有一个分数。裁判按 mine 顺序在你每只蚂蚁所在的格子上收集五个通道,再对每只取 argmax。全卷积网络无需额外工作就能产出这种形状
[N, 5]每只蚂蚁一行,已按 mine 顺序排列。裁判对每一行取 argmax。N 是一个命名维度,绑定到你的蚂蚁数量,所以同一份清单每个回合都适用

从那一步起,裁判对两者的解码方式相同,所以选适合你架构的那种即可;规则对两者一视同仁。逐格策略头需要一次收集操作,开销由平台承担。逐蚁策略头在大地图上更便宜,但索引工作得由你的计算图自己完成,这会限制你能命名的轴(原因)。

让训练标签、输出通道和这张表保持同一顺序。通道顺序若错位一格,你的模型就会把学到的走法旋转后执行,得分很低,而且不会有任何报错。

非法与缺失的指令

被命令走进水域的蚂蚁会留在原地。引擎也把无法识别的方向字符串当作原地不动,并忽略多余的位置指令。这两种情况你的模型都不可能引起:裁判只会生成那五个字符串,这些兜底是为了防范卡带的变更。

审核检查的是合法性。它确认每个适配器都产出清单声明的 dtype 和形状的张量,计算图能运行,并且在每份参考观测上策略头都能解码为合法动作。它不评判动作好不好。每回合都回答 ["-", "-", …] 的模型是一个合法但从不移动的参赛模型,未经训练的计算图就是这样。在测试时检查一下你自己动作的分布。

回合时钟

标准回合时限是 1,000 ms,适配器和推理共用,而且只属于你:每个席位是各自独立的调用,各有自己的时限,所以对手再慢也耗不掉你的时间。一次失败或超时的调用会记一次判罚,该席位的蚂蚁这一回合都不移动。累计五次判罚,席位就判负;失败之间的成功调用不会重置计数。

像 ["-", "-"] 这样有意让全体原地不动的数组是正常回答,裁判把它与没有返回动作的调用区别对待。Ants 的契约中没有认输动作;见计分与判负。

移动只是意图

动作被接受并不保证蚂蚁能存活或到达有用的位置。对手同时移动,友方蚂蚁可能碰撞,战斗在摧毁蚁丘之前结算。评判你的模型要看回合规则产生的结果,而不只是方向字符串是否合法。

这场对局里的每条指令都合法,地图却仍然发生了指令没有说的事。第 1 回合命令蚂蚁向东走上蚁丘旁的食物:食物会拒绝移动,所以蚂蚁留在蚁丘上,并就地收集了那份食物。第 2 回合那只蚂蚁向南走了一格,一只谁也没有下令的新蚂蚁出现在它离开的蚁丘上。现在按一下右方向键。第 3 回合给两只蚂蚁同样的指令:向东。蚁丘上的蚂蚁走上食物消失后空出的格子;它下方的蚂蚁被水域拒绝,留在原地。一条指令,两种结果,而引擎收到的是每只蚂蚁一条指令,这正是你的模型要回答的。