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

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

节点 n42

起源条件化 DETRX 漂移:单侧独有类型的检出移除按其细胞的起源阶段取 d_g^a/d_g^b(目标率/起源侧观测率)而非池化 d_g,配合 15-NN 邻域最弱置零选择(NBHDCOH)。

运行?一次完整的自动搜索或 Agent 会话,有自己的锁定配置和证据包。20261003-171955-search-t2-embryo-interp-chain-12h
父节点n40
子节点n45
操作?种子:人写的起点;改进:在父节点上改;草稿:从头写;修复:修父节点的报错。改进
状态已打分
分数搜索目标分 65.12(+0.4) · proxy 65.12(+0.4) · 3 次复测均分 64.52
审查通过 检查1(越界读取):未发现问题——文件读取仅有 view 内的 prior 文件(run.py:974 prior/tf_regulons/collectri_mouse.tsv.gz;run.py:1080-1092 prior/reactome|go|msigdb 的 gmt,均在 view_manifest 的 prior 清单内),输入经 view_io 的 load_manifest/read_stage/interp_bracket 读取(run.py:1956-1966);全文件无绝对路径、..、/mnt、/home、打分器或 src/common/evaluation 引用,…
用时?从运行开始到结束(或到现在)的挂钟时间。53 分
程序版本5684f87e61b0e6ea0d4994121471b8cb5902a8e9 (programs.git)

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

来自 programs.git 5684f87e61:solution/METHOD.md

起源条件化 DETRX 漂移:单侧独有类型的检出移除按其细胞的起源阶段取 d_g^a/d_g^b(目标率/起源侧观测率)而非池化 d_g,配合 15-NN 邻域最弱置零选择(NBHDCOH)。

节点 42(improve,父 = 节点 40,T2:embryo:val_interp)

提交机制(备选,PLAN 被证否后)

父管线全部保留(mix 混抽 + procrustes3d + 阻尼 log-RMS + α=5 逐类型收敛位移 + λ=6 投影加权 + 软阈值 + β=0.2 配对收缩 + 不对称相关扩散 η_a=1.5/η_b=0.15 + 各向异性坐标整形 + 均匀幅度收缩 γ=0.25 + DETR s=2.0 + DETRX s_ext=0.7),只改表达矩阵的二值检出通道,坐标逐位不动。

1. DETRX-SIDE(主贡献,父 ANALYSIS next_suggestion #2「按 a-only/b-only 分别定向漂移」)

父的 DETRX 对单侧独有类型(~36% 输出细胞)用共有类型池化漂移 d_g =(Σ p_tgt·n_c + m·d̄)/(Σ k_g,c + m) 作缺失侧代理。问题:池化把 a 起源细胞(检出率 = 阶段 a 水平)和 b 起源细胞(= 阶段 b 水平)的观测 混在一个分母里,方向相互抵消——实测池化 d̄ ≈ 0.946,只移除 ~4%(3420 个 ON 项)。

修正:分母按细胞起源阶段分开累计(输出行序前半为 a 侧抽取、后半为 b 侧,n_from_a 切分):

  • d_g^a = (Σ p_tgt·n_c + m·d̄_a)/(Σ (k^a_g,c/n^a_c)·n_c + m) —— 目标率 / a 起源观测率
  • d_g^b 同理用 b 起源细胞
  • a-only 输出类型(只在早侧阶段出现的衰退谱系)用 shrink_a = max(1−d_g^a, 0);b-only(新生谱系)用 shrink_b
  • 移除数 = floor(s_ext·k_g·shrink),s_ext = 0.7 不变(仍是「只补 70% 的缺口」的欠移除),OFF-only、 每基因移除数按上式、伪计数平滑 m=10 不变

机制正确性(数据驱动,无外部测量):b-only 类型的细胞直接取自晚侧阶段,其(上升)标记基因的检出在 更早的目标时刻应更低——几何插值目标 p_tgt = p_a^(1−t)·p_b^t 对上升基因低于 p_b,所以 b 起源细胞需要 向 p_tgt 回落;a-only 类型对下降基因同理。池化分母恰好把这个回落量平均掉了。实测(proxy,seed 0): d̄_a = 2.12(a 起源检出普遍低于目标 → a-only 几乎不移除,shrink_a 均值 0.005)、d̄_b = 0.55 (b 起源检出约为目标的 1.8 倍 → b-only 移除 48%×0.7 ≈ 34%,shrink_b 均值 0.48);单侧细胞 1815 个(22 个类型)共移除 14257 个 ON 项(父:3420),输出 nnz 率 .0502 → .0459。

2. NBHDCOH(次贡献,移植自同胞节点 41 的已验证部件)

DETR/DETRX 置零选择从「该基因表达值最低的 ON 细胞」改为「15-NN 邻域(输出坐标、含自身,与 neighborhood_mmd 同一定义)内该基因均值最低的 ON 细胞」,并列时按自身值、再按行序(lexsort,确定)。 每基因移除数不变(13690 + 14257,与 lowest 逐基因一致)。生物学读法:基因在短间隔内丢失检出时,先发生在 空间环境表达最低的细胞(形态梯度驱动的区域性衰退,教科书:Gilbert, Developmental Biology, 10th ed., ch. 12–13;同节点 41),保持表达-位置配对。单独效果:nbhd raw .05126→.05021(local_spatial +0.51), 但与 DETRX-SIDE 叠加后 nbhd raw 回到 .05126(额外的 b-only 移除抵消了选择收益),local_spatial 组中性。

关键参数(提交默认,全部环境变量可复现)

  • T2_DETR_SELECT=nbhd(T2_NBHDCOH_K=15);--ablate 时强制 lowest
  • T2_DETRX_SIDE=1,T2_DETRX_STRENGTH=0.7,T2_DETRX_SMOOTH=10;--ablate 时 side_split=False(池化)
  • DETR 共有类型 s=2.0、幅度收缩 γ=0.25(均匀,父原样)、其余父参数不动
  • PLAN 的 DETRSHRINK 实现保留(T2_DETRSHRINK_ENABLE,默认 0=关;T2_GAMMA_BASE/T2_FREF/T2_DETRSHRINK_MODE)

对照与证据

  • --ablate mechanism(任意名)→ select=lowest、side_split=False、detrshrink 关:输出与父节点 40 逐位一致(X/data、indices、indptr、obsm 全部 sha 级相等,已验证)。
  • 机制生效证据:移除计数 3420→14257(只作用于 22 个单侧类型的 1815 个细胞,共有类型移除不变); nnz .0502→.0459;四组分变化(A 半 3 种子,vs 父同日重评): cell_state +2.5…+3.0(variogram raw .00954/.00986/.00934 → .00755/.00788/.00758,skill .47→.58, 本谱系首次回到地板上;mmd_u 持平偏好)、local_spatial 中性(.05126/.05163/.05078 vs .05126/–/.05046)、 expression_change −0.3…−1.2(de_direction .378→.365/.360/.369,de_score 在抽取噪声内)、 shape_scale 逐位不变(坐标未动)。

查分记录(全部 A 半、同一评分器;父节点 40 同日重评作锚:seed0/1/2 = 63.94/63.11/63.41,均值 63.49)

PLAN 机制 DETRSHRINK(γ_g = γ_base·max(0,1−f_g/f_ref),f_g = DETR 干跑逐基因移除比例;干跑精确: 收缩列因子 k_g≥0.75 不改 ON/OFF 模式与列内排序,移除集合与真实 DETR 逐位一致)。f_g 分布非退化: mean .243、p90 .525、max .75;f_ref=0.5 时 γ_g mean .181、min 0、max .25,116 个支持基因中 30 个低于半缩。 6 配置(seed 0)全部 ≤ 父:

配置榜分cseclsvariogrammmd_unbhdde_sde_d
(a) γ_base=063.5853.0863.0160.47.010686.01122.05011.3571.3790
(b) .25/f_ref .363.7154.8262.2260.06.009756.01069.05096.3214.3777
(c) .25/.563.7354.9362.2260.01.009677.01069.05105.3214.3778
(d) .15/.563.6554.3062.2460.33.010074.01079.05039.3214.3785
(e) .25/1.063.9355.0162.9859.97.009604.01070.05115.3571.3777
(f) inv 质量守恒反向再分配62.7955.3859.4758.54.009000.01114.05421.1786.3759
父重评63.9455.0962.9959.91.009536.01071.05126.3571.3780

结论:cell_state 随总收缩质量单调(γ=0 最差、反向再分配质量最大 cs 最高但 de_score 崩), 「DETR 已修正的基因少缩」的冗余假设在 s=2.0 强度下不成立——收缩与检出校正互补而非冗余; 与父节点 SPATGATE 证否的教训一致(收缩收益 ∝ 总质量)。PLAN 证否。

备选 NBHDCOH(单独,select=nbhd、池化漂移):seed0 64.08(+0.14)、seed1 63.11(+0.00); 强度扫描 seed0:x085 64.11、x095 64.13、x10 63.94、s225 63.89、s25 63.90;x085 三种子 64.11/63.12/63.53 均值 63.59(+0.10)——ls 收益真实(nbhd raw −.001)但榜分在噪声内。

提交机制(NBHDCOH + DETRX-SIDE,x07)三种子:64.62 / 63.75 / 63.90,均值 64.09(+0.60), 逐种子 +0.68/+0.64/+0.49,三种子分项结构一致(cs 由 variogram 驱动 +3,ls/ec 中性偏负 <0.5)。

验证过 / 未验证

  • 验证:A 半三种子(上表);ablate 与父逐位一致;seed 0 重跑逐位确定;vec-check 通过; 运行时 25.6 s、峰值内存 0.62 GB(限额 30 min / 28 GB)。
  • 未验证:B 半与正式分(查分额度已用尽,20/20);真实 final 视图(括号相邻、共有类型更多、 单侧细胞占比更小 → DETRX-SIDE 的贡献预期变小,但方向由程序从输入现场计算,无写死; obs_sum_a/b 退化时自动回退池化 d_g);单输入回退路径未变(不走 DETR);s_ext 在 side 条件下的 再扫描(0.85/1.0)未测——额度限制,x07 是三种子验证过的点。
  • 合规:全部量从 view 输入现场计算;未使用保留阶段/基因型的任何测量值;未读 view 以外路径。

知识来源

  • 检出率随时间的一阶(几何/log-加性)衰减模型:父节点 DETR 文档同源(几何插值 p_a^(1−t)·p_b^t); DETRX-SIDE 只是把同一目标的分母换成正确的起源侧基线,纯数据计算,无外部数值。
  • 区域性发育不同步 / 形态梯度驱动的表达衰退(NBHDCOH 的选择依据):Gilbert, Developmental Biology, 10th ed., ch. 12–13(教科书,只用定性程序,不用任何保留阶段测量值);部件本身移植自同胞节点 41 (已验证 +0.63)。

调研员的计划

名称DETR-conditional amplitude shrink: per-gene γ modulated by DETR removal fraction
动机Node 40 (parent, 64.69) has cell_state 56.74 vs node 39 (no shrink, DETR_EXT only) at 59.35. The ANALYSIS states: 'node 39 在无收缩 base 上 cell_state 到 59.35,本节点含收缩只到 56.74'. Variogram raw 0.009266 (skill 0.493) is near floor; node 39's variogram is 0.007408 (skill 0.551). The uniform shrink γ=0.25 was calibrated on a base WITHOUT DETR (node 38); with DETR+DETRX already removing excess ON entries, the shrink double-corrects the same channel, over-reducing amplitude and disrupting expression-position pairing (nbhd raw 0.04923 vs node 39's 0.04996 without shrink, but node 39 has better overall cell_state). The 2.6-point cell_state gap between nodes 39 and 40 is attributable to this redundancy.
做法Step 1: After DETR+DETRX (unchanged from parent: shared s=2.0, one-sided s_ext=0.7), compute per-gene DETR removal fraction f_g = (sum of zeroed entries for gene g across all cell types) / (total ON entries for gene g before DETR). This measures how much DETR already corrected each gene's effective amplitude.
Step 2: Replace uniform shrink γ=0.25 with DETR-conditional per-gene shrink: γ_g = γ_base × max(0, 1 − f_g/f_ref). Genes where DETR removed a large fraction of ON entries get proportionally less additional shrink; genes DETR barely touched get near-full shrink. The column scaling remains k_g = 1 − γ_g·dp_g/pb_out_g (same formula, gene-specific γ_g).
Step 3: Grid search (A-half seed 0, parent=64.69):
(a) γ_base=0 (pure DETR+DETRX, no shrink) — upper bound test, expect cell_state→~59 but possible mmd_u regression
(b) γ_base=0.25, f_ref=0.3 — aggressive DETR-awareness (DETR removing 30%+ eliminates shrink)
(c) γ_base=0.25, f_ref=0.5 — moderate
(d) γ_base=0.15, f_ref=0.5 — reduced base + moderate awareness
(e) γ_base=0.25, f_ref=1.0 — gentle (only fully DETR-saturated genes lose shrink)
Step 4: Select config maximizing board score with cell_state ≥ 58 and nbhd raw ≤ 0.0…
风险1) DETR removal fractions f_g may be very small for most genes (DETR s=2.0 only removes floor(2×excess) entries), making γ_g ≈ γ_base for all genes — mechanism degenerates to uniform shrink. Engineer should print f_g distribution after DETR; if p90(f_g) < 0.05, the modulation is too weak to matter and the γ_base=0 config becomes the only meaningful test. 2) Removing shrink entirely may regress mmd_u (node 38 showed shrink helps mmd_u by +0.18 pts). The DETR-aware intermediate configs (b–e) are designed to preserve partial shrink where DETR didn't act. 3) The 2.6-pt cell_state gap between nodes 39 and 40 may partly reflect different DETR strengths (s=1.5+0.35 vs s=2.0+0.7) rather than solely the shrink. If γ_base=0 doesn't recover cell_state≥58, the gap is DETR-strength-driven and this mechanism won't close it.

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

