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

总览 · ← 返回运行 20261003-172000-search-t2-heart-extrap-chain-12h

节点 n39 在终选来历上

NO_CHANGE: 线性空间锚点混合(λ×2 域×再闭合 6 档全劣于父或门失败;备选库尺寸归一、型内收缩亦证否)

运行?一次完整的自动搜索或 Agent 会话,有自己的锁定配置和证据包。20261003-172000-search-t2-heart-extrap-chain-12h
父节点n37
子节点n41
操作?种子:人写的起点;改进:在父节点上改;草稿:从头写;修复:修父节点的报错。改进
状态已打分
分数搜索目标分 57.11(+0.0) · proxy_noscale 57.11(+0.0)
审查通过 检查1(越界读取):未发现问题。run.py 全部数据读取经 src.task2_spatial.view_io(load_manifest/read_stage/panel_genes,参数只有 args.data 视图路径,run.py:401-409、701-703、719);grep 全文无 open(/h5py/np.load/绝对路径/../、/mnt、/home、data/raw、downloads、评分器或 src/common/evaluation 导入,无联网下载;external qiu2024 与 prior/ 在代码中从未被读取。; 检查2(硬编码目标统计量):未发…
用时?从运行开始到结束(或到现在)的挂钟时间。35 分
程序版本f39e397d5145b5ceee53e6f27eb800fff3aee8af (programs.git)

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

来自 programs.git f39e397d51:solution/METHOD.md

NO_CHANGE: 线性空间锚点混合(λ×2 域×再闭合 6 档全劣于父或门失败;备选库尺寸归一、型内收缩亦证否)

结论

PLAN(T2HX-09 线性空间锚点混合)按其字面实现并在代理上查分证否:所有真实混合幅度都单调劣于父节点。 按 improve 规则改交两个针对同一弱项(cell_state / mmd_u,八项最低 skill 0.551)的备选机制,也全部证否。 提交的程序默认关闭本节点全部新机制(VEC_BLEND_LAMBDA=1.0、VEC_TOTNORM_W=0、VEC_TYPE_SHRINK=0), 输出与父节点 35/37 逐位相同(本地 cmp 验证:X、坐标、基因序、细胞数全同;--ablate blend 同样逐位相同, mechanism_active 将为 no)。基座保持不变:α=1, k=0.5, γ=1.35, ε=0.1, β_rec=0.15, PBC=10, 门控, 坐标/组成/行序冻结。

方法(实现了什么)

  1. PLAN 机制(blend):父管线产出 x_extrapolated(log1p)后,在线性 CP10k 域与锚阶段原始表达逐元素混合 x_final = (1−λ)·expm1(x_anchor) + λ·expm1(x_extrap),再 log1p 输出;零值保持零(两侧同支撑)。 DE 门控(PLAN 原文):混合后 dp=pb(x_final)−pb(x_anchor) 须满足 spearman(dp,dt_approx)≥0.3 且 std(dp)≥0.01·std(dt_approx),否则回退 λ=1(=父输出)。VEC_BLEND_DOMAIN=log 是 log1p 域变体; VEC_BLEND_RECLOSE=w 是混合后逐细胞总量回拉锚总量的变体。
  2. 备选 (c) TOTNORM:管线后逐细胞线性总量归一 scale=(tot_ref/tot_i)^w(细胞组成不变、零保持零)。 mode=cell(tot_ref=该细胞自身锚总量,恢复 CP10k 不变量)/ median(tot_ref=预测自身中位数,保电平去离散)/ global(一致压暗到锚中位数)。门控改为相对基线:spearman 不得低于混合前矩阵 −0.02(父输出自身的最终 spearman≈0.261 就低于 0.3 的绝对门,绝对门对机制比对基座更严,不公平)。
  3. 备选 (d) TYPE_SHRINK:型内径向收缩 x ← μ_t + (1−w)(x−μ_t)(μ_t=最终矩阵的型×基因均值)。 型质心是不动点 → dp 逐位保持(实测 max|Δdp|=3e-13),只动型内离散度——与位移幅度正交的"宽度"轴。 SUP=1 变体只收缩正值、保零模式(防零膨胀)。

查分记录(A 半,父节点 = 56.869;共 10 次,配额 20 剩 10)

#配置总分de_scorede_dirmmd_uvariogramnb_mmd
—父 35/3756.8690.27780.38390.048530.035410.08093
1blend lin λ=0.854.3770.31940.32300.051310.051790.09612
2blend lin λ=0.955.2090.31940.35290.049750.048510.09019
3blend lin λ=0.9556.869*门失败回退=父
4blend lin λ=0.753.7920.30560.31340.052670.053830.10044
5λ=0(诊断)56.869*门失败回退=父(dp=0 触发无变化保护)
6blend log λ=0.8(强制过门)56.3350.27780.38390.048440.041330.08189
7TOTNORM cell w=1(强制过门)54.9820.18060.30350.058850.035770.08741
8TOTNORM median w=1(相对门通过)56.5520.23610.35220.046760.038230.07918
9TYPE_SHRINK 抬零 w=0.1554.9940.27780.38380.052580.058230.08206
10TYPE_SHRINK 保支撑 w=0.15(强制过门)56.0070.20830.38850.054300.035240.08428

未查分的离线门失败档(spearman(dp,dt_approx),基座最终值 0.261):blend lin λ=0.8 + RECLOSE=1 → 0.231; TOTNORM cell w=0.5 → 0.232;TOTNORM global w=1 → 0.197。

机制生效证据(PLAN mechanism_evidence 五项)

  • 改变了哪些细胞:blend 全体细胞(changed_frac_pos=1.0),零模式逐位保持(zero_preserved=True); λ=0.8 时 |x_final−x_extrap| q50/q90 = 0.148/2.760(log1p 单位)。
  • 型内表达 std(log1p,按型平均):父 0.7056 → blend λ=0.8 0.8003(不降反升:混合把逐细胞膨胀比 r_i 的离散(std(log r)≈3.9)注入每个基因,PLAN 预期的"型内方差压缩"在线性域混合下不成立); TYPE_SHRINK w=0.15 → 0.6170(按构造收缩)。
  • mmd_u:λ=0.8 → 0.05131(劣于父 0.04853),未出现预期改善;唯一 mmd_u 改善的档是 TOTNORM median (0.04676)和 blend log(0.04844),但都被 DE/variogram/nb_mmd 的更大损失抵消。
  • de_direction:λ=0.8 → 0.3230 < 0.3839,PLAN 风险 1 命中(首查即低于守卫值);λ 越小越差,单调。
  • 四组分(λ=0.8 vs 父):expression 59.94/60.29、cell_state 53.21/58.59、local 54.36/58.60、shape 50/50—— 除 DE 的 de_score 一步量化抬升外全组下降。
  • 中位每细胞总量:锚 10000(CP10k),父输出 1.825×,blend λ=0.8 → 1.660×,TOTNORM cell → 1.000×。

为什么证否(读分)

  1. 线性域混合注入非物理的逐细胞库尺寸离散:外推细胞的膨胀比 r_i 差异极大,(1−λ) 权重的回拉使每个细胞 落在锚总量与 r_i·锚总量之间的不同位置 → nb_mmd/variogram 单调恶化,且 mmd_u 并未因"拉近锚"而改善。
  2. 1.8× 电平与逐细胞膨胀是信号不是伪影(在本尺子上):TOTNORM cell 恢复 CP10k 不变量后 de_score 崩 (0.278→0.181)且 mmd_u 反而恶化(0.0589)——真值 E9.5 云在 truth-PCA 里位于比锚更亮、且逐细胞亮度 异质的方向上;父节点的"过量"表达量部分编码了真实位移幅度。median 变体(保电平、去离散)同时改善 mmd_u 与 nb_mmd,但 DE 两项+variogram 损失更大,净 −0.32。
  3. 型内宽度不是 mmd_u 的短板:dp 逐位保持的型内收缩(抬零版)de 两项纹丝不动而 mmd_u/variogram 显著 恶化(抬零 87.5% 直接击穿 variogram 0.035→0.058);保支撑版避免抬零但稀疏基因 dp 被压低,de_score 崩。 两个解码都说明真值型内离散不比父输出窄,收缩宽度必输。
  4. 汇总:blend(2 域×4 幅度×再闭合变体)、TOTNORM(3 模式)、TYPE_SHRINK(2 解码)共 11 个配置、10 次 查分,无一超过父节点;满足"≥3 种解码/幅度、≥6 次查分"的证否标准。父节点 ANALYSIS 的帕累托前沿结论 在三个新变换族上再次成立:mmd_u 只对"付出更多 de_direction/variogram"的变换作正向响应。

验证过 / 未验证

  • 验证:默认输出与父逐位相同(X/坐标/基因序/n=24826);--ablate blend 逐位相同;seed 0/1 输出相同; 伪装视图(时间 +1 天、manifest 键序打乱、路径更换)下机制关与机制开两种运行输出均逐位相同(view 无关); vec-check 通过;运行 ~3s / <2GB。
  • 未验证:TOTNORM global、blend+RECLOSE 等离线门失败档未查分(方向已被同族查分档覆盖);B 半与官网外推 榜(本地尺子已知高估,全部结论只在 A 半代理上成立)。

知识与来源

未使用任何外部生物学知识或保留阶段信息;全部机制仅由视图内输入数据现场计算的量驱动 (锚/前阶段伪批量、型均值、每细胞总量、坐标 kNN 图),无任何阶段特异常数。评分规则事实引自任务书 "T2 评分规则简报"(veckit 公开代码)与父节点 35/37 的 METHOD/ANALYSIS。

给后续节点

  • 不要再试:锚混合(任何域/幅度)、逐细胞或全局库尺寸归一(任何模式)、型内宽度收缩/扩张——已 11 配置证否。
  • 若要攻 cell_state:mmd_u 的可行改善历史上只伴随 γ/β_rec 等再闭合轴(node 31 γ=0.45 时 mmd_u=0.0454 但 DE 差),说明其瓶颈是质心位置(外推方向)而非宽度/电平;需要更好的速度方向估计(如引入视图内 external Qiu E8.75 心脏样本做型内参考),而不是对现有输出做后变换。
  • 本基座(含 blend/totnorm/type_shrink 钩子,全部默认关)可复用:钩子都有独立门控与 DEBUG 证据输出。

调研员的计划

名称T2HX-09 线性空间锚点混合:非对数域压缩外推幅度以改善型内分布
动机父节点 37 总分 57.11,四组中 cell_state 58.92 最弱(mmd_u skill 0.551 为八项最低)。ANALYSIS 明确指出所有表达变换轴(α、W、β_rec、k、ε)落在同一条帕累托前沿上(DE+variogram ↔ nb_mmd+mmd_u,~1:1 交换),总分 ±0.1 平坦。需要与位移幅度正交的新轴。线性空间锚点混合改变的是型内分布的方差结构(压缩极端值、拉近零值),而非位移方向或平滑度,属于不同变换族。
做法在父节点 35 完整管线(α=1, k=0.5, γ=1.35, ε=0.1, β_rec=0.15, PBC=10, 门控)产出 x_extrapolated 后,做线性空间混合:x_final = (1−λ)·x_anchor + λ·x_extrapolated(逐元素,锚阶段原始表达为 x_anchor)。关键参数:λ 初值 0.80,搜索 {0.60, 0.70, 0.80, 0.90, 1.00} 共 5 档。λ=1.0 时逐位等于父节点。性质:(1) 零值保持零(0·任何=0);(2) 大 |v| 基因的有效位移被压缩更多(非线性于 v),小 |v| 基因几乎不变;(3) 型内方差被压缩(混合降低离散度),可能改善 mmd_u。DE 门控:混合后重算 dp=pb(x_final)−pb(x_anchor),验证 spearman(dp, dt_approx)≥0.3 且 std(dp)≥0.01·std(dt_approx),不过则回退 λ=1。单输入退路:只有一个阶段时无法算速度,直接 λ=1(copy_last)。vec-score 快筛:先跑 λ=0.8 单次查分看 mmd_u 和 de_direction 方向,再决定是否扩展网格。
风险1) 线性混合可能同时压缩 DE 信号(de_score/de_direction 下降),重蹈帕累托交换;Engineer 第一次查分即看 de_direction 是否 <0.3839,若是则停止。2) 型内方差压缩可能损害 variogram(共变结构变弱);监控 variogram raw 是否 >0.0355。3) λ<0.7 时可能触发无变化保护(std(dp)<1%·std(dt))导致 DE 记 0;Engineer 应在离线先验证。4) 外推榜本地尺子已知高估(54.2→49.6),本地小幅领先不可信;需 >1 分差才算进步。

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

