总览 · ← 返回运行 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)
做了什么
- 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 全部在噪声内。解耦假设不成立。
- 备选机制 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 |
(基线被查分两次——首次输出未落盘,重查一次作锚点;两次同预测。)
调研员的计划
| 名称 | 坐标混居条件化的残余双峰坍缩(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",
调研来源?调研员查到并用到的知识条目和文献检索结果(只列标题和编号)。
用到的知识库条目
| 编号 | 标题 | 出处 |
|---|---|---|
| k007 | Interval staging and held-out-window filtering of external data | notes/official/来件/virtualembryo.ai/rules.md |
| k024 | World-model evaluation dimensions for state-transition predictors | notes/competition/07_biomedical_world_models.md |
| k026 | Canonicalise predicted 3D coordinates before submission | notes/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_id | T2EI-01 |
| 假设是否成立 | 是 |
| 经验 |
|
| mechanism_active | 是 |
| 下一步建议 |
|
对话摘要?每个角色和大模型对话的统计:轮数、工具调用、用时、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 |