对比:父节点版本 1073fb42d0。改动的文件:solution/METHOD.md +100 −64、solution/README.md +16 −11、solution/run.py +267 −27

diff --git a/solution/METHOD.md b/solution/METHOD.mdindex 7e01ab7..91dc1dd 100644--- a/solution/METHOD.md+++ b/solution/METHOD.md@@ -1,67 +1,103 @@-DETR+DETRX:按共有类型把检出率向几何插值 p_a^(1−t)·p_b^t 做 OFF-only 置零(s=2.0),单侧独有类型用共有类型的逐基因检出漂移作代理置零(s=0.7),叠加在父幅度收缩之上;PLAN 的 SPATGATE 空间门控经 7 配置证否。--## 节点--- family_id: T2EI-01;op: improve;parent: node 38(A 半 3 种子 62.74/62.35/62.84,均值 62.64;官方分 63.60)。-- 靶弱项(来自父 ANALYSIS):cell_state 最弱(variogram skill 0.433 在地板下),且父的均匀幅度收缩以 local_spatial −0.51(nbhd)为代价。--## PLAN 机制 SPATGATE —— 已实现、已证否--按 PLAN 逐字实现:在输出坐标上建 15-NN(scipy cKDTree,与 neighborhood_mmd 同 k),对 DE 支持集(|δ|≥0.25 且 |dp|≥0.3,本视图 51 基因)每基因算空间结构比 s_g = var(NN均值_g)/var(x_g),γ_g = γ_max·clip(1 − s_g/s_ref, 0, 1),再做与父相同的逐列乘性精确缩放 k_g = 1 − γ_g·dp_g/pb_out_g。二值门控(PLAN 步骤6)也实现(s_g > median → γ=0,否则 γ_max)。--s_g 分布(51 基因):min 0.107 / p25 0.170 / p50 0.220 / p75 0.290 / p90 0.320 / max 0.431 —— 压缩在 [0.11, 0.43],即便最"空间均匀"的基因 NN 均值方差也不为 0(有限采样),连续门控因此把 γ 整体压到均值 0.03–0.08(远低于均匀 0.25)。--A 半 seed 0 网格(parent = 62.74):--| 配置 | board | cell_state | local_spatial | expr | nbhd raw | variogram | mmd_u | de_score |-|---|---|---|---|---|---|---|---|---|-| parent 均匀 γ=.25 | 62.74 | 51.73 | 59.83 | 61.66 | .05143 | .01210 | .01102 | .2857 |-| cont .25 p75 | 62.53 | 50.25 | 60.38 | 61.72 | .05029 | .01321 | .01139 | .2857 |-| cont .35 p90 | 62.40 | 50.52 | 60.33 | 61.01 | .05040 | .01303 | .01129 | .2500 |-| cont .35 p75 | 62.39 | 50.41 | 60.39 | 61.02 | .05026 | .01312 | .01132 | .2500 |-| cont .25 p90 | 62.36 | 50.33 | 60.34 | 61.02 | .05038 | .01315 | .01137 | .2500 |-| cont .25 p50 | 62.29 | 50.01 | 60.37 | 61.03 | .05031 | .01333 | .01151 | .2500 |-| binary .25 | 62.20 | 50.49 | 60.24 | 60.34 | .05059 | .01305 | .01131 | .2143 |-| binary .35 | 62.19 | 50.61 | 60.07 | 60.33 | .05093 | .01291 | .01131 | .2143 |--结论:门控确实如假设回收了 nbhd(**所有**配置 nbhd raw .05143→.0503–.0509,local_spatial +0.4…+0.6),但 cell_state 损失更大(−1.2…−1.7):variogram/mmd_u 的收益与**总收缩质量**成正比,门控削弱它就丢收益;部分收缩还重排 dp 使 de_score .2857→.2143–.25。越接近均匀收缩分越高(cont p75 保留 de_score,是门控里最好的 62.53),极限即父节点。**7 配置 8 次查分全部低于父**,SPATGATE 在 A 半证否。--## 提交的备选机制 DETR + DETRX(同靶弱项 cell_state + local_spatial)--DETR 走的是与"连续幅度"正交的**二值检出模式**通道:中间时刻一个基因在谱系内的检出率(阳性细胞比例)应按括号两端检出率的几何插值 p_tgt = p_a^(1−t)·p_b^t 取值(基因随时间关闭时阳性比例按一级衰减乘性经过中间频率;概率的几何平均即对数可加插值,是分数阳性细胞的标准对数线性模型)。mix 的算术混池给出 ≥ 几何目标的检出率,故 DETR 移除多余检出。--- **DETR(共有类型)**:对两侧都 ≥10 细胞的共有类型,逐基因若输出检出计数 k > p_tgt·n,则把超出的 floor(strength·excess) 个**最弱 ON 条目**(值最小、确定性 stable argsort)置零。OFF-only(从不新增检出),坐标不动,其他基因零模式不动,pb 只减去被移除的弱值。强度扫描(A 半 seed 0,父 62.74):s=1.0→63.16、1.5→63.35、2.0→63.45、2.5→63.47(nbhd 开始劣化)、3.0→63.45(nbhd 已劣于父);提交 **s=2.0**(local_spatial/expr 门裕度最健康)。-- **DETRX(单侧独有类型,~36% 输出细胞)**:单侧类型缺另一侧检出率、无法构造几何目标,用 DETR 自己在共有类型上量到的逐基因乘性漂移 d_g = (Σ_c p_tgt(g,c)·n_c + m·d̄)/(Σ_c k_g,c + m)(伪计数 m=10 向全局漂移平滑;d̄ 为全局漂移)作缺失侧代理,移除 floor(s_ext·k·max(1−d_g,0)) 个最弱 ON。生物学读法:短区间内基因 ON→OFF 衰减是基因调控关闭的谱系内禀属性(一级衰减),共有谱系的典型乘性检出漂移可迁移到未知谱系细胞(GRN 关闭动力学,Davidson & Erwin 2006, doi:10.1126/science.1121590)。d_g 实测 mean 0.946、范围 [0.33, 1.73](d_g≥1 的基因 shrink=0,不动)。强度扫描 seed 0:s_ext=0.35→63.51、0.7→63.94、1.0→63.98(但 nbhd 回落、local_spatial 降);提交 **s_ext=0.7**(nbhd/local_spatial 更安全)。--### 机制生效证据--- 实际改变的细胞/条目(seed 0):DETR 命中 10 个共有类型、~1775 个 (类型,基因)、置零 13690 个条目,nnz .0571→.0516;DETRX 命中 22 个单侧类型、1815 个细胞、置零 ~3420 个条目,nnz→.0502。-- 四组分(A 半 seed 0,vs 父 62.74):cell_state 51.73→**55.09**(variogram .0121→.00954、mmd_u .01102→.01071);expression_change 61.66→**62.99**(de_score .2857→.3571,de_dir .3851→.378 微降);local_spatial 59.83→**59.99**(nbhd raw .05143→.05126,不劣反微升,正是 SPATGATE 想要而没净赚到的);shape_scale 77.75 不变(坐标逐位未动,符合设计)。-- 关闭对照:`--ablate mechanism` 同时关 DETR 与 DETRX(保留父的均匀幅度收缩),输出与父节点 38 seed 0 **逐位一致**(sha256 前缀 8db00160… 相同,已验证)。--### 验证过什么--- A 半多种子:DETR-only s2.0 三种子 63.45/63.07/63.32(vs 父 62.74/62.35/62.84,+0.71/+0.72/+0.48,方向一致);DETRX s0.7 两种子 63.94/63.11(vs 父 +1.19/+0.76)。cell_state 收益(variogram/mmd_u)跨种子稳定;de_score 的 .3571 跳升只在 seed 0 出现、seed 1 回 .2857,是 top-N 集合的抽样噪声,不作为收益依据。-- 视图无关:把 view 换成随机路径、打乱 manifest 键序、所有阶段时间统一 +1 天后重跑 seed 0,输出与真实视图**逐位一致**(sha256 相同,已验证)。程序只读 manifest 数据、只用时间差 t 与类型标签,不读绝对时间/路径/board 字段。-- 确定性:给定 seed 输出确定(DETR/DETRX 用 stable argsort 选最弱 ON,无全局随机;rng 仅用于 random select 模式,默认 lowest 不用)。-- 格式:vec-check 通过;23 s / 0.6 GB,远在 limits(30 min / 28 GB)内。-- 单输入退路:无括号(b is None)时在 DETR 之前就 return,不触及本机制。--### 没验证 / 风险--- **B 半与真实 final 视图未验证**(查分额度已用尽,只有 A 半)。DETR/DETRX 由类型与几何插值驱动、与括号宽度和 t 无关,应可迁移;同族的节点 37(DETR)/39(DETR_EXT)已在本谱系证明该通道有效(节点 39 是表内最高分 65.08)。final 视图两端相邻、共有类型更多、单侧类型更少,DETRX 贡献会变小但 OFF-only + 向全局漂移平滑应保证不伤。-- DETRX 的漂移代理假设"基因关闭速率谱系内禀",对谱系特异的快速关闭基因可能低估/高估;伪计数平滑与 OFF-only(只在 d_g<1 时移除)限制了下行风险。-- de_dir 随 DETRX 微降(.385→.378):置零弱检出轻微改变全基因秩;被 de_score 的净升覆盖,但 B 半若 de_score 跳升不重现,expr 组可能持平或微动。-- 幅度收缩(node 38)与 DETR 叠加:两者都降信号,可能部分冗余(表内 node 39 在无幅度收缩的 base 上把 cell_state 推到 59.35,我在含幅度收缩的 base 上到 55)。但 A 半逐种子证据显示 DETR 叠加在本父上净正,故提交。--## 下一步最值得试--1. 在本 DETR+DETRX 之上**关掉/减弱幅度收缩**(recal γ),检验 cell_state 是否像 node 39 那样进一步上探(幅度收缩与 DETR 可能冗余)——这等于把 node 38 base 换回 node 36/37 base,可能超过本节点。-2. DETRX 漂移代理换成**逐类型**(而非全基因池)的 d_g,或按 a-only / b-only 分别定向(a-only 衰退型 vs b-only 新生型的检出漂移方向可能不同)。-3. 在 B 半 / final 宽括号上验证 DETR s 与 DETRX s_ext 的可迁移性(本节点只有 A 半证据)。+起源条件化 DETRX 漂移:单侧独有类型的检出移除按其细胞的起源阶段取 d_g^a/d_g^b(目标率/起源侧观测率)而非池化 d_g,配合 15-NN 邻域最弱置零选择(NBHDCOH)。++# 节点 42(improve,父 = 节点 40,T2:embryo:val_interp)++## 提交机制(备选,PLAN 被证否后)++父管线全部保留(mix 混抽 + procrustes3d + 阻尼 log-RMS + α=5 逐类型收敛位移 + λ=6 投影加权 ++软阈值 + β=0.2 配对收缩 + 不对称相关扩散 η_a=1.5/η_b=0.15 + 各向异性坐标整形 + 均匀幅度收缩+γ=0.25 + DETR s=2.0 + DETRX s_ext=0.7),只改表达矩阵的二值检出通道,坐标逐位不动。++### 1. DETRX-SIDE(主贡献,父 ANALYSIS next_suggestion #2「按 a-only/b-only 分别定向漂移」)++父的 DETRX 对单侧独有类型(~36% 输出细胞)用共有类型池化漂移 d_g =(Σ p_tgt·n_c + m·d̄)/(Σ k_g,c + m)+作缺失侧代理。问题:池化把 a 起源细胞(检出率 = 阶段 a 水平)和 b 起源细胞(= 阶段 b 水平)的观测+混在一个分母里,方向相互抵消——实测池化 d̄ ≈ 0.946,只移除 ~4%(3420 个 ON 项)。++修正:分母按细胞起源阶段分开累计(输出行序前半为 a 侧抽取、后半为 b 侧,`n_from_a` 切分):++- d_g^a = (Σ p_tgt·n_c + m·d̄_a)/(Σ (k^a_g,c/n^a_c)·n_c + m) —— 目标率 / a 起源观测率+- d_g^b 同理用 b 起源细胞+- a-only 输出类型(只在早侧阶段出现的衰退谱系)用 shrink_a = max(1−d_g^a, 0);b-only(新生谱系)用 shrink_b+- 移除数 = floor(s_ext·k_g·shrink),s_ext = 0.7 不变(仍是「只补 70% 的缺口」的欠移除),OFF-only、+  每基因移除数按上式、伪计数平滑 m=10 不变++机制正确性(数据驱动,无外部测量):b-only 类型的细胞直接取自晚侧阶段,其(上升)标记基因的检出在+更早的目标时刻应更低——几何插值目标 p_tgt = p_a^(1−t)·p_b^t 对上升基因低于 p_b,所以 b 起源细胞需要+向 p_tgt 回落;a-only 类型对下降基因同理。池化分母恰好把这个回落量平均掉了。实测(proxy,seed 0):+d̄_a = 2.12(a 起源检出普遍低于目标 → a-only 几乎不移除,shrink_a 均值 0.005)、d̄_b = 0.55+(b 起源检出约为目标的 1.8 倍 → b-only 移除 48%×0.7 ≈ 34%,shrink_b 均值 0.48);单侧细胞+1815 个(22 个类型)共移除 14257 个 ON 项(父:3420),输出 nnz 率 .0502 → .0459。++### 2. NBHDCOH(次贡献,移植自同胞节点 41 的已验证部件)++DETR/DETRX 置零选择从「该基因表达值最低的 ON 细胞」改为「15-NN 邻域(输出坐标、含自身,与+neighborhood_mmd 同一定义)内该基因均值最低的 ON 细胞」,并列时按自身值、再按行序(lexsort,确定)。+每基因移除数不变(13690 + 14257,与 lowest 逐基因一致)。生物学读法:基因在短间隔内丢失检出时,先发生在+空间环境表达最低的细胞(形态梯度驱动的区域性衰退,教科书:Gilbert, Developmental Biology, 10th ed.,+ch. 12–13;同节点 41),保持表达-位置配对。单独效果:nbhd raw .05126→.05021(local_spatial +0.51),+但与 DETRX-SIDE 叠加后 nbhd raw 回到 .05126(额外的 b-only 移除抵消了选择收益),local_spatial 组中性。++## 关键参数(提交默认,全部环境变量可复现)++- `T2_DETR_SELECT=nbhd`(`T2_NBHDCOH_K=15`);`--ablate` 时强制 lowest+- `T2_DETRX_SIDE=1`,`T2_DETRX_STRENGTH=0.7`,`T2_DETRX_SMOOTH=10`;`--ablate` 时 side_split=False(池化)+- DETR 共有类型 s=2.0、幅度收缩 γ=0.25(均匀,父原样)、其余父参数不动+- PLAN 的 DETRSHRINK 实现保留(`T2_DETRSHRINK_ENABLE`,默认 0=关;`T2_GAMMA_BASE`/`T2_FREF`/`T2_DETRSHRINK_MODE`)++## 对照与证据++- `--ablate mechanism`(任意名)→ select=lowest、side_split=False、detrshrink 关:输出与父节点 40+  逐位一致(X/data、indices、indptr、obsm 全部 sha 级相等,已验证)。+- 机制生效证据:移除计数 3420→14257(只作用于 22 个单侧类型的 1815 个细胞,共有类型移除不变);+  nnz .0502→.0459;四组分变化(A 半 3 种子,vs 父同日重评):+  cell_state +2.5…+3.0(variogram raw .00954/.00986/.00934 → .00755/.00788/.00758,skill .47→.58,+  本谱系首次回到地板上;mmd_u 持平偏好)、local_spatial 中性(.05126/.05163/.05078 vs .05126/–/.05046)、+  expression_change −0.3…−1.2(de_direction .378→.365/.360/.369,de_score 在抽取噪声内)、+  shape_scale 逐位不变(坐标未动)。++## 查分记录(全部 A 半、同一评分器;父节点 40 同日重评作锚:seed0/1/2 = 63.94/63.11/63.41,均值 63.49)++PLAN 机制 DETRSHRINK(γ_g = γ_base·max(0,1−f_g/f_ref),f_g = DETR 干跑逐基因移除比例;干跑精确:+收缩列因子 k_g≥0.75 不改 ON/OFF 模式与列内排序,移除集合与真实 DETR 逐位一致)。f_g 分布非退化:+mean .243、p90 .525、max .75;f_ref=0.5 时 γ_g mean .181、min 0、max .25,116 个支持基因中 30 个低于半缩。+6 配置(seed 0)全部 ≤ 父:++| 配置 | 榜分 | cs | ec | ls | variogram | mmd_u | nbhd | de_s | de_d |+|---|---:|---:|---:|---:|---:|---:|---:|---:|---:|+| (a) γ_base=0 | 63.58 | 53.08 | 63.01 | 60.47 | .010686 | .01122 | .05011 | .3571 | .3790 |+| (b) .25/f_ref .3 | 63.71 | 54.82 | 62.22 | 60.06 | .009756 | .01069 | .05096 | .3214 | .3777 |+| (c) .25/.5 | 63.73 | 54.93 | 62.22 | 60.01 | .009677 | .01069 | .05105 | .3214 | .3778 |+| (d) .15/.5 | 63.65 | 54.30 | 62.24 | 60.33 | .010074 | .01079 | .05039 | .3214 | .3785 |+| (e) .25/1.0 | 63.93 | 55.01 | 62.98 | 59.97 | .009604 | .01070 | .05115 | .3571 | .3777 |+| (f) inv 质量守恒反向再分配 | 62.79 | 55.38 | 59.47 | 58.54 | .009000 | .01114 | .05421 | .1786 | .3759 |+| 父重评 | 63.94 | 55.09 | 62.99 | 59.91 | .009536 | .01071 | .05126 | .3571 | .3780 |++结论:cell_state 随总收缩质量单调(γ=0 最差、反向再分配质量最大 cs 最高但 de_score 崩),+「DETR 已修正的基因少缩」的冗余假设在 s=2.0 强度下不成立——收缩与检出校正互补而非冗余;+与父节点 SPATGATE 证否的教训一致(收缩收益 ∝ 总质量)。**PLAN 证否。**++备选 NBHDCOH(单独,select=nbhd、池化漂移):seed0 64.08(+0.14)、seed1 63.11(+0.00);+强度扫描 seed0:x085 64.11、x095 64.13、x10 63.94、s225 63.89、s25 63.90;x085 三种子+64.11/63.12/63.53 均值 63.59(+0.10)——ls 收益真实(nbhd raw −.001)但榜分在噪声内。++提交机制(NBHDCOH + DETRX-SIDE,x07)三种子:**64.62 / 63.75 / 63.90,均值 64.09(+0.60)**,+逐种子 +0.68/+0.64/+0.49,三种子分项结构一致(cs 由 variogram 驱动 +3,ls/ec 中性偏负 <0.5)。++## 验证过 / 未验证++- 验证:A 半三种子(上表);ablate 与父逐位一致;seed 0 重跑逐位确定;vec-check 通过;+  运行时 25.6 s、峰值内存 0.62 GB(限额 30 min / 28 GB)。+- 未验证:B 半与正式分(查分额度已用尽,20/20);真实 final 视图(括号相邻、共有类型更多、+  单侧细胞占比更小 → DETRX-SIDE 的贡献预期变小,但方向由程序从输入现场计算,无写死;+  obs_sum_a/b 退化时自动回退池化 d_g);单输入回退路径未变(不走 DETR);s_ext 在 side 条件下的+  再扫描(0.85/1.0)未测——额度限制,x07 是三种子验证过的点。+- 合规:全部量从 view 输入现场计算;未使用保留阶段/基因型的任何测量值;未读 view 以外路径。  ## 知识来源 -- 检出率几何插值 p_tgt = p_a^(1−t)·p_b^t:概率的对数可加(几何)插值,分数阳性细胞沿时间的标准乘性模型(一级衰减动力学);用于 variogram/细胞状态分布校准,不涉及任何保留阶段的测量值。-- 基因调控关闭的谱系内禀性(DETRX 漂移迁移的依据):GRN 层级与调控动力学,Davidson & Erwin 2006, doi:10.1126/science.1121590。-- 所有检出率、漂移、类型清单、t、细胞数均从 manifest 指定的括号输入现场计算;无保留阶段/保留基因型的任何测量值写入程序。+- 检出率随时间的一阶(几何/log-加性)衰减模型:父节点 DETR 文档同源(几何插值 p_a^(1−t)·p_b^t);+  DETRX-SIDE 只是把同一目标的分母换成正确的起源侧基线,纯数据计算,无外部数值。+- 区域性发育不同步 / 形态梯度驱动的表达衰退(NBHDCOH 的选择依据):Gilbert, Developmental Biology,+  10th ed., ch. 12–13(教科书,只用定性程序,不用任何保留阶段测量值);部件本身移植自同胞节点 41+  (已验证 +0.63)。diff --git a/solution/README.md b/solution/README.mdindex fdf2755..6104ff4 100644--- a/solution/README.md+++ b/solution/README.md@@ -1,13 +1,18 @@-# 节点 38:DE 幅度校准(shrink γ=0.25,|dp|≥0.3)+ 已证否的 PLAN 逐基因 δ 重标定(T2:embryo:val_interp)+# 节点 42:DETRX-SIDE 起源条件化漂移 + NBHDCOH 邻域置零选择(T2:embryo:val_interp) -父节点 36 管线全部原样保留(mix 混抽 + procrustes3d + 阻尼 log-RMS + α=5 逐类型收敛位移 + λ=6 投影加权 +-软阈值 + β=0.2 配对收缩 + 不对称相关扩散 η_a=1.5/η_b=0.15 + 各向异性坐标整形)。本节点按 PLAN 实现逐基因-伪批量向 δ=t·(pb_b−pb_a) 对齐的重标定(T2_RECAL_*,add/mul 两种精确解码),在 proxy A 半证否(de_score raw-0.2857→0.2500,板分 −0.7);方向探针发现 A 半真值偏好比管线输出更小的 DE 幅度,改交备选机制:对-|δ|≥0.25 且 |dp|≥0.3 的 51 个 DE 基因做 dp←0.75·dp 的逐列精确缩放(T2_RECAL_MODE=shrink,默认提交配置),-零模式/坐标/基因内排序不动。另证否并关闭:dev(均值保持展布收缩)、SIDECLUSTER(坐标重配对,nbhd −1.05)、-BRACKET_CLIP=1.0(de_score −0.036)。+父节点 40 管线全部保留(mix 混抽 + procrustes3d + 阻尼 log-RMS + α=5 逐类型收敛位移 + λ=6 投影加权 ++软阈值 + β=0.2 配对收缩 + 不对称相关扩散 + 各向异性坐标整形 + 均匀幅度收缩 γ=0.25 + DETR s=2.0 ++DETRX s_ext=0.7)。本节点改动(只动表达的二值检出通道,坐标逐位不动): -`--ablate mechanism` → γ=0,输出与父节点 36 逐位一致(sha256 已验证)。A 半三种子:父 62.38/61.91/62.47,-本节点 62.74/62.35/62.84(+0.36/+0.44/+0.37,三种子分项结构一致:variogram/mmd_u 升、nbhd 微降、de 不动)。-详见 METHOD.md。+1. **DETRX-SIDE**(提交主机制):单侧独有类型(~36% 输出细胞)的检出漂移代理从池化 d_g 改为按细胞+   起源阶段条件化——a-only 类型用 d_g^a = 目标率/a 起源观测率,b-only 用 d_g^b。池化把两侧方向抵消+   (d̄≈0.95,只移除 4%);条件化后 b-only(新生谱系)检出向几何插值目标回落(移除 ~34%),+   variogram raw .0095→.0076,A 半三种子 +0.68/+0.64/+0.49(均值 +0.60)。+2. **NBHDCOH**(移植自节点 41):DETR/DETRX 置零选择取「15-NN 邻域内该基因均值最低」的 ON 细胞+   (并列按自身值、行序),每基因移除数不变。+3. PLAN 机制 DETRSHRINK(γ_g 随 DETR 移除比例 f_g 递减)已实现并在 A 半 6 配置证否(62.79–63.93+   全低于父 63.94):cell_state 随总收缩质量单调,收缩与检出校正互补而非冗余。代码保留+   (T2_DETRSHRINK_ENABLE,默认关)。++`--ablate mechanism` → select=lowest + 池化漂移 + 均匀收缩,输出与父节点 40 逐位一致(已验证)。+默认运行 seed 0 逐位确定;25.6 s / 0.62 GB。详见 METHOD.md。diff --git a/solution/run.py b/solution/run.pyindex 567645c..f638aab 100644--- a/solution/run.py+++ b/solution/run.py@@ -8,7 +8,30 @@ 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 (40, family T2EI-01): PLAN mechanism SPATGATE — per-gene spatial+This node (42, family T2EI-01): PLAN mechanism DETRSHRINK — per-gene amplitude+shrink γ_g = γ_base·max(0, 1 − f_g/f_ref) conditioned on the DETR removal+fraction f_g — was implemented with an exact removal-count dry run and+FALSIFIED on the proxy A half, 6 configs (γ_base=0 → 63.58; 0.25×f_ref+0.3/0.5/1.0 → 63.71/63.73/63.93; 0.15×f_ref 0.5 → 63.65; mass-preserving+reversed redistribution → 62.79; parent re-score 63.94). Cell_state tracks the+TOTAL shrink mass monotonically (γ=0 is the worst), so any conditioning that+reduces mass on DETR-touched genes loses; the redistribution itself (inv probe)+additionally collapses de_score. The redundancy hypothesis is wrong at this+DETR strength: shrink and detection correction are complementary, not+redundant. SUBMITTED BACKUP MECHANISMS (same weaknesses, cell_state ++local_spatial): (1) NBHDCOH — DETR/DETRX removals pick the ON cells with the+lowest 15-NN neighborhood mean of that gene (spatially coherent regression)+instead of the lowest own value; counts unchanged (+0.14/+0.00 alone at seeds+0/1 — the ls gain is real, nbhd raw .05126→.05021, but the board gain is+within noise). (2) DETRX-SIDE — origin-conditioned one-sided drift (see the+DETRX_SIDE config docs for the mechanism, evidence and the 3-seed grid):+a-only types corrected by d_g^a = target/a-origin rate, b-only by d_g^b+(+0.68/+0.64/+0.49 at seeds 0/1/2 combined with NBHDCOH; variogram raw+.0095→.0076, skill above floor for the first time in this lineage).+--ablate mechanism restores select="lowest" + pooled drift + uniform shrink+and reproduces parent node 40 bit-for-bit (verified by digest).++Parent (node 40, family T2EI-01): PLAN mechanism SPATGATE — per-gene spatial gating of node 38's uniform DE-amplitude shrink (γ_g = γ_max·clip(1 − s_g/s_ref, 0, 1), s_g = var(15-NN mean)/var(x) on the output coordinates) — was implemented in 7 configurations (continuous s_ref ∈ {p50, p75, p90} ×@@ -424,7 +447,19 @@ SPATGATE_MODE = os.environ.get("T2_SPATGATE_MODE", "cont")  # cont | binary DETR_ENABLE = os.environ.get("T2_DETR_ENABLE", "1") == "1" DETR_STRENGTH = float(os.environ.get("T2_DETR_STRENGTH", "2.0")) DETR_MIN_CELLS = int(os.environ.get("T2_DETR_MIN_CELLS", "10"))-DETR_SELECT = os.environ.get("T2_DETR_SELECT", "lowest")  # lowest | random+DETR_SELECT = os.environ.get("T2_DETR_SELECT", "nbhd")  # lowest | random | nbhd+# NBHDCOH (node 42 backup mechanism, ported from sibling node 41 where it won+# +0.63 board / cell_state +1.36 / local_spatial +1.19 over its parent): the+# DETR/DETRX OFF-only removals pick, among a gene's ON entries of a type, the+# cells whose 15-NN neighborhood mean of THAT gene on the OUTPUT coordinates is+# lowest (tie-break: own value, then row order — deterministic), instead of the+# lowest own value. Removal counts per gene are unchanged. Biological reading:+# a gene losing detection over a short interval does so first in cells sitting+# in the lowest-expression spatial environment (spatially coherent regression,+# cf. morphogen-gradient–driven downregulation), which keeps the expression–+# position pairing that neighborhood_mmd measures intact while the detection+# rate is calibrated. select="lowest" (or --ablate) reproduces parent node 40.+NBHDCOH_K = int(os.environ.get("T2_NBHDCOH_K", "15")) # DETRX (node 40, extension of DETR to one-sided types): ~36% of the drawn # output cells belong to types present on only ONE bracket side (a-only # lineages regressing / b-only lineages emerging), where the missing side's@@ -442,6 +477,55 @@ DETR_SELECT = os.environ.get("T2_DETR_SELECT", "lowest")  # lowest | random DETRX_ENABLE = os.environ.get("T2_DETRX_ENABLE", "1") == "1" DETRX_STRENGTH = float(os.environ.get("T2_DETRX_STRENGTH", "0.7")) DETRX_SMOOTH = float(os.environ.get("T2_DETRX_SMOOTH", "10"))+# DETRX-SIDE (node 42 SUBMITTED mechanism, parent ANALYSIS next_suggestion #2):+# condition the one-sided-type drift proxy on the cells' ORIGIN stage. The+# pooled drift d_g averages a-origin (high) and b-origin (low) detection of the+# shared types, which under-corrects regressing a-only lineages and+# over-corrects emerging b-only ones (pooled d̄ ≈ 0.95 → only ~4% removals).+# With DETRX_SIDE, an a-only output type uses d_g^a = target / a-origin+# observed and a b-only type uses d_g^b = target / b-origin observed — the+# correct per-origin baseline: an a-only cell's genes must fall from the stage-a+# rate to the target rate, not from the mixture rate. Removal magnitude on the+# ~36% one-sided output cells rises ~4× (3420 → 14257 entries at s_ext = 0.7,+# still under-shooting the full drift by 30%). Proxy A half (nbhd selection+# on): seed 0/1/2 = 64.62/63.75/63.90 vs parent 63.94/63.11/63.41+# (+0.68/+0.64/+0.49); cell_state +2.5..+3.0 every seed via variogram raw+# .00954/.00986/.00934 → .00755/.00788/.00758 (skill .47 → .58, above floor+# for the first time in this lineage), mmd_u flat-to-better, de_score/de_dir+# move within their draw noise, neighborhood_mmd neutral (.05126/.05163/.05078+# vs .05126/–/.05046), shape group bit-for-bit unchanged.+# off (--ablate or T2_DETRX_SIDE=0) reproduces the pooled-drift parent+# bit-for-bit.+DETRX_SIDE = os.environ.get("T2_DETRX_SIDE", "1") == "1"+# DETRSHRINK (node 42, family T2EI-01, PLAN mechanism): DETR-conditional+# per-gene amplitude shrink. The node-38 uniform shrink (γ = 0.25) was+# calibrated on a base WITHOUT detection correction; DETR+DETRX (node 40)+# already removes excess ON entries — disproportionately on the same DE genes+# whose amplitude the shrink then reduces a second time (structural redundancy,+# suspected cause of the 2.6-pt cell_state gap to sibling node 39 which has no+# shrink). Mechanism: run the DETR+DETRX removal as a dry run on a copy of the+# pre-shrink output, measure per gene the removal fraction+#   f_g = (entries zeroed by DETR+DETRX for gene g, all output types)+#         / (total ON entries of gene g before DETR),+# then replace the uniform γ with γ_g = GAMMA_BASE·max(0, 1 − f_g/FREF):+# genes DETR already corrected hard get proportionally less additional shrink,+# genes DETR barely touched keep near-full shrink. Decode unchanged: exact+# per-column rescale k_g = 1 − γ_g·dp_g/pb_out_g on the |δ|≥0.25, |dp|≥0.3+# support (zero pattern, within-gene ranking, coordinates untouched).+# The dry run is exact (not an approximation): the shrink's k_g ∈ [0.75, ∞)+# never changes the ON/OFF pattern and preserves the within-column value+# ordering, so the real post-shrink DETR removes the SAME entries per gene.+# --ablate mechanism forces γ_g = RECAL_GAMMA = 0.25 uniform (f_g := 0) and+# reproduces parent node 40 bit-for-bit. GAMMA_BASE = 0 is the no-shrink+# bound (mechanism reduces to removing the shrink entirely).+DETRSHRINK_ENABLE = os.environ.get("T2_DETRSHRINK_ENABLE", "0") == "1"+GAMMA_BASE = float(os.environ.get("T2_GAMMA_BASE", "0.25"))+FREF = float(os.environ.get("T2_FREF", "0.5"))+# "plan": γ_g = GAMMA_BASE·max(0, 1−f_g/FREF) (PLAN literal). "inv":+# mass-preserving reversed redistribution γ_g = GAMMA_BASE·clip(1+(f̄−f_g)/f̄,+# 0, 2) on the support (probe: is it the per-gene DISTRIBUTION or only the+# TOTAL shrink mass that moves cell_state?).+DETRSHRINK_MODE = os.environ.get("T2_DETRSHRINK_MODE", "plan") # SIDECLUSTER (node 38 probe, local_spatial): neighborhood_mmd is the only # ranked metric that sees the expression↔coordinate PAIRING (all others see # either the expression multiset or the coordinate point set). The stratified@@ -549,10 +633,15 @@ def spatial_gate_gammas(expr, coords, de, gmax, sref, k, mode):   def recalibrate(expr, pb_a, pb_b, t, gamma, cap, support, min_dp, mode, smax,-                coords=None, gate=None):+                coords=None, gate=None, gamma_vec=None):     info = {"recal_gamma": gamma, "recal_cap": cap, "recal_mode": mode,             "recal_support": support, "recal_min_dp": min_dp, "recal_smax": smax,             "spatgate_enable": False,+            "detrshrink_enable": False, "detrshrink_gamma_base": None,+            "detrshrink_fref": None, "detrshrink_f_mean": None,+            "detrshrink_f_p90": None, "detrshrink_f_max": None,+            "detrshrink_gamma_mean": None, "detrshrink_gamma_min": None,+            "detrshrink_gamma_max": None, "detrshrink_n_half_shrunk": None,             "recal_n_genes": 0, "recal_clip_rate": None,             "recal_spear_before": None, "recal_spear_after": None,             "recal_dp_gap_before": None, "recal_dp_gap_after": None,@@ -570,6 +659,11 @@ def recalibrate(expr, pb_a, pb_b, t, gamma, cap, support, min_dp, mode, smax,             de = de & (np.abs(dp) >= min_dp)         # SPATGATE (node 40): replace the uniform γ with a per-gene spatial gate.         gam_vec = np.full(dp.shape, float(gamma), dtype=np.float64)+        if gamma_vec is not None:+            # DETRSHRINK (node 42): per-gene DETR-conditional γ_g (computed by+            # the caller from the dry-run removal fractions; genes outside the+            # support get γ_g = 0 by construction of `de` below).+            gam_vec = np.asarray(gamma_vec, dtype=np.float64)         if gate is not None and coords is not None:             gg, ginfo = spatial_gate_gammas(                 expr, coords, de, gate["gmax"], gate["sref"], gate["k"], gate["mode"])@@ -648,7 +742,8 @@ def recalibrate(expr, pb_a, pb_b, t, gamma, cap, support, min_dp, mode, smax,  def detection_recalibrate(expr, out_labels, stage_a, stage_b, t, strength,                           min_cells, select, rng,-                          detr_x=False, x_strength=0.35, x_smooth=10.0):+                          detr_x=False, x_strength=0.35, x_smooth=10.0,+                          coords=None, nbhd_k=15, n_from_a=None, side_split=False):     """DETR: per shared cell type, remove excess gene detections toward the     geometric interpolation p_tgt = p_a^(1−t)·p_b^t of the bracket detection     rates. OFF-only: zero the weakest (lowest-value) ON entries, deterministic;@@ -666,7 +761,9 @@ def detection_recalibrate(expr, out_labels, stage_a, stage_b, t, strength,             "detr_nnz_after": None, "detr_pb_shift_max": None,             "detrx_enable": bool(detr_x), "detrx_strength": x_strength,             "detrx_n_types": 0, "detrx_n_cells": 0, "detrx_n_zeroed": 0,-            "detrx_d_mean": None, "detrx_d_min": None, "detrx_d_max": None}+            "detrx_d_mean": None, "detrx_d_min": None, "detrx_d_max": None,+            "detrx_side": None, "detrx_d_a_mean": None, "detrx_d_b_mean": None,+            "detrx_shrink_a_mean": None, "detrx_shrink_b_mean": None}     if expr.shape[0] == 0 or strength <= 0.0:         info["detr_enable"] = False         return expr, info@@ -679,8 +776,36 @@ def detection_recalibrate(expr, out_labels, stage_a, stage_b, t, strength,     n_zeroed = 0     n_types = 0     G = expr.shape[1]+    # Per-gene bookkeeping for DETRSHRINK (node 42): ON totals before any+    # removal and per-gene removed-entry counts (shared DETR + one-sided DETRX).+    on_per_gene = (expr > 0).sum(axis=0).astype(np.float64)+    rem_per_gene = np.zeros(G, dtype=np.float64)+    # NBHDCOH (node 42 backup): 15-NN neighborhood means of every gene on the+    # output coordinates, computed ONCE on the pre-removal expression. Removal+    # selection with select="nbhd" prefers the ON cells with the lowest+    # neighborhood mean of that gene (spatially coherent regression); counts+    # per gene are identical to "lowest". Falls back to "lowest" when coords+    # are unavailable or the cloud is too small.+    nnmean = None+    if select == "nbhd" and coords is not None and expr.shape[0] >= nbhd_k + 1:+        from scipy.spatial import cKDTree+        C = np.asarray(coords, dtype=np.float64)+        kk = int(min(nbhd_k, expr.shape[0] - 1))+        tree = cKDTree(C)+        _, nidx = tree.query(C, k=kk + 1)  # includes self+        nnmean = np.asarray(expr, dtype=np.float32)[nidx].mean(axis=1)+    elif select == "nbhd":+        select = "lowest"     tgt_sum = np.zeros(G, dtype=np.float64)   # Σ p_tgt(g,c)·n_c over shared types     obs_sum = np.zeros(G, dtype=np.float64)   # Σ k_g,c (pre-DETR) over shared types+    # DETRX-SIDE (node 42): origin-conditioned drift denominators. Pooling the+    # a-drawn and b-drawn cells of the shared types CANCELS the drift signal+    # (falling genes need removals on a-origin cells, rising genes on b-origin+    # cells; the pooled ratio sits near 1, detrx_d_mean ≈ 0.95). Conditioning+    # the observed rate on the cells' origin stage recovers the direction:+    # d_g^a = target rate / a-origin rate, d_g^b = target rate / b-origin rate.+    obs_sum_a = np.zeros(G, dtype=np.float64)  # Σ (k^a/n^a)·n_c+    obs_sum_b = np.zeros(G, dtype=np.float64)  # Σ (k^b/n^b)·n_c     for c in sorted(set(la.tolist()) & set(lb.tolist())):         ma = la == c         mb = lb == c@@ -700,17 +825,31 @@ def detection_recalibrate(expr, out_labels, stage_a, stage_b, t, strength,         Xc = expr[mo]         nz = Xc > 0         k = nz.sum(axis=0).astype(np.float64)+        rows_c = np.where(mo)[0]         if detr_x:             tgt_sum += pt * n_c             obs_sum += k+            if side_split and n_from_a is not None:+                n_a_c = int((rows_c < n_from_a).sum())+                n_b_c = n_c - n_a_c+                if n_a_c >= 3:+                    obs_sum_a += (nz[:n_a_c].sum(axis=0).astype(np.float64) / n_a_c) * n_c+                if n_b_c >= 3:+                    obs_sum_b += (nz[n_a_c:].sum(axis=0).astype(np.float64) / n_b_c) * n_c         rem = np.floor(strength * np.maximum(k - pt * n_c, 0.0)).astype(np.int64)         rem = np.minimum(rem, k.astype(np.int64))+        rem_per_gene += rem         rows_c = np.where(mo)[0]         for g in np.where(rem > 0)[0]:             r = int(rem[g])             on_local = np.where(nz[:, g])[0]             if select == "random":                 pick = rng.choice(on_local, size=r, replace=False)+            elif nnmean is not None:+                # NBHDCOH: primary key = neighborhood mean of gene g, tie-break+                # by own value then row order (lexsort: last key is primary).+                pick = on_local[np.lexsort(+                    (Xc[on_local, g], nnmean[rows_c[on_local], g]))[:r]]             else:                 vals = Xc[on_local, g]                 pick = on_local[np.argsort(vals, kind="stable")[:r]]@@ -728,7 +867,32 @@ def detection_recalibrate(expr, out_labels, stage_a, stage_b, t, strength,         info.update(detrx_d_mean=float(d_g.mean()), detrx_d_min=float(d_g.min()),                     detrx_d_max=float(d_g.max()))         shrink_g = np.clip(1.0 - d_g, 0.0, None)  # genes whose detection falls-        shared_set = set(la.tolist()) & set(lb.tolist())+        # DETRX-SIDE (node 42): origin-conditioned drift. When side_split is on+        # and both origin denominators are usable, an a-only output type is+        # corrected with d_g^a (target / a-origin observed) and a b-only type+        # with d_g^b, instead of the pooled d_g that averages the two origins+        # and under-corrects regressing (a-only) lineages while over-correcting+        # emerging (b-only) ones.+        shrink_a = shrink_g+        shrink_b = shrink_g+        side_ok = (side_split and n_from_a is not None+                   and obs_sum_a.sum() > 0 and obs_sum_b.sum() > 0)+        if side_ok:+            d_glob_a = tgt_sum.sum() / max(obs_sum_a.sum(), 1e-9)+            d_glob_b = tgt_sum.sum() / max(obs_sum_b.sum(), 1e-9)+            d_ga = (tgt_sum + x_smooth * d_glob_a) / (obs_sum_a + x_smooth)+            d_gb = (tgt_sum + x_smooth * d_glob_b) / (obs_sum_b + x_smooth)+            shrink_a = np.clip(1.0 - d_ga, 0.0, None)+            shrink_b = np.clip(1.0 - d_gb, 0.0, None)+            info.update(detrx_side=True,+                        detrx_d_a_mean=float(d_ga.mean()), detrx_d_b_mean=float(d_gb.mean()),+                        detrx_shrink_a_mean=float(shrink_a.mean()),+                        detrx_shrink_b_mean=float(shrink_b.mean()))+        else:+            info.update(detrx_side=False)+        la_set = set(la.tolist())+        lb_set = set(lb.tolist())+        shared_set = la_set & lb_set         for c in sorted(set(out_labels.tolist()) - shared_set):             mo = out_labels == c             n_c = int(mo.sum())@@ -739,20 +903,29 @@ def detection_recalibrate(expr, out_labels, stage_a, stage_b, t, strength,             Xc = expr[mo]             nz = Xc > 0             k = nz.sum(axis=0).astype(np.float64)-            rem = np.floor(x_strength * k * shrink_g).astype(np.int64)+            # A one-sided type inherits its cells from the single stage it is+            # present in: a-only → shrink_a, b-only → shrink_b.+            sg = shrink_a if (side_ok and c in la_set) else (shrink_b if (side_ok and c in lb_set) else shrink_g)+            rem = np.floor(x_strength * k * sg).astype(np.int64)             rem = np.minimum(rem, k.astype(np.int64))+            rem_per_gene += rem             rows_c = np.where(mo)[0]             for g in np.where(rem > 0)[0]:                 r = int(rem[g])                 on_local = np.where(nz[:, g])[0]                 if select == "random":                     pick = rng.choice(on_local, size=r, replace=False)+                elif nnmean is not None:+                    pick = on_local[np.lexsort(+                        (Xc[on_local, g], nnmean[rows_c[on_local], g]))[:r]]                 else:                     vals = Xc[on_local, g]                     pick = on_local[np.argsort(vals, kind="stable")[:r]]                 expr[rows_c[pick], g] = 0.0                 x_zeroed += r     info.update(detrx_n_types=x_types, detrx_n_cells=x_cells, detrx_n_zeroed=x_zeroed)+    info["detr_rem_per_gene"] = rem_per_gene+    info["detr_on_per_gene"] = on_per_gene     info.update(detr_n_types=n_types, detr_n_genes_touched=n_touched,                 detr_n_entries_zeroed=n_zeroed,                 detr_nnz_after=float((expr != 0).mean()),@@ -1763,16 +1936,18 @@ 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 (node 40): 'mechanism' (or any name) disables "-                             "the SPATGATE per-gene spatial gate and falls back to node 38's uniform "-                             "DE-amplitude shrink (γ = T2_RECAL_GAMMA = 0.25 on every support gene), "-                             "reproducing parent node 38 output bit-for-bit")+                        help="mechanism-off control (node 42): 'mechanism' (or any name) disables "+                             "the NBHDCOH detection-removal selection (falls back to lowest-own-"+                             "value) and the DETR-conditional per-gene shrink (falls back to node "+                             "38's uniform γ = 0.25), reproducing parent node 40 output bit-for-bit")     args = parser.parse_args()-    # Mechanism-off control (node 40): SPATGATE only. The uniform shrink of-    # parent node 38 (RECAL_MODE=shrink, γ=0.25) and every earlier knob of node-    # 36 keep their submitted defaults, so the ablated output is bit-for-bit-    # node 38 (γ_g = 0.25 for all support genes; no spatial gating).-    recal_gamma = RECAL_GAMMA+    # Mechanism-off control (node 42): NBHDCOH (+DETRSHRINK, falsified and off+    # by default). DETR+DETRX themselves (node 40's mechanism, inherited) stay+    # ON in both runs with unchanged strengths and counts; the ablated run+    # selects removals by lowest own value and applies the parent's uniform+    # shrink, so the ablated output is bit-for-bit node 40.+    detr_select = "lowest" if args.ablate else DETR_SELECT+    detrshrink_on = DETRSHRINK_ENABLE and not args.ablate     spatgate_on = SPATGATE_ENABLE and not args.ablate     sidecluster = 0 if args.ablate else SIDECLUSTER     proj_eta = None@@ -1796,25 +1971,81 @@ def main() -> None:     # expression step before writing (see RECAL_* config docs).     pb_a_r = np.asarray(stage_a.X.mean(axis=0)).ravel().astype(np.float64)     pb_b_r = np.asarray(stage_b.X.mean(axis=0)).ravel().astype(np.float64)+    # DETRSHRINK (node 42, PLAN mechanism): per-gene DETR-conditional shrink.+    # Dry-run DETR+DETRX on a copy of the pre-shrink output to measure the+    # per-gene removal fraction f_g, then set γ_g = GAMMA_BASE·max(0, 1−f_g/FREF).+    # The dry run is exact: the shrink's column factors k_g ≥ 1−γ > 0 never+    # change the ON/OFF pattern nor the within-column value ordering, so the+    # real post-shrink DETR pass below removes the same entries per gene.+    gamma_vec = None+    recal_gamma = GAMMA_BASE if detrshrink_on else RECAL_GAMMA+    ds_info = {}+    if detrshrink_on and GAMMA_BASE > 0.0 and (DETR_ENABLE or DETRX_ENABLE) \+            and DETR_STRENGTH > 0.0 and expr.shape[0]:+        out_labels_dry = info.get("out_labels")+        if out_labels_dry is not None and out_labels_dry.shape[0] == expr.shape[0]:+            dry = expr.copy()+            _, dry_info = detection_recalibrate(+                dry, out_labels_dry, stage_a, stage_b, float(t), DETR_STRENGTH,+                DETR_MIN_CELLS, "lowest", np.random.default_rng(args.seed),+                detr_x=DETRX_ENABLE, x_strength=DETRX_STRENGTH, x_smooth=DETRX_SMOOTH)+            rem_g = dry_info.get("detr_rem_per_gene")+            on_g = dry_info.get("detr_on_per_gene")+            if rem_g is not None and on_g is not None:+                f_g = np.where(on_g > 0, rem_g / np.maximum(on_g, 1.0), 0.0)+                sup = np.abs(float(t) * (pb_b_r - pb_a_r)) >= RECAL_SUPPORT+                if DETRSHRINK_MODE == "inv":+                    # Mass-preserving reversed redistribution probe: genes DETR+                    # corrected hard get MORE amplitude shrink, untouched genes+                    # less, mean γ over the support ≈ GAMMA_BASE.+                    fbar = float(f_g[sup].mean()) if sup.any() else 0.0+                    if fbar > 1e-9:+                        gamma_vec = GAMMA_BASE * np.clip(+                            1.0 + (fbar - f_g) / fbar, 0.0, 2.0)+                    else:+                        gamma_vec = np.full(f_g.shape, GAMMA_BASE)+                else:+                    gamma_vec = GAMMA_BASE * np.maximum(0.0, 1.0 - f_g / max(FREF, 1e-12))+                recal_gamma = GAMMA_BASE+                ds_info.update(+                    detrshrink_enable=True, detrshrink_gamma_base=GAMMA_BASE,+                    detrshrink_fref=FREF,+                    detrshrink_f_mean=float(f_g.mean()),+                    detrshrink_f_p90=float(np.quantile(f_g, 0.90)),+                    detrshrink_f_max=float(f_g.max()),+                    detrshrink_f_support_mean=float(f_g[sup].mean()) if sup.any() else None,+                    detrshrink_gamma_mean=float(gamma_vec[sup].mean()) if sup.any() else None,+                    detrshrink_gamma_min=float(gamma_vec[sup].min()) if sup.any() else None,+                    detrshrink_gamma_max=float(gamma_vec[sup].max()) if sup.any() else None,+                    detrshrink_n_half_shrunk=int((gamma_vec[sup] < 0.5 * GAMMA_BASE).sum()) if sup.any() else None,+                    detrshrink_n_support=int(sup.sum()))     expr, recal_info = recalibrate(expr, pb_a_r, pb_b_r, float(t), recal_gamma,                                    RECAL_CAP, RECAL_SUPPORT, RECAL_MIN_DP,                                    RECAL_MODE, RECAL_SMAX,                                    coords=coords if spatgate_on else None,                                    gate=({"gmax": SPATGATE_GMAX, "sref": SPATGATE_SREF,                                           "k": SPATGATE_K, "mode": SPATGATE_MODE}-                                         if spatgate_on else None))+                                         if spatgate_on else None),+                                   gamma_vec=gamma_vec)     info.update(recal_info)-    # DETR (node 40 backup mechanism): detection-rate geometric interpolation,-    # applied AFTER the amplitude shrink (ablate disables DETR only, so the-    # control run is node 38 bit-for-bit).-    detr_on = (DETR_ENABLE or DETRX_ENABLE) and not args.ablate+    info.update(ds_info)+    # DETR (node 40 mechanism, inherited): detection-rate geometric+    # interpolation, applied AFTER the amplitude shrink. NBHDCOH (node 42+    # backup) changes only WHICH ON entries are zeroed (selection by lowest+    # 15-NN neighborhood mean instead of lowest own value); counts, strengths,+    # the uniform shrink and coordinates are unchanged. --ablate restores+    # select="lowest" + uniform shrink → node 40 bit-for-bit.+    detr_on = DETR_ENABLE or DETRX_ENABLE     if detr_on:         out_labels = info.get("out_labels")         if out_labels is not None and out_labels.shape[0] == expr.shape[0]:             expr, detr_info = detection_recalibrate(                 expr, out_labels, stage_a, stage_b, float(t), DETR_STRENGTH,-                DETR_MIN_CELLS, DETR_SELECT, np.random.default_rng(args.seed),-                detr_x=DETRX_ENABLE, x_strength=DETRX_STRENGTH, x_smooth=DETRX_SMOOTH)+                DETR_MIN_CELLS, detr_select, np.random.default_rng(args.seed),+                detr_x=DETRX_ENABLE, x_strength=DETRX_STRENGTH, x_smooth=DETRX_SMOOTH,+                coords=coords, nbhd_k=NBHDCOH_K,+                n_from_a=int(info.get("n_from_a", 0)) or None,+                side_split=(DETRX_SIDE and not args.ablate))             info.update(detr_info)     sc_info = {"sidecluster": sidecluster}     if sidecluster and expr.shape[0]:@@ -1870,13 +2101,22 @@ def main() -> None:                                         "spatgate_sref_val", "spatgate_gamma_mean",                                         "spatgate_gamma_min", "spatgate_gamma_max",                                         "spatgate_n_zero_gamma", "spatgate_applied",-                                        "detr_enable", "detr_strength", "detr_min_cells",+                                         "detrshrink_enable", "detrshrink_gamma_base",+                                         "detrshrink_fref", "detrshrink_f_mean",+                                         "detrshrink_f_p90", "detrshrink_f_max",+                                         "detrshrink_f_support_mean",+                                         "detrshrink_gamma_mean", "detrshrink_gamma_min",+                                         "detrshrink_gamma_max", "detrshrink_n_half_shrunk",+                                         "detrshrink_n_support",+                                         "detr_enable", "detr_strength", "detr_min_cells",                                         "detr_select", "detr_n_types", "detr_n_genes_touched",                                         "detr_n_entries_zeroed", "detr_nnz_before",                                          "detr_nnz_after", "detr_pb_shift_max",-                                         "detrx_enable", "detrx_strength", "detrx_n_types",-                                         "detrx_n_cells", "detrx_n_zeroed", "detrx_d_mean",-                                         "detrx_d_min", "detrx_d_max",+                                          "detrx_enable", "detrx_strength", "detrx_n_types",+                                          "detrx_n_cells", "detrx_n_zeroed", "detrx_d_mean",+                                          "detrx_d_min", "detrx_d_max",+                                          "detrx_side", "detrx_d_a_mean", "detrx_d_b_mean",+                                          "detrx_shrink_a_mean", "detrx_shrink_b_mean",                                          "sidecluster", "sidecluster_n_a", "sidecluster_applied")}     print(json.dumps({"bracket": [a["stage"], b["stage"]], **keep}, default=float), file=sys.stderr)     write_t2(args.out, expr, coords, genes, seed=args.seed)

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