对比:父节点版本 9b9e1fb164。改动的文件:solution/METHOD.md +94 −75、solution/run.py +301 −4

diff --git a/solution/METHOD.md b/solution/METHOD.mdindex ec47d69..b72a603 100644--- a/solution/METHOD.md+++ b/solution/METHOD.md@@ -1,75 +1,94 @@-NO_CHANGE: 位移场空间混合 VDIFF(nb_mmd 随 W/解码 9 档单调改善但与 de_direction 等值交换、总分噪声内;备选 β_rec<0 锐化、k=0.6 亦不超父)--# 节点 37(improve,父 35):速度场空间相干化 VDIFF —— 已实现、已实测、按 PLAN 边界规则关闭提交--提交态 = 父节点 35 配置逐位不变(`VEC_VDIFF_W=0` 默认),输出与父节点逐位相同(本地 cmp 验证),-预期 `mechanism_active: no`(NO_CHANGE 状态的正确表现)。所有默认参数承父:-α=1、k=0.5、γ=1.35、ε=0.1(SMOOTH_STEPS=2、K=15)、β_rec=0.15、VEC_REC_LEVEL=matched、PBC=10、-门控(std 比 ≥0.01、spearman ≥0.3)、坐标/行序/细胞数/组成冻结。--## 做了什么--1. **PLAN 机制原样实现**:逐细胞乘法位移前,log2 域速度场在坐标 15-NN 图上做一步加权混合-   `d_eff = (1−W)·v_type(i) + W·mean_{j∈kNN(i,15)} v_type(j)`(`VEC_VDIFF_W`、`VEC_VDIFF_K=15`)。-2. **机制确实运行了**(PLAN mechanism_evidence 四项全报,DEBUG 输出):-   - affected_frac(|Δd|>1e-6 的细胞比例)= **0.9014**(该点云 90% 细胞在坐标 15-NN 内有异型邻居;-     型内部细胞位移逐位不变,affected_inside_frac=0.00000,符合"只在型边界生效"的设计);-   - 受影响细胞 |d_eff−d_raw| 逐细胞最大值 q50/q90/max:W=0.1 → 0.039/0.092/0.332;-     W=0.2 → 0.079/0.184/0.664;W=0.3 → 0.118/0.276/0.997(L2 均值 0.157/0.313/0.470);-   - nb_mmd raw 随 W 单调回落(见下表),从 0.08093 最低到 0.07845(W=0.5);-   - de_score/de_direction:伪批量方向被型间混合稀释,de_direction 单调下降(下表),PLAN 守卫失败。-3. **判无效的查分证据**(§5:9 个 VDIFF 家族配置 + 2 个备选机制 + 1 个基线 = 12 次查分,A 半,-   proxy_noscale;shape_scale 组恒 50.00——坐标冻结;所有配置 nb_mmd skill ≥0.586,结构门恒 1;-   raw 越小越好的指标:mmd_u、variogram、nb_mmd):--| # | 配置 | 总分 | expr/cell/local 组 | de_score | de_dir | mmd_u | variogram | nb_mmd |-|---|---|---|---|---|---|---|---|---|-| 1 | 基线 W=0(=父 35) | **56.869** | 60.29/58.59/58.60 | 0.2778 | 0.3839 | 0.04853 | 0.035414 | 0.08093 |-| 2 | W=0.1 | 56.776 | 59.69/58.62/58.80 | 0.2500 | 0.3783 | 0.04800 | 0.035734 | 0.08026 |-| 3 | W=0.2 | 56.901 | 60.00/58.63/58.98 | 0.2778 | 0.3686 | 0.04750 | 0.036090 | 0.07967 |-| 4 | W=0.25 | 56.848 | 59.70/58.63/59.06 | 0.2639 | 0.3662 | 0.04726 | 0.036279 | 0.07940 |-| 5 | W=0.3 | **56.917** | 59.90/58.63/59.14 | 0.2778 | 0.3633 | 0.04697 | 0.036493 | 0.07915 |-| 6 | W=0.35 | 56.914 | 59.82/58.63/59.21 | 0.2778 | 0.3590 | 0.04672 | 0.036696 | 0.07893 |-| 7 | W=0.5 | 56.849 | 59.42/58.62/59.35 | 0.2639 | 0.3512 | 0.04600 | 0.037312 | 0.07845 |-| 8 | W=0.2 + NORM=1(幅度保持) | 56.714 | 59.62/58.56/58.68 | 0.2500 | 0.3747 | 0.04836 | 0.035617 | 0.08067 |-| 9 | W=0.5 + NORM=1 | 56.791 | 59.77/58.55/58.84 | 0.2778 | 0.3567 | 0.04775 | 0.036134 | 0.08013 |-| 10 | W=0.3 + α=1.2(幅度补偿) | 56.650 | 59.57/58.86/58.17 | 0.2500 | 0.3722 | 0.05036 | 0.033287 | 0.08238 |-| 11 | 备选:β_rec=−0.15(再闭合场锐化) | 56.775 | 59.53/58.52/59.04 | 0.2500 | 0.3703 | 0.04880 | 0.035395 | 0.07947 |-| 12 | 备选:k=0.6(速度软阈值加严) | 56.804 | 60.04/58.57/58.61 | 0.2639 | 0.3838 | 0.04853 | 0.035456 | 0.08091 |--   关键配置的单项 points(组分=各指标 points 和;父基线/W=0.2/W=0.3):-   de_score 7.328/7.328/7.328,de_dir 7.745/7.672/7.647,mmd_u 6.834/6.901/6.935,-   variogram 7.813/7.757/7.723,nb_mmd 14.650/14.745/14.785 → 净差 +0.03/+0.05。--4. **PLAN 判定**:主判 nb_mmd(A 半等价目标 <0.08025,即节点 33 水平)在 W≥0.2 达成-   (0.07967…0.07845);守卫 mmd_u≤0.04860 达成(0.0475/0.0470);**守卫 de_direction≥0.3839-   全部 W>0 档失败**(0.3783/0.3686/0.3633,单调)。按 PLAN 规则 (4)"若 3 档均不达标则提交 W=0"执行。-5. **备选机制**(§2 要求,针对同一弱项 local_spatial/nb_mmd):-   - 幅度保持解码(NORM=1,混合后逐细胞 L2 归一回原模长):nb_mmd 收益基本消失-     (0.08067 vs 同幅 plain 0.07967)→ **收益来自边界幅度收缩本身而非方向相干**;总分更低。-   - α 补偿(W=0.3+α=1.2,把稀释的幅度加回来):de_dir/vario 回升(vario 0.033287 全树最佳)但-     nb_mmd 反弹到 0.08238、mmd_u 0.05036 → 总分 56.650,最差。-   - β_rec=−0.15 再闭合场锐化(节点 35 单调变差曲线的反向外推):nb_mmd 0.07947 有效,但-     de_direction 0.3703 + de_score −1 步 → 56.775。(β=−0.3 已生成未查分:PBC 钳制 1.24% 细胞,伪影风险。)-   - k=0.6(ANALYSIS 建议 #3):de_dir 守住 0.3838 但 de_score −1 步 → 56.804。--## 结论(给后续节点)--在 (α1, k0.5, γ1.35, ε0.1, β_rec0.15) 基座上,**所有表达变换轴都落在同一条帕累托前沿上**:-{de_direction, de_score, variogram} ↔ {nb_mmd, mmd_u} 以约 1:1 的 points 汇率交换-(W=0.3:nb_mmd +0.135、mmd_u +0.101 ↔ de_dir −0.098、vario −0.090,净 +0.048 ≈ 噪声的 1/20)。-α、W、β_rec(两个符号)、k 全部只沿这条前沿移动;总分表面在 ±0.1 内平坦。-要拿 >噪声 的收益需要与"位移幅度/平滑度"正交的新轴;组成与坐标两轴在本家族内已冻结且-早前证否(节点 16/22)。唯一未试的解耦思路:只对边界细胞收缩位移、同时按 (型,基因) 把-型内平均倍数变化精确补回(dp 守恒重分配)——但查分 #10 表明"补回幅度"这一步本身就会-吃掉 nb_mmd 收益,预期不乐观。--## 验证过 / 没验证过--- 验证过:机制生效证据(上);W=0 提交态输出与父节点 35 逐位相同(cmp);seed 0 逐位可复现;-  seed 0/1 内容一致(锚 24826 ≤ max_cells 25179,take 全取,仅 uns/generator_seed 元数据随 seed);-  `--ablate mechanism` 与完整运行逐位一致(W=0 下机制本就关闭);vec-check ok;CPU ~3.5s、<1.5GB。-- 没验证过:各配置的 B 半分数(只查了 A 半);β_rec=−0.3 与 NORM=0.5 中间档(未查分);-  真实榜(E9.5→E10.5)上的行为——代码路径视图无关(无绝对时间、无视图标识、参数全为运行时-  数据自算),但配置只在本代理 A 半上验证过。-- 生物学知识来源:无新增(未引入任何外部测量、保留阶段信息或文献先验;所有量由视图输入在运行时计算)。+NO_CHANGE: 线性空间锚点混合(λ×2 域×再闭合 6 档全劣于父或门失败;备选库尺寸归一、型内收缩亦证否)++## 结论++PLAN(T2HX-09 线性空间锚点混合)按其字面实现并在代理上查分证否:所有真实混合幅度都单调劣于父节点。+按 improve 规则改交两个针对同一弱项(cell_state / mmd_u,八项最低 skill 0.551)的备选机制,也全部证否。+提交的程序默认关闭本节点全部新机制(`VEC_BLEND_LAMBDA=1.0`、`VEC_TOTNORM_W=0`、`VEC_TYPE_SHRINK=0`),+输出与父节点 35/37 逐位相同(本地 cmp 验证:X、坐标、基因序、细胞数全同;`--ablate blend` 同样逐位相同,+mechanism_active 将为 no)。基座保持不变:α=1, k=0.5, γ=1.35, ε=0.1, β_rec=0.15, PBC=10, 门控, 坐标/组成/行序冻结。++## 方法(实现了什么)++1. **PLAN 机制(blend)**:父管线产出 x_extrapolated(log1p)后,在线性 CP10k 域与锚阶段原始表达逐元素混合+   `x_final = (1−λ)·expm1(x_anchor) + λ·expm1(x_extrap)`,再 log1p 输出;零值保持零(两侧同支撑)。+   DE 门控(PLAN 原文):混合后 dp=pb(x_final)−pb(x_anchor) 须满足 spearman(dp,dt_approx)≥0.3 且+   std(dp)≥0.01·std(dt_approx),否则回退 λ=1(=父输出)。`VEC_BLEND_DOMAIN=log` 是 log1p 域变体;+   `VEC_BLEND_RECLOSE=w` 是混合后逐细胞总量回拉锚总量的变体。+2. **备选 (c) TOTNORM**:管线后逐细胞线性总量归一 `scale=(tot_ref/tot_i)^w`(细胞组成不变、零保持零)。+   mode=cell(tot_ref=该细胞自身锚总量,恢复 CP10k 不变量)/ median(tot_ref=预测自身中位数,保电平去离散)/+   global(一致压暗到锚中位数)。门控改为相对基线:spearman 不得低于混合前矩阵 −0.02(父输出自身的最终+   spearman≈0.261 就低于 0.3 的绝对门,绝对门对机制比对基座更严,不公平)。+3. **备选 (d) TYPE_SHRINK**:型内径向收缩 `x ← μ_t + (1−w)(x−μ_t)`(μ_t=最终矩阵的型×基因均值)。+   型质心是不动点 → dp 逐位保持(实测 max|Δdp|=3e-13),只动型内离散度——与位移幅度正交的"宽度"轴。+   SUP=1 变体只收缩正值、保零模式(防零膨胀)。++## 查分记录(A 半,父节点 = 56.869;共 10 次,配额 20 剩 10)++| # | 配置 | 总分 | de_score | de_dir | mmd_u | variogram | nb_mmd |+|---|---|---:|---:|---:|---:|---:|---:|+| — | 父 35/37 | **56.869** | 0.2778 | 0.3839 | 0.04853 | 0.03541 | 0.08093 |+| 1 | blend lin λ=0.8 | 54.377 | 0.3194 | 0.3230 | 0.05131 | 0.05179 | 0.09612 |+| 2 | blend lin λ=0.9 | 55.209 | 0.3194 | 0.3529 | 0.04975 | 0.04851 | 0.09019 |+| 3 | blend lin λ=0.95 | 56.869* | *门失败回退=父* | | | | |+| 4 | blend lin λ=0.7 | 53.792 | 0.3056 | 0.3134 | 0.05267 | 0.05383 | 0.10044 |+| 5 | λ=0(诊断) | 56.869* | *门失败回退=父(dp=0 触发无变化保护)* | | | | |+| 6 | blend log λ=0.8(强制过门) | 56.335 | 0.2778 | 0.3839 | 0.04844 | 0.04133 | 0.08189 |+| 7 | TOTNORM cell w=1(强制过门) | 54.982 | 0.1806 | 0.3035 | 0.05885 | 0.03577 | 0.08741 |+| 8 | TOTNORM median w=1(相对门通过) | 56.552 | 0.2361 | 0.3522 | 0.04676 | 0.03823 | 0.07918 |+| 9 | TYPE_SHRINK 抬零 w=0.15 | 54.994 | 0.2778 | 0.3838 | 0.05258 | 0.05823 | 0.08206 |+| 10 | TYPE_SHRINK 保支撑 w=0.15(强制过门) | 56.007 | 0.2083 | 0.3885 | 0.05430 | 0.03524 | 0.08428 |++未查分的离线门失败档(spearman(dp,dt_approx),基座最终值 0.261):blend lin λ=0.8 + RECLOSE=1 → 0.231;+TOTNORM cell w=0.5 → 0.232;TOTNORM global w=1 → 0.197。++## 机制生效证据(PLAN mechanism_evidence 五项)++- 改变了哪些细胞:blend 全体细胞(changed_frac_pos=1.0),零模式逐位保持(zero_preserved=True);+  λ=0.8 时 |x_final−x_extrap| q50/q90 = 0.148/2.760(log1p 单位)。+- 型内表达 std(log1p,按型平均):父 0.7056 → blend λ=0.8 **0.8003(不降反升**:混合把逐细胞膨胀比 r_i+  的离散(std(log r)≈3.9)注入每个基因,PLAN 预期的"型内方差压缩"在线性域混合下不成立);+  TYPE_SHRINK w=0.15 → 0.6170(按构造收缩)。+- mmd_u:λ=0.8 → 0.05131(劣于父 0.04853),未出现预期改善;唯一 mmd_u 改善的档是 TOTNORM median+  (0.04676)和 blend log(0.04844),但都被 DE/variogram/nb_mmd 的更大损失抵消。+- de_direction:λ=0.8 → 0.3230 < 0.3839,PLAN 风险 1 命中(首查即低于守卫值);λ 越小越差,单调。+- 四组分(λ=0.8 vs 父):expression 59.94/60.29、cell_state 53.21/58.59、local 54.36/58.60、shape 50/50——+  除 DE 的 de_score 一步量化抬升外全组下降。+- 中位每细胞总量:锚 10000(CP10k),父输出 1.825×,blend λ=0.8 → 1.660×,TOTNORM cell → 1.000×。++## 为什么证否(读分)++1. **线性域混合注入非物理的逐细胞库尺寸离散**:外推细胞的膨胀比 r_i 差异极大,(1−λ) 权重的回拉使每个细胞+   落在锚总量与 r_i·锚总量之间的不同位置 → nb_mmd/variogram 单调恶化,且 mmd_u 并未因"拉近锚"而改善。+2. **1.8× 电平与逐细胞膨胀是信号不是伪影(在本尺子上)**:TOTNORM cell 恢复 CP10k 不变量后 de_score 崩+   (0.278→0.181)且 mmd_u 反而恶化(0.0589)——真值 E9.5 云在 truth-PCA 里位于比锚更亮、且逐细胞亮度+   异质的方向上;父节点的"过量"表达量部分编码了真实位移幅度。median 变体(保电平、去离散)同时改善+   mmd_u 与 nb_mmd,但 DE 两项+variogram 损失更大,净 −0.32。+3. **型内宽度不是 mmd_u 的短板**:dp 逐位保持的型内收缩(抬零版)de 两项纹丝不动而 mmd_u/variogram 显著+   恶化(抬零 87.5% 直接击穿 variogram 0.035→0.058);保支撑版避免抬零但稀疏基因 dp 被压低,de_score 崩。+   两个解码都说明真值型内离散不比父输出窄,收缩宽度必输。+4. 汇总:blend(2 域×4 幅度×再闭合变体)、TOTNORM(3 模式)、TYPE_SHRINK(2 解码)共 11 个配置、10 次+   查分,无一超过父节点;满足"≥3 种解码/幅度、≥6 次查分"的证否标准。父节点 ANALYSIS 的帕累托前沿结论+   在三个新变换族上再次成立:**mmd_u 只对"付出更多 de_direction/variogram"的变换作正向响应**。++## 验证过 / 未验证++- 验证:默认输出与父逐位相同(X/坐标/基因序/n=24826);`--ablate blend` 逐位相同;seed 0/1 输出相同;+  伪装视图(时间 +1 天、manifest 键序打乱、路径更换)下机制关与机制开两种运行输出均逐位相同(view 无关);+  vec-check 通过;运行 ~3s / <2GB。+- 未验证:TOTNORM global、blend+RECLOSE 等离线门失败档未查分(方向已被同族查分档覆盖);B 半与官网外推+  榜(本地尺子已知高估,全部结论只在 A 半代理上成立)。++## 知识与来源++未使用任何外部生物学知识或保留阶段信息;全部机制仅由视图内输入数据现场计算的量驱动+(锚/前阶段伪批量、型均值、每细胞总量、坐标 kNN 图),无任何阶段特异常数。评分规则事实引自任务书+"T2 评分规则简报"(veckit 公开代码)与父节点 35/37 的 METHOD/ANALYSIS。++## 给后续节点++- 不要再试:锚混合(任何域/幅度)、逐细胞或全局库尺寸归一(任何模式)、型内宽度收缩/扩张——已 11 配置证否。+- 若要攻 cell_state:mmd_u 的可行改善历史上只伴随 γ/β_rec 等再闭合轴(node 31 γ=0.45 时 mmd_u=0.0454 但+  DE 差),说明其瓶颈是质心位置(外推方向)而非宽度/电平;需要更好的**速度方向**估计(如引入视图内+  external Qiu E8.75 心脏样本做型内参考),而不是对现有输出做后变换。+- 本基座(含 blend/totnorm/type_shrink 钩子,全部默认关)可复用:钩子都有独立门控与 DEBUG 证据输出。diff --git a/solution/run.py b/solution/run.pyindex 74ff27e..94b0680 100644--- a/solution/run.py+++ b/solution/run.py@@ -24,10 +24,59 @@ Mechanism (on by default, alpha = 1.0):  Coordinates, row order and cell count are never modified. ---ablate <name> (any name) turns THIS node's mechanism off and keeps the-rest of the pipeline unchanged. Node 37 ships with its mechanism OFF-(VEC_VDIFF_W=0, falsified -- see the node 37 block below), so the ablated-run is bit-for-bit identical to the full run (both = parent node 35).+--ablate <name> (any name) turns THIS node's mechanisms off (blend lambda=1,+totnorm w=0, type_shrink w=0) and keeps the rest of the pipeline unchanged.+Node 39 ships with all its mechanisms OFF (falsified -- see the node 39 block+below), so the ablated run is bit-for-bit identical to the full run (both =+parent node 35).++Node 39 (T2HX-09, linear-space anchor blend): FALSIFIED, ships OFF+(VEC_BLEND_LAMBDA=1.0, VEC_TOTNORM_W=0, VEC_TYPE_SHRINK=0), so the output is+bit-for-bit parent node 35 (NO_CHANGE). The PLAN mechanism was implemented+exactly: after the full pipeline produces x_extrapolated, mix it with the+anchor stage's ORIGINAL expression in the linear (CP10k) domain,+x_final = (1-L)*x_anchor + L*x_extrap, then log1p; DE gate on the blended dp+(spearman >= 0.3, std >= 0.01) with fallback L=1. Evidence it ran: zeros+preserved, changed_frac_pos = 1.0, |dx| q50 = 0.148 at L=0.8, per-cell total+ratio pulled 1.825 -> 1.660. A-half scores (parent 56.869):+  L (lin)  0.7     0.8     0.9     0.95+  total    53.79   54.38   55.21   56.87 (gate fallback = parent)+  Monotone toward the parent: every real blend amplitude is worse. The linear+  mix injects per-cell library-size heterogeneity (cells differ in inflation+  ratio r_i, std(log r) ~ 3.9) that neither a measured stage nor the parent+  has: nb_mmd 0.0809 -> 0.0961/0.1004 and variogram 0.0354 -> 0.0518/0.0538+  at L=0.8/0.7, while mmd_u does NOT improve (0.0485 -> 0.0513/0.0527).+  de_direction also falls (0.3839 -> 0.3230/0.3134).+Alternate decodes of the same mechanism, all falsified:+  (a) log1p-domain blend (x_final = (1-L)*x_anchor_log + L*x_extrap_log,+      L=0.8, gate forced): 56.335 -- de_direction held (0.3839) but variogram+      0.0413 and nb_mmd 0.0819; a log-domain blend is an amplitude+      compression, i.e. the known Pareto axis.+  (b) linear blend + exact per-cell total re-closure to the anchor total+      (L=0.8): kills dp direction offline (spearman 0.231 < 0.3 gate).+Alternate mechanisms targeting the same weakness (cell_state / mmd_u 0.551,+the lowest skill), also falsified:+  (c) per-cell library-size normalisation TOTNORM (uniform linear scale per+      cell after the pipeline). mode=cell w=1 (restore the cell's own anchor+      total, gate forced): 54.98 -- mmd_u WORSENED (0.0485 -> 0.0589) and+      de_score collapsed (0.278 -> 0.181): the 1.8x stage brightness carries+      real de/mmd signal on this ruler. mode=median w=1 (scale to the+      prediction's own median: level kept, per-cell spread removed, relative+      gate passed): 56.55 -- mmd_u 0.0468 and nb_mmd 0.0792 both improved but+      de_direction 0.352/de_score 0.236/variogram 0.038 cost more.+      mode=global w=1 (uniform dimming): spearman 0.197, gate-failed offline.+  (d) within-type radial contraction TYPE_SHRINK (x <- mu_t + (1-w)(x-mu_t),+      type centroids fixed -> dp preserved to 3e-13). Zero-lifting variant+      w=0.15: 54.99 (variogram 0.058 destroyed by lifting 87.5% of the zeros,+      mmd_u worse). Support-preserving variant w=0.15: 56.01 (sparse genes+      lose dp -> de_score 0.208, mmd_u worse 0.0543). The truth's within-type+      width is NOT narrower than the parent's; contracting it always loses.+Conclusion (consistent with nodes 33/35/37): on this base every post-hoc+expression transform -- amplitude, level, per-cell spread, within-type width,+anchor mixing -- moves along one Pareto front whose weighted sum is maximised+at the parent; mmd_u responds positively only to transforms that cost more+de_direction/variogram than it gains. 10 vec-score queries; per-config metric+tables in METHOD.md.  Node 37 (VDIFF, spatial mixing of the log2 displacement field): FALSIFIED, ships at VDIFF_W=0 (output bit-for-bit parent node 35). The PLAN's@@ -330,6 +379,10 @@ falsified), VEC_REC_STEPS (1), VEC_REC_K (15), VEC_REC_LEVEL (matched), VEC_REC_BRIGHT (1.0 = off, diagnostic only), VEC_VDIFF_W (0.0 = off, node 37 falsified), VEC_VDIFF_K (15), VEC_VDIFF_NORM (0.0 = off, falsified amplitude-preserving decode),+VEC_BLEND_LAMBDA (1.0 = off, node 39 falsified), VEC_BLEND_RECLOSE (0.0),+VEC_BLEND_DOMAIN (lin), VEC_TOTNORM_W (0.0 = off, node 39 falsified),+VEC_TOTNORM_MODE (cell), VEC_TYPE_SHRINK (0.0 = off, node 39 falsified),+VEC_TYPE_SHRINK_SUP (1), VEC_POST_EPS (0.0 = off, falsified), VEC_POST_STEPS (2), VEC_POST_K (15), VEC_PBC (10.0), VEC_MIXMODE (rel), VEC_MIXREL (1.0), VEC_MIXEPS (1.0), VEC_DOMAIN (log), VEC_SOFTD (0), VEC_CAPD (0), VEC_CVEL (-1 = legacy@@ -392,6 +445,13 @@ POST_K = int(os.environ.get("VEC_POST_K", "15"))  # coordinate neighbours of the VDIFF_W = float(os.environ.get("VEC_VDIFF_W", "0.0"))  # spatial velocity diffusion weight (0 = off) VDIFF_K = int(os.environ.get("VEC_VDIFF_K", "15"))  # coordinate neighbours for the velocity diffusion VDIFF_NORM = float(os.environ.get("VEC_VDIFF_NORM", "0.0"))  # >0: per-cell renormalise the blended velocity to (1-VDIFF_NORM)*raw_norm + VDIFF_NORM*blended_norm (1 = exact raw-norm preservation, direction-only blending)+BLEND_LAMBDA = float(os.environ.get("VEC_BLEND_LAMBDA", "1.0"))  # node 39 (T2HX-09): linear-space anchor blend weight; x_final = (1-L)*x_anchor + L*x_extrap in CP10k domain, applied after the whole pipeline (1.0 = off, output bit-for-bit parent node 35)+BLEND_RECLOSE = float(os.environ.get("VEC_BLEND_RECLOSE", "0.0"))  # >0: after the linear blend, rescale each cell's linear totals toward its own anchor total with power w (1 = exact per-cell total restoration); removes the library-size heterogeneity injected by blending cells with different inflation ratios r_i+BLEND_DOMAIN = os.environ.get("VEC_BLEND_DOMAIN", "lin")  # "lin" (PLAN): blend in CP10k domain; "log": blend in log1p domain (linear compression of the log displacement, library size untouched by construction)+TOTNORM_W = float(os.environ.get("VEC_TOTNORM_W", "0.0"))  # node 39 alternate mechanism: per-cell library-size normalisation AFTER the pipeline; each cell's linear profile is scaled by (tot_anchor_i/tot_i)**w (CP10k invariant that every measured stage satisfies; 0 = off). Uniform per cell => composition untouched, dp direction preserved up to second-order effects.+TOTNORM_MODE = os.environ.get("VEC_TOTNORM_MODE", "cell")  # "cell": restore each cell's OWN anchor total; "global": uniform dimming to the anchor median total; "median": scale to the predicted stage's own median total (level-preserving per-cell spread removal)+TYPE_SHRINK = float(os.environ.get("VEC_TYPE_SHRINK", "0.0"))  # node 39 alternate mechanism 2: within-type radial contraction in log1p space, x <- mu_t + (1-w)*(x - mu_t), mu_t = per-(type,gene) mean of the FINAL matrix; type centroids (hence dp, de_direction) preserved by construction, only within-type dispersion shrinks -- the width axis mmd_u measures (0 = off)+TYPE_SHRINK_SUP = os.environ.get("VEC_TYPE_SHRINK_SUP", "1") not in ("0", "", "false", "False")  # support-preserving variant: contract positive entries only, anchor zeros stay exactly zero (the plain map lifts ~87% of zeros to w*mu, a zero-inflation the metrics are documented to punish); per-(type,gene) means then shrink by (1-w*(1-p_pos)) REGRESS_MODE = os.environ.get("VEC_REGRESS_MODE", "type")  # "type" (per-type OLS) or "global" (pooled slope) REGRESS_W = float(os.environ.get("VEC_REGRESS_W", "1.0"))  # blend weight of the residual velocity (1 = pure residual) REGRESS_MINGENES = int(os.environ.get("VEC_REGRESS_MINGENES", "50"))  # types with fewer positive-pb genes skip regression@@ -630,6 +690,12 @@ def main() -> None:     beta_rec = BETA_REC     if args.ablate is not None and BETA_REC < 0.0:         beta_rec = 0.0+    # Node 39 off-control: --ablate blend sets lambda = 1.0, which makes the+    # linear-space anchor blend a bit-for-bit no-op (x_final = x_extrapolated,+    # output identical to parent node 35); the rest of the pipeline is untouched.+    blend_lambda = BLEND_LAMBDA if args.ablate is None else 1.0+    totnorm_w = TOTNORM_W if args.ablate is None else 0.0+    type_shrink = TYPE_SHRINK if args.ablate is None else 0.0     post_on = True      manifest = load_manifest(args.data)@@ -959,6 +1025,237 @@ def main() -> None:                               f"zero_preserved={pinfo.get('zero_pattern_preserved')} "                               f"dp_std_ratio={np.std(dp_post) / (np.std(dt_approx) + 1e-12):.4f} "                               f"spearman_dp={sp_post:.4f} (pre-pass {sp:.4f})", flush=True)+                if 0.0 <= blend_lambda < 1.0:+                    # Node 39 (T2HX-09): linear-space anchor blend. After the+                    # whole pipeline has produced x_extrapolated (log1p), mix it+                    # with the anchor stage's ORIGINAL expression in the linear+                    # (CP10k) domain:+                    #   x_final = (1-L)*expm1(x_anchor) + L*expm1(x_extrap),+                    #   output  = log1p(x_final).+                    # Properties: zeros stay exactly zero (both operands share+                    # the anchor support, sparsity pattern bit-preserved);+                    # large linear displacements are compressed more in the+                    # final log1p representation than small ones (non-linear in+                    # v); within-type dispersion shrinks toward the anchor's.+                    # Unlike log-domain alpha scaling, this changes the SHAPE+                    # of the within-type distribution, not the displacement+                    # direction. DE gate (PLAN): recompute dp on the blended+                    # matrix; require std(dp) >= 0.01*std(dt_approx) and+                    # spearman(dp, dt_approx) >= GATE_SPEARMAN, else fall back+                    # to lambda = 1 (bit-for-bit parent).+                    if BLEND_DOMAIN == "log":+                        # Variant (b): blend in the log1p domain instead -- a+                        # linear compression of the total log displacement+                        # toward the anchor; per-cell library sizes are mixed+                        # in log space (no new linear-domain heterogeneity).+                        Xp_blend = (1.0 - blend_lambda) * Xa + blend_lambda * Xp+                        lin_f = np.expm1(Xp_blend)+                    else:+                        lin_a = np.expm1(Xa)+                        lin_e = np.expm1(Xp)+                        lin_f = (1.0 - blend_lambda) * lin_a + blend_lambda * lin_e+                        if BLEND_RECLOSE > 0.0:+                            # Variant (a): per-cell total re-closure of the+                            # blend. Blending mixes cells whose inflation ratio+                            # r_i = tot_e/tot_a varies widely (std(log r) ~ 3.6),+                            # so the blended stage carries a per-cell+                            # library-size spread that neither the anchor nor a+                            # measured stage has. Rescale each blended cell's+                            # linear totals toward its OWN anchor total with+                            # power w (w=1: exact restoration of the anchor+                            # per-cell library size; the CP10k invariant of+                            # measured stages is restored by construction).+                            tot_f = lin_f.sum(axis=1, keepdims=True)+                            tot_a_c = lin_a.sum(axis=1, keepdims=True)+                            sc_b = np.power(np.divide(tot_a_c, np.maximum(tot_f, 1e-12),+                                                      out=np.ones_like(tot_f),+                                                      where=tot_f > 1e-12), BLEND_RECLOSE)+                            lin_f = lin_f * sc_b+                        Xp_blend = np.log1p(np.maximum(lin_f, 0.0))+                    dp_b = Xp_blend.mean(axis=0) - pba+                    std_ratio_b = float(np.std(dp_b) / (np.std(dt_approx) + 1e-12))+                    sp_b = float(np.corrcoef(_rank(dp_b), _rank(dt_approx))[0, 1])+                    if DEBUG:+                        # Mechanism evidence (PLAN mechanism_evidence):+                        # (1) per-cell |x_final - x_extrap| over positive genes;+                        # (2) within-type expression std (expect compression);+                        # zero-pattern preservation; library-size pull-back.+                        d_abs = np.abs(Xp_blend - Xp)+                        pos = Xa > 0+                        lab_b = np.asarray(stage.labels[rows]).astype(str)+                        def _wt_std(M: np.ndarray) -> float:+                            return float(np.mean([M[lab_b == t].std(axis=0).mean()+                                                  for t in set(lab_b.tolist())+                                                  if (lab_b == t).sum() > 1]))+                        tot_a = float(np.median(np.expm1(Xa).sum(axis=1)))+                        tot_e = float(np.median(np.expm1(Xp).sum(axis=1)))+                        tot_f = float(np.median(lin_f.sum(axis=1)))+                        print(f"blend: lambda={blend_lambda} domain={BLEND_DOMAIN} "+                              f"reclose={BLEND_RECLOSE} "+                              f"changed_frac_pos={float((d_abs[pos] > 0).mean()):.4f} "+                              f"|dx| q50/q90/max={np.quantile(d_abs[pos], 0.5):.4f}/"+                              f"{np.quantile(d_abs[pos], 0.9):.4f}/{d_abs[pos].max():.4f} "+                              f"wt_std={_wt_std(Xp):.4f}->{_wt_std(Xp_blend):.4f} "+                              f"zero_preserved={bool(((Xp_blend == 0) == ~pos).all())} "+                              f"median_total(x anchor)={tot_a:.1f} "+                              f"extrap/anchor={tot_e / max(tot_a, 1e-12):.3f} "+                              f"final/anchor={tot_f / max(tot_a, 1e-12):.3f} "+                              f"gate: std_ratio={std_ratio_b:.4f} spearman={sp_b:.4f}",+                              flush=True)+                    if std_ratio_b >= 0.01 and sp_b >= GATE_SPEARMAN:+                        Xp = Xp_blend+                    elif DEBUG:+                        print("blend gate FAILED: fallback lambda=1 (parent output)",+                              flush=True)+                if totnorm_w > 0.0:+                    # Node 39 ALTERNATE mechanism (after the PLAN's linear-space+                    # anchor blend was falsified): per-cell library-size+                    # normalisation. The pipeline output violates the CP10k+                    # total invariant that every measured stage satisfies+                    # exactly: median per-cell linear total is ~1.8x the anchor+                    # with a per-cell log-ratio spread of ~3.9 (nodes 24/31/33+                    # only pulled the SPREAD part-way back and pinned the LEVEL+                    # at the inflated median by construction). No real stage+                    # has this brightness axis; the truth-fitted PCA of mmd_u /+                    # variogram / neighborhood_mmd is expected to pick it up as+                    # a systematic offset of the whole predicted cloud.+                    # Scale each cell's linear profile by (tot_ref/tot_i)**w --+                    # uniform per cell, so the composition of every cell is+                    # untouched and zeros stay zero:+                    #   mode "cell":   tot_ref = the cell's OWN anchor total+                    #                  (exact restoration of the measured+                    #                  per-cell library-size distribution);+                    #   mode "global": tot_ref = anchor median total for every+                    #                  cell (uniform dimming; isolates the+                    #                  level component from the spread removal).+                    # Both references are computed from the input data at+                    # runtime (no stage-specific constant). The gamma+                    # re-closure axis never tested this: it holds the median+                    # level at the unshifted median by construction.+                    lin_n = np.expm1(Xp)+                    tot_n = lin_n.sum(axis=1, keepdims=True)+                    tot_a_n = np.expm1(Xa).sum(axis=1, keepdims=True)+                    if TOTNORM_MODE == "global":+                        lvl_ref = float(np.median(tot_a_n)) / max(float(np.median(tot_n)), 1e-12)+                        sc_n = np.full_like(tot_n, lvl_ref ** totnorm_w)+                    elif TOTNORM_MODE == "median":+                        # Level-preserving spread removal: scale each cell to+                        # the PREDICTED stage's own median total. Keeps the+                        # stage-level brightness (which the falsified "cell"+                        # mode showed carries real de/mmd signal) and removes+                        # only the per-cell library-size heterogeneity that the+                        # re-closure field injects (log-ratio std ~0.93 vs 0 for+                        # every measured CP10k stage). Reference computed from+                        # the prediction itself at runtime.+                        med_n = float(np.median(tot_n))+                        sc_n = np.power(np.divide(np.full_like(tot_n, med_n),+                                                  np.maximum(tot_n, 1e-12),+                                                  out=np.ones_like(tot_n),+                                                  where=tot_n > 1e-12), totnorm_w)+                    else:+                        sc_n = np.power(np.divide(tot_a_n, np.maximum(tot_n, 1e-12),+                                                  out=np.ones_like(tot_n),+                                                  where=tot_n > 1e-12), totnorm_w)+                    Xp_norm = np.log1p(lin_n * sc_n)+                    dp_n = Xp_norm.mean(axis=0) - pba+                    dp_base = Xp.mean(axis=0) - pba+                    std_ratio_n = float(np.std(dp_n) / (np.std(dt_approx) + 1e-12))+                    sp_n = float(np.corrcoef(_rank(dp_n), _rank(dt_approx))[0, 1])+                    sp_base = float(np.corrcoef(_rank(dp_base), _rank(dt_approx))[0, 1])+                    if DEBUG:+                        d_abs = np.abs(Xp_norm - Xp)+                        pos = Xa > 0+                        lab_n = np.asarray(stage.labels[rows]).astype(str)+                        wt_pre = float(np.mean([Xp[lab_n == t].std(axis=0).mean()+                                                for t in set(lab_n.tolist()) if (lab_n == t).sum() > 1]))+                        wt_post = float(np.mean([Xp_norm[lab_n == t].std(axis=0).mean()+                                                 for t in set(lab_n.tolist()) if (lab_n == t).sum() > 1]))+                        print(f"totnorm: w={totnorm_w} mode={TOTNORM_MODE} "+                              f"median_total pred/anchor={float(np.median(tot_n)) / float(np.median(tot_a_n)):.3f}"+                              f"->{float(np.median((lin_n * sc_n).sum(axis=1))) / float(np.median(tot_a_n)):.3f} "+                              f"logratio_std={float(np.std(np.log(np.maximum(tot_n, 1e-12) / np.maximum(tot_a_n, 1e-12)))):.3f}"+                              f"->{float(np.std(np.log(np.maximum((lin_n * sc_n).sum(axis=1, keepdims=True), 1e-12) / np.maximum(tot_a_n, 1e-12)))):.3f} "+                              f"|dx| q50/q90={np.quantile(d_abs[pos], 0.5):.4f}/{np.quantile(d_abs[pos], 0.9):.4f} "+                              f"wt_std={wt_pre:.4f}->{wt_post:.4f} "+                              f"gate: std_ratio={std_ratio_n:.4f} spearman={sp_n:.4f} "+                              f"(base {sp_base:.4f})",+                              flush=True)+                    if std_ratio_n >= 0.01 and sp_n >= sp_base - 0.02:+                        # Gate: relative, not absolute. The parent's own final+                        # output sits at spearman ~0.26 (below the pipeline's+                        # pre-renormalisation gate of 0.3, which is computed on+                        # the PRE-reclosure shift by design), so an absolute 0.3+                        # threshold here would be stricter on the mechanism than+                        # on the base it refines. Accept if dp direction does+                        # not degrade vs the pre-totnorm matrix (margin 0.02,+                        # within rank jitter) and the DE protection holds.+                        Xp = Xp_norm+                    else:+                        if DEBUG:+                            print(f"totnorm gate FAILED (sp_n={sp_n:.4f} vs "+                                  f"base {sp_base:.4f}): fallback (parent output)",+                                  flush=True)+                if type_shrink > 0.0:+                    # Node 39 ALTERNATE mechanism 2 (after blend and totnorm+                    # were falsified): within-type radial contraction in log1p+                    # space. Every cell is pulled a fraction w toward its OWN+                    # type's per-gene mean of the final matrix:+                    #   x_ig <- mu_tg + (1-w)*(x_ig - mu_tg).+                    # Type centroids are fixed points of the map, so the+                    # per-type -- and with frozen composition the global --+                    # pseudobulk is preserved BY CONSTRUCTION: dp, de_score and+                    # de_direction cannot move (verified in DEBUG). The map+                    # only shrinks the WITHIN-type dispersion, the width axis+                    # of the cell-state distribution that mmd_u measures;+                    # unlike the blend/totnorm family it never touches the+                    # displacement amplitude or the library-size level, so it+                    # is orthogonal to the Pareto front the ANALYSIS+                    # identified. No clipping needed: x >= 0 and mu >= 0 imply+                    # the contracted value stays >= min(x, mu) >= 0. Zeros of+                    # genes with mu_tg > 0 lift to w*mu_tg (part of the+                    # contraction, monitored in DEBUG).+                    lab_s = np.asarray(stage.labels[rows]).astype(str)+                    Xp_sh = Xp.copy()+                    sup_mask = Xa > 0 if TYPE_SHRINK_SUP else None+                    for t in set(lab_s.tolist()):+                        m_t = lab_s == t+                        if int(m_t.sum()) < 2:+                            continue+                        mu_t = Xp[m_t].mean(axis=0)+                        blk = mu_t + (1.0 - type_shrink) * (Xp[m_t] - mu_t)+                        if sup_mask is not None:+                            # Support-preserving variant: contract positive+                            # entries only, zeros stay exactly zero (the+                            # centroid-preserving map lifts 87.5% of the anchor+                            # zeros to w*mu, a zero-inflation the metrics are+                            # documented to punish). Per-(type,gene) means then+                            # shrink by (1 - w*(1-p_pos)): sparse genes lose dp+                            # amplitude, watched by the gate.+                            blk = np.where(sup_mask[m_t], blk, 0.0)+                        Xp_sh[m_t] = blk+                    dp_s = Xp_sh.mean(axis=0) - pba+                    dp_p = Xp.mean(axis=0) - pba+                    std_ratio_s = float(np.std(dp_s) / (np.std(dt_approx) + 1e-12))+                    sp_s = float(np.corrcoef(_rank(dp_s), _rank(dt_approx))[0, 1])+                    if DEBUG:+                        pos_s = Xa > 0+                        d_abs = np.abs(Xp_sh - Xp)+                        wt_pre = float(np.mean([Xp[lab_s == t].std(axis=0).mean()+                                                for t in set(lab_s.tolist()) if (lab_s == t).sum() > 1]))+                        wt_post = float(np.mean([Xp_sh[lab_s == t].std(axis=0).mean()+                                                 for t in set(lab_s.tolist()) if (lab_s == t).sum() > 1]))+                        print(f"type_shrink: w={type_shrink} "+                              f"changed_frac_pos={float((d_abs[pos_s] > 1e-6).mean()):.4f} "+                              f"|dx| q50/q90={np.quantile(d_abs[pos_s], 0.5):.4f}/{np.quantile(d_abs[pos_s], 0.9):.4f} "+                              f"wt_std={wt_pre:.4f}->{wt_post:.4f} "+                              f"zeros_lifted_frac={float(((Xp_sh > 0) & ~pos_s).mean()):.5f} "+                              f"dp_max_abs_diff={float(np.abs(dp_s - dp_p).max()):.3e} "+                              f"gate: std_ratio={std_ratio_s:.4f} spearman={sp_s:.4f}",+                              flush=True)+                    if std_ratio_s >= 0.01 and sp_s >= GATE_SPEARMAN - 0.05:+                        Xp = Xp_sh+                    elif DEBUG:+                        print("type_shrink gate FAILED: fallback (parent output)", flush=True)                 X = Xp.astype(np.float32)      write_t2(args.out, X, coords, genes, seed=args.seed)

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

