jevbooks

← 全部项目

jev-tetris

thelau/jev-tetris

读懂俄罗斯方块如何把合法动作变成 Choice 问题,再用作者的随机、打乱概率、关键词与启发式对照判断模型的增量。

游戏与模拟0.79次选分类: Agent 决策记分卡

源码导读

Jev Tetris 源码导读:候选动作、代码分工与有效对照

这是学习“模型判断如何控制动作”的好例子。更有价值的一课是怎样检查模型有没有带来帮助:几何计算留给代码,仔细检查候选描述,并与做同一任务的简单规则比较。

源码核验 未完成完整项目实跑固定源码 9869b602

1. 几何 → 描述 → 五个问题 → 一个动作

README 描述了移动、旋转和下落的可达性搜索,用来枚举合法落点。在 describePlacements 中,代码计算每个落点的结果,再用统一句式描述新增空洞、已有空洞、消行、表面形状与堆叠高度。本项目给模型的是这些描述,不是棋盘图片。

composite 模式对同一组候选 ID 问五个 Choice:少造空洞、多消行、保持已有空洞可触达、保持低高度、保持平整。源码中的权重依次为 0.55、0.22、0.15、0.05、0.03。blend 由代码合成概率分布并归一化,默认加权求和,也实现了乘积方案。

README 说明游戏执行排名最高的落点;是否合法、怎么执行仍由代码负责。源码还用 Score 与 Noul 描述棋盘危险程度与败局预期。五个 Choice 是动作选择机制,不代表整个仓库只使用 Choice。

2. 四种对照,回答四个不同问题

  • 随机落点:整套策略是否比在合法候选中随便选一个更好?这是本游戏的低基线,不是智能水平测验。
  • 打乱概率:保留模型返回的数值,只打乱它们与候选的对应关系。作者报告表现跌回接近随机。这检验候选与概率的对应关系是否影响行为;候选构造中已经编码的工作仍然存在。
  • 同句式关键词规则:确定性文本规则能否提取描述中的有用特征?作者报告这个基线胜过 Jev。因为读的是相同描述,它尤其适合检验这里是否需要模型。
  • El-Tetris 启发式:与直接利用游戏特征的较强代码策略比较。这是实践中需要超过的基线,不是已经证明的能力上限,也不是信息输入相同的纯文本模型对照。

3. 作者结果不能证明什么

只有三个 seed,而且问题、措辞、合成方法和权重都用这三个 seed 调过。这是调参集内的结果,不是独立留出集成绩。作者也报告,合成后的动作经常与权重最大的 sealed 问题相同;五个输出不等于五份独立贡献。

作者对 1,578 个已记录回合的回放给出了具体数字:合成动作有 91% 与 sealed 问题单独的 argmax 相同(sealed 权重为 0.55)。所有问题等权时,报告的平均消行数约 11.7,而现有权重约 52。这些是作者在调参 seed 上报告的消融结果,并非本站复现,也不能证明五个问题贡献了五份独立收益。

固定 README 写的是 300 块上限,findings 写 200,表格却包含 300。引用总体比率前,需要先核对运行配置与日志。本站没有复跑实验,也不把已发表的耗时与分数当作当前测量。

更强的比较应先固定棋盘状态和候选集合,在一组数据上拟合权重,在另一组上评估;然后用没见过的方块序列跑完整游戏。单步排序与生存表现回答不同的问题,因为早期一步走错会改变后面的所有棋盘。

首次源码核对日期为 2026-11-02;2026-11-03 根据同一固定提交的 findings.md 补充这些消融细节,本站未重跑游戏。

4. API 失败,要与走错一步分开

客户端对缺少 key、HTTP 失败和非 JSON 内容抛出错误。readChoice 在缺少答案时返回 null;否则兼容多种字段名,缺少概率时默认空对象。仅这一步解析,并没有验证候选成员关系或完整概率分布。

README 描述的 UI 测试要求断线时暂停,而不是宣布游戏结束。这是作者报告,本站未做端到端验证。借鉴这种结构时,先检查返回 ID 属于合法集合、数值字段有效,并为“判断未完成”定义出口,再执行动作。

5. 先看 mock,再一次只改一件事