用到的知识库条目

编号标题出处
k007Interval staging and held-out-window filtering of external datanotes/official/来件/virtualembryo.ai/rules.md
k024World-model evaluation dimensions for state-transition predictorsnotes/competition/07_biomedical_world_models.md
k009Conditional / OT flow matching for population transportarXiv:2210.02747 (Lipman et al., Flow Matching for Generative Modeling)

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

改了什么PLAN 机制 DETRSHRINK(γ_g=γ_base·max(0,1−f_g/f_ref),f_g 为 DETR 干跑逐基因移除比例)已实现但在 A 半 6 配置证否;实际提交的是两个备选改动,只动表达的二值检出通道、坐标逐位不动:① DETRX-SIDE——单侧独有类型的检出漂移代理由池化 d_g 改为按细胞起源阶段条件化 d_g^a/d_g^b(移除 3420→14257 项,nnz .0502→.0459);② NBHDCOH——DETR/DETRX 置零选择由「自身值最低」改为「15-NN 邻域内该基因均值最低」(移植自节点 41),每基因移除数不变。
各组分数的变化cell_state:变好,超噪声:+3.00(56.74→59.74),全部来自 variogram——raw 0.009266→0.007372,skill 0.493→0.553,得分 6.16→6.91(+0.75),首次回到地板(6.25)之上;mmd_u 持平(raw 0.01009→0.01008,skill 0.642,+0.00)。
expression_change:变坏,约在噪声边缘:−0.97(63.44→62.47)。de_score raw 0.3793→0.3448,skill 0.628→0.614,得分 −0.18;de_direction raw 0.3958→0.3845,skill 0.641→0.636,得分 −0.06。两项同向小幅下滑,与 DETRX-SIDE 额外移除 ~11k 个 ON 项改变 pb/秩一致。
local_spatial:在噪声内、方向偏负:−0.32(61.25→60.93)。neighborhood_mmd raw 0.04923→0.04988(变差),skill 0.613→0.609,得分 −0.08。NBHDCOH 单独在 A 半确实降 nbhd raw(.05126→.05021),但与 DETRX-SIDE 叠加后被 b-only 的额外移除抵消——不能把 NBHDCOH 记作 local_spatial 收益。邻域 skill 仍高于地板 0.5,结构门 = 1,形状组未被打折。
shape_scale:不变:+0.00(77.31),三项原始值与得分逐位相同(d2_shape 0.00661/skill 0.963、occupancy_dice 0.8086/skill 0.424、scale_log_ratio 0.0099/skill 0.932),符合「坐标未动」的设计。occupancy_dice 仍低于地板(3.53 < 4.17)。
family_idT2EI-01
假设是否成立否
经验
  1. PLAN 假设「幅度收缩与 DETR 检出校正在同一 DE 基因上冗余」被证否:f_g 分布非退化(mean .243/p90 .525/max .75),但 6 个配置(γ_base=0、0.25×f_ref∈{0.3,0.5,1.0}、0.15×0.5、质量守恒反向再分配)在 A 半 seed 0 全部 ≤ 父重评 63.94(62.79–63.93),cell_state 随总收缩质量单调,γ=0 最差。
  2. 在本谱系上收缩质量本身就是收益来源:任何「按条件少缩一部分基因」的门控(节点 40 的 SPATGATE、本节点的 DETRSHRINK)都会按比例丢 cell_state;要提 cell_state 应改检出通道或提高总收缩质量,而不是重新分配收缩。
  3. 池化漂移会自我抵消:单侧类型的检出漂移代理若把 a 起源(高检出)与 b 起源(低检出)细胞放进同一分母,d̄≈0.95、只移除 ~4%;按起源阶段分侧后 d̄_a=2.12 / d̄_b=0.55,b-only 移除 ~34%,variogram raw .0095→.0076。做「目标率/观测率」类校准时,分母必须与被校正细胞的来源同分布。
  4. OFF-only 的二值检出移除主要动 variogram(共变结构),几乎不动 mmd_u(0.01009→0.01008):想拉 cell_state 中的 mmd_u 需要改分布的位置/宽度,而不是检出模式。
  5. 检出移除对 DE 两项有系统性代价:额外 ~11k 项置零后 de_score −0.18、de_direction −0.06(组 −0.97),做检出校准时要把 expression_change 当作需补偿的副作用一起监测,不能只看 cell_state。
  6. 榜分 +0.43 在 T2 噪声(约 1 分)内,但关闭机制后正好回吐 −0.43、且 cell_state +3.00 远超噪声,说明机制确实生效且收益集中在 variogram 一项——判读时以分组/指标分解而非榜分总量为准。
  7. 变化量表记录耗时 3.5 s(父 37.4 s),而 Engineer 自报 25.6 s;以变化量表为准,两者都远在限额内,但自报运行时不可直接引用。