用到的知识库条目

编号标题出处
k007Interval staging and held-out-window filtering of external datanotes/official/来件/virtualembryo.ai/rules.md
k026Canonicalise predicted 3D coordinates before submissionnotes/pitfalls/04_scorer_invariance.md
k027Joint expression-geometry generation with relative geometrynotes/competition/03_solution_landscape.md

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

改了什么实现了 PLAN 的线性空间锚点混合(CP10k 域 x_final=(1−λ)x_anchor+λx_extrap,含 DE 门控与 log 域/再闭合变体)及两个备选后变换(TOTNORM 库尺寸归一 3 模式、TYPE_SHRINK 型内径向收缩 2 解码),A 半代理查分 11 配置全部劣于父后按 improve 规则关闭提交:VEC_BLEND_LAMBDA=1.0、VEC_TOTNORM_W=0、VEC_TYPE_SHRINK=0,提交输出与父节点 35/37 逐位相同(NO_CHANGE),榜分 57.11 不变。
各组分数的变化cell_state:噪声内(逐位相同):58.92 → 58.92,+0.00;mmd_u 0.04751、variogram 0.03471 与父一致,PLAN 预期的 mmd_u 改善未兑现
expression_change:噪声内(实为逐位相同):60.35 → 60.35,+0.00;de_score 0.2778 / de_direction 0.3874 与父完全一致
local_spatial:无变化:59.15 → 59.15;neighborhood_mmd 0.07784(skill 0.592)与父相同,结构门恒 1
shape_scale:无变化:50.00 → 50.00,坐标冻结,d2_shape 0.04911 / occupancy_dice 0.8066 / scale_log_ratio −0.4334 均与父相同
family_idT2HX-09
假设是否成立否
经验
  1. 在膨胀比逐细胞高度异质(std(log r)≈3.9)的外推输出上,线性域与锚混合会把库尺寸离散注入每个基因:λ=0.8 时 nb_mmd 0.081→0.096、variogram 0.035→0.052,且 mmd_u 反而恶化(0.0485→0.0513),预期中的型内方差压缩实测不成立(型内 std 0.706→0.800)。
  2. 父输出 1.8× 的逐细胞亮度是尺子上的信号而非伪影:TOTNORM 恢复 CP10k 不变量(mode=cell w=1)后 de_score 0.278→0.181、mmd_u 恶化到 0.0589,说明真值云在 truth-PCA 里位于比锚更亮且逐细胞亮度异质的方向上。
  3. 型内宽度不是 mmd_u 的短板:dp 逐位保持(max|Δdp|=3e-13)的 TYPE_SHRINK 收缩下 DE 两项不动而 mmd_u/variogram 显著恶化(抬零版 variogram 0.035→0.058),真值型内离散不比父输出窄,收缩宽度必输。
  4. 帕累托前沿结论(节点 33/35/37)在三个新变换族(锚混合、库尺寸归一、型内宽度收缩)上再次成立:mmd_u 只对付出更多 de_direction/variogram 的变换作正向响应,后处理变换轴(幅度、电平、离散、宽度、锚混合)已扫平。
  5. NO_CHANGE 提交的正确表现即 mechanism_active=no:机制钩子实现但默认关,--ablate 与完整运行逐位一致,榜分与父完全相同(+0.00)。
