LLM 对战游戏:用代码控制单位战斗

LLM 在 1v1 游戏中对战(循环赛)
游戏规则很简单:9 个单位对战 9 个单位,棋盘上有障碍物和治疗舱。
■ P1 单位 □ P2 单位 ○ 障碍物 + 治疗舱
大语言模型通过 ASCII 表示的游戏状态迭代改进代码。
玩家编写 JavaScript 代码来控制单位并访问游戏信息。单位只能执行 move() 和 pew() 两个动作。
所有复杂性都源于需要推理移动位置和射击目标。
function dist(a, b) {
return Math.hypot(a[0] - b[0], a[1] - b[1]);
}
function closest_enemy(cat) {
let best = null;
let best_dist = Infinity;
for (let id of cat.sight.enemies) {
let d = dist(cat.position, cats[id].position);
if (d < best_dist) {
best_dist = d;
best = cats[id];
}
}
return best;
}
for (let cat of my_cats) {
let enemy = closest_enemy(cat)
cat.move(enemy.position)
cat.pew(enemy)
}
基础玩家代码示例
id
string
position
array
energy_capacity
number
energy
number
hp
number
sight
object
…
…
单位属性
测试方法
每个模型与参考机器人(Clowder Bot)进行 10 次迭代——编写代码、玩游戏,然后查看回放(ASCII 棋盘快照 + 自身日志),再尝试改进。最终生成的机器人在 10 场循环赛中对战,每场比赛之间同样执行编写 → 游玩 → 查看的循环。
结果
Gemini 3.1 Pro 表现突出,轻松击败所有其他大语言模型——在 50 场比赛中仅输 4 场。Claude Sonnet 4.6 意外地在所有测试的对战格式中都超越了 Opus 4.6。GPT-5.3 Codex 在多场比赛中显示出强劲的改进,在 10 场格式中超越了 Opus 和 GPT-5.4。
讨论
欢迎在我们的 Discord 中讨论这些结果,或对测试方法提出改进建议,并告诉我们你希望覆盖的其他模型。
觉得有用?分享给更多人