Virtual Embryo Challenge更新于 10-04 03:53(北京时间) / 每 5 分钟更新

总览 · ← 返回运行 20261003-171955-search-t2-embryo-interp-chain-12h

节点 n51 在终选来历上

NBSMOOTH:把非零表达向 15-NN 邻域均值轻度平滑(β=0.35,nnz-only、池化伪批量中和、坐标不动)提升邻域相干;PLAN 的加性 VPRECENT 与 James-Stein 收缩均证否。

运行?一次完整的自动搜索或 Agent 会话,有自己的锁定配置和证据包。20261003-171955-search-t2-embryo-interp-chain-12h
父节点n49
子节点n53
操作?种子:人写的起点;改进:在父节点上改;草稿:从头写;修复:修父节点的报错。改进
状态已打分
分数搜索目标分 66.34(+0.2) · proxy 66.34(+0.2) · 3 次复测均分 65.85
审查通过 1 越界读取:未发现问题。全部 IO 只有 run.py:949(view/prior/tf_regulons/collectri_mouse.tsv.gz)与 run.py:1133-1145(prior/reactome、prior/go、prior/msigdb 的 gmt),都在 view_manifest.json 的 prior 清单内;无绝对路径、..、/mnt、/home、data/raw、downloads、src/common/evaluation;数据读取全走框架 view_io 的 load_manifest/panel_genes/read_stage(run.py…
用时?从运行开始到结束(或到现在)的挂钟时间。43 分
程序版本01713da47734602ff4bd158a67dc87a7ff5fa4e1 (programs.git)

方法说明?节点程序自带的 METHOD.md:这个程序做了什么、为什么。

来自 programs.git 01713da477:solution/METHOD.md

NBSMOOTH:把非零表达向 15-NN 邻域均值轻度平滑(β=0.35,nnz-only、池化伪批量中和、坐标不动)提升邻域相干;PLAN 的加性 VPRECENT 与 James-Stein 收缩均证否。

本节点做了什么(improve,父节点 49)

父节点 49(WIDENP,榜分 66.10 / 3 种子 65.66)四组最弱是 cell_state(A 半 59.6),其中 variogram(skill≈0.55)是地板以上最弱指标。PLAN 指定机制 VPRECENT:把 WITHINP 的乘性再居中因子 f_g 换成加性、"保方差" 的逐基因位移 δ_g=μ_full−μ_drawn(只作用于非零值、≤0 截 0)。

PLAN 机制被证否,改交父节点 ANALYSIS 建议 #2 的备选机制 NBSMOOTH(针对 local_spatial/nbhd,权重 25 最高)。

PLAN 机制 VPRECENT(加性再居中)——证否

实现于 WITHINP_MODE="add"(T2_WITHINP_MODE=add 复现)。δ_g=μ_full−μ_drawn,可加下限 δ_g≥c·μ_drawn,nnz-only、x+δ≤0→0,之后仍走原池化伪批量复原 g=clip(pb0/pb1,0.5,2)。A 半 seed 0,父锚点 65.4745(variogram 0.007101、mmd_u 0.01008、nbhd 0.04741、de_dir 0.3784):

解码榜分variogrammmd_unbhdde_dir
δ-floor c=−0.365.40290.0071310.010100.047720.3761
δ-floor c=−0.5(PLAN 初值)65.39440.0071240.010120.047740.3755
δ-floor c=−0.8(=无限制,−0.8 未绑定)65.39280.0071280.010130.047720.3756
1/p_nz 精确再居中(c=−0.5)未查分:δ 放大到 25、支持集损失 25%、g 饱和到 2.0,本地即判灾难————

四档全部劣于父节点,且 variogram(目标指标)不降反升(0.00710→0.00713),mmd_u、nbhd 同向变差。de_score 逐位冻结在 0.3214(pb-neutral 生效),de_dir 的 ±0.003 是 g 复原 float32 舍入在近零 dp 基因上的秩抖动,非真实信号。

证否原因(机制证据):PLAN 假设"加性只移均值、保方差"不成立——实测 max|var_after/var_before−1| = 109(不是 ≈0)。因为位移是 nnz-only + 0 截断:零保持不变、负值截 0,这不是对分布的常数平移,方差照样被扭曲,和它想替换的乘性 f 同类。进一步,代数上"保方差的乘性再居中"恰好退化成加性位移,所以整个再居中族(乘性/加性)已探尽,父节点的乘性 f(含其 f² 方差缩放)反而是族内最优。支持集损失(非零→零)平均 0.5%、最大 7.2%,在 2% 阈内,不是主因;主因是加性位移本身扭曲了 nnz 幅值分布。

备选机制 1:James-Stein 收缩(父建议 #1)——证否

实现于 WITHINP_MODE="js"(T2_JS_N0/T2_JS_P/T2_JS_WMIN)。把硬 clip 的 f 换成按可靠度收缩 f→1:f=clip(r^(W·w_n),0.6,1.6)。两种可靠度:

  • 尺寸可靠度(JS_P=0,w_n=n/(n+n0)):n0=15→65.4666、n0=30→65.4603;
  • 逐基因 SNR 可靠度(JS_P=2,w=snr²/(snr²+n0),snr=|log r|/CV):n0=0.001→65.4376、n0=0.003→65.4351。

四档全部劣于父(65.4745),且 variogram 随收缩单调变差(0.00710→0.00712–0.00713)。JS_N0=0 逐位还原父节点(sha256 一致),证明是干净推广。结论:把 f 往 1 收=削弱再居中,单调变差,印证父的"全量乘性再居中 + 硬 clip [0.6,1.6]"是族内最优。

备选机制 2(提交):NBSMOOTH 邻域相干平滑(父建议 #2)

实现于 NBSMOOTH_ENABLE(默认开),位于 mix_converge 末尾、所有表达改动之后、坐标已定型处:

  • 对最终输出坐标建 cKDTree,每个细胞取 k=15 最近邻(默认排除自身,T2_NBSMOOTH_SELF=0);
  • x_i ← (1−β)·x_i + β·mean_{j∈15NN(i)} x_j,nnz-only(零保持零,不做零→非零注入,遵节点 37 教训),负值截 0;
  • 池化伪批量中和:平滑后按基因 g=clip(pb_before/pb_after,0.5,2) 整体复原,dp 逐位还原 → de_score/de_direction 结构性冻结;
  • 坐标不动 → shape_scale 三项逐位不变;
  • β=0.35(默认)。单输入视图 b=None 走 copy_last 早退,NBSMOOTH 被 ia.size and ib.size 门跳过,自动 no-op。

为什么与 PSEUDOSTEP 不同:PSEUDOSTEP 把细胞向 型均值 收缩(与位置无关),解耦了表达-位置配对,故恶化 nbhd(父节点已证否)。NBSMOOTH 把细胞向 空间邻域均值 收缩,正是 neighborhood_mmd 读取的"表达-位置相干"同方向:混合云把同型的 a 侧/b 侧细胞放在对齐坐标上,其邻域内表达散布大于真实单一中间期,轻度 β 平滑把邻域均值分布收紧向真值。

提交配置的机制证据(3 种子配对,A 半)
seed父 49NBSMOOTH β=0.35Δnbhd(父→nb)local_spatial(父→nb)mmd_u(父→nb)variogram(父→nb)
065.474565.6959+0.2210.04741→0.0450761.81→63.020.01008→0.010340.007101→0.007117
165.126965.3320+0.2050.04777→0.0454961.62→62.800.00976→0.010060.007318→0.007320
265.031765.1917+0.1600.04744→0.0451461.79→62.980.01010→0.010570.007032→0.007043

3 种子均值 +0.196,方向全正。nbhd 3/3 改善(0.0474→0.0451,权重 25 + 结构门),local_spatial 3/3 约 +1.2;代价是 mmd_u 3/3 微升、cell_state 微降约 −0.3…−0.5。de_score/de_direction 逐位冻结(pb-neutral),shape_scale 逐位不变(坐标不动)——与 PLAN 的 expected_groups(cell_state、local_spatial)中 local_spatial 命中,cell_state 未命中(反被小幅牺牲,因 nbhd 权重远高于 mmd_u/variogram 的净损失)。

β 扫描(A 半 s0):0.1→65.560、0.2→65.633、0.3→65.681、0.35→65.696、0.4→65.701、0.5→65.670。峰值 0.35–0.4,0.5 掉头(cell_state 损失盖过 nbhd 收益)。取 β=0.35(近峰、对 cell_state 更保守,B 半更稳健)。

A 半→B 半迁移预期

净增益 +0.20(A 半)虽在 T2 ~1 分噪声内,但按 §5 应以配对差方向一致性判定——3 种子全正、nbhd 3/3 改善,是真实机制增益而非噪声。nbhd 改善源自空间相干这一通用性质,应迁移到 B 半(方法卡:插值两榜本地↔官网接近)。父 B 半 66.10,预期 NBSMOOTH B 半 ≈ 66.3。

关键参数

  • T2_WITHINP_MODE=mul(默认,父 49 乘性再居中,clip [0.6,1.6]、g [0.5,2.0])
  • T2_NBSMOOTH=1(默认开)、T2_NBSMOOTH_BETA=0.35、T2_NBSMOOTH_K=15、T2_NBSMOOTH_SELF=0、T2_NBSMOOTH_NNZ=1、T2_NBSMOOTH_PBNEUTRAL=1
  • VPRECENT/JS 作为被证否机制留在代码后(T2_WITHINP_MODE=add/js),默认不启用。

--ablate mechanism(机制关闭对照)

--ablate mechanism 设 NBSMOOTH_ENABLE=False、WITHINP_MODE="mul",其余管线(WIDENP clip、SIDEFRIM、NBHDCOH、DETR 等)不动 → 逐位还原父节点 49(sha256 = dabb16d3…,已验证 seed 0)。默认输出(NBSMOOTH 开)sha256 = e2a8efff…,与 ablate 不同 → mechanism_active=yes。

验证过 / 未验证

  • 验证过:VPRECENT 4 解码 + JS 4 配置全劣于父(证否);NBSMOOTH 3 种子配对全正、nbhd 3/3 改善;default/ablate 的 sha256;vec-check 通过;单输入 no-op;无 RNG(确定);无绝对时间/视图路径依赖(视图无关)。查分 15 次(额度内)。
  • 未验证:B 半(官网)实际分——只有 A 半;未在真实 final 视图(可能不同 bracket/细胞数)上跑,但机制数据驱动、单输入自动退化;β 更细网格(0.35–0.4 之间)与 k≠15 未扫(k=15 锁定为 nbhd 度量尺度)。

生物学知识来源

NBSMOOTH 不含硬编码的保留阶段测量值:k-NN 邻域、β、坐标全部由程序从 view 的输入表达与坐标现场计算。用到的通用机制知识仅为"空间邻近细胞表达相干"(组织内局部表达连续性,属细胞状态/空间转录组的通用性质,非某保留阶段的定量测量)。无外部数据、无保留阶段/基因型数据。

调研员的计划

名称VPRECENT:加性保方差再居中替代 WITHINP 乘性 f,修复 variogram 共变失真
动机父节点 49 的 cell_state 组 60.96 是四组最弱,其中 variogram skill 0.565(7.06/12.5)是地板以上最弱指标。WITHINP 的乘性因子 f_g 把型内基因方差缩放 f_g²(f=1.3 → 方差 +69%,f=0.8 → −36%),扭曲了 variogram 度量的基因对共变结构 E|x_i−x_j|^0.5。父节点 ANALYSIS 明确建议'保型内方差的再居中'。历史增益全部来自支持集/检出率通道与 draw-noise 再居中(ANALYSIS lessons),幅度族已系统性证否,本方案是再居中机制的结构性改进(乘性→加性),不属于幅度族。
做法步骤:
1. 在 WITHINP 位置,把乘性 f_g=clip((μ_full/μ_drawn)^w, lo, hi) 替换为加性位移 δ_g = μ_full(g) − μ_drawn(g)。对子集内每个细胞、每个 x_{ig}>0 的基因:x'{ig}=x{ig}+δ_g;若 x'{ig}≤0 则置 0(支持集只缩不扩,与 DETR 方向一致)。x{ig}=0 的不动。
2. 加性位移后重新计算池化伪批量 pb1,用现有 g=clip(pb0/pb1, 0.5, 2.0) 复原因子保 DE 通道中性(与父节点相同逻辑)。
3. 对 drawn 细胞数 <5 或来源阶段该类型 <10 细胞的子集跳过(沿用 WITHINP_MIN_DRAWN 阈值)。
4. 坐标、支持集的零→非零方向、DETR/NBHDCOH 置零管线全部不动。
5. 关键参数初值:δ_g 无额外超参(直接由 μ_full−μ_drawn 决定),仅保留 g-clip [0.5,2.0]。若加性位移导致过多支持集缩减(>2% 非零→零),加一个 δ 下限:δ_g = max(δ_g, −0.5×μ_drawn(g)),防止大负位移。搜索范围:该下限系数 ∈ {−0.3, −0.5, −0.8, 无限制}。
6. 单输入阶段退路:若只有一个输入阶段,无括号对侧,μ_full=μ_drawn,δ_g=0,机制自动退化为无操作。
7. 快速筛选:先 A 半 seed 0 跑 vec-score,看 variogram raw 是否 <0.007047(父值)且 de_score 不变;再用 seed 0/1/2 配对确认。预期提升在噪声内(<1 分),必须靠配对差方向一致性判定。
风险1. 加性位移使部分小表达非零值变零,支持集缩减过多 → variogram 反而恶化(类似密集支持集变化的灾难)。Engineer 应在第一次查分后统计非零→零的基因×细胞数,若 >2% 立即启用 δ 下限保护。2. 加性位移对高表达基因(μ_drawn>>δ)几乎无效、对低表达基因(μ_drawn≈|δ|)影响大,可能引入低表达基因的异质性 → 检查低表达基因子集的 variogram 贡献。3. 预期收益极小(≤0.05 分),可能完全在噪声内;若 3 种子配对差方向不一致(非全正),应判定无效并回退。4. pb-neutral 的 g 复用在加性位移后可能不精确(因为加性改变了池化均值的计算方式),需验证 dp 残差仍在 float32 舍入级。

代码改动?这个节点的程序和父节点程序的逐行差别:绿色是新增,红色是删除。

对比:父节点版本 29a1a6241c。改动的文件:solution/METHOD.md +59 −119、solution/README.md +8 −1、solution/run.py +240 −18

diff --git a/solution/METHOD.md b/solution/METHOD.mdindex 4fc0556..9a994a6 100644--- a/solution/METHOD.md+++ b/solution/METHOD.md@@ -1,138 +1,78 @@-WIDENP:放宽 WITHINP 再居中 clip f→[0.6,1.6]、伪批量复原 clip g→[0.5,2.0],更强移除抽样漂移且令 dp 复原精确;PLAN 的 PSEUDOSTEP 经 6 次查分全证否。+NBSMOOTH:把非零表达向 15-NN 邻域均值轻度平滑(β=0.35,nnz-only、池化伪批量中和、坐标不动)提升邻域相干;PLAN 的加性 VPRECENT 与 James-Stein 收缩均证否。 -## 概要+## 本节点做了什么(improve,父节点 49) -- family_id: T2EI-01(提交机制 WIDENP,属 draw-noise 再居中族);PLAN 指定的 T2EI-09(PSEUDOSTEP)已在榜上证否,代码保留在 `T2_PSEUDOSTEP=0` 默认关。-- 提交机制 **WIDENP**:在父节点 47 全部管线之上,只把 WITHINP(节点 44 的抽样漂移再居中)的两个 clip 放宽——-  - 型×侧再居中因子 `f` 的 clip:`[0.8, 1.25] → [0.6, 1.6]`(`WITHINP_CLIP`);-  - 池化伪批量复原因子 `g` 的 clip:`[0.9, 1.1] → [0.5, 2.0]`(`WITHINP_G_CLIP`)。-- `--ablate mechanism` 把两个 clip 还原到父值并强制 `PSEUDOSTEP=False`,输出与父节点 47 **逐位一致**(sha256 已验证,见下)。-- 纯 CPU,`EXECUTION.json = {"gpu": false}`;运行 ~1.9 s / ~0.6 GB,远低于 limits(28 GB / 30 min)。+父节点 49(WIDENP,榜分 66.10 / 3 种子 65.66)四组最弱是 **cell_state**(A 半 59.6),其中 **variogram**(skill≈0.55)是地板以上最弱指标。PLAN 指定机制 **VPRECENT**:把 WITHINP 的乘性再居中因子 f_g 换成加性、"保方差" 的逐基因位移 δ_g=μ_full−μ_drawn(只作用于非零值、≤0 截 0)。 -## 机制(WIDENP)如何工作+**PLAN 机制被证否**,改交父节点 ANALYSIS 建议 #2 的备选机制 **NBSMOOTH**(针对 local_spatial/nbhd,权重 25 最高)。 -WITHINP(节点 44)对每个「类型 × 侧(a/b)」的输出子集,用一个有界乘性因子-`f_g = clip(((μ_full+ε)/(μ_drawn+ε))^w, lo, hi)` 把**被抽中子集**的逐基因均值回正到该类型在来源-阶段的**全阶段**均值 μ_full,从而移除有限抽样带来的漂移(drawn 子集均值 ≠ 全阶段均值);随后用-一个逐基因的统一因子 `g = clip(pb0/pb1, glo, ghi)` 复原**池化伪批量**,使 dp(= pb_out − pb_ref,-de_score / de_direction 的输入)保持不变,机制的可见效应纯粹是「固定池化均值下、基因质量在类型/细胞-之间的再分配」——即 cell_state 通道(mmd_u / variogram / neighborhood_mmd)。+## PLAN 机制 VPRECENT(加性再居中)——证否 -父节点的诊断显示两个 clip 都在**触界**:`f_dev_max` 被夹在 0.25(真实漂移可达 0.6),`g_min/g_max`-同时贴在 0.9 和 1.1(`g_dev_mean=0.0487`)。这意味着:-1. `f` 触界 ⇒ 漂移大的类型×侧(多为小 drawn 子集)**没被充分回正**,残余抽样噪声留在 cell_state 通道;-2. `g` 触界 ⇒ 池化伪批量**复原不完全**,dp 有残余漂移,父节点 ANALYSIS 明确点名这会「使 de_direction 受损」。+实现于 `WITHINP_MODE="add"`(`T2_WITHINP_MODE=add` 复现)。δ_g=μ_full−μ_drawn,可加下限 δ_g≥c·μ_drawn,nnz-only、x+δ≤0→0,之后仍走原池化伪批量复原 g=clip(pb0/pb1,0.5,2)。A 半 seed 0,父锚点 **65.4745**(variogram 0.007101、mmd_u 0.01008、nbhd 0.04741、de_dir 0.3784): -WIDENP 同时放宽两个 clip:`f[0.6,1.6]` 允许回正最多 60% 的漂移(移除更多 draw-noise),`g[0.5,2.0]`-让 dp 复原**精确**(g 不再触界,实测 g∈[0.88,1.50],dp 复原残差落到 float32 舍入级)。这是一个因果清晰、-低风险的改动:它只加强一个已被证明有效的机制(WITHINP),不改支持集、不改坐标、不动 DE 秩通道的结构。+| 解码 | 榜分 | variogram | mmd_u | nbhd | de_dir |+|---|---|---|---|---|---|+| δ-floor c=−0.3 | 65.4029 | 0.007131 | 0.01010 | 0.04772 | 0.3761 |+| δ-floor c=−0.5(PLAN 初值) | 65.3944 | 0.007124 | 0.01012 | 0.04774 | 0.3755 |+| δ-floor c=−0.8(=无限制,−0.8 未绑定) | 65.3928 | 0.007128 | 0.01013 | 0.04772 | 0.3756 |+| 1/p_nz 精确再居中(c=−0.5) | 未查分:δ 放大到 25、支持集损失 25%、g 饱和到 2.0,本地即判灾难 | — | — | — | — | -## 关闭机制对照(`--ablate mechanism`)+四档全部劣于父节点,且 **variogram(目标指标)不降反升**(0.00710→0.00713),mmd_u、nbhd 同向变差。de_score 逐位冻结在 0.3214(pb-neutral 生效),de_dir 的 ±0.003 是 g 复原 float32 舍入在近零 dp 基因上的秩抖动,非真实信号。 -- `--ablate mechanism` ⇒ `WITHINP_CLIP=(0.8,1.25)`、`WITHINP_G_CLIP=(0.9,1.1)`、`PSEUDOSTEP=False`。-- 实测:`preds/final_ablate.h5ad` 与父节点 47 输出 `preds/parent_off.h5ad` **sha256 逐位一致**-  (`5787c387dd37ebb370ea768fa124dbf43115bcb075b85dbf12a40853e8b40d50`)。-- 因此 `mechanism_active = yes`(默认输出 `dabb16d3…` ≠ ablate 输出 `5787c387…`),关掉后榜分差 = WIDENP 的净收益。+**证否原因(机制证据)**:PLAN 假设"加性只移均值、保方差"不成立——实测 `max|var_after/var_before−1| = 109`(不是 ≈0)。因为位移是 **nnz-only + 0 截断**:零保持不变、负值截 0,这不是对分布的常数平移,方差照样被扭曲,和它想替换的乘性 f 同类。进一步,代数上"保方差的乘性再居中"恰好退化成加性位移,所以整个再居中族(乘性/加性)已探尽,父节点的乘性 f(含其 f² 方差缩放)反而是族内最优。支持集损失(非零→零)平均 0.5%、最大 7.2%,在 2% 阈内,不是主因;主因是加性位移本身扭曲了 nnz 幅值分布。 -## 机制生效的证据(A 半,seed 0/1/2 配对;baseline = 父节点 47)+## 备选机制 1:James-Stein 收缩(父建议 #1)——证否 -WIDENP 相对父节点的四组分与逐指标变化(raw,越小越好除 de_*):+实现于 `WITHINP_MODE="js"`(`T2_JS_N0/T2_JS_P/T2_JS_WMIN`)。把硬 clip 的 f 换成按可靠度收缩 f→1:`f=clip(r^(W·w_n),0.6,1.6)`。两种可靠度: -| seed | 榜分 base→WIDENP | Δ | de_direction | mmd_u | variogram | neighborhood_mmd |-|---|---|---|---|---|---|---|-| 0 | 65.447 → 65.475 | +0.028 | 0.3771→0.3784 | 0.01010→0.01008 | 0.007112→0.007101 | 0.04749→0.04741 |-| 1 | 65.079 → 65.124 | +0.045 | 0.3697→0.3722 | 0.00980→0.00976 | 0.007324→0.007318 | 0.04791→0.04777 |-| 2 | 65.025 → 65.031 | +0.006 | 0.3723→0.3715 | 0.01013→0.01010 | 0.007011→0.007032 | 0.04754→0.04744 |-| 均值 | 65.184 → 65.210 | **+0.026** | 2/3 改善 | **3/3 改善** | 2/3 改善 | **3/3 改善** |+- **尺寸可靠度**(JS_P=0,w_n=n/(n+n0)):n0=15→65.4666、n0=30→65.4603;+- **逐基因 SNR 可靠度**(JS_P=2,w=snr²/(snr²+n0),snr=|log r|/CV):n0=0.001→65.4376、n0=0.003→65.4351。 -- **哪些细胞被改变**:所有属于「有 ≥5 个 drawn 细胞、且其来源阶段该类型 ≥10 细胞」的类型×侧子集的细胞-  (proxy:43 个类型×侧被回正,覆盖共有类型与单侧类型)。WIDENP 只改这些子集的**表达值**(逐基因乘性回正 +-  统一 g 复原),不改支持集(不置零/不新增非零)、不改坐标。-- **四组分变化**:cell_state(mmd_u 三种子全改善、variogram 2/3)、local_spatial(neighborhood_mmd 三种子-  全改善,是最一致的信号——空间上聚簇的同类型细胞表达更相干)、expression_change(de_direction 2/3 改善,-  来自 g 放宽后 dp 精确复原)、shape_scale 逐位不动(WIDENP 不碰坐标)。-- de_score 三种子逐位不变(0.3214):dp 精确复原 ⇒ DE 秩/符号通道结构性冻结,与设计一致。+四档全部劣于父(65.4745),且 variogram 随收缩单调变差(0.00710→0.00712–0.00713)。`JS_N0=0` 逐位还原父节点(sha256 一致),证明是干净推广。结论:把 f 往 1 收=削弱再居中,单调变差,印证父的"全量乘性再居中 + 硬 clip [0.6,1.6]"是族内最优。 -幅度小(+0.026 A 半,在 T2 ~1 分噪声内),但 3 种子配对差全为正、且 nbhd/mmd_u 逐指标 3/3 一致改善,-是真实的小增益而非单次噪声(配对比较抵消了 seed 噪声,比绝对分敏感得多)。+## 备选机制 2(提交):NBSMOOTH 邻域相干平滑(父建议 #2) -## f-clip 宽度扫描(A 半 seed 0,均配 g[0.5,2.0])+实现于 `NBSMOOTH_ENABLE`(默认开),位于 mix_converge 末尾、所有表达改动之后、坐标已定型处: -| f-clip | 榜分 | Δ vs base | de_direction | variogram | nbhd |-|---|---|---|---|---|---|-| [0.8,1.25](父,g[0.9,1.1]) | 65.447 | — | 0.3771 | 0.007112 | 0.04749 |-| [0.8,1.25](仅 g 放宽[0.5,2.0]) | 65.446 | −0.001 | 0.3771 | 0.007114 | 0.04748 |-| [0.7,1.4] | 65.460 | +0.013 | 0.3776 | 0.007119 | 0.04745 |-| **[0.6,1.6](提交)** | **65.475** | **+0.028** | 0.3784 | 0.007101 | 0.04741 |-| [0.5,1.8] | 65.475 | +0.028 | 0.3782 | 0.007109 | 0.04740 |-| [0.4,2.0] | 65.481 | +0.034 | 0.3782 | 0.007100 | 0.04738 |--- 只放宽 g(不放宽 f):−0.001,**无效**——说明收益来自 f 放宽(更强回正),g 放宽只是让 dp 复原精确、-  顺带小幅改善 de_direction。-- f 越宽越好但**在 [0.6,1.6] 处饱和**([0.6,1.6]→[0.4,2.0] 仅 +0.006,在噪声内)。选 [0.6,1.6] 的理由:-  它是父节点 ANALYSIS next_suggestion #3 明确建议的宽度,且避免了 [0.4,2.0] 对 5–10 细胞小子集做-  ≤2.5× 激进回正可能带来的「拟合抽样噪声 / 抹掉真实型内方差」风险(更宽的 clip 只影响漂移最大的小子集,-  其漂移 increasingly 由抽样噪声而非真实漂移主导)。--## PLAN 机制 PSEUDOSTEP 被证否(6 次查分,A 半 seed 0,baseline=父 65.447)--PLAN 指定:每个输出细胞 `x' = x + λ·(μ_tgt − x)`,`μ_tgt=(1−t)μ_a+tμ_b`(全阶段均值),仅 DE 基因-(|Δ|≥0.25),位移后精确中和池化伪批量,坐标不动。实现于 `T2_PSEUDOSTEP=1`,默认关。逐指标 points/raw:--| 组合 | 榜分 | Δ | de_score | de_direction | mmd_u | variogram | neighborhood_mmd |+- 对最终输出坐标建 cKDTree,每个细胞取 **k=15** 最近邻(默认排除自身,`T2_NBSMOOTH_SELF=0`);+- `x_i ← (1−β)·x_i + β·mean_{j∈15NN(i)} x_j`,**nnz-only**(零保持零,不做零→非零注入,遵节点 37 教训),负值截 0;+- **池化伪批量中和**:平滑后按基因 `g=clip(pb_before/pb_after,0.5,2)` 整体复原,dp 逐位还原 → de_score/de_direction 结构性冻结;+- **坐标不动** → shape_scale 三项逐位不变;+- β=0.35(默认)。单输入视图 b=None 走 copy_last 早退,NBSMOOTH 被 `ia.size and ib.size` 门跳过,自动 no-op。++**为什么与 PSEUDOSTEP 不同**:PSEUDOSTEP 把细胞向 **型均值** 收缩(与位置无关),解耦了表达-位置配对,故恶化 nbhd(父节点已证否)。NBSMOOTH 把细胞向 **空间邻域均值** 收缩,正是 neighborhood_mmd 读取的"表达-位置相干"同方向:混合云把同型的 a 侧/b 侧细胞放在对齐坐标上,其邻域内表达散布大于真实单一中间期,轻度 β 平滑把邻域均值分布收紧向真值。++### 提交配置的机制证据(3 种子配对,A 半)++| seed | 父 49 | NBSMOOTH β=0.35 | Δ | nbhd(父→nb) | local_spatial(父→nb) | mmd_u(父→nb) | variogram(父→nb) | |---|---|---|---|---|---|---|---|-| λ=0.05, nnz-only, pb-neutral | 65.416 | −0.031 | 0.3214 | 0.3771 | 0.01007 | 0.007119 | 0.04778 |-| λ=0.10, nnz-only, pb-neutral | 65.376 | −0.071 | 0.3214 | 0.3771 | 0.01006 | 0.007125 | 0.04810 |-| λ=0.15, nnz-only, pb-neutral | 65.330 | −0.117 | 0.3214 | 0.3771 | 0.01007 | 0.007131 | 0.04842 |-| λ=0.10, **关 pb-neutral** | 64.949 | −0.498 | 0.3214 | 0.3765 | 0.01062 | 0.007078 | 0.05045 |-| λ=0.10, **dense(改支持集)** | 61.785 | −3.662 | 0.3214 | 0.3766 | 0.01125 | 0.017603 | 0.05171 |-| λ=0.10, dense + 关 pb-neutral | 61.968 | −3.479 | 0.3214 | 0.3798 | 0.01065 | 0.019357 | 0.04956 |--证否结论与教训:-1. **净效应全负**,且随 λ 单调变差(−0.031→−0.071→−0.117):型内均值方向的幅度收缩对 mmd_u 只有边际改善-   (skill 0.6403→0.6409,+0.01 pts,因为 α=5 收敛位移已把 within-type std 压到 0.91,分布已接近目标紧致度,-   再收缩边际收益递减),却**单调恶化 variogram 与 neighborhood_mmd**(收缩把细胞表达拉向类型均值,破坏了-   「表达-位置配对」,正是 nbhd 读的统计量)。λ≥0.10 时 nbhd raw 恶化 +6.1e-4 / +9.3e-4,**破 PLAN 的 +5e-4 否决线**。-2. **pb-neutral 是必需的**:关掉后 dp_dev 从 6e-6 跳到 0.09,mmd_u 与 nbhd 明显恶化,−0.50。-3. **nnz-only(保支持集)是关键**:dense 位移(改支持集,零→非零)令 variogram 崩溃 2.5×(0.0071→0.0176/0.0194),-   −3.5…−3.7。这直接印证 PLAN risk #2,也解释了为何本族一律用 nnz-only。-4. **DE 通道在 pb-neutral 下结构性冻结**:de_score 6 次全为 0.3214,de_direction 仅在关 pb-neutral(dp 漂移)时-   才动,证明「精确中和池化伪批量 ⇒ de_score/de_direction 不变」的设计判断成立(也因此 PLAN 把 expression_change-   列进 expected_groups 是不成立的:精确保 pb 时该组不可能动)。-5. 与树史一致:VARISO(19)/PAIR(11)/RESID/AMPSHRINK 等**幅度类**型内方差改造反复证否,variogram 卡在 ~0.55;-   cell_state 的历史增益全部来自**支持集/检出率通道**(DETR 37、NBHDCOH 41/43)与 **draw-noise 再居中**(WITHINP 44)。-   WIDENP 正落在后者(已被证明有效的通道)上,故取它作备选。+| 0 | 65.4745 | 65.6959 | **+0.221** | 0.04741→0.04507 | 61.81→63.02 | 0.01008→0.01034 | 0.007101→0.007117 |+| 1 | 65.1269 | 65.3320 | **+0.205** | 0.04777→0.04549 | 61.62→62.80 | 0.00976→0.01006 | 0.007318→0.007320 |+| 2 | 65.0317 | 65.1917 | **+0.160** | 0.04744→0.04514 | 61.79→62.98 | 0.01010→0.01057 | 0.007032→0.007043 |++3 种子均值 +0.196,**方向全正**。**nbhd 3/3 改善**(0.0474→0.0451,权重 25 + 结构门),local_spatial 3/3 约 +1.2;代价是 mmd_u 3/3 微升、cell_state 微降约 −0.3…−0.5。de_score/de_direction 逐位冻结(pb-neutral),shape_scale 逐位不变(坐标不动)——与 PLAN 的 expected_groups(cell_state、local_spatial)中 local_spatial 命中,cell_state 未命中(反被小幅牺牲,因 nbhd 权重远高于 mmd_u/variogram 的净损失)。++β 扫描(A 半 s0):0.1→65.560、0.2→65.633、0.3→65.681、0.35→65.696、0.4→65.701、0.5→65.670。峰值 0.35–0.4,0.5 掉头(cell_state 损失盖过 nbhd 收益)。取 **β=0.35**(近峰、对 cell_state 更保守,B 半更稳健)。++### A 半→B 半迁移预期++净增益 +0.20(A 半)虽在 T2 ~1 分噪声内,但按 §5 应以配对差方向一致性判定——3 种子全正、nbhd 3/3 改善,是真实机制增益而非噪声。nbhd 改善源自空间相干这一通用性质,应迁移到 B 半(方法卡:插值两榜本地↔官网接近)。父 B 半 66.10,预期 NBSMOOTH B 半 ≈ 66.3。++## 关键参数++- `T2_WITHINP_MODE=mul`(默认,父 49 乘性再居中,clip [0.6,1.6]、g [0.5,2.0])+- `T2_NBSMOOTH=1`(默认开)、`T2_NBSMOOTH_BETA=0.35`、`T2_NBSMOOTH_K=15`、`T2_NBSMOOTH_SELF=0`、`T2_NBSMOOTH_NNZ=1`、`T2_NBSMOOTH_PBNEUTRAL=1`+- VPRECENT/JS 作为被证否机制留在代码后(`T2_WITHINP_MODE=add`/`js`),默认不启用。++## --ablate mechanism(机制关闭对照)++`--ablate mechanism` 设 `NBSMOOTH_ENABLE=False`、`WITHINP_MODE="mul"`,其余管线(WIDENP clip、SIDEFRIM、NBHDCOH、DETR 等)不动 → **逐位还原父节点 49**(sha256 = dabb16d3…,已验证 seed 0)。默认输出(NBSMOOTH 开)sha256 = e2a8efff…,与 ablate 不同 → mechanism_active=yes。  ## 验证过 / 未验证 -**已验证**:-- 默认输出 = 已打分的 w_both 配置(seed 0/1/2 默认运行与 env 覆盖运行 sha256 逐位一致)。-- `--ablate mechanism` 逐位还原父节点 47(sha256 一致)。-- **视图无关**:伪装视图(所有阶段时间 +1 天平移 7.75/9.0→8.25、manifest 键顺序打乱、换随机路径 /tmp)-  输出与真实视图 **逐位一致**(sha256 `dabb16d3…`,`cmp` BYTE-IDENTICAL)。机制只用相对量(t=(target−a)/(b−a)、-  数据算出的类型均值),不依赖绝对时间/路径/键序。-- **确定性**:同 seed 重跑逐位一致;seed 0/1/2 各异(用 `np.random.default_rng`,无全局随机态依赖)。-- **单输入退路**:`interp_bracket` 无括号时返回 b=None,main() 走 copy_last 提前返回,mix_converge(含 WIDENP-  与 PSEUDOSTEP)根本不被调用;WIDENP 是 WITHINP 的 clip,本身要求 ia.size 且 ib.size。-- `vec-check` 通过;细胞数 = max_cells(5000),坐标有限,X 无 NaN/Inf,基因顺序 = genes.txt。--**未验证**:-- WIDENP 的收益(A 半 +0.026)在 B 半正式分上的兑现幅度未测(父节点 SIDEFRIM 曾 A 半 +0.14→官网 +0.07,-  坐标类本地收益被低估/高估都有可能);量级在 T2 ~1 分噪声内,只凭 3 种子配对一致性判定为真实小增益。-- 真实括号(E6.75+E8.0 之外的其它视图)上 f 触界程度可能不同,clip 宽度的最优值可能平移;但机制方向-  (放宽 f 移除更多 draw-noise)与具体括号无关。-- PSEUDOSTEP 未做 3 种子(首次查分即触发 nbhd 否决线 + 全分项恶化,按 PLAN risk #1/#3 与本节点判无效门槛停)。--## 知识来源--无外部生物学知识。WIDENP 与 PSEUDOSTEP 都是纯统计机制(抽样漂移再居中 / 伪时间幅度收缩),只用视图内-数据(表达、celltype 标签、阶段时间差)现场计算,不引入任何保留阶段/基因型的测量值、文献比例或记忆知识。--## 下一步建议--- cell_state:variogram 仍是最弱指标(skill 0.5515);WIDENP 只微改它。可试「更细粒度的 draw-noise 移除」——-  按类型×侧再居中的同时保留全阶段型内方差(当前 f 回正会连带缩放方差),或对 WITHINP_MIN_DRAWN 小子集用-  收缩估计(James-Stein 式)而非硬 clip。-- local_spatial:nbhd 对「同类型细胞表达相干」最敏感(WIDENP 3/3 改善它);可试在 NBHDCOH 的邻域相干置零之外,-  对**非零值**也做轻度邻域相干平滑(保池化均值),但须守 nbhd 否决线与 d2_shape。-- 幅度类型内方差改造(PSEUDOSTEP/VARISO/PAIR/RESID/AMPSHRINK)已系统性证否,不建议再搜该族。+- **验证过**:VPRECENT 4 解码 + JS 4 配置全劣于父(证否);NBSMOOTH 3 种子配对全正、nbhd 3/3 改善;default/ablate 的 sha256;vec-check 通过;单输入 no-op;无 RNG(确定);无绝对时间/视图路径依赖(视图无关)。查分 15 次(额度内)。+- **未验证**:B 半(官网)实际分——只有 A 半;未在真实 final 视图(可能不同 bracket/细胞数)上跑,但机制数据驱动、单输入自动退化;β 更细网格(0.35–0.4 之间)与 k≠15 未扫(k=15 锁定为 nbhd 度量尺度)。++## 生物学知识来源++NBSMOOTH 不含硬编码的保留阶段测量值:k-NN 邻域、β、坐标全部由程序从 view 的输入表达与坐标现场计算。用到的通用机制知识仅为"空间邻近细胞表达相干"(组织内局部表达连续性,属细胞状态/空间转录组的通用性质,非某保留阶段的定量测量)。无外部数据、无保留阶段/基因型数据。diff --git a/solution/README.md b/solution/README.mdindex 4df56cc..485b3f9 100644--- a/solution/README.md+++ b/solution/README.md@@ -1,4 +1,11 @@-# mix + 表达收敛管线 + DETR / DETR_EXT / NBHDCOH(_SHARED) / WITHINP + SIDEFRIM + WIDENP(T2:embryo:val_interp)+# mix + 表达收敛管线 + DETR / DETR_EXT / NBHDCOH(_SHARED) / WITHINP + SIDEFRIM + WIDENP + NBSMOOTH(T2:embryo:val_interp)++> **本节点(51)提交机制 = NBSMOOTH**(详见 METHOD.md):在父节点 49(WIDENP,乘性再居中)之上,+> 对最终非零表达向 15-NN 邻域均值做轻度平滑(β=0.35,nnz-only、池化伪批量中和、坐标不动),+> 提升 neighborhood_mmd 读取的表达-位置相干。A 半 3 种子配对 vs 父 +0.221/+0.205/+0.160(全正,+> nbhd 3/3 改善、local_spatial +1.2)。`--ablate mechanism`(或 `T2_NBSMOOTH=0`)逐位还原父节点 49。+> PLAN 指定的加性 VPRECENT 与备选 James-Stein 收缩均经多档查分证否(见 METHOD.md),代码保留在+> `T2_WITHINP_MODE=add/js` 后默认不启用。以下为父节点 49 及上游管线的历史说明。  父节点 47 管线原样保留(mix 混抽 + α=5 类型级收敛位移 + 软阈值基因权重 + 相关扩散 η=1/asym=0.85 + λ=6 投影加权 + β=0.2 型内配对收缩 + aniso 坐标整形 damp=1.25 + SIDEFRIMdiff --git a/solution/run.py b/solution/run.pyindex ec46ccc..3d79dbf 100644--- a/solution/run.py+++ b/solution/run.py@@ -8,6 +8,39 @@ exp(log r_a + SCALE_DAMP·t·Δlog r), and draws cells stratified by type: round(t·n) from the later stage, the rest from the earlier one. Coordinates travel with the cells. n is log-linear in t, clipped to the board range. +This node (51, NBSMOOTH, family T2EI-01): the PLAN mechanism (VPRECENT: replace+WITHINP's multiplicative recentering factor f_g with an ADDITIVE, supposedly+variance-preserving per-gene shift δ_g=μ_full−μ_drawn applied to nnz entries and+clipped at 0) was implemented and FALSIFIED on the board over 4 decodes (A-half+seed 0, parent anchor 65.4745): δ-floor −0.3 / −0.5 / −0.8(=none) → 65.4029 /+65.3944 / 65.3928, all WORSE than parent on every channel (variogram 0.00710→+0.00713, mmd_u 0.01008→0.0101+, nbhd 0.04741→0.0477+). The variance-preservation+premise FAILED (max|var_after/var_before−1| = 109, not ≈0): an nnz-only shift+with 0-clip is NOT a constant shift (zeros stay, negatives clip), so it distorts+variance exactly like the multiplicative f it replaced — and algebraically a+variance-preserving multiplicative recenter IS the additive shift, so the whole+recentering family is exhausted. The 1/p_nnz exact-recenter decode was+catastrophic (δ up to 25, 25% support loss). The parent-suggested James-Stein+shrinkage of f (size-reliability JS_P=0 n0∈{15,30} → 65.467/65.460; per-gene+SNR-reliability JS_P=2 n0∈{0.001,0.003} → 65.438/65.435) was ALSO falsified:+shrinking f toward 1 reduces recentering and monotonically worsens variogram,+confirming the parent's full multiplicative recentering is the family optimum.+The SUBMITTED alternative is NBSMOOTH (parent next_suggestion #2): a mild+spatial-coherence smoothing of the final nonzero expression toward each cell's+k=15-NN neighborhood average, x_i ← (1−β)x_i + β·mean_{j∈15NN(i)} x_j (nnz-only,+pooled-pseudobulk neutralized, coords fixed), β=0.35. Unlike PSEUDOSTEP (which+contracted toward the TYPE mean regardless of position and DECOUPLED expression+from position, worsening nbhd), NBSMOOTH contracts each cell toward its SPATIAL+neighbors — the same-direction coupling neighborhood_mmd rewards. A-half 3-seed+paired vs parent: +0.221/+0.205/+0.160 (mean +0.196, ALL positive); nbhd+improves 3/3 (0.0474→0.0451) and local_spatial +1.2 3/3 (61.8→63.0), the+highest-weight metric (25 pts + structure gate), at a small mmd_u/cell_state+cost (−0.3..−0.5). de_score/de_direction structurally frozen (exact pb restore)+and shape_scale bit-untouched (coords never move). β sweep peaks at 0.35–0.4+(β=0.5 turns down as cell_state loss overtakes the nbhd gain). --ablate+mechanism (or T2_NBSMOOTH=0) disables NBSMOOTH and reproduces parent node 49+bit-for-bit (sha256-verified). See METHOD.md.+ This node (49, WIDENP, family T2EI-01): the PLAN mechanism (PSEUDOSTEP: move every output cell a small step λ toward its type's interpolated target mean μ_tgt=(1−t)μ_a+tμ_b, DE genes only, exact pooled-pseudobulk neutralization,@@ -671,6 +704,71 @@ WITHINP_ALLTYPES = os.environ.get("T2_WITHINP_ALLTYPES", "1") == "1" WITHINP_PBNEUTRAL = os.environ.get("T2_WITHINP_PBNEUTRAL", "1") == "1" WITHINP_G_CLIP = (float(os.environ.get("T2_WITHINP_GLO", "0.5")),                   float(os.environ.get("T2_WITHINP_GHI", "2.0")))+# VPRECENT (mechanism of this node 51, family T2EI-01): replace WITHINP's+# multiplicative recentering factor f_g with an ADDITIVE, variance-preserving+# per-gene shift δ_g = μ_full(g) − μ_drawn(g). The multiplicative f rescales+# each subset's within-type gene variance by f² (f=1.6 → +156%, f=0.6 → −64%),+# distorting the gene-pair difference structure the variogram reads (parent's+# weakest above-floor metric, skill 0.565); the additive shift moves ONLY the+# mean, keeping the drawn subset's variance bit-exact wherever no 0-clipping+# occurs. Applied to post-displacement nnz entries only: x' = max(x + δ, 0) for+# x > 0, zeros untouched — the support can only SHRINK (nonzero→zero), the+# toxic zero→nonzero direction (node-37 lesson) is structurally impossible.+# δ floor: δ_g ≥ VPRE_FLOOR · μ_drawn(g) bounds support loss for genes whose+# drawn mean drifted far above the full mean (VPRE_FLOOR=999 → unlimited).+# VPRE_PNZ=1 scales δ by 1/p_nnz so the subset's ALL-CELL mean is recentered+# exactly (literal PLAN decode VPRE_PNZ=0 shifts only nnz values, correcting+# the all-cell mean by p_nnz·δ). The pooled-pseudobulk restore g afterwards is+# unchanged, so the DE-rank channel stays structurally frozen.+# WITHINP_MODE="mul" (or --ablate mechanism) restores the parent's+# multiplicative path bit-for-bit. Single-input views never reach this block+# (b is None → copy_last early return); if only one side has drawn cells,+# μ_full = μ_drawn per subset ⇒ δ = 0 ⇒ automatic no-op.+WITHINP_MODE = os.environ.get("T2_WITHINP_MODE", "mul")  # "add" | "mul" | "js"+VPRE_FLOOR = float(os.environ.get("T2_VPRE_FLOOR", "-0.5"))+VPRE_PNZ = os.environ.get("T2_VPRE_PNZ", "0") == "1"+# JS (submitted ALTERNATIVE mechanism of this node 51, family T2EI-01, after the+# PLAN's additive VPRECENT was falsified): the parent ANALYSIS next_suggestion #1+# — replace WITHINP's HARD multiplicative clip f=clip(r^W,LO,HI) with a James-+# Stein-style shrinkage that pulls f toward 1 by a per-subset RELIABILITY weight,+# so small / noisy type×side drawn subsets (whose drift estimate μ_full−μ_pre is+# mostly sampling error and whose f² variance scaling distorts the gene-pair+# difference structure the variogram reads) are recentered LESS, preserving their+# real within-type variance, while large reliable subsets keep the parent's full+# recentering. reliability w_n = n_drawn/(n_drawn + JS_N0·(σ_g/μ_g)^JS_P):+# JS_P=0 → pure size reliability (small subsets shrunk); JS_P=2 → per-gene+# signal-to-noise reliability (genes whose drift is small vs their within-type CV+# are shrunk toward no-op, genes with reliable drift keep full f). JS_N0=0+# reduces EXACTLY to the parent multiplicative f (w_n=1). Support bit-preserved+# (pure positive scaling), coordinates untouched, pb-neutral restore unchanged so+# the DE-rank channel stays structurally frozen.+JS_N0 = float(os.environ.get("T2_JS_N0", "10.0"))+JS_P = float(os.environ.get("T2_JS_P", "0.0"))+JS_WMIN = float(os.environ.get("T2_JS_WMIN", "0.0"))+# NBSMOOTH (second ALTERNATIVE mechanism of this node 51, family T2EI-01, parent+# ANALYSIS next_suggestion #2): a MILD spatial-coherence smoothing of the final+# nonzero expression toward each cell's k-NN (k=15, the exact scale the+# neighborhood_mmd metric reads) neighborhood average. Unlike PSEUDOSTEP (which+# contracted cells toward their TYPE mean regardless of position and thereby+# DECOUPLED expression from position, worsening nbhd), NBSMOOTH contracts each+# cell toward its SPATIAL neighbors — the same-direction coupling nbhd rewards+# (spatially-close cells become expression-coherent). The mixed cloud places+# a-side and b-side cells of a type at aligned coordinates; their within-+# neighborhood expression scatter exceeds a real single intermediate stage's, so+# a mild β-blend toward the local mean should tighten the neighborhood-average+# distribution toward the truth. nnz-only (zeros preserved → no zero→nonzero+# injection, node-37 lesson; support can only stay) and pooled-pseudobulk+# neutralized (one uniform per-gene rescale restores dp → de_score/de_direction+# structurally frozen). Coordinates never move. β=0 (or T2_NBSMOOTH=0, or+# --ablate mechanism) is an exact no-op reproducing the parent bit-for-bit.+NBSMOOTH_ENABLE = os.environ.get("T2_NBSMOOTH", "1") == "1"+NBSMOOTH_BETA = float(os.environ.get("T2_NBSMOOTH_BETA", "0.35"))+NBSMOOTH_K = int(os.environ.get("T2_NBSMOOTH_K", "15"))+NBSMOOTH_SELF = os.environ.get("T2_NBSMOOTH_SELF", "0") == "1"+NBSMOOTH_NNZ = os.environ.get("T2_NBSMOOTH_NNZ", "1") == "1"+NBSMOOTH_PBNEUTRAL = os.environ.get("T2_NBSMOOTH_PBNEUTRAL", "1") == "1"+NBSMOOTH_G_CLIP = (float(os.environ.get("T2_NBSMOOTH_GLO", "0.5")),+                   float(os.environ.get("T2_NBSMOOTH_GHI", "2.0"))) # 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@@ -1881,7 +1979,14 @@ def mix_converge(stage_a, stage_b, t: float, params: dict, alpha: float, view: s                     "withinp_drift_rel_med": None, "withinp_alltypes": bool(WITHINP_ALLTYPES),                     "withinp_pbneutral": None,                     "withinp_g_min": None, "withinp_g_max": None,-                    "withinp_g_dev_mean": None}+                    "withinp_g_dev_mean": None,+                    "withinp_mode": WITHINP_MODE, "vpre_floor": VPRE_FLOOR,+                    "vpre_pnz": bool(VPRE_PNZ),+                    "vpre_delta_abs_mean": None, "vpre_delta_abs_max": None,+                    "vpre_var_dev_max": None, "vpre_shrink_frac_mean": None,+                    "vpre_shrink_frac_max": None,+                    "js_n0": JS_N0, "js_p": JS_P, "js_wmin": JS_WMIN,+                    "js_w_mean": None, "js_w_min": None, "js_w_max": None}     if WITHINP and WITHINP_W != 0.0 and ia.size and ib.size:         la_w = np.asarray(stage_a.labels).astype(str)         lb_w = np.asarray(stage_b.labels).astype(str)@@ -1895,6 +2000,8 @@ def mix_converge(stage_a, stage_b, t: float, params: dict, alpha: float, view: s         pb_pool0 = ((xa.astype(np.float64).sum(axis=0) + xb.astype(np.float64).sum(axis=0))                     / n_out_w) if WITHINP_PBNEUTRAL else None         fdev, drifts, pbsh = [], [], []+        vpre_dev, vpre_shr, vpre_dlt = [], [], []+        js_w = []         # WITHINP_ALLTYPES: the recentering for one side only needs that side's         # FULL-stage mean of the type — no cross-side information. Restricting         # to types present at BOTH stages (the displacement gate) would skip@@ -1923,12 +2030,57 @@ def mix_converge(stage_a, stage_b, t: float, params: dict, alpha: float, view: s                 mu_full = Xfd.mean(axis=0)                 tstd = Xfd.std(axis=0)                 mu_pre = pre[mo].astype(np.float64).mean(axis=0)-                ratio = (mu_full + WITHINP_EPS) / (mu_pre + WITHINP_EPS)-                f = np.clip(ratio ** WITHINP_W, WITHINP_CLIP[0], WITHINP_CLIP[1]).astype(np.float32)                 pb0 = X[mo].astype(np.float64).mean(axis=0)-                X[mo] = X[mo] * f[None, :]+                if WITHINP_MODE == "add":+                    # VPRECENT: additive, variance-preserving recentering.+                    # δ_g = μ_full − μ_drawn, floored at VPRE_FLOOR·μ_drawn to+                    # bound support loss; applied to post-displacement nnz+                    # entries with clip-at-0 (support can only shrink).+                    delta = mu_full - mu_pre+                    if VPRE_FLOOR < 900.0:+                        delta = np.maximum(delta, VPRE_FLOOR * mu_pre)+                    Xsub = X[mo].astype(np.float64)+                    nz = Xsub > 0+                    if VPRE_PNZ:+                        pnz = nz.mean(axis=0)+                        delta = np.where(pnz > 1e-6, delta / np.maximum(pnz, 1e-6), 0.0)+                    var_before = Xsub.var(axis=0)+                    newsub = np.where(nz, np.maximum(Xsub + delta[None, :], 0.0), Xsub)+                    X[mo] = newsub.astype(np.float32)+                    new64 = X[mo].astype(np.float64)+                    var_after = new64.var(axis=0)+                    vok = var_before > 1e-9+                    if vok.any():+                        vpre_dev.append(float(np.abs(var_after[vok] / var_before[vok] - 1.0).max()))+                    n_nz = int(nz.sum())+                    if n_nz:+                        vpre_shr.append(float((nz & (new64 <= 0)).sum()) / n_nz)+                    vpre_dlt.append(np.abs(delta))+                elif WITHINP_MODE == "js":+                    n_sub = float(int(mo.sum()))+                    ratio = (mu_full + WITHINP_EPS) / (mu_pre + WITHINP_EPS)+                    if JS_P == 0.0:+                        # pure size reliability: small drawn subsets shrunk to f≈1+                        w_n = np.full(mu_full.shape, n_sub / (n_sub + JS_N0), dtype=np.float64)+                    else:+                        # per-gene signal-to-noise reliability: signal = |log drift|,+                        # noise = within-type CV (σ_g/μ_g). Genes whose drift is+                        # small vs their CV are shrunk toward no-op.+                        cv = tstd / np.maximum(mu_full, 1e-6)+                        snr = np.abs(np.log(np.maximum(ratio, 1e-9))) / np.maximum(cv, 1e-6)+                        snr_p = np.power(snr, JS_P)+                        w_n = snr_p / (snr_p + JS_N0)+                    w_n = np.clip(w_n, JS_WMIN, 1.0)+                    f = np.clip(ratio ** (WITHINP_W * w_n), WITHINP_CLIP[0], WITHINP_CLIP[1]).astype(np.float32)+                    X[mo] = X[mo] * f[None, :]+                    fdev.append(np.abs(f - 1.0))+                    js_w.append(w_n)+                else:+                    ratio = (mu_full + WITHINP_EPS) / (mu_pre + WITHINP_EPS)+                    f = np.clip(ratio ** WITHINP_W, WITHINP_CLIP[0], WITHINP_CLIP[1]).astype(np.float32)+                    X[mo] = X[mo] * f[None, :]+                    fdev.append(np.abs(f - 1.0))                 pb1 = X[mo].astype(np.float64).mean(axis=0)-                fdev.append(np.abs(f - 1.0))                 drifts.append(np.abs(mu_full - mu_pre) / np.maximum(tstd, 1e-6))                 pbsh.append(float(np.abs(pb1 - pb0).max()))                 withinp_info["withinp_n_sides"] += 1@@ -1936,8 +2088,21 @@ def mix_converge(stage_a, stage_b, t: float, params: dict, alpha: float, view: s             fall = np.concatenate(fdev)             withinp_info["withinp_f_dev_mean"] = float(fall.mean())             withinp_info["withinp_f_dev_max"] = float(fall.max())+        if drifts:             withinp_info["withinp_pb_maxshift"] = float(np.max(pbsh))             withinp_info["withinp_drift_rel_med"] = float(np.median(np.concatenate(drifts)))+        if vpre_dlt:+            dall = np.concatenate(vpre_dlt)+            withinp_info["vpre_delta_abs_mean"] = float(dall.mean())+            withinp_info["vpre_delta_abs_max"] = float(dall.max())+            withinp_info["vpre_var_dev_max"] = float(max(vpre_dev)) if vpre_dev else None+            withinp_info["vpre_shrink_frac_mean"] = float(np.mean(vpre_shr)) if vpre_shr else None+            withinp_info["vpre_shrink_frac_max"] = float(np.max(vpre_shr)) if vpre_shr else None+        if js_w:+            jw = np.concatenate(js_w)+            withinp_info["js_w_mean"] = float(jw.mean())+            withinp_info["js_w_min"] = float(jw.min())+            withinp_info["js_w_max"] = float(jw.max())         if WITHINP_PBNEUTRAL and pb_pool0 is not None and n_out_w:             # Restore each gene's POOLED output pseudobulk (hence dp, the input             # of de_score / de_direction) to its pre-WITHINP value with one@@ -2971,6 +3136,47 @@ def mix_converge(stage_a, stage_b, t: float, params: dict, alpha: float, view: s     info.update(pstep_info)     info.update(pbproj_info)     info.update(tshift_info)+    # NBSMOOTH (this node 51, second alternative mechanism): mild spatial-+    # coherence smoothing of the final nnz expression toward each cell's k-NN+    # neighborhood average (k=15, the neighborhood_mmd scale). nnz-only ++    # pb-neutral + coords fixed. See the config block for the full rationale.+    nbsmooth_info = {"nbsmooth_enable": bool(NBSMOOTH_ENABLE and NBSMOOTH_BETA > 0.0),+                     "nbsmooth_beta": NBSMOOTH_BETA, "nbsmooth_k": NBSMOOTH_K,+                     "nbsmooth_self": bool(NBSMOOTH_SELF), "nbsmooth_nnz": bool(NBSMOOTH_NNZ),+                     "nbsmooth_pbneutral": bool(NBSMOOTH_PBNEUTRAL),+                     "nbsmooth_move_rel_mean": None, "nbsmooth_pb_maxshift": None,+                     "nbsmooth_g_min": None, "nbsmooth_g_max": None}+    if (NBSMOOTH_ENABLE and NBSMOOTH_BETA > 0.0 and ia.size and ib.size+            and expr.shape[0] >= NBSMOOTH_K + 2 and coords.shape[0] == expr.shape[0]):+        from scipy.spatial import cKDTree+        pb_before_nb = expr.mean(axis=0).astype(np.float64)+        tree = cKDTree(coords)+        kq = NBSMOOTH_K if NBSMOOTH_SELF else NBSMOOTH_K + 1+        _, idx = tree.query(coords, k=kq)+        if not NBSMOOTH_SELF:+            idx = idx[:, 1:]  # drop self (col 0)+        idx = np.asarray(idx, dtype=np.int64)+        nb_mean = expr[idx].mean(axis=1).astype(np.float64)  # (n, G)+        cur = expr.astype(np.float64)+        new = (1.0 - NBSMOOTH_BETA) * cur + NBSMOOTH_BETA * nb_mean+        if NBSMOOTH_NNZ:+            new = np.where(cur > 0, new, cur)  # preserve support (zeros stay)+        new = np.clip(new, 0.0, None)+        move = np.abs(new - cur)+        denom = float(np.abs(cur).sum()) + 1e-12+        nbsmooth_info["nbsmooth_move_rel_mean"] = float(move.sum() / denom)+        expr = new.astype(np.float32)+        if NBSMOOTH_PBNEUTRAL:+            pb_after_nb = expr.mean(axis=0).astype(np.float64)+            nbsmooth_info["nbsmooth_pb_maxshift"] = float(np.abs(pb_after_nb - pb_before_nb).max())+            gnb = np.ones_like(pb_before_nb)+            oknb = (pb_after_nb > 1e-9) & (pb_before_nb > 1e-9)+            gnb[oknb] = np.clip(pb_before_nb[oknb] / pb_after_nb[oknb],+                                NBSMOOTH_G_CLIP[0], NBSMOOTH_G_CLIP[1])+            expr = (expr * gnb.astype(np.float32)[None, :]).astype(np.float32)+            nbsmooth_info["nbsmooth_g_min"] = float(gnb.min())+            nbsmooth_info["nbsmooth_g_max"] = float(gnb.max())+    info.update(nbsmooth_info)     info.update(clamp_info)     info.update(resid_info)     info.update(spat_info)@@ -2990,23 +3196,29 @@ def main() -> None:     parser.add_argument("--out", required=True)     parser.add_argument("--seed", type=int, default=0)     parser.add_argument("--ablate", default=None,-                        help="mechanism-off control: 'mechanism' (or any name) disables "-                             "PSEUDOSTEP (this node's submitted pseudotime-step contraction) — "-                             "an exact no-op that reproduces parent node 47 bit-for-bit")+                        help="mechanism-off control: 'mechanism' (or any name) reverts "+                             "VPRECENT (this node's additive variance-preserving recentering) "+                             "to the parent's multiplicative WITHINP f — an exact no-op that "+                             "reproduces parent node 49 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+    global WITHINP_CLIP, WITHINP_G_CLIP, WITHINP_MODE, VPRE_FLOOR, VPRE_PNZ+    global NBSMOOTH_ENABLE, NBSMOOTH_BETA, JS_N0     if args.ablate:-        # Only THIS node's submitted mechanism (WIDENP: the widened WITHINP-        # recentering / pb-restore clips) is switched off (contract G39.7);-        # SIDEFRIM (node 47), NBHDCOH, DETR and everything upstream stay active.-        # Reverting BOTH clips to the parent values is an exact no-op relative to-        # node 47, so the ablated output reproduces parent node 47 bit-for-bit.-        # PSEUDOSTEP (the falsified PLAN mechanism) is default-off and also forced-        # off here; PROGCOH/ANISO2 are default-off.-        WITHINP_CLIP = (0.8, 1.25)-        WITHINP_G_CLIP = (0.9, 1.1)+        # Only THIS node's submitted mechanism is switched off (contract G39.7);+        # WIDENP's clips (node 49), SIDEFRIM (node 47), NBHDCOH, DETR and+        # everything upstream stay active. The submitted mechanism is whichever+        # of VPRECENT (additive) / JS (James-Stein) / NBSMOOTH (spatial smoothing)+        # is default-on; reverting WITHINP_MODE to the parent's multiplicative f+        # (node 49's widened clips kept), disabling NBSMOOTH, and zeroing JS's+        # shrinkage is an exact no-op relative to node 49, so the ablated output+        # reproduces parent node 49 bit-for-bit. PSEUDOSTEP (the falsified+        # node-49 PLAN mechanism) is default-off and also forced off here;+        # PROGCOH/ANISO2 are default-off.+        WITHINP_MODE = "mul"+        NBSMOOTH_ENABLE = False+        NBSMOOTH_BETA = 0.0         PSEUDOSTEP = False         PROGCOH = False         ANISO2_GAMMA = 0.0@@ -3154,6 +3366,16 @@ def main() -> None:                                         "withinp_pb_maxshift", "withinp_drift_rel_med", "withinp_alltypes",                                         "withinp_pbneutral", "withinp_g_min", "withinp_g_max",                                         "withinp_g_dev_mean",+                                        "withinp_mode", "vpre_floor", "vpre_pnz",+                                        "vpre_delta_abs_mean", "vpre_delta_abs_max",+                                        "vpre_var_dev_max", "vpre_shrink_frac_mean",+                                        "vpre_shrink_frac_max",+                                        "js_n0", "js_p", "js_wmin", "js_w_mean",+                                        "js_w_min", "js_w_max",+                                        "nbsmooth_enable", "nbsmooth_beta", "nbsmooth_k",+                                        "nbsmooth_self", "nbsmooth_nnz", "nbsmooth_pbneutral",+                                        "nbsmooth_move_rel_mean", "nbsmooth_pb_maxshift",+                                        "nbsmooth_g_min", "nbsmooth_g_max",                                         "pseudostep_enable", "pseudostep_lambda", "pseudostep_tau",                                         "pseudostep_nnz_only", "pseudostep_pbneutral",                                         "pseudostep_n_types", "pseudostep_n_cells",

调研来源?调研员查到并用到的知识条目和文献检索结果(只列标题和编号)。

用到的知识库条目

编号标题出处
k007Interval staging and held-out-window filtering of external datanotes/official/来件/virtualembryo.ai/rules.md
k026Canonicalise predicted 3D coordinates before submissionnotes/pitfalls/04_scorer_invariance.md
k024World-model evaluation dimensions for state-transition predictorsnotes/competition/07_biomedical_world_models.md

分析结果?分析员写的 ANALYSIS.json:改了什么、各组分数怎么变、假设是否成立、经验和下一步建议。

改了什么PLAN 的 VPRECENT(加性再居中)与备选 James-Stein 收缩均实现后在 A 半证否,最终提交父建议 #2 的 NBSMOOTH:在所有表达改动之后、坐标定型处,对非零表达向 15-NN 邻域均值平滑 x←(1−β)x+β·mean(15NN)(β=0.35,nnz-only、池化伪批量复原 g=clip(pb0/pb1,0.5,2)、坐标不动);ablate 关闭后逐位还原父节点 49。
各组分数的变化cell_state:轻微变差,接近噪声:mmd_u raw 0.00954→0.00982,得分 −0.08;variogram raw 0.007047→0.00706,得分 −0.01;组 60.96→60.61(−0.35,在 T2 ~1 分噪声内)。
expression_change:不变:de_score 0.3448、de_direction 0.397 均逐位与父相同(pb-neutral 复原使 DE 秩通道结构性冻结),组 62.76→62.76。
local_spatial:变好:neighborhood_mmd raw 0.04554→0.04309,skill 0.631→0.644,得分 +0.33;组 63.12→64.42(+1.30,略超噪声)。A 半 3 种子配对 nbhd 3/3 改善(0.0474→0.0451),与榜上方向一致。
shape_scale:不变:d2_shape 0.00721、occupancy_dice 0.8177、scale_log_ratio 0.0099 逐位与父相同(坐标不动),组 77.57→77.57。
family_idT2EI-01
假设是否成立否
经验
  1. PLAN 假设『加性位移保方差』不成立:nnz-only + 0 截断不是常数平移(零不动、负值截 0),实测 max|var_after/var_before−1|=109,与乘性 f 同类扭曲;VPRECENT 4 档解码(δ-floor −0.3/−0.5/−0.8/无、1/p_nz)全劣于父(65.40 vs 65.47),且目标指标 variogram 不降反升(0.00710→0.00713)。
  2. 再居中族已探尽:代数上『保方差的乘性再居中』就退化成加性位移,两条路都证否;James-Stein 把 f 向 1 收缩(尺寸/SNR 两种可靠度、4 配置)单调变差(JS_N0=0 逐位还原父),说明父节点的全量乘性再居中 + 硬 clip [0.6,1.6] 是族内最优。
  3. 向空间邻域均值收缩与向型均值收缩方向相反:PSEUDOSTEP(型均值)解耦表达-位置、恶化 nbhd;NBSMOOTH(15-NN,正是 nbhd 度量的尺度)3 种子配对全正、nbhd 3/3 改善,且 A 半配对均值 +0.196 与榜上 +0.24 吻合——插值榜上多种子配对差对 ~0.2 量级增益可信且可外推。
  4. 用 β=0.35 的 nbhd 收益换 mmd_u 微损(3/3 微升)净值为正,因 nbhd 权重 25 且门住形状组;β=0.5 时 cell_state 损失盖过收益掉头,β 最优点在 0.35–0.4。
  5. 池化伪批量复原 + 坐标不动的组合可把效应精确隔离到 cell_state/local_spatial 两组(DE 与 shape 逐位冻结),是干净的机制验证脚手架。
mechanism_active是
下一步建议
  1. local_spatial/cell_state:NBSMOOTH 的 k×β 联合细调(k∈{10,20}、β∈{0.35,0.4})或按邻域 a/b 侧混合纯度自适应 β(混合度高的邻域多平滑、纯邻域少平滑),目标保住 nbhd 增益同时收回 mmd_u −0.08/cell_state −0.35 的损失。
  2. local_spatial:把均匀 β 换成选择性平滑——只对 nbhd 贡献大的边缘/稀疏区细胞(邻域表达散布高者)平滑,避免对已相干区域过度平均(过度平均正是 mmd_u 变差来源)。
  3. cell_state:variogram(skill 0.564)仍是地板以上最弱项,但再居中族与幅度族(PSEUDOSTEP/VARISO/PAIR/RESID/AMPSHRINK/VPRECENT/JS)已系统性证否,不要再搜该族;只考虑支持集/检出率通道(DETR 37、NBHDCOH 41/43 曾有效)的结构级改造。

对话摘要?每个角色和大模型对话的统计:轮数、工具调用、用时、token 数和最后的回答摘录;原始记录只给路径。

只给统计和最后回答的摘录;完整对话请到原始记录位置里列出的文件看。

分析员

角色?调研员写计划、工程师改代码、分析员解读分数、审查员检查作弊。分析员 alibaba-token-plan-cn/qwen3.8-max
调用次数1 次
轮数?大模型一共回复了几轮(每轮可以调用多个工具)。6
工具调用?大模型调用读文件、执行命令等工具的次数,按工具名统计。共 7 次:bash 6、write 1
用时1 分
token 数?输入 / 输出(含思考)的 token 数,来自接口返回的用量。输入 26,554 · 输出 1,668 · 思考 1,589
任务(第一行)分析节点 n51 的打分结果,写 ANALYSIS.json
最后的回答(摘录)
ANALYSIS.json written
原始记录位置?完整对话记录在 Spark 上的文件路径;看板不复制原始内容。/home/spark-longxinyang/vec/runs/formal/20261003-171955-search-t2-embryo-interp-chain-12h/nodes/51/analyst.jsonl 21 KB
/home/spark-longxinyang/vec/runs/formal/20261003-171955-search-t2-embryo-interp-chain-12h/nodes/51/analyst.stderr

工程师

角色工程师 alibaba-token-plan-cn/qwen3.8-max
调用次数1 次
轮数79
工具调用共 84 次:bash 60、edit 20、read 3、write 1
用时39 分
token 数输入 181,232 · 输出 27,824 · 思考 49,704
任务(第一行)按计划修改程序:VPRECENT:加性保方差再居中替代 WITHINP 乘性 f,修复 variogram 共变失真
最后的回答(摘录)
节点 51 完成。全部验证通过:default=NBSMOOTH β0.35(sha e2a8)、`--ablate mechanism`=父节点49逐位还原(sha dabb16)、vec-check ok、确定性(两次运行 sha 一致)、运行 2.2s / 0.6GB(限 30min/28GB)、视图无关(不读 board/mode/绝对时间)、无 RNG。查分用了 19/20。

**做了什么**
- 按 PLAN 实现 **VPRECENT**(加性再居中替代 WITHINP 乘性 f,nnz-only + 0 截断,δ 下限可调)→ **证否**:4 档解码(floor −0.3/−0.5/−0.8/无 + 1/p_nz)全劣于父,variogram 不降反升。机制假设(保方差)实测失败:`max|var_after/var_before−1|=109`,因 nnz-only+截断非常数平移;且代数上"保方差乘性再居中"就等于加性位移,整个再居中族已探尽。
- 备选 1 **James-Stein 收缩 f**(父建议 #1,尺寸/SNR 两种可靠度)→ 4 配置全证否(收缩=削弱再居中,单调变差;JS_N0=0 逐位还原父)。
- 备选 2(**提交**)**NBSMOOTH**(父建议 #2):对最终非零表达向 15-NN 邻域均值轻度平滑(β=0.35,nnz-only、池化伪批量中和、坐标不动)。与 PSEUDOSTEP 不同——向**空间**邻域(而非型均值)收缩,正是 neighborhood_mmd 读取的表达-位置相干方向。

**查分结果(A 半 3 种子配对 vs 父 49)**:+0.221 / +0.205 / +0.160,均值 **+0.196 全正**;nbhd 3/3 改善(0.0474→0.0451,权重 25)、local_spatial 3/3 约 +1.2;代价 mmd_u/cell_state 微降约 −0.3…−0.5;de_score/de_direction 逐位冻结、shape_scale 逐位不变。β 扫描峰值 0.35–0.4,取 0.35(对弱组更保守)。

**下一步最值得试**
1. NBSMOOTH 的 k 与 β 联合细调(k∈{10,20}、β∈{0.35,0.4}),或按邻域同源纯度(a/b 侧混合度)自适应 β,试图在保住 nbhd 增益的同时减小 mmd_u/cell_state 损失。
2. 把 NBSMOOTH 的空间相干思路用到支持集通道之外——例如对 nbhd 贡献最大的边缘/稀疏区细胞单独加权平滑。
3. cell_state(variogram)仍是地板以上最弱项,但再居中/幅度族已系统性证否;需换非幅度机制(如检出率/共变的结构级改造)才可能有空间。
原始记录位置/home/spark-longxinyang/vec/runs/formal/20261003-171955-search-t2-embryo-interp-chain-12h/nodes/51/engineer.jsonl 507 KB
/home/spark-longxinyang/vec/runs/formal/20261003-171955-search-t2-embryo-interp-chain-12h/nodes/51/engineer.stderr

调研员

角色调研员 alibaba-token-plan-cn/qwen3.8-max
调用次数1 次
轮数1
工具调用共 0 次:—
用时2 分
token 数输入 21,968 · 输出 1,409 · 思考 5,573
任务(第一行)为节点 n51(改进,父节点 n49)写改进计划 PLAN.json
最后的回答(摘录)
1. 在 WITHINP 位置,把乘性 f_g=clip((μ_full/μ_drawn)^w, lo, hi) 替换为加性位移 δ_g = μ_full(g) − μ_drawn(g)。对子集内每个细胞、每个 x_{ig}>0 的基因:x'_{ig}=x_{ig}+δ_g;若 x'_{ig}≤0 则置 0(支持集只缩不扩,与 DETR 方向一致)。x_{ig}=0 的不动。\n2. 加性位移后重新计算池化伪批量 pb1,用现有 g=clip(pb0/pb1, 0.5, 2.0) 复原因子保 DE 通道中性(与父节点相同逻辑)。\n3. 对 drawn 细胞数 <5 或来源阶段该类型 <10 细胞的子集跳过(沿用 WITHINP_MIN_DRAWN 阈值)。\n4. 坐标、支持集的零→非零方向、DETR/NBHDCOH 置零管线全部不动。\n5. 关键参数初值:δ_g 无额外超参(直接由 μ_full−μ_drawn 决定),仅保留 g-clip [0.5,2.0]。若加性位移导致过多支持集缩减(>2% 非零→零),加一个 δ 下限:δ_g = max(δ_g, −0.5×μ_drawn(g)),防止大负位移。搜索范围:该下限系数 ∈ {−0.3, −0.5, −0.8, 无限制}。\n6. 单输入阶段退路:若只有一个输入阶段,无括号对侧,μ_full=μ_drawn,δ_g=0,机制自动退化为无操作。\n7. 快速筛选:先 A 半 seed 0 跑 vec-score,看 variogram raw 是否 <0.007047(父值)且 de_score 不变;再用 seed 0/1/2 配对确认。预期提升在噪声内(<1 分),必须靠配对差方向一致性判定。",
  "expected_groups": ["cell_state", "local_spatial"],
  "risks": "1. 加性位移使部分小表达非零值变零,支持集缩减过多 → variogram 反而恶化(类似密集支持集变化的灾难)。Engineer 应在第一次查分后统计非零→零的基因×细胞数,若 >2% 立即启用 δ 下限保护。2. 加性位移对高表达基因(μ_drawn>>δ)几乎无效、对低表达基因(μ_drawn≈|δ|)影响大,可能引入低表达基因的异质性 → 检查低表达基因子集的 variogram 贡献。3. 预期收益极小(≤0.05 分),可能完全在噪声内;若 3 种子配对差方向不一致(非全正),应判定无效并回退。4. pb-neutral 的 g 复用在加性位移后可能不精确(因为加性改变了池化均值的计算方式),需验证 dp 残差仍在 float32 舍入级。",
  "family_id": "T2EI-01",
  "mechanism": "将 WITHINP 的乘性再居中因子 f_g(缩放均值同时缩放方差)替换为加性位移 δ_g=μ_full(g)−μ_drawn(g)(只移均值、保方差),消除有限抽样漂移的同时保持型内基因方差结构,从而保护 variogram 度量的基因对共变。",
  "vs_constant_shift": "δ_g 按类型×侧×基因三维度变化:不同细胞类型有不同的 drawn/full 均值差,不同基因的 δ 也不同。它不是全局常数位移,也不是组成重加权;它是对每个子集内抽样漂移的局部校正,且只作用于非零表达值,不改变支持集的零→非零方向。",
  "mechanism_evidence": "1. 型内逐基因方差比较:加性位移后各子集的基因方差应与位移前逐位一致(乘性则会变),Engineer 应输出 max|var_after/var_before − 1| 并验证 ≈0。2. variogram raw 值:目标 <0.007047(父值),若 ≥0.0071 说明机制无效或有害。3. 支持集变化统计:非零→零的细胞×基因对数应 <2%。4. 四组分分解:cell_state 应改善(variogram 主驱动),expression_change 应逐位不变(pb-neutral),shape_scale 应逐位不变(坐标不动)。5. 3 种子配对差方向一致性。",
  "mechanism_off_control": "--ablate mechanism 将所有 δ_g 设为 0(即跳过加性位移),保留 g 复用和其余管线不变,输出应与父节点 49 逐位一致(sha256 验证)。预期差别:ablate 输出的型内基因方差保持 drawn 子集原始值(含抽样漂移),variogram raw 回到父值 0.007047;默认输出方差被保留但均值被校正,variogram raw 应更低。"
}
```
原始记录位置/home/spark-longxinyang/vec/runs/formal/20261003-171955-search-t2-embryo-interp-chain-12h/nodes/51/researcher.jsonl 6 KB
/home/spark-longxinyang/vec/runs/formal/20261003-171955-search-t2-embryo-interp-chain-12h/nodes/51/researcher.stderr

审查员

角色审查员 alibaba-token-plan-cn/qwen3.8-max
调用次数1 次
轮数30
工具调用共 41 次:bash 40、write 1
用时7 分
token 数输入 69,695 · 输出 4,549 · 思考 9,152
任务(第一行)审查节点 n51 的程序是否越界读取、写死目标、钻评分器漏洞
最后的回答(摘录)
REVIEW.json written
原始记录位置/home/spark-longxinyang/vec/runs/formal/20261003-171955-search-t2-embryo-interp-chain-12h/nodes/51/reviewer.jsonl 299 KB
/home/spark-longxinyang/vec/runs/formal/20261003-171955-search-t2-embryo-interp-chain-12h/nodes/51/reviewer.stderr