mechanism_active否
下一步建议
  1. 攻 cell_state(mmd_u skill 0.551 八项最低):放弃对输出的后变换,改进速度方向估计本身——引入视图内 external Qiu E8.75 心脏样本做型内参考,修正外推质心位置(历史上唯一 mmd_u 明显改善来自再闭合轴 node 31 γ=0.45 时 0.0454,但 DE 受损,说明瓶颈在质心而非宽度/电平)。
  2. 不要再试锚混合(任何域/λ)、逐细胞或全局库尺寸归一、型内宽度收缩/扩张——本节点 11 配置已系统证否,重复即浪费查分配额。
  3. 若继续动表达,任何新机制应先在 A 半代理上单查一次并核对 de_direction≥0.3839 守卫与 variogram≤0.0355 再扩展网格;外推榜本地尺子已知高估(54.2→49.6),本地 <1 分的领先不可当真实收益。

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

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

分析员

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

工程师

角色工程师 alibaba-token-plan-cn/qwen3.8-max
调用次数1 次
轮数57
工具调用共 58 次:bash 33、edit 21、read 3、write 1
用时27 分
token 数输入 129,753 · 输出 22,190 · 思考 28,691
任务(第一行)按计划修改程序:T2HX-09 线性空间锚点混合:非对数域压缩外推幅度以改善型内分布
最后的回答(摘录)
**Done — NO_CHANGE submission** (mechanisms implemented, falsified, shipped off; output bit-for-bit = parent 35/37, `--ablate blend` identical, seed-deterministic, disguised-view identical, vec-check ok; 10/20 queries used).

