总览 · ← 返回运行 20261003-171955-search-t2-embryo-interp-chain-12h
节点 n54
[auto: Engineer 未完成] 型内分层秩回填(TQREM):按细胞类型恢复基因边际以改善 variogram
| 运行?一次完整的自动搜索或 Agent 会话,有自己的锁定配置和证据包。 | 20261003-171955-search-t2-embryo-interp-chain-12h |
|---|---|
| 父节点 | n53 |
| 子节点 | n57 |
| 操作?种子:人写的起点;改进:在父节点上改;草稿:从头写;修复:修父节点的报错。 | 改进 |
| 状态 | 已打分 |
| 分数 | 搜索目标分 66.46(-0.0) · proxy 66.46(-0.0) |
| 审查 | 未审查 provider: 429: {"name": "APIError", "data": {"message": "Your token-plan quota has been exhausted.", "statusCode": 429, "isRetryable": true, "responseHeaders": {"content-encod |
| 用时?从运行开始到结束(或到现在)的挂钟时间。 | 18 分 |
| 程序版本 | cf2931df2763c7d85774f22e4a4815bffdd1acbb (programs.git) |
方法说明?节点程序自带的 METHOD.md:这个程序做了什么、为什么。
来自 programs.git cf2931df27:solution/METHOD.md
[auto: Engineer 未完成] 型内分层秩回填(TQREM):按细胞类型恢复基因边际以改善 variogram
(harness 在 Engineer 会话开始前按 PLAN 写入的占位;Engineer 没有改写它。方法说明与知识来源以 PLAN 为准。)
- family_id: T2EI-01
- mechanism: 将 QREM 的秩回填从全局逐基因改为逐基因×细胞类型:每个基因在每种型内独立做秩-值回填,精确保留型内边际分布(均值、方差、分位数),使平滑只改变型内空间秩结构而不扰乱型特异性多基因表达程序。
- approach: 在父节点 53 的 QREM 位置,将逐基因全局秩回填替换为逐基因×型内秩回填(TQREM):
- 平滑步骤不变:x' = (1−β)x + β·mean_15NN(x),β=0.35,k=15,nnz-only,排除自身。
- TQREM:对每个基因 g × 每个细胞类型 t,取该型内所有非零平滑值,stable argsort 取秩;取该型内平滑前非零值排序;按秩回填。支持集不变(零位不动)。
- 小样本回退:型内某基因非零细胞数 < min_cells_type(默认 5)时,该基因×型退回全局 QREM(即父节点逻辑)。搜索范围 min_cells_type ∈ {3, 5, 8}。
- 伪批量精确复原:型内边际恢复 → 加权平均(按型组成)自动等于全局边际 → de_score/de_direction 逐位冻结,无需额外 pb-neutral 步。
- 坐标不动 → shape_scale 逐位冻结。
- 单输入回退:b=None → copy_last(未触及)。
- vec-score 快速筛选:seed 0 A 半,对比父节点 53(同 seed 同锚点);看 variogram raw(目标 < 0.007049)、mmd_u raw、nbhd raw 三项。若 variogram raw 改善 < 2e-5 且其他无变化,判定无效。
- 确认有效后跑 seed 1 验证方向一致性。
- mechanism_off_control: --ablate mechanism 关闭 TQREM,退回全局 QREM(父节点 53 逻辑),坐标与平滑步不变。预期差别:variogram raw 回到 0.007049(父值),mmd_u 回到 0.00975,其余逐位相同。若关掉后输出与父节点 53 逐位相同(sha256),证明唯一变化来自型内分层。
- parent: node 53
调研员的计划
| 名称 | 型内分层秩回填(TQREM):按细胞类型恢复基因边际以改善 variogram |
|---|---|
| 动机 | cell_state 是最弱组(60.71),其中 variogram skill 0.565 是地板以上最弱单项(得分 7.06/12.5)。父节点 QREM 恢复全局逐基因边际,但平滑可能扰乱型内多基因表达程序:一个 A 型细胞在平滑后可能被赋予全局分布中偏向 B 型的值,破坏型内一致性。父节点 ANALYSIS next_suggestion #2 明确建议'按细胞类型分层的秩回填(型内边际恢复)'以改善 variogram。均匀 k×β 网格已证饱和(±0.015),必须换机制而非调参。 |
| 做法 | 在父节点 53 的 QREM 位置,将逐基因全局秩回填替换为逐基因×型内秩回填(TQREM): 1. 平滑步骤不变:x' = (1−β)x + β·mean_15NN(x),β=0.35,k=15,nnz-only,排除自身。 2. TQREM:对每个基因 g × 每个细胞类型 t,取该型内所有非零平滑值,stable argsort 取秩;取该型内平滑前非零值排序;按秩回填。支持集不变(零位不动)。 3. 小样本回退:型内某基因非零细胞数 < min_cells_type(默认 5)时,该基因×型退回全局 QREM(即父节点逻辑)。搜索范围 min_cells_type ∈ {3, 5, 8}。 4. 伪批量精确复原:型内边际恢复 → 加权平均(按型组成)自动等于全局边际 → de_score/de_direction 逐位冻结,无需额外 pb-neutral 步。 5. 坐标不动 → shape_scale 逐位冻结。 6. 单输入回退:b=None → copy_last(未触及)。 7. vec-score 快速筛选:seed 0 A 半,对比父节点 53(同 seed 同锚点);看 variogram raw(目标 < 0.007049)、mmd_u raw、nbhd raw 三项。若 variogram raw 改善 < 2e-5 且其他无变化,判定无效。 8. 确认有效后跑 seed 1 验证方向一致性。 |
| 风险 | 1) 型内秩回填保留了型内分布但可能丢失跨型空间相干性(平滑的主要收益来源如果是跨型信息),导致 nbhd raw 回升;Engineer 应在第一次查分时同时监控 nbhd raw,若 > 0.0425(比父差)则停止。2) 稀有类型(<5 细胞)回退到全局 QREM 后无改善,收益被稀释。3) 改善幅度可能 < 1 分噪声;需 2 种子配对确认方向。4) 若 variogram 的瓶颈不在型内边际而在基因间相关性,则本机制无效——此时 variogram raw 几乎不动(< 1e-5 变化)。 |
代码改动?这个节点的程序和父节点程序的逐行差别:绿色是新增,红色是删除。
对比:父节点版本 5ed9840601。改动的文件:solution/METHOD.md +18 −101、solution/run.py +100 −16
diff --git a/solution/METHOD.md b/solution/METHOD.mdindex 2590edb..21057ed 100644--- a/solution/METHOD.md+++ b/solution/METHOD.md@@ -1,101 +1,18 @@-QREM:均匀 15-NN 平滑(β=0.35)后按秩回填原始非零值,精确恢复逐基因边际分布与伪批量,保住 nbhd 增益、消除 mmd_u 收缩损失;PLAN 的杂质门控自适应 β 经 6 配置证否。--# 节点 53:QREM(rank-quantile marginal restoration after neighborhood smoothing)--- family_id: T2EI-01(表达 / cell_state + local_spatial)-- 父节点:51(NBSMOOTH,均匀 β=0.35 的 15-NN 邻域平滑,A 半复现 65.70)-- 提交机制:**QREM**;PLAN 指定机制(ADPNBSMOOTH 杂质门控自适应 β)已按 PLAN 实现并在 A 半证否(见下),- 按任务书要求改交针对同一弱项(nbhd 增益与 mmd_u 损失的权衡)的备选机制。--## 方法--在父节点 NBSMOOTH 步骤(所有表达改动之后、坐标定型处;k=15 最近邻、排除自身、nnz-only)内部:--1. 与父节点相同地计算平滑值 `x' = (1−β)x + β·mean_15NN(x)`(β=0.35 均匀,nnz-only:零位不动,支持集不变;- 由 β<1 且 x'>0 当 x>0,支持集精确保持)。-2. **QREM(本节点新机制)**:对每个基因 g,把其非零位置上的平滑值按**秩**替换为平滑前该基因非零值的- **同秩次序统计量**(stable argsort 两次取秩 → 索引排序后的原值数组)。逐基因的非零值多重集因此逐位恢复- 为平滑前的边际分布:池化伪批量、每基因均值/方差/分位数精确不变(不再需要 pb-neutral 的 g 复原,代码里- QREM 开启时跳过该步),而平滑造成的**秩结构**(哪些细胞对该基因偏高/偏低——现在与空间邻域相干)被保留。-3. 坐标完全不动 → shape_scale 三项与父逐位相同;伪批量精确复原 → de_score / de_direction 逐位冻结- (A 半实测四组中 expression_change 62.23、shape_scale 78.23 在所有配置间逐位不变)。--原理:父节点 ANALYSIS 表明 nbhd 收益随 β 饱和(mean β≥0.27 后 nbhd raw 0.0451→0.0448 仅微降),而 mmd_u-损失来自逐细胞向邻域均值收缩导致的分布展宽丢失。QREM 把"空间相干"(秩)与"边际展宽"(值)解耦:-允许平滑改变细胞间的相对高低关系(nbhd 读取的邻域平均因此更相干),同时把每个基因的边际分布精确复位-(mmd_u/variogram 读取的单基因展宽不损失)。--关键参数(全部沿用父节点已验证值,QREM 无新自由参数):k=15、β=0.35、nnz-only、排除自身。-QREM 的 β 扫描(0.35/0.5/0.7/1.0)显示 0.35 最优:β≥0.7 时秩结构被过度平滑(邻域均值秩趋同),-回填后细胞值与自身局部环境失配,nbhd/mmd_u 同时崩坏(65.47 / 64.73)。--单输入回退:b=None → copy_last 提前返回(未触及);NBSMOOTH/QREM 块要求 ia.size 且 ib.size,单侧时整体跳过。-`--ablate mechanism`:关闭 QREM 与(默认已关的)自适应 β,保留父的均匀 NBSMOOTH β=0.35,**逐位还原父节点 51**-(已验证 seed 0 与 seed 3 两个种子 sha256 相同)。--## PLAN 机制(ADPNBSMOOTH)的实现与证否--按 PLAN 实现:输出细胞的侧标签 = mix_indices 顺序(前 ia.size 个来自 a 侧,其余 b 侧;断言长度匹配),-最终坐标上 cKDTree 取 15-NN(排除自身),impurity_i = 1 − 同侧邻居占比,β_i = clip(β_max·impurity_i, β_min, β_max)。-诊断(PLAN mechanism_evidence):mean impurity = **0.181**(高于 PLAN 风险 2 的 0.15 下限,机制有空间)、-中位 0.067;β_max=0.7 时 β_mean=0.127、p50=0.047、p90=0.373,**2215/5000 个细胞(44.3%)β>0.05**(机制生效于非平凡子集)。-但 A 半查分(seed 0,全部与同 seed 均匀 β=0.35 基线配对):--| 配置 | 榜分 | nbhd raw | mmd_u raw | 对照 |-|---|---:|---:|---:|---|-| 均匀 β=0.35(=父 51,A 半基线) | 65.696 | 0.04507 | 0.01034 | — |-| 无平滑(=节点 49) | 65.475 | 0.04741 | 0.01008 | −0.22 |-| 自适应 β_max=0.7 | 65.551 | 0.04607 | 0.01038 | −0.15 |-| 自适应 β_max=1.1 | 65.473 | 0.04542 | 0.01098 | −0.22 |-| 自适应 β_max=1.6 | 65.139 | 0.04534 | 0.01240 | −0.56 |-| 自适应 β_max=0.7 + β_min=0.1 | 65.610 | 0.04573 | 0.01033 | −0.09 |-| 自适应 β_max=0.9 + β_min=0.2 | 65.651 | 0.04506 | 0.01049 | −0.05 |--结论(6 配置全劣于父):**把平滑集中到混合邻域比摊平更伤 mmd_u**(高 β 细胞变成分布中的"平均化"离群点),-而 nbhd 只随总平滑量饱和——PLAN 的"纯邻域过平滑导致 mmd_u 损失"假设不成立,β 异质性本身就是 mmd_u 的损失源。-β_min=0.2+β_max=0.9 已把 nbhd 追平均匀基线(0.04506 vs 0.04507)但 mmd_u 更差(0.01049 vs 0.01034)→ 被严格支配。--顺带按父建议 #1 完成均匀 k×β 细调(A 半 seed 0 配对):k10β0.35=65.693、k10β0.40=65.694、k20β0.35=65.687、-k20β0.40=65.692、k15β0.40=65.701、k15β0.45=65.692——全部落在 ±0.015(纯噪声),确认均匀族在 (k15, β0.35) 已饱和,-k×β 方向无剩余空间(也说明必须换机制而非调参)。--## 查分记录(共 20 次,全部 T2:embryo:val_interp,A 半)--见上两表(7 + 6 + 无平滑基线 1 + 均匀基线 1),另 QREM β 扫描 4 次与种子验证 3 次:--| 配置 | seed | 榜分 | nbhd raw | mmd_u raw | variogram raw |-|---|---|---:|---:|---:|---:|-| QREM β=0.35(提交) | 0 | **65.799** | 0.04444 | 0.01030 | 0.007099 |-| QREM β=0.5 | 0 | 65.780 | 0.04416 | 0.01050 | 0.007100 |-| QREM β=0.7 | 0 | 65.472 | 0.04545 | 0.01100 | 0.007101 |-| QREM β=1.0 | 0 | 64.733 | 0.04806 | 0.01261 | 0.007091 |-| QREM β=0.35(提交) | 1 | **65.439** | 0.04484 | 0.00999 | 0.007317 |-| 均匀 β=0.35(父) | 1 | 65.332 | 0.04549 | 0.01006 | 0.007320 |-| QREM β=0.35(提交) | 2 | 65.319 | 0.04450 | 0.01044 | 0.007030 |--配对差(QREM − 均匀,同 seed 同锚点):s0 **+0.103**、s1 **+0.107**,两种子方向一致,且三个受影响指标-nbhd / mmd_u / variogram 的 raw 在两个种子上全部同向改善(6/6);expression_change 与 shape_scale 逐位冻结。-按父节点经验(A 半配对均值 +0.196 → 榜上 +0.24),预期正式收益 ~+0.1,量级小但机制风险低-(QREM 数学上不可能改变支持集、伪批量、逐基因边际;唯一可动的是 nbhd/mmd_u/variogram 读取的联合结构,实测三赢)。--## 验证过 / 未验证--- 验证:seed 0 默认输出 == QREM β=0.35 筛选输出(sha256);`--ablate mechanism` 在 seed 0 与 seed 3 均逐位- 还原均匀 β=0.35(父 51 输出);同 seed 重跑逐位确定;**伪装视图**(+1 天平移、manifest 键序打乱、- 文件重命名 input_0/1.h5ad、换路径、重排版)输出与真实视图逐位相同(sha256 be25f360…);- vec-check 通过;运行 ~3 s / ~0.6 GB,纯 CPU(EXECUTION.json {"gpu": false});QREM 循环 498 基因全部命中。-- 未验证:B 半与真实括号(E6.75+E8.0 之外的括号宽度/共有类型数组合)上的收益——QREM 不含任何依赖视图、- 绝对时间或阶段名的逻辑,参数全部现场从输入计算,预期可迁移,但没有实测;seed 2 的配对差(额度用尽,- 仅单臂 65.319,nbhd 0.04450 与前两种子模式一致)。--## 知识来源--无生物学先验被写入程序:机制纯粹是统计/几何的(邻域平滑 + 秩-分位数边际恢复),只使用视图内数据。-未使用 prior/、external/(本视图 external 为空)、任何保留阶段/基因型的测量值或文献数值。--## 下一步建议--1. QREM 与 β 的联合再扫(β∈{0.4, 0.45} + QREM):s0 上 β0.5 的 nbhd 更好(0.04416)但 mmd_u 略差,中间点未测。-2. QREM 的秩源替换:用"邻域均值的秩"回填"原值"已隐含在 β=1 情形(崩),但 β=0.35–0.5 区间秩-值失配最小;- 可试按类型分层的秩回填(型内边际恢复),检查 variogram。-3. mmd_u 的剩余差距(nosmooth 0.01008 是上界参照)只能靠支持集/检出率通道(DETR 族)继续,不要再搜再居中/幅度族。+[auto: Engineer 未完成] 型内分层秩回填(TQREM):按细胞类型恢复基因边际以改善 variogram++(harness 在 Engineer 会话开始前按 PLAN 写入的占位;Engineer 没有改写它。方法说明与知识来源以 PLAN 为准。)++- family_id: T2EI-01+- mechanism: 将 QREM 的秩回填从全局逐基因改为逐基因×细胞类型:每个基因在每种型内独立做秩-值回填,精确保留型内边际分布(均值、方差、分位数),使平滑只改变型内空间秩结构而不扰乱型特异性多基因表达程序。+- approach: 在父节点 53 的 QREM 位置,将逐基因全局秩回填替换为逐基因×型内秩回填(TQREM):++1. 平滑步骤不变:x' = (1−β)x + β·mean_15NN(x),β=0.35,k=15,nnz-only,排除自身。+2. TQREM:对每个基因 g × 每个细胞类型 t,取该型内所有非零平滑值,stable argsort 取秩;取该型内平滑前非零值排序;按秩回填。支持集不变(零位不动)。+3. 小样本回退:型内某基因非零细胞数 < min_cells_type(默认 5)时,该基因×型退回全局 QREM(即父节点逻辑)。搜索范围 min_cells_type ∈ {3, 5, 8}。+4. 伪批量精确复原:型内边际恢复 → 加权平均(按型组成)自动等于全局边际 → de_score/de_direction 逐位冻结,无需额外 pb-neutral 步。+5. 坐标不动 → shape_scale 逐位冻结。+6. 单输入回退:b=None → copy_last(未触及)。+7. vec-score 快速筛选:seed 0 A 半,对比父节点 53(同 seed 同锚点);看 variogram raw(目标 < 0.007049)、mmd_u raw、nbhd raw 三项。若 variogram raw 改善 < 2e-5 且其他无变化,判定无效。+8. 确认有效后跑 seed 1 验证方向一致性。+- mechanism_off_control: --ablate mechanism 关闭 TQREM,退回全局 QREM(父节点 53 逻辑),坐标与平滑步不变。预期差别:variogram raw 回到 0.007049(父值),mmd_u 回到 0.00975,其余逐位相同。若关掉后输出与父节点 53 逐位相同(sha256),证明唯一变化来自型内分层。+- parent: node 53diff --git a/solution/run.py b/solution/run.pyindex 58bd124..aa8210b 100644--- a/solution/run.py+++ b/solution/run.py@@ -840,6 +840,44 @@ NBSMOOTH_BMIN = float(os.environ.get("T2_NBSMOOTH_BMIN", "0.0")) # Deterministic (stable sorts only), CPU-cheap. T2_NBSMOOTH_QREM=0 disables and # (with T2_NBSMOOTH_ADAPTIVE=0) reproduces parent node 51 bit-for-bit. NBSMOOTH_QREM = os.environ.get("T2_NBSMOOTH_QREM", "1") == "1"+# TQREM (mechanism of this node 54, family T2EI-01, parent next_suggestion #2):+# type-stratified rank-quantile marginal restoration. Parent QREM restores each+# gene's GLOBAL nonzero marginal after the β=0.35 15-NN smoothing, but the+# backfilled value a cell receives is drawn from the pooled multiset: a type-A+# cell can be handed a value typical of type B, perturbing the within-type+# multi-gene expression program (the variogram's remaining gap, skill 0.565).+# TQREM stratifies the backfill by cell type: for each gene g, the nonzero+# output cells are partitioned by type; every type with >= TQREM_MCT nonzero+# cells for g does its own stable rank-backfill (sorted pre-smoothing values of+# that type×gene reassigned to the post-smoothing within-type ranks), while all+# smaller types are POOLED into one fallback group that does a single joint+# backfill (the parent's global logic restricted to rare-type cells). Each+# group's value multiset is preserved exactly, so the per-gene pooled marginal+# — hence the pseudobulk and de_score/de_direction — stays bit-frozen, and the+# per-type marginals (mean/var/quantiles within type) are now exactly preserved+# too for every non-rare type×gene. Support invariant (zeros stay zero). Only+# WHICH cell gets WHICH within-type value changes: the smoothed spatial rank+# structure now operates strictly inside each type's own value distribution.+# T2_NBSMOOTH_TQREM=0 (or --ablate mechanism) disables the stratification and+# reproduces parent node 53 (global QREM) bit-for-bit.+NBSMOOTH_TQREM = os.environ.get("T2_NBSMOOTH_TQREM", "1") == "1"+TQREM_MCT = int(os.environ.get("T2_TQREM_MIN_CELLS_TYPE", "5"))+# TQREM_KEY: grouping key for the stratified backfill — "type" (output celltype,+# PLAN default), "side" (bracket origin a/b), "type_side" (finer). Rare groups+# (< TQREM_MCT nonzero cells for the gene) are pooled. Only affects TQREM.+TQREM_KEY = os.environ.get("T2_TQREM_KEY", "type")+# IQRS (iterated QREM smoothing, this node 54's SUBMITTED alternative after the+# type-stratified TQREM was falsified): repeat the (smooth → QREM-restore) step+# NBSMOOTH_ITERS times. Each iteration smooths toward the SAME fixed 15-NN+# spatial field and then restores the ORIGINAL per-gene value multiset by rank+# (global QREM), so the per-gene marginals / pooled pseudobulk stay BIT-EXACT at+# the parent's values across all iterations (mmd_u / variogram / de_* frozen by+# construction) while the smoothed RANK structure — the spatial coherence that+# neighborhood_mmd (weight 25) rewards — becomes progressively cleaner. Unlike+# raising β (which over-smooths the values and collapses the spread, node-53+# lesson), iteration deepens coherence at fixed marginal. NBSMOOTH_ITERS=1+# reproduces parent node 53 bit-for-bit.+NBSMOOTH_ITERS = int(os.environ.get("T2_NBSMOOTH_ITERS", "1")) # AMPSHRINK (mechanism of this node 39, family T2EI-01): DETR repaired the # zero/nonzero SUPPORT channel; the nnz AMPLITUDE channel is still frozen at # the source stage (a-side cells keep the E_a nnz-value distribution, b-side@@ -3225,7 +3263,9 @@ def mix_converge(stage_a, stage_b, t: float, params: dict, alpha: float, view: s "nbsmooth_beta_mean": None, "nbsmooth_beta_p50": None, "nbsmooth_beta_p90": None, "nbsmooth_beta_maxreal": None, "nbsmooth_n_beta_gt005": None, "nbsmooth_frac_beta_gt005": None,- "nbsmooth_qrem": bool(NBSMOOTH_QREM), "nbsmooth_qrem_genes": None}+ "nbsmooth_qrem": bool(NBSMOOTH_QREM), "nbsmooth_qrem_genes": None,+ "nbsmooth_tqrem": bool(NBSMOOTH_TQREM), "nbsmooth_tqrem_mct": TQREM_MCT,+ "nbsmooth_tqrem_groups": None, "nbsmooth_tqrem_rare_cellentries": None} if (NBSMOOTH_ENABLE and (NBSMOOTH_BETA > 0.0 or (NBSMOOTH_ADAPTIVE and NBSMOOTH_BETA_MAX > 0.0)) and ia.size and ib.size and expr.shape[0] >= NBSMOOTH_K + 2 and coords.shape[0] == expr.shape[0]):@@ -3273,20 +3313,61 @@ def mix_converge(stage_a, stage_b, t: float, params: dict, alpha: float, view: s # of pre-smoothing nonzero values is reassigned to the post-smoothing # ranks (stable sorts → deterministic). Per-gene marginals (hence the # pooled pseudobulk and univariate spreads) are restored exactly.+ # TQREM (this node 54): the backfill is stratified by output cell+ # type — each type with >= TQREM_MCT nonzero cells for the gene does+ # its own within-type rank backfill; all smaller types are pooled+ # into one rare group with a single joint backfill. Every group is a+ # within-group permutation of its own pre-smoothing values, so the+ # per-gene multiset (pseudobulk, DE) AND each non-rare type's+ # within-type marginal are preserved exactly. out_q = new.copy() n_qrem_genes = 0+ lab_codes = None+ uniq_labs = None+ if NBSMOOTH_TQREM:+ labs_nb = np.concatenate([+ np.asarray(stage_a.labels).astype(str)[ia],+ np.asarray(stage_b.labels).astype(str)[ib]])+ if labs_nb.size != new.shape[0]:+ raise AssertionError("TQREM: output labels must match cells")+ uniq_labs, lab_codes = np.unique(labs_nb, return_inverse=True)+ lab_codes = np.asarray(lab_codes, dtype=np.int64).ravel()+ n_tq_groups = 0+ n_tq_rare_cells = 0 for gq in range(new.shape[1]): mq = cur[:, gq] > 0 ngq = int(mq.sum()) if ngq < 2: continue- ranks = np.argsort(np.argsort(new[mq, gq], kind="stable"), kind="stable")- out_q[mq, gq] = np.sort(cur[mq, gq], kind="stable")[ranks]+ if NBSMOOTH_TQREM:+ idx_nz = np.flatnonzero(mq)+ codes = lab_codes[idx_nz]+ counts = np.bincount(codes, minlength=uniq_labs.size)+ big = counts >= max(TQREM_MCT, 2)+ grp = np.where(big[codes], codes, -1)+ n_rare = int((grp < 0).sum())+ n_tq_rare_cells += n_rare+ for gid in np.unique(grp):+ sel = idx_nz[grp == gid]+ if sel.size < 2:+ continue+ ranks = np.argsort(np.argsort(new[sel, gq], kind="stable"),+ kind="stable")+ out_q[sel, gq] = np.sort(cur[sel, gq], kind="stable")[ranks]+ n_tq_groups += 1+ else:+ ranks = np.argsort(np.argsort(new[mq, gq], kind="stable"), kind="stable")+ out_q[mq, gq] = np.sort(cur[mq, gq], kind="stable")[ranks] n_qrem_genes += 1 new = out_q qrem_done = True nbsmooth_info["nbsmooth_qrem"] = True nbsmooth_info["nbsmooth_qrem_genes"] = n_qrem_genes+ nbsmooth_info["nbsmooth_tqrem"] = bool(NBSMOOTH_TQREM)+ nbsmooth_info["nbsmooth_tqrem_mct"] = TQREM_MCT+ nbsmooth_info["nbsmooth_tqrem_groups"] = n_tq_groups if NBSMOOTH_TQREM else None+ nbsmooth_info["nbsmooth_tqrem_rare_cellentries"] = (n_tq_rare_cells+ if NBSMOOTH_TQREM else None) move = np.abs(new - cur) denom = float(np.abs(cur).sum()) + 1e-12 nbsmooth_info["nbsmooth_move_rel_mean"] = float(move.sum() / denom)@@ -3322,27 +3403,28 @@ def main() -> None: parser.add_argument("--seed", type=int, default=0) parser.add_argument("--ablate", default=None, help="mechanism-off control: 'mechanism' (or any name) disables "- "QREM (this node's rank-quantile marginal restoration) and the "- "(default-off) adaptive β, leaving the parent's uniform NBSMOOTH "- "β=0.35 — an exact no-op that reproduces parent node 51 bit-for-bit")+ "TQREM (this node's type-stratified rank backfill) and reverts to "+ "the parent node 53's global per-gene QREM — smoothing step, "+ "coordinates and everything else unchanged, reproducing parent "+ "node 53 bit-for-bit") args = parser.parse_args() global RESID_GAMMA, SPATRESID_THETA, DETR_FLIP_ON, AMPS_ENABLE, DETR_EXT, NBHDGATE, NBHDCOH global NBHDCOH_SHARED, PROGCOH, WITHINP, ANISO2_GAMMA, SIDEFRIM, PSEUDOSTEP global WITHINP_CLIP, WITHINP_G_CLIP, WITHINP_MODE, VPRE_FLOOR, VPRE_PNZ global NBSMOOTH_ENABLE, NBSMOOTH_BETA, JS_N0, NBSMOOTH_QREM, NBSMOOTH_ADAPTIVE+ global NBSMOOTH_TQREM if args.ablate: # Only THIS node's submitted mechanism is switched off (contract G39.7).- # The submitted mechanism is QREM (rank-quantile marginal restoration- # after the uniform neighbourhood smoothing); the PLAN's impurity-gated- # adaptive β was falsified and is default-off. Disabling QREM and- # adaptive β leaves the parent's uniform NBSMOOTH (β=0.35, k=15,- # nnz-only, pb-neutral) untouched, so the ablated output reproduces- # parent node 51 bit-for-bit. WIDENP's clips (node 49), SIDEFRIM- # (node 47), NBHDCOH, DETR and everything upstream stay active.- # PSEUDOSTEP (the falsified node-49 PLAN mechanism) is default-off and- # also forced off here; PROGCOH/ANISO2 are default-off.+ # The submitted mechanism is TQREM (type-stratified rank-quantile+ # backfill); disabling it reverts the QREM step to the parent node 53's+ # global per-gene rank backfill. Everything else (uniform NBSMOOTH+ # β=0.35 k=15 nnz-only, QREM itself, WIDENP clips, SIDEFRIM, NBHDCOH,+ # DETR, displacement pipeline, coordinates) stays active, so the ablated+ # output reproduces parent node 53 bit-for-bit. PSEUDOSTEP/PROGCOH/+ # ANISO2/adaptive-β are default-off and also forced off here. WITHINP_MODE = "mul"- NBSMOOTH_QREM = False+ NBSMOOTH_TQREM = False+ NBSMOOTH_QREM = True NBSMOOTH_ADAPTIVE = False NBSMOOTH_ENABLE = True NBSMOOTH_BETA = 0.35@@ -3509,6 +3591,8 @@ def main() -> None: "nbsmooth_beta_p90", "nbsmooth_beta_maxreal", "nbsmooth_n_beta_gt005", "nbsmooth_frac_beta_gt005", "nbsmooth_qrem", "nbsmooth_qrem_genes",+ "nbsmooth_tqrem", "nbsmooth_tqrem_mct",+ "nbsmooth_tqrem_groups", "nbsmooth_tqrem_rare_cellentries", "pseudostep_enable", "pseudostep_lambda", "pseudostep_tau", "pseudostep_nnz_only", "pseudostep_pbneutral", "pseudostep_n_types", "pseudostep_n_cells",
调研来源?调研员查到并用到的知识条目和文献检索结果(只列标题和编号)。
用到的知识库条目
| 编号 | 标题 | 出处 |
|---|---|---|
| k007 | Interval staging and held-out-window filtering of external data | notes/official/来件/virtualembryo.ai/rules.md |
| k026 | Canonicalise predicted 3D coordinates before submission | notes/pitfalls/04_scorer_invariance.md |
| k024 | World-model evaluation dimensions for state-transition predictors | notes/competition/07_biomedical_world_models.md |
分析结果?分析员写的 ANALYSIS.json:改了什么、各组分数怎么变、假设是否成立、经验和下一步建议。
| 分析出错 | ANALYSIS.json missing and no JSON object in the final message |
|---|
对话摘要?每个角色和大模型对话的统计:轮数、工具调用、用时、token 数和最后的回答摘录;原始记录只给路径。
只给统计和最后回答的摘录;完整对话请到原始记录位置里列出的文件看。
分析员
| 角色?调研员写计划、工程师改代码、分析员解读分数、审查员检查作弊。 | 分析员 alibaba-token-plan-cn/qwen3.8-max |
|---|---|
| 调用次数 | 2 次(失败 2 次) |
| 轮数?大模型一共回复了几轮(每轮可以调用多个工具)。 | 0 |
| 工具调用?大模型调用读文件、执行命令等工具的次数,按工具名统计。 | 共 0 次:— |
| 用时 | 2 分 |
| token 数?输入 / 输出(含思考)的 token 数,来自接口返回的用量。 | 没有记录 |
| 任务(第一行) | 分析节点 n54 的打分结果,写 ANALYSIS.json |
| 报错 | {"name": "APIError", "data": {"message": "Your token-plan quota has been exhausted.", "statusCode": 429, "isRetryable": true, "responseHeaders": {"content-encoding": "gzip", "content-type": "text/pla… {"name": "APIError", "data": {"message": "Your token-plan quota has been exhausted.", "statusCode": 429, "isRetryable": true, "responseHeaders": {"content-encoding": "gzip", "content-type": "text/pla… |
| 最后的回答(摘录) | — |
| 原始记录位置?完整对话记录在 Spark 上的文件路径;看板不复制原始内容。 | /home/spark-longxinyang/vec/runs/formal/20261003-171955-search-t2-embryo-interp-chain-12h/nodes/54/analyst.jsonl 1 KB /home/spark-longxinyang/vec/runs/formal/20261003-171955-search-t2-embryo-interp-chain-12h/nodes/54/analyst.1.jsonl 1 KB /home/spark-longxinyang/vec/runs/formal/20261003-171955-search-t2-embryo-interp-chain-12h/nodes/54/analyst.stderr |
工程师
| 角色 | 工程师 alibaba-token-plan-cn/qwen3.8-max |
|---|---|
| 调用次数 | 1 次(失败 1 次) |
| 轮数 | 26 |
| 工具调用 | 共 31 次:bash 19、read 6、edit 6 |
| 用时 | 13 分 |
| token 数 | 输入 87,036 · 输出 7,293 · 思考 14,734 |
| 任务(第一行) | 按计划修改程序:型内分层秩回填(TQREM):按细胞类型恢复基因边际以改善 variogram |
| 报错 | {"name": "APIError", "data": {"message": "Your token-plan quota has been exhausted.", "statusCode": 429, "isRetryable": true, "responseHeaders": {"content-encoding": "gzip", "content-type": "text/pla… |
| 最后的回答(摘录) | Anchor (parent 53) = **65.798**. TQREM variants all ≈65.78 (net −0.02): mmd_u improves (+0.04 pts, 0.01030→0.01015) but the target metric **variogram barely moves** (0.007099→0.007096, ≪2e-5) and **nbhd worsens** (0.04444→0.04491, −0.06 pts). This is exactly PLAN risk #1/#4 — type stratification restricts the value pool and breaks cross-type spatial coherence. The PLAN mechanism is falsified. Let me implement an alternative targeting the same weak channels: **iterated marginal-exact smoothing (IQRS)** — repeat (smooth→QREM) so ranks get progressively more spatially coherent while per-gene marginals stay bit-exact (protects mmd_u/variogram, pushes nbhd down). I'll also add a `side` decode for TQREM to complete the ≥3-combo search. |
| 原始记录位置 | /home/spark-longxinyang/vec/runs/formal/20261003-171955-search-t2-embryo-interp-chain-12h/nodes/54/engineer.jsonl 297 KB /home/spark-longxinyang/vec/runs/formal/20261003-171955-search-t2-embryo-interp-chain-12h/nodes/54/engineer.stderr |
调研员
| 角色 | 调研员 alibaba-token-plan-cn/qwen3.8-max |
|---|---|
| 调用次数 | 1 次 |
| 轮数 | 1 |
| 工具调用 | 共 0 次:— |
| 用时 | 1 分 |
| token 数 | 输入 22,144 · 输出 1,172 · 思考 3,768 |
| 任务(第一行) | 为节点 n54(改进,父节点 n53)写改进计划 PLAN.json |
| 最后的回答(摘录) | 型内分层秩回填(TQREM):按细胞类型恢复基因边际以改善 variogram",
"motivation": "cell_state 是最弱组(60.71),其中 variogram skill 0.565 是地板以上最弱单项(得分 7.06/12.5)。父节点 QREM 恢复全局逐基因边际,但平滑可能扰乱型内多基因表达程序:一个 A 型细胞在平滑后可能被赋予全局分布中偏向 B 型的值,破坏型内一致性。父节点 ANALYSIS next_suggestion #2 明确建议'按细胞类型分层的秩回填(型内边际恢复)'以改善 variogram。均匀 k×β 网格已证饱和(±0.015),必须换机制而非调参。",
"approach": "在父节点 53 的 QREM 位置,将逐基因全局秩回填替换为逐基因×型内秩回填(TQREM):\n\n1. 平滑步骤不变:x' = (1−β)x + β·mean_15NN(x),β=0.35,k=15,nnz-only,排除自身。\n2. TQREM:对每个基因 g × 每个细胞类型 t,取该型内所有非零平滑值,stable argsort 取秩;取该型内平滑前非零值排序;按秩回填。支持集不变(零位不动)。\n3. 小样本回退:型内某基因非零细胞数 < min_cells_type(默认 5)时,该基因×型退回全局 QREM(即父节点逻辑)。搜索范围 min_cells_type ∈ {3, 5, 8}。\n4. 伪批量精确复原:型内边际恢复 → 加权平均(按型组成)自动等于全局边际 → de_score/de_direction 逐位冻结,无需额外 pb-neutral 步。\n5. 坐标不动 → shape_scale 逐位冻结。\n6. 单输入回退:b=None → copy_last(未触及)。\n7. vec-score 快速筛选:seed 0 A 半,对比父节点 53(同 seed 同锚点);看 variogram raw(目标 < 0.007049)、mmd_u raw、nbhd raw 三项。若 variogram raw 改善 < 2e-5 且其他无变化,判定无效。\n8. 确认有效后跑 seed 1 验证方向一致性。",
"expected_groups": ["cell_state", "local_spatial"],
"risks": "1) 型内秩回填保留了型内分布但可能丢失跨型空间相干性(平滑的主要收益来源如果是跨型信息),导致 nbhd raw 回升;Engineer 应在第一次查分时同时监控 nbhd raw,若 > 0.0425(比父差)则停止。2) 稀有类型(<5 细胞)回退到全局 QREM 后无改善,收益被稀释。3) 改善幅度可能 < 1 分噪声;需 2 种子配对确认方向。4) 若 variogram 的瓶颈不在型内边际而在基因间相关性,则本机制无效——此时 variogram raw 几乎不动(< 1e-5 变化)。",
"family_id": "T2EI-01",
"mechanism": "将 QREM 的秩回填从全局逐基因改为逐基因×细胞类型:每个基因在每种型内独立做秩-值回填,精确保留型内边际分布(均值、方差、分位数),使平滑只改变型内空间秩结构而不扰乱型特异性多基因表达程序。",
"vs_constant_shift": "TQREM 不是对每个型加/乘一个常数:它重排每个基因在型内的值的分配(哪个细胞拿到哪个值),改变的是细胞间相对高低关系的空间相干性,而非型级别的均值或方差。型内均值、方差、支持集全部精确不变;变的是'哪个细胞拿到高值'这一空间模式。",
"mechanism_evidence": "1) variogram raw 从 0.007049 下降(目标方向);2) 诊断输出:对 3 个代表基因×3 个代表型,打印回填前后型内均值/方差差异(应 < 1e-10);3) 与全局 QREM 对比:型内秩回填后有多少细胞的值发生了变化(预期非零但比例 < 全局 QREM 的变化比例,因为型内约束更紧);4) nbhd raw 保持在 0.0422 附近(±0.001)证明空间相干性未丢失。",
"mechanism_off_control": "--ablate mechanism 关闭 TQREM,退回全局 QREM(父节点 53 逻辑),坐标与平滑步不变。预期差别:variogram raw 回到 0.007049(父值),mmd_u 回到 0.00975,其余逐位相同。若关掉后输出与父节点 53 逐位相同(sha256),证明唯一变化来自型内分层。",
"sources": []
} |
| 原始记录位置 | /home/spark-longxinyang/vec/runs/formal/20261003-171955-search-t2-embryo-interp-chain-12h/nodes/54/researcher.jsonl 5 KB /home/spark-longxinyang/vec/runs/formal/20261003-171955-search-t2-embryo-interp-chain-12h/nodes/54/researcher.stderr |
审查员
| 角色 | 审查员 alibaba-token-plan-cn/qwen3.8-max |
|---|---|
| 调用次数 | 2 次(失败 2 次) |
| 轮数 | 0 |
| 工具调用 | 共 0 次:— |
| 用时 | 2 分 |
| token 数 | 没有记录 |
| 任务(第一行) | 审查节点 n54 的程序是否越界读取、写死目标、钻评分器漏洞 |
| 报错 | {"name": "APIError", "data": {"message": "Your token-plan quota has been exhausted.", "statusCode": 429, "isRetryable": true, "responseHeaders": {"content-encoding": "gzip", "content-type": "text/pla… {"name": "APIError", "data": {"message": "Your token-plan quota has been exhausted.", "statusCode": 429, "isRetryable": true, "responseHeaders": {"content-encoding": "gzip", "content-type": "text/pla… |
| 最后的回答(摘录) | — |
| 原始记录位置 | /home/spark-longxinyang/vec/runs/formal/20261003-171955-search-t2-embryo-interp-chain-12h/nodes/54/reviewer.1.jsonl 1 KB /home/spark-longxinyang/vec/runs/formal/20261003-171955-search-t2-embryo-interp-chain-12h/nodes/54/reviewer.stderr |