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

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

节点 n37 在终选来历上

DETR:按共有类型把检出率向几何插值目标 p_a^(1−t)·p_b^t 做 OFF 移除(强度1.5),修复地板下 variogram;PLAN 的 SPATRESID 空间门控坍缩证否(8 配置噪声内)。

运行?一次完整的自动搜索或 Agent 会话,有自己的锁定配置和证据包。20261003-171955-search-t2-embryo-interp-chain-12h
父节点n35
子节点n39
操作?种子:人写的起点;改进:在父节点上改;草稿:从头写;修复:修父节点的报错。改进
状态已打分
分数搜索目标分 64.05(+0.8) · proxy 64.05(+0.8) · 3 次复测均分 63.71
审查通过 检查1(越界读取):未发现问题——run.py 仅读视图内 prior/(tf_regulons 约行404、gmt 基因集约行510-522,均为 view 相对路径且在 view_manifest 的 prior 清单内),输入经 load_manifest/read_stage 从 --data 视图读取,无绝对路径、..、/mnt、/home、评分器路径,无联网。; 检查2(硬编码目标统计量):未发现问题——全部类型为检出率/比例数值均现场计算:DETR 目标 p_t=p_a^(1−t)·p_b^t 由括号阶段 stage_a/stage_b 的型内检出率算出(run.py:1414…
用时?从运行开始到结束(或到现在)的挂钟时间。36 分
程序版本7a44e350fbd5d2604e29763446bfb81192eb770f (programs.git)

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

来自 programs.git 7a44e350fb:solution/METHOD.md

DETR:按共有类型把检出率向几何插值目标 p_a^(1−t)·p_b^t 做 OFF 移除(强度1.5),修复地板下 variogram;PLAN 的 SPATRESID 空间门控坍缩证否(8 配置噪声内)。

节点 37(improve,父 35,board T2:embryo:val_interp)

做了什么
  1. PLAN 机制 SPATRESID(坐标混居条件化的残余双峰坍缩)——实现、对照通过、证否。
    • 实现:在最终输出坐标空间(aniso/jitter/RMS 之后)逐共有类型建 15-NN(含自身,与 neighborhood_mmd 同尺度),h_i = 邻域异源占比;只对 h_i ≥ θ 的细胞执行父节点 RESID 坍缩(软权重 w=clip(|s|/0.15,0,1),nnz-only、clip≥0,保合并均值系数改用门控后计数 c_a=γ·n_bg/(n_ag+n_bg)、c_b=γ·n_ag/(n_ag+n_bg))。坐标计算被移到表达坍缩之前(不读 xa/xb、不耗 rng,机制关闭时输出与父节点 sha256 逐位一致,已验证)。
    • 关闭对照(PLAN 两条 off 路径均验证):θ=1.0 输出与父节点默认逐位一致(sha256 79153d…0695 相同)→ 门控无泄漏;--ablate 同样逐位一致。
    • 机制生效证据:混居细胞占比 θ=0.1/0.2/0.3/0.4/0.5 → 20.9%/16.1%/10.3%/8.5%/5.3%(非空转,>PLAN 的 5% 下限);被门控子集恰是残余分离更大的细胞(gated sep_rel 0.72–0.95 vs 全体 0.63),坍缩后 gated sep_rel 0.58–0.82、全体部分下降;未门控细胞表达改动=0(逐位);pb_maxshift ≤0.016(DE 通道受保护,de_score raw 0.2857 全程不动)。
    • 查分(A 半 seed 0,基线 62.36):θ 网格 γ=0.5 → 62.38/62.38/62.37/62.37/62.37;θ=0.2 γ=1.0 → 62.39;θ=0.2 smode=gated γ=0.5/1.0 → 62.38/62.40。结论:门控把 mmd_u 收益与 nbhd 伤害按被门控比例同比缩小(θ=0.1:mmd −0.00016 / nbhd +0.00023;对比节点 35 无门控:mmd −0.0008 / nbhd +0.0025),交换比改善但总量趋零,净变化 +0.01…+0.04 全部在噪声内。解耦假设不成立。
  2. 备选机制 DETR(检出率几何插值 OFF 校正)——针对同一弱项 cell_state(variogram skill 0.389 地板下)——有效,已提交。
    • 动机(只用括号数据的事实):nnz-only 位移把每个细胞的零/非零支持集冻结在源阶段,输出逐基因检出率呈 a/b 双峰。实测:pred 总检出率 0.0571;括号线性插值 0.0711、几何插值 exp((1−t)ln p_a + t ln p_b) ≈ 0.053。表达在 log 空间近乘性增长,检出率的时间插值应取几何而非线性——据此 pred 相对几何目标过检出,应做移除而非补入。
    • 实现:逐共有类型(两侧 ≥10 细胞)、逐软权重激活基因(w=clip(|Δ_type|/0.15,0,1)>0.01),目标 p_t = p_a^(1−t)·p_b^t(括号阶段型内检出率),当前过检出的部分按 k=round(strength·n·(p_cur−p_t)) 置零;被选细胞由逐类型抽取、跨基因共享的确定性均匀键排序决定(模拟真实的细胞级深度相关 dropout,而非逐基因独立噪声)。只移除、不补入(OFF_ONLY),坐标与其余管线逐位不动。随机源 np.random.default_rng(seed+777001),与 mix 的 rng 流隔离,对 seed 确定。
    • 失败的解码(证明"补入"方向结构性有毒):linear 目标 + ON 补入 q_on=0.25 → 54.57(variogram 0.0134→0.0310,nbhd 0.0507→0.0844);q_on=0.05 → 56.69。注入小值经 variogram/nbhd 的 sqrt 核放大,与任务书"把零值整体抬高有害"一致。linear 目标 OFF-only → 62.57(弱于 geom,因 linear 目标下净方向是补入)。
    • 剂量响应(geom OFF-only,A 半 seed 0):strength 0.5/1.0/1.5/2.0 → 62.68/62.99/63.17/62.92。s=1.5:variogram raw 0.01342→0.01046(skill 0.389→0.47 方向修复)、mmd_u 0.01161→0.01139、nbhd 0.05066→0.05083(+0.0002,噪声边缘)、de_direction 0.3852→0.3842(−0.001,噪声内);s=2.0 时 nbhd 0.05142、de_dir 0.3747 开始受损 → 峰值在 1.5。
    • 种子确认(s=1.5,A 半):seed 0/1/2 → 63.17/62.67/62.90,均值 62.91,+0.55 vs 同日基线 62.36;variogram 在三个种子一致改善(0.0103–0.0109 vs 0.0134,远超 0.0002 噪声阈),mmd_u 一致改善(0.0110–0.0114)。
    • 机制生效证据:s=1.5 移除 18,600 个 nnz 条目(约占全部条目 1%),分布跨 10 个共有类型、约 480 基因/类型;未选中细胞与该类型未激活基因逐位不动;检出率与几何目标的平均差距 0.029→0.008。
    • 关闭对照:DETR_FLIP_ON=0 或 --ablate mechanism → 输出与父节点 35 默认逐位一致(sha256 验证)。
提交配置(run.py 默认)

父节点 35 全部管线原样(mix + α=5 + soft + corr 扩散 η=1/asym=0.85 + λ=6 + β=0.2 + aniso 1.25),新增 DETR:T2_DETR_FLIP_ON=1.0、MODE=geom、OFF_ONLY=1、STRENGTH=1.5、TAU=0.15、KEY=cell、Q_ON 无效(不补入)。SPATRESID 默认关闭(THETA=0)。

验证过 / 没验证
  • 验证:vec-check ok;seed 0 重跑逐位确定;--ablate 逐位还原父节点;θ=1.0 逐位还原(门控无泄漏);A 半 19 次查分(额度 20 内,剩 1 未用);单输入回退路径未受影响(代码路径在 bracket 分支内)。
  • 没验证:B 半(正式分);heart 两榜(本 run 只挂 embryo 视图);strength 1.25/1.75 细扫;KEY=gene(逐基因独立键)变体;伪装视图重跑(程序只读视图数据与 seed,不读绝对时间/路径,t 为平移不变量,预期通过)。
  • 耗时 ~30 s、峰值内存 <1 GB,limits(30 min / 28 GB)内;EXECUTION.json {"gpu": false}。
知识来源
  • 未使用任何保留阶段(E7.25/E7.5 窗口)或保留基因型数据;DETR 的目标检出率完全由视图内括号阶段(E6.75、E8.0)现场计算。
  • 方法学依据(非阶段特异性测量):log 空间表达近乘性 → 检出率几何插值;真实 scRNA/空间数据的 dropout 是细胞级深度相关的(逐细胞键跨基因共享),不是逐基因独立噪声。无外部文献数值。
  • 评分规则事实来自任务书"T2 评分规则简报"(variogram/nbhd 的 sqrt 核对小值敏感、地板定义、噪声 ~1 分)。
查分明细(A 半,seed 0,除注明外)
配置boardmmd_uvariogramnbhdde_dir
基线(父 35 默认)62.360.011610.013420.050660.3852
SPATRESID θ=0.1 γ0.562.380.011450.013410.050890.3861
SPATRESID θ=0.2 γ0.562.380.011490.013410.050830.3859
SPATRESID θ=0.3 γ0.562.370.011540.013420.050720.3853
SPATRESID θ=0.4 γ0.562.370.011550.013420.050700.3852
SPATRESID θ=0.5 γ0.562.370.011580.013420.050650.3853
SPATRESID θ=0.2 γ1.062.390.011410.013390.050950.3865
SPATRESID θ=0.2 gated γ0.562.380.011490.013400.050830.3862
SPATRESID θ=0.2 gated γ1.062.400.011420.013380.050940.3868
DETR linear q0.2554.570.017440.031040.084440.3613
DETR linear q0.0556.690.016090.028270.074260.3642
DETR linear off-only62.570.011540.012430.050730.3783
DETR geom off-only s1.062.990.011450.011090.050620.3833
DETR geom off-only s0.562.680.011490.012240.050520.3839
DETR geom off-only s1.5(提交)63.170.011390.010460.050830.3842
DETR geom off-only s2.062.920.011410.010300.051420.3747
提交配置 seed 162.670.011010.010870.051550.3738
提交配置 seed 262.900.011120.010300.050270.3780

(基线被查分两次——首次输出未落盘,重查一次作锚点;两次同预测。)

调研员的计划

名称坐标混居条件化的残余双峰坍缩(SPATRESID)攻 cell_state
动机父节点 35 组内最弱项为 cell_state 51.51(variogram skill 0.407 地板下、mmd_u skill 0.623)。节点 35 已证明无条件 RESID 坍缩能拿到全树最佳单项 mmd_u 收益(raw 0.01161→0.01081,+0.22 分),但 neighborhood_mmd 一致恶化(0.05066→0.053–0.057)导致净负——ANALYSIS 明确指出根因是'把坐标不同的两群细胞表达拉近必然破坏表达-位置配对',并建议加空间邻域条件解耦(next_suggestions #2)。本方案正是给 RESID 加这个缺失的空间条件,不是重复失败改法:失败的机制(无条件坍缩)与被修复的结构问题(忽略坐标异质性)一一对应。
做法复用父节点 35 已实现的 RESID 代码(T2_RESID_*,both-sides 保均值系数 c_a=γ·n_b/(n_a+n_b)、c_b=γ·n_a/(n_a+n_b),软权重 w=clip(|s|/0.15,0,1),nnz-only、clip≥0),在其前面插入空间门控:1) 在最终输出坐标空间里,对每个共有类型合并 a/b 两侧细胞建 15-NN(k=15,与 neighborhood_mmd 同尺度);2) 对每个细胞算邻域内异源占比 h_i(15 个邻居中来自另一侧的比例);3) 只对 h_i≥θ 的'坐标上已混居'细胞执行原有 RESID 坍缩,h_i<θ 的细胞表达完全不动。关键参数:θ 初值 0.3,网格 [0.1, 0.2, 0.3, 0.4, 0.5];γ 初值 0.5,备选 1.0;τ(软权重阈值)保持 0.15 不变。单输入阶段(无括号):与父节点相同,回退最近输入的分层复制,机制不适用。筛选:先在 proxy A 半 seed 0 跑 θ 网格,记录 mmd_u raw、neighborhood_mmd raw、board 与'混居细胞占比'诊断量;只有当 mmd_u raw ≤0.0110 且 neighborhood_mmd raw ≤0.0480(不劣于父节点 0.04779+0.0002)且 board ≥+0.3 时,才用 seed 1/2 双确认(T2 噪声约 1 分,单项 raw 变化须超 0.0002 才算真实)。
风险1) 混居细胞占比过低(如 <5%)→ 机制结构性空转,board 与父节点同;Engineer 应先打印每个共有类型的混居占比,<5% 时直接加大 θ 无效则放弃。2) θ 过小退化为无条件 RESID,重现 nbhd 恶化——以 neighborhood_mmd raw 0.0480 为否决线,超过即停。3) 混居细胞恰是表达-位置配对最紧密的细胞(它们的邻域表达已经连续),坍缩反而伤 nbhd——若 θ=0.5 仍伤,说明该通道无解,如实报告。4) 建 15-NN 增加耗时,但细胞数 ≤数万、类型内建邻,预期 <2 s,无内存风险。

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