- **PLAN 机制(线性空间锚点混合)**:λ=0.7/0.8/0.9 → 53.79/54.38/55.21,单调劣于父 56.87(A 半);λ=0.95 门失败回退。线性混合把逐细胞膨胀比离散注入每个基因:nb_mmd 0.081→0.096、variogram 0.035→0.052,mmd_u 反而恶化,PLAN 预期的型内方差压缩实测不成立(0.706→0.800)。log 域与再闭合变体亦证否(56.34 / 门失败)。
- **备选机制(同弱项 cell_state/mmd_u)**:TOTNORM 库尺寸归一 3 模式(cell 54.98、median 56.55、global 门失败)——恢复 CP10k 不变量使 de_score 崩且 mmd_u 恶化,证明 1.8× 亮度是信号;TYPE_SHRINK 型内收缩 2 解码(抬零 54.99、保支撑 56.01)——dp 逐位保持时 mmd_u 仍恶化,型内宽度不是短板。共 11 配置证否,全部记录在 METHOD.md。
- **下一步最值得试**:mmd_u 瓶颈在质心位置(速度方向)而非宽度/电平——用视图内 external Qiu E8.75 心脏样本做型内参考改进速度方向估计,而不是继续对输出做后变换;后变换族(幅度、电平、离散、宽度、锚混合)已在节点 33/35/37/39 全部扫平。
原始记录位置/home/spark-longxinyang/vec/runs/formal/20261003-172000-search-t2-heart-extrap-chain-12h/nodes/39/engineer.jsonl 418 KB
/home/spark-longxinyang/vec/runs/formal/20261003-172000-search-t2-heart-extrap-chain-12h/nodes/39/engineer.stderr