mechanism_active是
下一步建议
  1. 针对 expression_change(−0.97):DETRX-SIDE 改变了 pb,幅度收缩 γ=0.25 是在旧检出通道上标定的——在 side 条件下重扫 γ∈{0.20,0.25,0.30,0.35}(A 半 3 种子),目标是把 de_score raw 拉回 ≥0.379 同时保住 variogram ≤0.0075。
  2. 针对 cell_state/variogram(主收益通道):在 DETRX_SIDE=1 下重扫 s_ext∈{0.85,1.0} 与伪计数 m∈{3,10,30}(x07 是唯一 3 种子验证点,额度耗尽未扫);验收线设为 variogram raw ≤0.0073 且 nbhd raw ≤0.0495,避免邻域跌破地板 0.5 触发结构门打折。
  3. 针对 cell_state 进一步:把起源条件化从单侧类型推广到共有类型(共有类型的 a 起源/b 起源细胞分别用 d_g^a/d_g^b 校正),检验 variogram 是否继续下探;同时以 de_direction ≥0.3845 为护栏。
  4. 针对 shape_scale(最大单点余量):occupancy_dice skill 0.424、得分 3.53 低于地板 4.17,而 d2_shape/scale 已接近天花板;做一次只动坐标(占据体素各向异性/主轴分布)的探针,与表达通道正交、互不干扰,潜在 +0.6 分以上。
  5. 针对 local_spatial:NBHDCOH 与 DETRX-SIDE 叠加后 nbhd raw 反而略升(0.04923→0.04988),下一步单独关 NBHDCOH(T2_DETR_SELECT=lowest)跑 1 个种子对照,确认它在 side 条件下是否仍是净正,否则去掉以简化机制。

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

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