对比:父节点版本 5c4da635ff。改动的文件:solution/METHOD.md +60 −64、solution/README.md +15 −7、solution/run.py +345 −26

diff --git a/solution/METHOD.md b/solution/METHOD.mdindex 096be85..3b99f0e 100644--- a/solution/METHOD.md+++ b/solution/METHOD.md@@ -1,64 +1,60 @@-NO_CHANGE: 相关特征子空间投影位移(k=25–200 五档全部噪声内,retention≥0.94 结构性空转);备选 RESID 残余双峰坍缩、迭代残差核扩散、逐类型 asym、within 核亦全部证否--## 结论--提交的 `run.py` 默认输出与父节点 34 **逐位一致**(X/data、indices、indptr、obsm、seed 的 sha256 全部相同;`--ablate mechanism` 亦逐位一致,已验证)。PLAN 指定的机制(EIGPROJ)已实现并按 PLAN 的判据证否;按任务书要求又实现了 4 个针对同一弱项(cell_state / variogram)的备选机制,共 17 个配置、18 次查分,无一超过父节点基线 +0.3(A 半,seed 0),故按 NO_CHANGE 提交,所有机制代码保留在 run.py 中、默认关闭(env 开关见下),供后续节点复用。--## 基线(proxy A 半,seed 0,与父节点 34 逐位一致的输出)--board **62.36**;raw:de_score 0.2857 / de_direction 0.3852 / mmd_u 0.01161 / variogram 0.01342 / nbhd 0.05066 / d2_shape 0.0047 / occupancy_dice 0.8066 / scale_log_ratio 0.0162。(父节点 docstring 中 asym=0.85 的网格值也是 62.36,交叉印证默认输出 = 父节点。)--## 1. PLAN 机制 EIGPROJ:实现与证否(5 次查分 + 1 次基线)--实现(按 PLAN):对括号两阶段全细胞的基因-基因 Pearson 相关矩阵 C(498×498,`np.linalg.eigh`,按 |λ| 取前 k 个特征向量 V_k),在不对称相关扩散之后、软权重之前,对每个共有类型的 Δ' 做 Δ''=V_k(V_kᵀΔ'),再经原有 PROJ_NORM 重归一到 ||Δ||。两侧(a 全量、b 衰减 η(1−asym)=0.15)都投影。`T2_EIGPROJ_K`,k=0 或 ≥498 跳过。--机制生效证据(PLAN mechanism_evidence 逐条核对):-- 投影保留率 ||Δ''||/||Δ'||:k=25/50/100/150/200 → **0.959/0.963/0.969/0.974/0.980**,全部高于 PLAN 的证据带 0.6–0.95 → 判据本身已宣告投影近似空转;-- 方向改变角:16.5°/15.6°/14.4°/13.0°/11.4°(在 5–30° 带内但偏小端);-- variogram raw:0.01337/0.01337/0.01332/0.01333/0.01339,对比基线 0.01342,改善 ≤0.0001,**远低于 PLAN 要求的 ≥0.0005**(目标 ≤0.0125 完全未达);-- de_direction raw:0.3803–0.3818 vs 基线 0.3852,恶化 0.003–0.005,超过 PLAN 的 <0.001 容忍线。--| k | board | variogram raw | mmd_u raw | nbhd raw |-|---|---:|---:|---:|---:|-| 0(=父节点) | 62.36 | 0.01342 | 0.01161 | 0.05066 |-| 25 | 62.24 | 0.01337 | 0.01180 | 0.05118 |-| 50 | 62.24 | 0.01337 | 0.01170 | 0.05137 |-| 100 | 62.37 | 0.01332 | 0.01149 | 0.05091 |-| 150 | **62.43** | 0.01333 | 0.01139 | 0.05053 |-| 200 | 62.41 | 0.01339 | 0.01144 | 0.05049 |--**证否的结构性原因(供后续节点参考,勿再沿此方向)**:(I+ηC) 与 V_kV_kᵀ 可交换(同为 C 的特征基上的对角算子),扩散 Δ+ηCΔ 已把 Δ 集中到 C 的主特征方向(谱权 (1+ηλᵢ)),事后再投影到同一矩阵的前 k 特征空间只能移除 ≤6% 的能量(k=25 时也只移除 4%)——投影与扩散不是独立约束,PLAN 的前提("加性校正保留了 Δ 中与 C 正交的分量")在数学上不成立。k<25 的档位按 PLAN 风险条款跳过(k=50 时 de_dir=0.3816<0.39)。--## 2. 备选机制(针对同一弱项 cell_state / variogram,均已实现、均证否)--诊断动机:全管线跑完后,输出内每个共有类型中 a 来源与 b 来源细胞的残余质心分离仍达 within-type std 的 **0.55–0.76 倍**(run.py stderr 的 `resid_sep_rel_before`=0.629),即混合双峰是 variogram/mmd 低于地板的直接嫌疑。--### 2a. RESID 残余双峰坍缩(`T2_RESID_GAMMA/TAU/SIDE/LAMBDA`,8 次查分)-测出输出内的残余分离 s=μ_out(b)−μ_out(a),用与主管线相同的解码(软权重 w=clip(|s|/0.15,0,1)、nnz-only、clip≥0)坍缩 γ 比例;both-sides 时系数 c_a=γ·n_b/(n_a+n_b)、c_b=γ·n_a/(n_a+n_b) 保持合并均值不动(DE 指标结构性不受扰)。-- both γ=0.5 → **62.27**;γ=1.0 → 62.14;γ=0.5+λ=6 → 62.26;γ=1.0+λ=6 → 61.79;a-only γ=0.5 → 60.90;a-only γ=1.0 → 56.58(dp 被移动、de_score 0.2857→0.1786,证实"保均值"设计必要)。-- 一致规律:**mmd_u 显著改善**(0.01161→0.01081,+0.22 分,全树从未有机制做到)但 **neighborhood_mmd 一致恶化**(0.05066→0.05296…0.05655,−0.27…−0.67 分),净负。结论:残余双峰并非 nbhd/variogram 能吃的免费午餐——把 a/b 两群细胞的表达拉近会破坏表达-位置配对(两群细胞坐标不同)。零率不变(0.9584→0.9586),排除稀疏结构解释。--### 2b. ITERDIFF 迭代残差核扩散(父节点建议 #1,`T2_ITERDIFF_ENABLE/ETA2`,2 次查分)-两遍管线:第一遍输出后按型内残差重算相关核 C2(与 C 的余弦仅 0.48,确是不同的核),第二遍用 C2 做方向校正。η2=1.0 → **61.90**(variogram 0.01378 反而变差);η2=2.0 → 62.30(de_score 0.2857→0.3214 是唯一亮点,但 nbhd 0.05295、variogram 0.01353 均恶化)。证否。--### 2c. ASYMPT 逐类型不对称(父节点建议 #2,`T2_ASYMPT_ZETA/CAP`,2 次查分)-asym_type = clip(0.85 + ζ·(||Δ_type||/median −1), 0, 0.95)。ζ=+0.3 → **62.35**(asym 实际范围 0.74–0.91);ζ=−0.3 → 62.29。均噪声内。证否。--### 2d. within 型内残差核(`T2_PROJ_CORR_KERNEL=within`,1 次查分)-扩散核换成两阶段型内残差相关(去掉组成结构)→ **61.80**,variogram 0.01381 恶化。全细胞核(含组成结构)才是对的方向。证否。--## 验证过什么 / 没验证什么--- 验证:默认输出与 `--ablate` 输出逐位一致且与父节点行为一致(哈希对比);`vec-check` 通过;seed 0/1/2 均能跑通、确定;全程 1.6 s / <1 GB。所有统计量(相关核、残余分离、类型范数)均从视图输入现场计算,无硬编码、无绝对时间依赖(只用 t 与时间差),满足视图无关。-- 未验证:所有配置只在 proxy A 半 seed 0 上筛过(个别双配置);没有任何配置达到"双 seed 确认"门槛(≥+0.3),故未花 seed 1/2 查分;B 半行为未测。-- 生物学知识来源:本节点全部机制均为输入数据的现场统计(基因-基因相关、类型均值差、特征分解),未使用任何外部生物学知识条目或保留阶段信息。--## 查分账目(18/20)--基线×2(其中 1 次为重复,浪费)、EIGPROJ k 网格×5、RESID×6、ITERDIFF×2、ASYMPT×2、within×1。--## 给后续节点的建议--1. variogram(skill≈0.39,低于地板)对**类型级 Δ 方向**的一切修正都不敏感(CORRPROJ 是唯一动过它的机制,η≈1 已饱和);对**细胞级分布**的修正(RESID)会先伤 nbhd。它可能与 nbhd 存在结构冲突:任何把两群细胞表达拉近的操作都同时降 mmd_u 和升 nbhd。若再攻 cell_state,应找只降 mmd_u 不动表达-位置配对的路径(例如按空间邻域条件化地坍缩:只坍缩空间上已混居的 a/b 细胞对——RESID 代码已就位,加一个邻域条件即可试)。-2. de_score 在 ITERDIFF η2=2.0 下 0.2857→0.3214(+0.18 分)是本次唯一超噪声的单项收益,但被 nbhd/variogram 恶化淹没;若单独把"残差核扩散"只用于 DE 通道(如叠加 TSHIFT/PBPROJ 式的伪批量校正而不动细胞级位移),可能变现。-3. 本父节点(34)在 A 半 62.3 附近是一个尖锐局部最优:17 个新配置全部 ≤ +0.07。继续在位移方向/幅度上找增益的期望值很低。+DETR:按共有类型把检出率向几何插值目标 p_a^(1−t)·p_b^t 做 OFF 移除(强度1.5),修复地板下 variogram;PLAN 的 SPATRESID 空间门控坍缩证否(8 配置噪声内)。++## 节点 37(improve,父 35,board T2:embryo:val_interp)++### 做了什么++1. **PLAN 机制 SPATRESID(坐标混居条件化的残余双峰坍缩)——实现、对照通过、证否。**+   - 实现:在最终输出坐标空间(aniso/jitter/RMS 之后)逐共有类型建 15-NN(含自身,与 neighborhood_mmd 同尺度),h_i = 邻域异源占比;只对 h_i ≥ θ 的细胞执行父节点 RESID 坍缩(软权重 w=clip(|s|/0.15,0,1),nnz-only、clip≥0,保合并均值系数改用门控后计数 c_a=γ·n_bg/(n_ag+n_bg)、c_b=γ·n_ag/(n_ag+n_bg))。坐标计算被移到表达坍缩之前(不读 xa/xb、不耗 rng,机制关闭时输出与父节点 sha256 逐位一致,已验证)。+   - 关闭对照(PLAN 两条 off 路径均验证):θ=1.0 输出与父节点默认逐位一致(sha256 79153d…0695 相同)→ 门控无泄漏;--ablate 同样逐位一致。+   - 机制生效证据:混居细胞占比 θ=0.1/0.2/0.3/0.4/0.5 → 20.9%/16.1%/10.3%/8.5%/5.3%(非空转,>PLAN 的 5% 下限);被门控子集恰是残余分离更大的细胞(gated sep_rel 0.72–0.95 vs 全体 0.63),坍缩后 gated sep_rel 0.58–0.82、全体部分下降;未门控细胞表达改动=0(逐位);pb_maxshift ≤0.016(DE 通道受保护,de_score raw 0.2857 全程不动)。+   - 查分(A 半 seed 0,基线 62.36):θ 网格 γ=0.5 → 62.38/62.38/62.37/62.37/62.37;θ=0.2 γ=1.0 → 62.39;θ=0.2 smode=gated γ=0.5/1.0 → 62.38/62.40。**结论:门控把 mmd_u 收益与 nbhd 伤害按被门控比例同比缩小(θ=0.1:mmd −0.00016 / nbhd +0.00023;对比节点 35 无门控:mmd −0.0008 / nbhd +0.0025),交换比改善但总量趋零,净变化 +0.01…+0.04 全部在噪声内。解耦假设不成立。**+2. **备选机制 DETR(检出率几何插值 OFF 校正)——针对同一弱项 cell_state(variogram skill 0.389 地板下)——有效,已提交。**+   - 动机(只用括号数据的事实):nnz-only 位移把每个细胞的零/非零支持集冻结在源阶段,输出逐基因检出率呈 a/b 双峰。实测:pred 总检出率 0.0571;括号线性插值 0.0711、几何插值 exp((1−t)ln p_a + t ln p_b) ≈ 0.053。表达在 log 空间近乘性增长,检出率的时间插值应取几何而非线性——据此 pred 相对几何目标**过检出**,应做移除而非补入。+   - 实现:逐共有类型(两侧 ≥10 细胞)、逐软权重激活基因(w=clip(|Δ_type|/0.15,0,1)>0.01),目标 p_t = p_a^(1−t)·p_b^t(括号阶段型内检出率),当前过检出的部分按 k=round(strength·n·(p_cur−p_t)) 置零;被选细胞由逐类型抽取、跨基因共享的确定性均匀键排序决定(模拟真实的细胞级深度相关 dropout,而非逐基因独立噪声)。只移除、不补入(OFF_ONLY),坐标与其余管线逐位不动。随机源 np.random.default_rng(seed+777001),与 mix 的 rng 流隔离,对 seed 确定。+   - 失败的解码(证明"补入"方向结构性有毒):linear 目标 + ON 补入 q_on=0.25 → **54.57**(variogram 0.0134→0.0310,nbhd 0.0507→0.0844);q_on=0.05 → **56.69**。注入小值经 variogram/nbhd 的 sqrt 核放大,与任务书"把零值整体抬高有害"一致。linear 目标 OFF-only → 62.57(弱于 geom,因 linear 目标下净方向是补入)。+   - 剂量响应(geom OFF-only,A 半 seed 0):strength 0.5/1.0/1.5/2.0 → **62.68/62.99/63.17/62.92**。s=1.5:variogram raw 0.01342→0.01046(skill 0.389→0.47 方向修复)、mmd_u 0.01161→0.01139、nbhd 0.05066→0.05083(+0.0002,噪声边缘)、de_direction 0.3852→0.3842(−0.001,噪声内);s=2.0 时 nbhd 0.05142、de_dir 0.3747 开始受损 → 峰值在 1.5。+   - 种子确认(s=1.5,A 半):seed 0/1/2 → 63.17/62.67/62.90,均值 62.91,**+0.55 vs 同日基线 62.36**;variogram 在三个种子一致改善(0.0103–0.0109 vs 0.0134,远超 0.0002 噪声阈),mmd_u 一致改善(0.0110–0.0114)。+   - 机制生效证据:s=1.5 移除 18,600 个 nnz 条目(约占全部条目 1%),分布跨 10 个共有类型、约 480 基因/类型;未选中细胞与该类型未激活基因逐位不动;检出率与几何目标的平均差距 0.029→0.008。+   - 关闭对照:DETR_FLIP_ON=0 或 --ablate mechanism → 输出与父节点 35 默认逐位一致(sha256 验证)。++### 提交配置(run.py 默认)++父节点 35 全部管线原样(mix + α=5 + soft + corr 扩散 η=1/asym=0.85 + λ=6 + β=0.2 + aniso 1.25),新增 DETR:T2_DETR_FLIP_ON=1.0、MODE=geom、OFF_ONLY=1、STRENGTH=1.5、TAU=0.15、KEY=cell、Q_ON 无效(不补入)。SPATRESID 默认关闭(THETA=0)。++### 验证过 / 没验证++- 验证:vec-check ok;seed 0 重跑逐位确定;--ablate 逐位还原父节点;θ=1.0 逐位还原(门控无泄漏);A 半 19 次查分(额度 20 内,剩 1 未用);单输入回退路径未受影响(代码路径在 bracket 分支内)。+- 没验证:B 半(正式分);heart 两榜(本 run 只挂 embryo 视图);strength 1.25/1.75 细扫;KEY=gene(逐基因独立键)变体;伪装视图重跑(程序只读视图数据与 seed,不读绝对时间/路径,t 为平移不变量,预期通过)。+- 耗时 ~30 s、峰值内存 <1 GB,limits(30 min / 28 GB)内;EXECUTION.json {"gpu": false}。++### 知识来源++- 未使用任何保留阶段(E7.25/E7.5 窗口)或保留基因型数据;DETR 的目标检出率完全由视图内括号阶段(E6.75、E8.0)现场计算。+- 方法学依据(非阶段特异性测量):log 空间表达近乘性 → 检出率几何插值;真实 scRNA/空间数据的 dropout 是细胞级深度相关的(逐细胞键跨基因共享),不是逐基因独立噪声。无外部文献数值。+- 评分规则事实来自任务书"T2 评分规则简报"(variogram/nbhd 的 sqrt 核对小值敏感、地板定义、噪声 ~1 分)。++### 查分明细(A 半,seed 0,除注明外)++| 配置 | board | mmd_u | variogram | nbhd | de_dir |+|---|---:|---:|---:|---:|---:|+| 基线(父 35 默认) | 62.36 | 0.01161 | 0.01342 | 0.05066 | 0.3852 |+| SPATRESID θ=0.1 γ0.5 | 62.38 | 0.01145 | 0.01341 | 0.05089 | 0.3861 |+| SPATRESID θ=0.2 γ0.5 | 62.38 | 0.01149 | 0.01341 | 0.05083 | 0.3859 |+| SPATRESID θ=0.3 γ0.5 | 62.37 | 0.01154 | 0.01342 | 0.05072 | 0.3853 |+| SPATRESID θ=0.4 γ0.5 | 62.37 | 0.01155 | 0.01342 | 0.05070 | 0.3852 |+| SPATRESID θ=0.5 γ0.5 | 62.37 | 0.01158 | 0.01342 | 0.05065 | 0.3853 |+| SPATRESID θ=0.2 γ1.0 | 62.39 | 0.01141 | 0.01339 | 0.05095 | 0.3865 |+| SPATRESID θ=0.2 gated γ0.5 | 62.38 | 0.01149 | 0.01340 | 0.05083 | 0.3862 |+| SPATRESID θ=0.2 gated γ1.0 | 62.40 | 0.01142 | 0.01338 | 0.05094 | 0.3868 |+| DETR linear q0.25 | 54.57 | 0.01744 | 0.03104 | 0.08444 | 0.3613 |+| DETR linear q0.05 | 56.69 | 0.01609 | 0.02827 | 0.07426 | 0.3642 |+| DETR linear off-only | 62.57 | 0.01154 | 0.01243 | 0.05073 | 0.3783 |+| DETR geom off-only s1.0 | 62.99 | 0.01145 | 0.01109 | 0.05062 | 0.3833 |+| DETR geom off-only s0.5 | 62.68 | 0.01149 | 0.01224 | 0.05052 | 0.3839 |+| **DETR geom off-only s1.5(提交)** | **63.17** | 0.01139 | 0.01046 | 0.05083 | 0.3842 |+| DETR geom off-only s2.0 | 62.92 | 0.01141 | 0.01030 | 0.05142 | 0.3747 |+| 提交配置 seed 1 | 62.67 | 0.01101 | 0.01087 | 0.05155 | 0.3738 |+| 提交配置 seed 2 | 62.90 | 0.01112 | 0.01030 | 0.05027 | 0.3780 |++(基线被查分两次——首次输出未落盘,重查一次作锚点;两次同预测。)diff --git a/solution/README.md b/solution/README.mdindex d1dfdd2..81cabb3 100644--- a/solution/README.md+++ b/solution/README.md@@ -1,8 +1,16 @@-# mix + 表达收敛管线 + 各向异性坐标整形 + TYPE_ANISO 对照(T2:embryo:val_interp)+# mix + 表达收敛管线 + DETR 检出率几何插值 OFF 校正(T2:embryo:val_interp) -父节点 13/19 管线原样保留(mix 混抽 + α=5 类型级收敛位移 + λ=6 投影加权 + β=0.2 型内配对收缩-+ 全局 aniso 坐标整形 damp=1.25 + jitter + RMS 回缩;VARISO 默认关闭)。本节点按 PLAN-(family T2EI-06)新增 TYPE_ANISO:分型各向异性坐标整形(逐类型 PCA 轴展幅向括号 log 插值-目标缩放),T2_TYPEANISO_ENABLE=1 开启。proxy off/on 网格(damp −1.0…1.0):occupancy_dice-在两个方向都单调劣化(off 0.8066 → 0.7742@d1.0 / 0.7783@dm1.0),净 −0.02~−1.27 分,-机制默认关闭(T2_TYPEANISO_ENABLE=0),提交输出与父节点 13/19 逐位一致。详见 METHOD.md。+父节点 35 管线原样保留(mix 混抽 + α=5 类型级收敛位移 + 软阈值基因权重 + 相关扩散+η=1/asym=0.85 + λ=6 投影加权 + β=0.2 型内配对收缩 + aniso 坐标整形 damp=1.25;+RESID/EIGPROJ/ITERDIFF/VARISO/TYPE_ANISO/PBPROJ/TSHIFT/SPATRESID 默认关闭)。++本节点(37)提交机制 DETR:nnz-only 位移把细胞的零/非零支持集冻结在源阶段,逐基因+检出率相对几何插值目标 p_t = p_a^(1−t)·p_b^t 系统性偏高(log 空间乘性时间插值)。+DETR 按共有类型/软权重基因,把过检出的 nnz 条目按确定性逐细胞键排序置零+(T2_DETR_STRENGTH=1.5,只移除、不补入;ON 补入在 proxy 上结构性有害:54.6/56.7)。+A 半:62.36 → 63.17(seed 0),seeds 0/1/2 均值 62.91;variogram raw 0.01342→0.01046+(地板下弱项),nbhd/mmd_u 不劣。--ablate(或 T2_DETR_FLIP_ON=0)逐位还原父节点 35。++PLAN 机制 SPATRESID(坐标混居门控的残余双峰坍缩)已实现并证否:8 配置(θ 0.1–0.5 ×+γ 0.5/1.0 × s-mode)全在基线 +0.04 内,门控把 mmd_u 收益与 nbhd 伤害同比缩小,+解耦失败。T2_SPATRESID_THETA=0 默认关闭。详见 METHOD.md。diff --git a/solution/run.py b/solution/run.pyindex 4dce15b..e279333 100644--- a/solution/run.py+++ b/solution/run.py@@ -8,6 +8,27 @@ 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 (37, DETR, family T2EI-01): the PLAN mechanism (SPATRESID: gate the+node-35 RESID residual collapse on coordinate-mixed cells, 15-NN hetero-source+fraction h_i >= θ) was implemented and falsified — 8 configs (θ 0.1..0.5 × γ+0.5/1.0 × s-mode all/gated) all land within +0.04 of the parent (A half seed 0:+62.36 → 62.37..62.40); gating shrinks the mmd_u gain and the neighborhood_mmd+damage PROPORTIONALLY (mixed fraction 5–21%), so the decoupling hypothesis+fails. The submitted alternative mechanism is DETR (detection-rate geometric+interpolation, off-flips only): the nnz-only displacement froze every cell's+zero support at its source stage, leaving per-gene detection rates bimodal+(pred 0.0571 vs linear-interp 0.0711, and the geometric target ≈0.053 says the+pipeline OVER-detects relative to multiplicative time interpolation). Per+shared type and soft-weighted gene, entries whose detection exceeds+p_t = p_a^(1−t)·p_b^t are turned OFF (deterministic per-cell key, strength+1.5). ON-flips are structurally catastrophic (linear-target variant: board+54.6/56.7 — injected small values poison variogram/nbhd via the sqrt), only+removal works. A-half dose-response: s=0.5/1.0/1.5/2.0 → 62.68/62.99/63.17/+62.92 (baseline 62.36); variogram raw 0.01342 → 0.01046 at s=1.5 (the+below-floor weak item), mmd_u 0.01161 → 0.01139, nbhd ≈flat; seeds 0/1/2:+63.17/62.67/62.90. DETR_FLIP_ON=0 (or --ablate) reproduces parent node 35+bit-for-bit (sha256-verified). See METHOD.md.+ This node (35, NO_CHANGE, family T2EI-01): the PLAN mechanism (EIGPROJ: project each type's diffused Δ' onto the top-k eigenvectors of the corr kernel C, then renormalize) was implemented and falsified: post-diffusion@@ -217,6 +238,51 @@ RESID_GAMMA = float(os.environ.get("T2_RESID_GAMMA", "0")) RESID_TAU = float(os.environ.get("T2_RESID_TAU", "0.15")) RESID_P = float(os.environ.get("T2_RESID_P", "1.0")) RESID_MIN_CELLS = int(os.environ.get("T2_RESID_MIN_CELLS", "10"))+# Spatially gated residual collapse (SPATRESID, family T2EI-01, this node 37):+# node-35 lesson — the ungated RESID collapse buys the best mmd_u of the whole+# tree (0.01161→0.01081) but consistently degrades neighborhood_mmd+# (0.05066→0.053+), net negative, because pulling the expression of two+# coordinate-distinct sub-clouds together breaks expression–position pairing.+# SPATRESID adds the missing spatial condition: in the FINAL output coordinate+# space, per shared type, merge a/b-derived cells and build a k=15 NN+# (self included, same scale as neighborhood_mmd); cell i gets the hetero-+# source fraction h_i = (# of its 15 neighbours from the other side)/15. Only+# cells with h_i >= θ ("already coordinate-mixed") are collapsed; cells with+# h_i < θ keep their expression untouched. The collapse direction/magnitude is+# the type-level residual separation s = μ_out(b) − μ_out(a) (SMODE=gated:+# gated cells only) with the same soft decode w = clip(|s|/τ,0,1)^p, nnz-only,+# clip≥0. Side coefficients use the GATED counts, c_a = γ·n_bg/(n_ag+n_bg),+# c_b = γ·n_ag/(n_ag+n_bg), so the pooled output mean stays fixed (DE metrics+# structurally blind). θ = 0 (default, or --ablate) skips the step entirely and+# reproduces parent node 35 bit-for-bit; θ = 1 is unreachable (self is always+# same-side, h_i ≤ 14/15) and is the PLAN's second off-path.+SPATRESID_THETA = float(os.environ.get("T2_SPATRESID_THETA", "0"))+SPATRESID_GAMMA = float(os.environ.get("T2_SPATRESID_GAMMA", "0.5"))+SPATRESID_K = int(os.environ.get("T2_SPATRESID_K", "15"))+SPATRESID_TAU = float(os.environ.get("T2_SPATRESID_TAU", "0.15"))+SPATRESID_P = float(os.environ.get("T2_SPATRESID_P", "1.0"))+SPATRESID_SMODE = os.environ.get("T2_SPATRESID_SMODE", "all")+SPATRESID_MIN_CELLS = int(os.environ.get("T2_SPATRESID_MIN_CELLS", "10"))+# DETR (alternative mechanism for cell_state, this node 37): see the DETR block+# docs in mix_converge. FLIP_ON scales the turned-on value (fraction of the+# within-side nnz quantile Q_ON); 0 disables and reproduces the parent+# bit-for-bit. TAU is the soft-weight scale for gene participation (same+# family as the displacement decode).+DETR_FLIP_ON = float(os.environ.get("T2_DETR_FLIP_ON", "1.0"))+DETR_Q_ON = float(os.environ.get("T2_DETR_Q_ON", "0.25"))+DETR_TAU = float(os.environ.get("T2_DETR_TAU", "0.15"))+# DETR_MODE: "linear" — target detection p_t = (1−t)·p_a + t·p_b (needs ~3% of+# zero entries flipped ON, empirically catastrophic: added small values poison+# variogram/nbhd via sqrt); "geom" — p_t = p_a^(1−t)·p_b^t, the multiplicative+# analogue consistent with log-space expression (net OFF-flips, removes mass).+# DETR_KEY: "cell" (per-cell key shared across genes) | "gene" (independent+# per gene). DETR_OFF_ONLY=1 skips all ON-flips.+DETR_MODE = os.environ.get("T2_DETR_MODE", "geom")+DETR_KEY = os.environ.get("T2_DETR_KEY", "cell")+DETR_OFF_ONLY = os.environ.get("T2_DETR_OFF_ONLY", "1") == "1"+# Flip magnitude: k = round(STRENGTH · n · (p_cur − p_t)_+). STRENGTH=1 closes+# the full gap to the target rate; <1 partial (dose-response); >1 overshoots.+DETR_STRENGTH = float(os.environ.get("T2_DETR_STRENGTH", "1.5")) # per-cell λ-style weighting inside the residual collapse (0 = constant shift) RESID_LAMBDA = float(os.environ.get("T2_RESID_LAMBDA", "0")) # which side moves in the residual collapse: both | a | b (node-34 lesson:@@ -1084,6 +1150,33 @@ def mix_converge(stage_a, stage_b, t: float, params: dict, alpha: float, view: s                 variso_pb_maxshift=float(np.max(pbshifts)),             ) +    # Final coordinates are computed BEFORE the residual-collapse steps so that+    # SPATRESID can gate on the exact output coordinate space. The coordinate+    # pipeline does not read xa/xb and consumes no rng between mix_indices and+    # _jitter, so this reordering is bit-for-bit neutral for the mechanism-off+    # default (verified by sha256 against the parent output).+    coord_parts = []+    if ia.size:+        coord_parts.append(np.asarray(ca[ia], dtype=np.float64))+    if ib.size:+        coord_parts.append(np.asarray(cb[ib], dtype=np.float64))+    coords = np.vstack(coord_parts)+    aniso_info = {"aniso_enable": bool(ANISO_ENABLE), "aniso_damp": ANISO_DAMP}+    if ANISO_ENABLE and coords.shape[0] >= 10:+        coords, ai = aniso_reshape(coords, aligned_a, aligned_b, t, ANISO_DAMP)+        aniso_info.update(ai)+    ta_info = {"typeaniso_enable": bool(TYPEANISO_ENABLE), "typeaniso_damp": TYPEANISO_DAMP,+               "typeaniso_min_cells": TYPEANISO_MIN_CELLS}+    if TYPEANISO_ENABLE and TYPEANISO_DAMP != 0.0 and ia.size and ib.size and coords.shape[0] >= 10:+        labs_out = np.concatenate([np.asarray(stage_a.labels).astype(str)[ia],+                                   np.asarray(stage_b.labels).astype(str)[ib]])+        coords, tai = type_aniso_reshape(coords, labs_out, ca, cb,+                                         np.asarray(stage_a.labels).astype(str),+                                         np.asarray(stage_b.labels).astype(str), t)+        ta_info.update(tai)+    coords = _jitter(coords, rng)+    coords = scale_to_rms(coords, target_rms)+     resid_info = {"resid_enable": bool(RESID_GAMMA != 0.0), "resid_gamma": RESID_GAMMA,                   "resid_tau": RESID_TAU, "resid_p": RESID_P, "resid_n_types": 0,                   "resid_sep_rel_before": None, "resid_sep_rel_after": None,@@ -1152,6 +1245,235 @@ def mix_converge(stage_a, stage_b, t: float, params: dict, alpha: float, view: s             resid_info["resid_zero_rate_before"] = float(np.mean(zr0))             resid_info["resid_zero_rate_after"] = float(np.mean(zr1)) +    spat_info = {"spatresid_enable": bool(SPATRESID_THETA > 0.0 and SPATRESID_GAMMA != 0.0),+                 "spatresid_theta": SPATRESID_THETA, "spatresid_gamma": SPATRESID_GAMMA,+                 "spatresid_k": SPATRESID_K, "spatresid_tau": SPATRESID_TAU,+                 "spatresid_smode": SPATRESID_SMODE, "spatresid_n_types": 0,+                 "spatresid_mixed_frac": None, "spatresid_mixed_frac_a": None,+                 "spatresid_mixed_frac_b": None, "spatresid_h_mean": None,+                 "spatresid_sep_rel_before": None, "spatresid_sep_rel_after": None,+                 "spatresid_sep_rel_gated_before": None, "spatresid_sep_rel_gated_after": None,+                 "spatresid_shift_norm_mean": None, "spatresid_pb_maxshift": None,+                 "spatresid_n_gated": 0, "spatresid_per_type": []}+    if SPATRESID_THETA > 0.0 and SPATRESID_THETA <= 1.0 and SPATRESID_GAMMA != 0.0 and ia.size and ib.size:+        labs_a_s = np.asarray(stage_a.labels).astype(str)[ia]+        labs_b_s = np.asarray(stage_b.labels).astype(str)[ib]+        ca_out = coords[:ia.size]+        cb_out = coords[ia.size:]+        shared_s = sorted(set(labs_a_s.tolist()) & set(labs_b_s.tolist()))+        pb_before = np.vstack([xa, xb]).mean(axis=0).astype(np.float64) if (xa.size + xb.size) else None+        hs, sep_b, sep_a, sep_gb, sep_ga, snorms, per_type = [], [], [], [], [], [], []+        n_gated_tot, n_tot = 0, 0+        mixed_a_fr, mixed_b_fr = [], []+        for lab in shared_s:+            ma = labs_a_s == lab+            mb = labs_b_s == lab+            na, nb = int(ma.sum()), int(mb.sum())+            if na < SPATRESID_MIN_CELLS or nb < SPATRESID_MIN_CELLS:+                continue+            A = xa[ma].astype(np.float64)+            B = xb[mb].astype(np.float64)+            PA = ca_out[np.where(ma)[0]]+            PB = cb_out[np.where(mb)[0]]+            P = np.vstack([PA, PB])+            side = np.concatenate([np.zeros(na, dtype=bool), np.ones(nb, dtype=bool)])+            D2 = ((P * P).sum(1)[:, None] + (P * P).sum(1)[None, :] - 2.0 * (P @ P.T))+            np.maximum(D2, 0.0, out=D2)+            kk = min(SPATRESID_K, na + nb)+            nbr = np.argpartition(D2, kk - 1, axis=1)[:, :kk]+            # deterministic ordering among the kk nearest (partition order is arbitrary)+            row_sort = np.argsort(np.take_along_axis(D2, nbr, axis=1), axis=1, kind="stable")+            nbr = np.take_along_axis(nbr, row_sort, axis=1)+            hetero = side[nbr] != side[:, None]+            h = hetero.mean(axis=1)+            gate = h >= SPATRESID_THETA+            ga = gate[:na]+            gb = gate[na:]+            n_ag, n_bg = int(ga.sum()), int(gb.sum())+            hs.append(h)+            mixed_a_fr.append(n_ag / na)+            mixed_b_fr.append(n_bg / nb)+            n_gated_tot += n_ag + n_bg+            n_tot += na + nb+            pt = {"type": lab, "n_a": na, "n_b": nb, "n_gated_a": n_ag, "n_gated_b": n_bg,+                  "h_mean": float(h.mean()), "h_mean_a": float(h[:na].mean()),+                  "h_mean_b": float(h[na:].mean())}+            if n_ag + n_bg == 0:+                per_type.append(pt)+                continue+            if SPATRESID_SMODE == "gated" and n_ag >= 3 and n_bg >= 3:+                s = B[gb].mean(axis=0) - A[ga].mean(axis=0)+            else:+                s = B.mean(axis=0) - A.mean(axis=0)+            w = np.clip(np.abs(s) / max(SPATRESID_TAU, 1e-12), 0.0, 1.0) ** SPATRESID_P+            ds = w * s+            c_a = SPATRESID_GAMMA * n_bg / (n_ag + n_bg)+            c_b = SPATRESID_GAMMA * n_ag / (n_ag + n_bg)+            s_all = B.mean(axis=0) - A.mean(axis=0)+            comb0 = np.vstack([A, B])+            spread = max(np.linalg.norm(comb0.std(axis=0)), 1e-12)+            sep_b.append(np.linalg.norm(s_all) / spread)+            if n_ag and n_bg:+                sg0 = B[gb].mean(axis=0) - A[ga].mean(axis=0)+                sep_gb.append(np.linalg.norm(sg0) / spread)+            Anew = A.copy()+            Bnew = B.copy()+            if n_ag:+                Ag = np.clip(A[ga] + c_a * ds[None, :], 0.0, None)+                Anew[ga] = np.where(A[ga] > 0, Ag, A[ga])+            if n_bg:+                Bg = np.clip(B[gb] - c_b * ds[None, :], 0.0, None)+                Bnew[gb] = np.where(B[gb] > 0, Bg, B[gb])+            xa[ma] = Anew.astype(np.float32)+            xb[mb] = Bnew.astype(np.float32)+            s1 = Bnew.mean(axis=0) - Anew.mean(axis=0)+            sep_a.append(np.linalg.norm(s1) / spread)+            if n_ag and n_bg:+                sg1 = Bnew[gb].mean(axis=0) - Anew[ga].mean(axis=0)+                sep_ga.append(np.linalg.norm(sg1) / spread)+            snorms.append(float(np.linalg.norm(ds)))+            pt["sep_rel_before"] = float(np.linalg.norm(s_all) / spread)+            pt["sep_rel_after"] = float(np.linalg.norm(s1) / spread)+            pt["shift_norm"] = float(np.linalg.norm(ds))+            pt["c_a"] = float(c_a)+            pt["c_b"] = float(c_b)+            per_type.append(pt)+            spat_info["spatresid_n_types"] += 1+        if hs:+            # mechanism evidence (PLAN): mixed fractions, gate bimodality, separation drops+            hall = np.concatenate(hs)+            spat_info["spatresid_mixed_frac"] = float(n_gated_tot / max(n_tot, 1))+            spat_info["spatresid_mixed_frac_a"] = float(np.mean(mixed_a_fr))+            spat_info["spatresid_mixed_frac_b"] = float(np.mean(mixed_b_fr))+            spat_info["spatresid_h_mean"] = float(hall.mean())+            spat_info["spatresid_h_p50"] = float(np.median(hall))+            spat_info["spatresid_h_p90"] = float(np.percentile(hall, 90))+            spat_info["spatresid_n_gated"] = int(n_gated_tot)+        if sep_b:+            spat_info["spatresid_sep_rel_before"] = float(np.mean(sep_b))+            spat_info["spatresid_sep_rel_after"] = float(np.mean(sep_a))+        if sep_gb:+            spat_info["spatresid_sep_rel_gated_before"] = float(np.mean(sep_gb))+            spat_info["spatresid_sep_rel_gated_after"] = float(np.mean(sep_ga))+        if snorms:+            spat_info["spatresid_shift_norm_mean"] = float(np.mean(snorms))+        if pb_before is not None:+            pb_after = np.vstack([xa, xb]).mean(axis=0).astype(np.float64)+            spat_info["spatresid_pb_maxshift"] = float(np.abs(pb_after - pb_before).max())+        spat_info["spatresid_per_type"] = per_type++    # Detection-rate interpolation (DETR, alternative mechanism for cell_state,+    # this node 37): the nnz-only displacement constraint keeps every cell's+    # zero/nonzero SUPPORT frozen at its source stage, so the output's per-gene+    # detection rates stay bimodal (a-side p_a, b-side p_b) while a real+    # intermediate stage sits at ≈(1−t)·p_a + t·p_b. The variogram metric is+    # dominated by that on/off structure (node 19/17 lesson), which is why+    # every value-side correction left it below floor. DETR moves the support+    # itself: per shared type and gene (soft weight w_g from the type's Δ, same+    # τ decode as the displacement), compute the current output detection rate+    # per side, the target p_t = (1−t)·p_a_stage + t·p_b_stage from the BRACKET+    # stage cells, and flip zeros→low-value (rate up) or nnz→0 (rate down) on a+    # per-cell deterministic key shared across genes (so the added dropout is+    # cell-correlated like real depth variation, not per-gene independent+    # noise). Flipped-on values are the within-side nnz quantile Q_ON (new+    # detections appear low). Pooled detection lands at ≈p_t by the (1−t,t) mix+    # weights; flip_on=0 (or --ablate) reproduces the parent bit-for-bit.+    # SUBMITTED DEFAULT: mode=geom, off_only=1, strength=1.5 (A half seed 0:+    # 62.36 → 63.17, seeds 0/1/2 mean 62.91; variogram 0.01342 → 0.01046).+    det_info = {"detr_enable": bool(DETR_FLIP_ON > 0.0), "detr_flip_on": DETR_FLIP_ON,+                "detr_q_on": DETR_Q_ON, "detr_mode": DETR_MODE, "detr_key": DETR_KEY,+                "detr_off_only": DETR_OFF_ONLY, "detr_strength": DETR_STRENGTH,+                "detr_n_types": 0, "detr_n_genes": 0,+                "detr_n_on": 0, "detr_n_off": 0, "detr_dp_max": None,+                "detr_rate_gap_before": None, "detr_rate_gap_after": None}+    if DETR_FLIP_ON > 0.0 and ia.size and ib.size:+        la_d = np.asarray(stage_a.labels).astype(str)+        lb_d = np.asarray(stage_b.labels).astype(str)+        la_o = la_d[ia]+        lb_o = lb_d[ib]+        shared_d = sorted(set(la_o.tolist()) & set(lb_o.tolist()))+        means_a_d = type_means(stage_a.X, stage_a.labels)+        means_b_d = type_means(stage_b.X, stage_b.labels)+        cnt_a_d = {k: int((la_d == k).sum()) for k in means_a_d}+        cnt_b_d = {k: int((lb_d == k).sum()) for k in means_b_d}+        shared_d = [k for k in shared_d if cnt_a_d.get(k, 0) >= 10 and cnt_b_d.get(k, 0) >= 10]+        rng_d = np.random.default_rng(int(params.get("seed", 0)) + 777001)+        pb_before_d = np.vstack([xa, xb]).mean(axis=0).astype(np.float64)+        gaps_before, gaps_after, n_genes_l, n_on_l, n_off_l = [], [], 0, 0, 0+        for lab in shared_d:+            ma = la_o == lab+            mb = lb_o == lab+            na, nb = int(ma.sum()), int(mb.sum())+            A = xa[ma]+            B = xb[mb]+            d0 = (means_b_d[lab] - means_a_d[lab]).astype(np.float64)+            w = np.clip(np.abs(d0) / max(DETR_TAU, 1e-12), 0.0, 1.0)+            act = w > 0.01+            if int(act.sum()) < 5:+                continue+            pa_stage = (np.asarray(stage_a.X[la_d == lab].toarray(), dtype=np.float64) > 0).mean(axis=0)+            pb_stage = (np.asarray(stage_b.X[lb_d == lab].toarray(), dtype=np.float64) > 0).mean(axis=0)+            if DETR_MODE == "geom":+                p_t = np.exp((1.0 - t) * np.log(pa_stage + 1e-4) + t * np.log(pb_stage + 1e-4))+                p_t = np.where((pa_stage > 0) | (pb_stage > 0), p_t, 0.0)+            else:+                p_t = (1.0 - t) * pa_stage + t * pb_stage+            pa_cur = (A > 0).mean(axis=0)+            pb_cur = (B > 0).mean(axis=0)+            ua = rng_d.random(na)+            ub = rng_d.random(nb)+            Anew = A.copy()+            Bnew = B.copy()+            idx_act = np.where(act)[0]++            def _flip(col, u, dpr, n):+                """Flip zeros->low value (dpr>=1) or nnz->0 (dpr<=-1) on one side/gene."""+                if not np.isfinite(dpr):+                    return+                if dpr >= 1.0 and not DETR_OFF_ONLY:+                    zeros = np.where(col == 0)[0]+                    k = min(int(round(dpr)), zeros.size)+                    if k > 0:+                        if DETR_KEY == "gene":+                            sel = zeros[rng_d.permutation(zeros.size)[:k]]+                        else:+                            sel = zeros[np.argsort(u[zeros], kind="stable")[:k]]+                        nzv = np.sort(col[col > 0])+                        val = float(nzv[min(int(DETR_Q_ON * (nzv.size - 1)), nzv.size - 1)]) if nzv.size else 0.0+                        col[sel] = np.float32(val * DETR_FLIP_ON)+                        det_info["detr_n_on"] += k+                elif dpr <= -1.0:+                    nz = np.where(col > 0)[0]+                    k = min(int(round(-dpr)), nz.size)+                    if k > 0:+                        if DETR_KEY == "gene":+                            sel = nz[rng_d.permutation(nz.size)[:k]]+                        else:+                            sel = nz[np.argsort(u[nz], kind="stable")[:k]]+                        col[sel] = 0.0+                        det_info["detr_n_off"] += k++            for g in idx_act:+                _flip(Anew[:, g], ua, (p_t[g] - pa_cur[g]) * na * DETR_STRENGTH, na)+                _flip(Bnew[:, g], ub, (p_t[g] - pb_cur[g]) * nb * DETR_STRENGTH, nb)+            xa[ma] = Anew+            xb[mb] = Bnew+            pa_post = (Anew > 0).mean(axis=0)+            pb_post = (Bnew > 0).mean(axis=0)+            m_act = act+            gaps_before.append(float(np.abs(np.concatenate([pa_cur[m_act] - p_t[m_act],+                                                            pb_cur[m_act] - p_t[m_act]])).mean()))+            gaps_after.append(float(np.abs(np.concatenate([pa_post[m_act] - p_t[m_act],+                                                           pb_post[m_act] - p_t[m_act]])).mean()))+            n_genes_l += int(act.sum())+            det_info["detr_n_types"] += 1+        if n_genes_l:+            det_info["detr_n_genes"] = n_genes_l+            det_info["detr_rate_gap_before"] = float(np.mean(gaps_before))+            det_info["detr_rate_gap_after"] = float(np.mean(gaps_after))+            pb_after_d = np.vstack([xa, xb]).mean(axis=0).astype(np.float64)+            det_info["detr_dp_max"] = float(np.abs(pb_after_d - pb_before_d).max())+     expr = np.clip(np.vstack([xa, xb]), 0.0, None).astype(np.float32) if (ia.size or ib.size) else np.zeros((0, len(stage_a.genes)), np.float32)     clamp_info = {"bracket_clip": BRACKET_CLIP, "n_clamped_cells": 0}     if BRACKET_CLIP > 0 and expr.shape[0]:@@ -1236,27 +1558,6 @@ def mix_converge(stage_a, stage_b, t: float, params: dict, alpha: float, view: s                 pbproj_s_mean=float(s.mean()),                 pbproj_dp_top50_changed=int(50 - len(top_before & top_after)),             )-    coord_parts = []-    if ia.size:-        coord_parts.append(np.asarray(ca[ia], dtype=np.float64))-    if ib.size:-        coord_parts.append(np.asarray(cb[ib], dtype=np.float64))-    coords = np.vstack(coord_parts)-    aniso_info = {"aniso_enable": bool(ANISO_ENABLE), "aniso_damp": ANISO_DAMP}-    if ANISO_ENABLE and coords.shape[0] >= 10:-        coords, ai = aniso_reshape(coords, aligned_a, aligned_b, t, ANISO_DAMP)-        aniso_info.update(ai)-    ta_info = {"typeaniso_enable": bool(TYPEANISO_ENABLE), "typeaniso_damp": TYPEANISO_DAMP,-               "typeaniso_min_cells": TYPEANISO_MIN_CELLS}-    if TYPEANISO_ENABLE and TYPEANISO_DAMP != 0.0 and ia.size and ib.size and coords.shape[0] >= 10:-        labs_out = np.concatenate([np.asarray(stage_a.labels).astype(str)[ia],-                                   np.asarray(stage_b.labels).astype(str)[ib]])-        coords, tai = type_aniso_reshape(coords, labs_out, ca, cb,-                                         np.asarray(stage_a.labels).astype(str),-                                         np.asarray(stage_b.labels).astype(str), t)-        ta_info.update(tai)-    coords = _jitter(coords, rng)-    coords = scale_to_rms(coords, target_rms)     info.update(aniso_info)     info.update(ta_info)     info.update(variso_info)@@ -1264,6 +1565,8 @@ def mix_converge(stage_a, stage_b, t: float, params: dict, alpha: float, view: s     info.update(tshift_info)     info.update(clamp_info)     info.update(resid_info)+    info.update(spat_info)+    info.update(det_info)     info.update(         t=t, n=int(expr.shape[0]), rms_a=rms_a, rms_b=rms_b, target_rms=target_rms,         out_rms=rms_radius(coords), n_from_a=int(ia.size), n_from_b=int(ib.size), **conv, **pair_info,@@ -1281,9 +1584,11 @@ def main() -> None:                              "node's mechanisms (RESID_GAMMA=0, EIGPROJ_K=0), reproducing "                              "parent node 34 bit-for-bit")     args = parser.parse_args()-    global RESID_GAMMA+    global RESID_GAMMA, SPATRESID_THETA, DETR_FLIP_ON     if args.ablate:         RESID_GAMMA = 0.0+        SPATRESID_THETA = 0.0+        DETR_FLIP_ON = 0.0     proj_asym = None     eigproj_k = 0 if args.ablate else None @@ -1338,10 +1643,24 @@ def main() -> None:                                          "proj_cos_att_mean", "proj_cos_full_minus_att",                                          "eigproj_k", "eigproj_retention_mean", "eigproj_retention_min",                                          "eigproj_cos_mean", "eigproj_angle_deg_mean",-                                         "resid_enable", "resid_gamma", "resid_tau", "resid_p",-                                         "resid_n_types", "resid_sep_rel_before", "resid_sep_rel_after",-                                         "resid_shift_norm_mean", "resid_zero_rate_before",-                                         "resid_zero_rate_after",+                                          "resid_enable", "resid_gamma", "resid_tau", "resid_p",+                                          "resid_n_types", "resid_sep_rel_before", "resid_sep_rel_after",+                                          "resid_shift_norm_mean", "resid_zero_rate_before",+                                          "resid_zero_rate_after",+                                          "spatresid_enable", "spatresid_theta", "spatresid_gamma",+                                          "spatresid_k", "spatresid_tau", "spatresid_smode",+                                          "spatresid_n_types", "spatresid_mixed_frac",+                                          "spatresid_mixed_frac_a", "spatresid_mixed_frac_b",+                                          "spatresid_h_mean", "spatresid_h_p50", "spatresid_h_p90",+                                          "spatresid_n_gated",+                                          "spatresid_sep_rel_before", "spatresid_sep_rel_after",+                                          "spatresid_sep_rel_gated_before", "spatresid_sep_rel_gated_after",+                                          "spatresid_shift_norm_mean", "spatresid_pb_maxshift",+                                          "spatresid_per_type",+                                          "detr_enable", "detr_flip_on", "detr_q_on", "detr_mode",+                                          "detr_key", "detr_off_only", "detr_strength", "detr_n_types",+                                          "detr_n_genes", "detr_n_on", "detr_n_off", "detr_dp_max",+                                          "detr_rate_gap_before", "detr_rate_gap_after",                                          "iterdiff_enable", "iterdiff_eta2", "iterdiff_kernel_cos_vs_C",                                          "asympt_zeta", "asympt_cap", "asympt_asym_mean",                                          "asympt_asym_min", "asympt_asym_max",

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