固定 README 要求 Node 22 或以上,并说明没有包依赖与构建步骤。以下命令检出本次阅读的版本,用假答案启动界面;这是待尝试的步骤,不是本站运行记录。mock 能检查界面,不能证明 Jev 的游戏能力。

git clone https://github.com/thelau/jev-tetris.git
cd jev-tetris
git checkout 9869b602965cf002afff766013f8c068846d36aa
npm run dev:mock
  • 在该检出的另一个终端运行 npm test,可执行文档中的引擎与 mock UI 测试;浏览器要求以仓库说明为准。
  • 付费跑模型前,先跑文档中的关键词与启发式基线。固定 seed 和块数上限,保存日志,每次只修改一件事。
  • 真实调用按照 README 配置 .env。记录响应中实际返回的模型,不能只记 jev-latest 别名;模型游戏与打乱概率对照会产生 API 用量。

迁移到你自己的决策问题

代码已经会算空洞、高度或合法位置,就让代码算。模型更适合处理规则难以廉价捕捉的语言信息。先与使用相同信息的直接规则比较增量,再考虑更复杂的多问题组合。

可以练习写出三个合法动作,用相同格式描述后果,并决定缺少答案时怎么办。先比较一个 Choice 与简单规则,再加权重。日志同时保存描述与返回数值:作者曾从日志发现,两句候选描述相互矛盾,显著影响了游戏表现。

README 自动摘要

根据 README 自动整理于 2026年9月20日,不是本站运行记录。上方编辑说明另行核对来源;旧摘要可能遗漏限制,请以导读标注的证据范围理解。

这是什么

一个俄罗斯方块游戏,确定性代码枚举所有可达的放置位置(包括 tuck 和 spin),并将每个位置写成英文句子。Jev 在五个 Choice 问题上为所有选项返回概率;最高权重的选项被执行,整个分布绘制在棋盘上。

它怎么用 Jev

每一帧,代码搜索所有放置位置并用句子描述每个位置。这些句子成为五个多项选择题的选项。Jev 为每个选项返回概率。代码执行排名最高的选项。棋盘在方块落下前显示整个分布。

用到的原语:choice

值得抄的做法

枚举所有合法放置,用英文描述每个,让判断模型排序。

怎么试

npm run dev(需要 TYPESAFE_API_KEY)或 npm run dev:mock 使用假答案。

去 GitHub 看

开始使用 Jev:API key 与第一个请求 →

README 片段的模型判断

项目信号使用仓库元信息、已有摘要与 README 前 700 个字符;没有通读完整项目。“未检出”仅表示这些材料中未检出,并不证明项目没有该能力。这里保留原始判断与实际记录的模型、日期,不是源码审计或运行验收。

模型与判定日期

收录门禁
jev-1.13.0
项目信号
jev-1.13.0
项目分类
jev-1.13.0
模式标签
jev-1.13.0

证据

这些信号只读取仓库元信息、已有摘要与清理后的 README 前 700 字符。≥ 0.60 表示片段中有提及,≤ 0.40 表示未检出,中间为未判定;都不是源码审查或运行结果。「可运行工具」题排除了研究实验,「推荐」题筛的是学习案例 Top 10,不是内容质量合格与否。

  • Jev 是项目的核心在材料中检出0.97
  • 展示了 System One 用法在材料中检出0.88
  • 写了怎么处理不确定片段中未检出0.05
  • 给出了实测数字片段中未检出0.13
  • 是能跑起来的工具片段中未检出0.29
  • 学习案例 Top 10 候选信号在材料中检出0.61
  • 是模型本身的复刻片段中未检出0.16
  • 解决的问题够普遍(0–2)按 0–2 打分0.00 / 2
  • 与 Jev 相关在材料中检出0.98
信号
Jev 是项目的核心0.97展示了 System One 用法0.88写了怎么处理不确定0.05给出了实测数字0.13是能跑起来的工具0.29学习案例 Top 10 候选信号0.61是模型本身的复刻0.1600.51解决的问题够普遍(0–2)0.00 / 2012

无判定区(0.40–0.60)

设计模式
记分卡0.95黑匣子0.69问卷0.63体检0.55菜单0.49漏斗0.46取景框0.2700.51

无判定区(0.40–0.60)

各阶段的 Jev 模型与判定日期见上方记录。简介由 DeepSeek V4.1 Flash 于 2026年9月20日 读 README 写成。