调研员

角色调研员 alibaba-token-plan-cn/qwen3.8-max
调用次数1 次
轮数1
工具调用共 0 次:—
用时6 分
token 数输入 22,610 · 输出 8,092 · 思考 8,192
任务(第一行)为节点 n39(改进,父节点 n37)写改进计划 PLAN.json
最后的回答(摘录)
s compressed non-uniformly).

λ initial value: 0.8 (i.e., 80% extrapolated, 20% anchor)
Search range: 0.6, 0.7, 0.8, 0.9, 1.0

Off control: λ=1.0 gives exactly the parent prediction.

Let me write the final JSON.
</think>

```json
{
  "name": "T2HX-09 线性空间锚点混合:非对数域压缩外推幅度以改善型内分布",
  "motivation": "父节点 37 总分 57.11,四组中 cell_state 58.92 最弱(mmd_u skill 0.551 为八项最低)。ANALYSIS 明确指出所有表达变换轴(α、W、β_rec、k、ε)落在同一条帕累托前沿上(DE+variogram ↔ nb_mmd+mmd_u,~1:1 交换),总分 ±0.1 平坦。需要与位移幅度正交的新轴。线性空间锚点混合改变的是型内分布的方差结构(压缩极端值、拉近零值),而非位移方向或平滑度,属于不同变换族。",
  "approach": "在父节点 35 完整管线(α=1, k=0.5, γ=1.35, ε=0.1, β_rec=0.15, PBC=10, 门控)产出 x_extrapolated 后,做线性空间混合:x_final = (1−λ)·x_anchor + λ·x_extrapolated(逐元素,锚阶段原始表达为 x_anchor)。关键参数:λ 初值 0.80,搜索 {0.60, 0.70, 0.80, 0.90, 1.00} 共 5 档。λ=1.0 时逐位等于父节点。性质:(1) 零值保持零(0·任何=0);(2) 大 |v| 基因的有效位移被压缩更多(非线性于 v),小 |v| 基因几乎不变;(3) 型内方差被压缩(混合降低离散度),可能改善 mmd_u。DE 门控:混合后重算 dp=pb(x_final)−pb(x_anchor),验证 spearman(dp, dt_approx)≥0.3 且 std(dp)≥0.01·std(dt_approx),不过则回退 λ=1。单输入退路:只有一个阶段时无法算速度,直接 λ=1(copy_last)。vec-score 快筛:先跑 λ=0.8 单次查分看 mmd_u 和 de_direction 方向,再决定是否扩展网格。",
  "expected_groups": ["cell_state"],
  "risks": "1) 线性混合可能同时压缩 DE 信号(de_score/de_direction 下降),重蹈帕累托交换;Engineer 第一次查分即看 de_direction 是否 <0.3839,若是则停止。2) 型内方差压缩可能损害 variogram(共变结构变弱);监控 variogram raw 是否 >0.0355。3) λ<0.7 时可能触发无变化保护(std(dp)<1%·std(dt))导致 DE 记 0;Engineer 应在离线先验证。4) 外推榜本地尺子已知高估(54.2→49.6),本地小幅领先不可信;需 >1 分差才算进步。",
  "family_id": "T2HX-09",
  "mechanism": "在线性表达空间(非 log2 域)将外推预测与锚阶段原始表达按 λ 加权混合,压缩大位移基因的过冲、保留小位移基因信号,改变型内分布形状而非位移方向。",
  "vs_constant_shift": "常数位移对每基因施加统一方向/幅度的偏移;本机制不引入新方向,只对已有外推做非线性幅度压缩(大 |v| 压多、小 |v| 压少),且在线性域操作改变方差结构,不等同于 log 域的 α 缩放。",
  "mechanism_evidence": "Engineer 报告:(1) λ=0.8 时逐细胞 |x_final−x_extrap| 的分布(应 >0 对绝大多数非零基因);(2) 型内表达标准差变化(预期收缩);(3) mmd_u raw 变化(预期 <0.04751);(4) de_direction 是否守住 ≥0.3839;(5) 四组分各自变化。",
  "mechanism_off_control": "λ=1.0 时 x_final = x_extrapolated 逐位,输出与父节点 35 完全相同;预期所有指标变化 +0.00。程序通过 VEC_BLEND_LAMBDA=1.0 或 --ablate blend 实现。",
  "sources": []
}
```
原始记录位置/home/spark-longxinyang/vec/runs/formal/20261003-172000-search-t2-heart-extrap-chain-12h/nodes/39/researcher.jsonl 30 KB
/home/spark-longxinyang/vec/runs/formal/20261003-172000-search-t2-heart-extrap-chain-12h/nodes/39/researcher.stderr

审查员

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