用到的知识库条目

编号标题出处
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
k026Canonicalise predicted 3D coordinates before submissionnotes/pitfalls/04_scorer_invariance.md

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

改了什么PLAN 的 SPATRESID(坐标混居门控 RESID 坍缩)已实现但证否(8 配置全在基线 +0.04 内,默认关闭);实际提交的是备选机制 DETR:逐共有类型/软权重基因,把输出中超过几何插值目标 p_t=p_a^(1-t)·p_b^t 的检出率部分按确定性逐细胞键排序置零(OFF-only,strength=1.5),其余管线与父节点 35 相同;--ablate 逐位还原父节点(harness 确认 mechanism_active=yes,关掉后 -0.83)。
各组分数的变化cell_state:变好:+3.19(51.51→54.70),远超噪声。proxy 分解:variogram raw 0.01296→0.01016,skill 0.407→0.469,得分 +0.77;mmd_u raw 0.01093→0.01084,得分 +0.02(噪声内)。Engineer 报告 variogram 改善在 seeds 0/1/2 一致(0.0103–0.0109 vs 0.0134),非单种子侥幸。
expression_change:噪声内:+0.10(de_score raw 0.3103 不动,de_direction 0.3987→0.4029,得分 +0.03),符合 DETR 保 pb 的设计(pb_maxshift ≤0.016)。
local_spatial:噪声内:+0.02(neighborhood_mmd raw 0.04779→0.04775,得分 +0.00)——DETR 没有重现已知机制的 nbhd 伤害。
shape_scale:不变:+0.00(三项 raw 与 skill 与父节点完全相同,坐标逐位未动)。
family_idT2EI-01
假设是否成立是
经验
  1. 空间门控解耦失败:给 RESID 坍缩加 15-NN 异源占比门控(混居占比 5–21% 非空转、门控无泄漏、关闭对照逐位一致)后,mmd_u 收益与 neighborhood_mmd 伤害按被门控比例同比缩小(θ=0.1:mmd -0.00016 / nbhd +0.00023),交换比不变、总量趋零——'只坍缩坐标混居细胞'不能把表达拉近的收益与表达-位置配对伤害分开,此通道可关闭。
  2. nnz-only 位移管线的系统性偏差可用检出率插值修复:零/非零支持集被冻结在源阶段导致输出逐基因检出率呈 a/b 双峰且相对几何插值目标 p_a^(1-t)·p_b^t 过检出(pred 0.0571 vs 几何 0.053、线性 0.0711);按型/基因把过检出条目置零(strength=1.5)使 variogram raw 0.01342→0.01046、地板下弱项修复,且 nbhd/mmd_u/DE 不劣。
  3. ON 补入方向结构性有毒:向零条目注入小值(linear 目标 q_on=0.25/0.05)使 board 崩到 54.57/56.69(variogram 0.0134→0.0310、nbhd 0.0507→0.0844),印证'抬高零值经 sqrt 核放大'的规则事实;对稀疏表达只做移除/收缩,不做注入。
  4. 检出率时间插值应取几何而非线性(log 空间近乘性增长):geom 目标 OFF-only 62.99–63.17 全面优于 linear 目标 OFF-only 62.57;剂量响应有内点峰值(s=0.5/1.0/1.5/2.0 → 62.68/62.99/63.17/62.92,s=2.0 时 nbhd 与 de_dir 开始受损)。
  5. 细胞级异质修正要用跨基因共享的逐细胞确定性键(模拟深度相关 dropout)而非逐基因独立噪声;DETR 只移除约 1% 的 nnz 条目即拿到 cell_state +3.19,说明小幅、结构一致的稀疏度修正比大幅表达位移更有效。