分析员

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

工程师

角色工程师 alibaba-token-plan-cn/qwen3.8-max
调用次数1 次
轮数86
工具调用共 87 次:bash 43、edit 33、read 9、write 2
用时48 分
token 数输入 200,950 · 输出 29,859 · 思考 56,286
任务(第一行)按计划修改程序:DETR-conditional amplitude shrink: per-gene γ modulated by DETR removal fraction
最后的回答(摘录)
完成。总结:

**做了什么**
- **PLAN 机制 DETRSHRINK(γ_g 随 DETR 移除比例 f_g 递减)已完整实现并证否**:干跑精确计算 f_g(mean .243 / p90 .525 / max .75,非退化),6 配置(γ_base=0、0.25×f_ref∈{0.3,0.5,1.0}、0.15×0.5、质量守恒反向再分配)在 A 半 seed 0 全部 ≤ 父重评 63.94(62.79–63.93)。cell_state 随总收缩质量单调——收缩与检出校正互补而非冗余。
- **改交备选机制(同一弱项 cell_state)**:① DETRX-SIDE(主贡献,父 ANALYSIS 建议 #2):单侧独有类型(36% 细胞)的检出漂移代理从池化 d_g(d̄≈0.95,方向被抵消、只移除 4%)改为按起源阶段条件化 d_g^a/d_g^b——b-only 新生谱系检出向几何插值目标回落 ~34%(移除 3420→14257),variogram raw .0095→.0076(skill .47→.58,本谱系首次过地板);② NBHDCOH(移植节点 41 已验证部件):置零选 15-NN 邻域均值最低细胞。坐标逐位不动。

**查分**(A 半 20/20 用尽;父同日重评锚 63.94/63.11/63.41,均值 63.49):提交机制三种子 **64.62/63.75/63.90,均值 +0.60**,逐种子一致(cs +2.5…+3.0,ls/ec 中性)。`--ablate` 逐位还原父节点 40(digest 验证),默认运行确定、25.6s/0.62GB、vec-check 通过。

**下一步最值得试**:① side 条件下重扫 s_ext∈{0.85,1.0}(额度耗尽未测,x07 是已验证点);② de_direction 略降(.378→.365)——b-only 移除的 pb 副作用可做逐基因 de 感知微调;③ final 视图共有类型更多、单侧占比更小,DETRX-SIDE 贡献预期缩小,nbhd 选择部分不受影响。
原始记录位置/home/spark-longxinyang/vec/runs/formal/20261003-171955-search-t2-embryo-interp-chain-12h/nodes/42/engineer.jsonl 639 KB
/home/spark-longxinyang/vec/runs/formal/20261003-171955-search-t2-embryo-interp-chain-12h/nodes/42/engineer.stderr

调研员

角色调研员 alibaba-token-plan-cn/qwen3.8-max
调用次数1 次
轮数1
工具调用共 0 次:—
用时2 分
token 数输入 21,761 · 输出 1,705 · 思考 4,712
任务(第一行)为节点 n42(改进,父节点 n40)写改进计划 PLAN.json
最后的回答(摘录)
ngth-driven and this mechanism won't close it.",
 "family_id": "T2EI-01",
 "mechanism": "Per-gene amplitude shrink factor γ_g is modulated by the fraction of ON entries DETR already removed for that gene (γ_g = γ_base·max(0, 1−f_g/f_ref)), eliminating the structural redundancy between binary detection correction and amplitude correction on the same DE genes.",
 "vs_constant_shift": "This is not a uniform shift or global reweighting. It introduces a per-gene conditional dependency: each gene's shrink factor depends on how much DETR's detection-pattern correction already acted on that gene. A constant shift would apply the same amplitude reduction to all genes regardless of DETR's per-gene action; here the correction is gene-specific and mechanistically coupled to the upstream DETR step.",
 "mechanism_evidence": "1) Print f_g distribution: if mechanism is active, f_g should show meaningful spread (some genes 0.1–0.5, others near 0), and γ_g should differ across genes (not all equal to γ_base). 2) Compare variogram raw: expect improvement toward node 39's 0.0074 (from parent's 0.0093) for configs with reduced effective shrink. 3) nbhd raw should improve or stay flat (≤0.0495) vs parent's 0.04923, since less over-correction preserves expression-position pairing. 4) Report per-gene γ_g summary (mean, min, max, fraction of genes with γ_g < 0.5·γ_base) to confirm the modulation is non-trivial. 5) If f_g is negligible (<0.02 for all genes), mechanism is structurally inert and the γ_base=0 ablation is the only informative comparison.",
 "mechanism_off_control": "Set f_ref → ∞ (equivalently, set all f_g = 0 before computing γ_g). Then γ_g = γ_base·max(0, 1−0) = γ_base for all genes, recovering the parent's uniform shrink exactly. Output should be bit-for-bit identical to parent node 40 (verify via sha256 of prediction array). Expected difference when mechanism is ON: cell_state +2–3 pts, nbhd raw −0.001 to −0.003, board +1–2 pts if hypothesis is correct.",
 "sources": []}
```
原始记录位置/home/spark-longxinyang/vec/runs/formal/20261003-171955-search-t2-embryo-interp-chain-12h/nodes/42/researcher.jsonl 7 KB
/home/spark-longxinyang/vec/runs/formal/20261003-171955-search-t2-embryo-interp-chain-12h/nodes/42/researcher.stderr

审查员

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