mechanism_active是
下一步建议
  1. (cell_state)DETR 精调:strength 1.25/1.75 细扫 + KEY=gene 变体对照,确认峰值位置;注意 A 半 proxy 收益(seeds 均值 +0.55)与正式榜 +0.83 一致,但勿在插值榜外推此幅度。
  2. (cell_state)把几何插值目标推广到 nnz 幅度通道:逐型/基因的 nnz 均值向 exp((1-t)ln m_a + t ln m_b) 收缩(只收缩不放大,OFF 方向已证明安全),目标继续压 variogram/mmd_u。
  3. (shape_scale)occupancy_dice(skill 0.424,地板下、组内最弱项)从未被任何机制正向触碰,且不受结构门风险影响(邻域 skill 0.62 > 0.5);可试各向异性/占据体积方向的坐标整形,但历史上 aniso/TYPEANISO 均劣化它,需以 occupancy_dice raw 0.8086 为否决线。
  4. (local_spatial)neighborhood_mmd raw 0.0478 长期钉在 0.0477–0.0508 窄带,RESID/SPATRESID/EIGPROJ/ITERDIFF/DETR 均无法正向移动它;若无新机制假设,不建议再投入查分额度。

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

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

分析员

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

工程师

角色工程师 alibaba-token-plan-cn/qwen3.8-max
调用次数1 次
轮数67
工具调用共 70 次:bash 42、edit 22、read 4、write 2
用时30 分
token 数输入 150,864 · 输出 26,731 · 思考 29,381
任务(第一行)按计划修改程序:坐标混居条件化的残余双峰坍缩(SPATRESID)攻 cell_state
最后的回答(摘录)
**完成。** 提交:DETR(检出率几何插值 OFF 校正,strength=1.5,geom 目标,逐细胞确定性键),机制默认开,`--ablate` 逐位还原父节点 35。

**做了什么**:
1. PLAN 机制 SPATRESID(坐标混居门控的 RESID 坍缩)按方案实现,关闭对照双路径验证(θ=1.0 与 γ=0 均 sha256 逐位一致),混居占比 5–21% 非空转——但 8 个配置(θ 0.1–0.5 × γ 0.5/1.0 × s-mode all/gated)全部落在基线 +0.04 内:门控把 mmd_u 收益与 nbhd 伤害**同比缩小**,解耦假设证否。
2. 备选机制 DETR 攻同一弱项(variogram skill 0.389 地板下):nnz-only 位移冻结零支持集,输出检出率相对几何插值目标 p_a^(1−t)·p_b^t 系统性偏高;按型/基因把过检出条目置零。ON 补入方向结构性有毒(54.6/56.69),只移除有效。

**查分**(A 半,19/20 次):基线 62.36 → geom off-only 剂量响应 0.5/1.0/1.5/2.0 = 62.68/62.99/**63.17**/62.92;提交配置 seeds 0/1/2 = 63.17/62.67/62.90(均值 +0.55),variogram raw 0.01342→0.01046 三种子一致,nbhd/mmd_u 不劣,de_dir −0.001 噪声内。伪装视图(时间+1、键序打乱)输出逐位相同。

**下一步最值得试**:① DETR strength 1.25–1.75 细扫 + KEY=gene 变体;② 把 DETR 的几何目标推广到 nnz 值幅度通道(型内 nnz 均值同样向几何插值收缩,OFF 已证明"移除/收缩"方向安全、"注入"有毒);③ occupancy_dice(skill 0.42 地板下)仍未被任何机制正向触碰。
原始记录位置/home/spark-longxinyang/vec/runs/formal/20261003-171955-search-t2-embryo-interp-chain-12h/nodes/37/engineer.jsonl 496 KB
/home/spark-longxinyang/vec/runs/formal/20261003-171955-search-t2-embryo-interp-chain-12h/nodes/37/engineer.stderr

调研员

角色调研员 alibaba-token-plan-cn/qwen3.8-max
调用次数1 次
轮数1
工具调用共 0 次:—
用时5 分
token 数输入 20,708 · 输出 3,239 · 思考 8,192
任务(第一行)为节点 n37(改进,父节点 n35)写改进计划 PLAN.json
最后的回答(摘录)
d 一致恶化(0.05066→0.053–0.057)导致净负——ANALYSIS 明确指出根因是'把坐标不同的两群细胞表达拉近必然破坏表达-位置配对',并建议加空间邻域条件解耦(next_suggestions #2)。本方案正是给 RESID 加这个缺失的空间条件,不是重复失败改法:失败的机制(无条件坍缩)与被修复的结构问题(忽略坐标异质性)一一对应。", "approach": "复用父节点 35 已实现的 RESID 代码(T2_RESID_*,both-sides 保均值系数 c_a=γ·n_b/(n_a+n_b)、c_b=γ·n_a/(n_a+n_b),软权重 w=clip(|s|/0.15,0,1),nnz-only、clip≥0),在其前面插入空间门控:1) 在最终输出坐标空间里,对每个共有类型合并 a/b 两侧细胞建 15-NN(k=15,与 neighborhood_mmd 同尺度);2) 对每个细胞算邻域内异源占比 h_i(15 个邻居中来自另一侧的比例);3) 只对 h_i≥θ 的'坐标上已混居'细胞执行原有 RESID 坍缩,h_i<θ 的细胞表达完全不动。关键参数:θ 初值 0.3,网格 [0.1, 0.2, 0.3, 0.4, 0.5];γ 初值 0.5,备选 1.0;τ(软权重阈值)保持 0.15 不变。单输入阶段(无括号):与父节点相同,回退最近输入的分层复制,机制不适用。筛选:先在 proxy A 半 seed 0 跑 θ 网格,记录 mmd_u raw、neighborhood_mmd raw、board 与'混居细胞占比'诊断量;只有当 mmd_u raw ≤0.0110 且 neighborhood_mmd raw ≤0.0480(不劣于父节点 0.04779+0.0002)且 board ≥+0.3 时,才用 seed 1/2 双确认(T2 噪声约 1 分,单项 raw 变化须超 0.0002 才算真实)。", "expected_groups": ["cell_state", "local_spatial"], "risks": "1) 混居细胞占比过低(如 <5%)→ 机制结构性空转,board 与父节点同;Engineer 应先打印每个共有类型的混居占比,<5% 时直接加大 θ 无效则放弃。2) θ 过小退化为无条件 RESID,重现 nbhd 恶化——以 neighborhood_mmd raw 0.0480 为否决线,超过即停。3) 混居细胞恰是表达-位置配对最紧密的细胞(它们的邻域表达已经连续),坍缩反而伤 nbhd——若 θ=0.5 仍伤,说明该通道无解,如实报告。4) 建 15-NN 增加耗时,但细胞数 ≤数万、类型内建邻,预期 <2 s,无内存风险。", "family_id": "T2EI-01", "mechanism": "在父节点已有的残余双峰坍缩(把每个共有类型输出内 a/b 两亚群的残余质心差按比例收缩、保合并均值)之上,新增坐标空间门控:只对输出坐标 15-NN 中异源占比 ≥θ 的细胞(坐标上已与对侧混居、表达上仍残留双峰的细胞)执行坍缩,坐标上仍分离的亚群完全保留。坍缩方向与幅度仍来自型级残余分离向量与软权重,但'哪些细胞被坍缩'由细胞级空间条件决定。", "vs_constant_shift": "常数位移对同一类型的每个细胞施加相同矢量;本机制在同一类型内是细胞级异质的——混居细胞被移动、分离细胞不动,且移动的细胞在邻域结构上彼此不同(h_i 不同)。它也不是全局组成重加权:细胞类型比例与数量完全不变,只改被门控细胞的部分表达值。若输出与父节点逐位一致,即证明门控未选中任何细胞(机制未运行)。", "mechanism_evidence": "Engineer 需报告:1) 每个共有类型的混居细胞占比(h_i≥θ 的比例)与其在 θ 网格下的变化;2) 被坍缩细胞 vs 未被坍缩细胞的表达改动量(应有明显双峰:被坍缩细胞改动 >0、未坍缩细胞改动 =0);3) 四组分与关键 raw(mmd_u、variogram、neighborhood_mmd)在 θ 网格下的逐项变化,确认 mmd_u 收益来自被门控子集而非全体;4) 残余质心分离度 resid_sep_rel 在被门控子集上应显著下降、在全体上部分下降。", "mechanism_off_control": "同一程序两条关闭路径:θ=1.0(不可能有细胞邻域异源占比 ≥1)或 γ=0(坍缩强度为零),两者均应输出与父节点 35 默认配置逐位一致(sha256 对比),board 差 +0.00;若 θ=1.0 时输出仍变化,说明门控实现有泄漏,需修复。", "sources": []}
原始记录位置/home/spark-longxinyang/vec/runs/formal/20261003-171955-search-t2-embryo-interp-chain-12h/nodes/37/researcher.jsonl 12 KB
/home/spark-longxinyang/vec/runs/formal/20261003-171955-search-t2-embryo-interp-chain-12h/nodes/37/researcher.stderr

审查员

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