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

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

节点 n13 在终选来历上

T2HX-04 微小全局位移(α=0.02)+表达引导坐标2-opt置换:位移clip伪影在α=0.02即击穿DE保护(49.10),置换仅降能量0.31%、无邻域收益(48.87),按PLAN止损以机制关(=copy_last逐位)提交

运行?一次完整的自动搜索或 Agent 会话,有自己的锁定配置和证据包。20261003-172000-search-t2-heart-extrap-chain-12h
父节点n11
子节点n15、n17
操作?种子:人写的起点;改进:在父节点上改;草稿:从头写;修复:修父节点的报错。改进
状态已打分
分数搜索目标分 50.00(+0.0) · proxy_noscale 50.00(+0.0)
审查未审查
用时?从运行开始到结束(或到现在)的挂钟时间。29 分
程序版本9fc2b13a322cb88aa5b96ff7242455bbe91cde4b (programs.git)
导入自20261003-105537-search-t2-heart-extrap-g24-D#13
备注re-scored at launch (origin 20261003-105537-search-t2-heart-extrap-g24-D node 13, score there 50.00)

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

来自 programs.git 9fc2b13a32:solution/METHOD.md

T2HX-04 微小全局位移(α=0.02)+表达引导坐标2-opt置换:位移clip伪影在α=0.02即击穿DE保护(49.10),置换仅降能量0.31%、无邻域收益(48.87),按PLAN止损以机制关(=copy_last逐位)提交

方法(PLAN 家族 T2HX-04,机制完整实现,开关默认关)

  • 基座:anchor_entry 锚阶段整份输出(n=24826 ≤ max_cells=25179,无抽样),坐标点集、表达值、基因序不变;置换只重排细胞↔坐标配对。
  • 阶段A(VEC_ALPHA):extrap_step(manifest) 现场取倒数两输入(E8.25_late→E8.75),v = pb(late)−pb(early)(全细胞伪批量),X ← clip(X + α·v, 0),全局统一方向(非按型)。单输入阶段自动跳过。
  • 阶段B(VEC_SWAP=B%):坐标 15-NN(cKDTree)取并集对称图;贪心 2-opt 最小化图上表达余弦距离总和(Dirichlet 能量)。候选用快速近似 gain(i,j) = (x_j−x_i)·(N_i−N_j)(N=邻居单位向量和,批量矩阵化),每对候选先做精确能量差验证(含共邻/相邻修正)再执行;best-first,预算 B%·n 或无改善对或超时停止。
  • 开关:VEC_ALPHA(默认 0=关)、VEC_SWAP(默认 0=关)、VEC_EPS/ROUNDS/KNN/TIMECAP。只用 manifest 阶段顺序与视图内数据,无视图路径、阶段名、绝对时间分支。

网格结果(vec-score T2:heart:val_extrap/proxy_noscale,A 半,共用 2 次查分)

配置榜分de_scorevariogrammmd_uneighborhood_mmdoccupancy_dice
identity(父节点实测,=copy_last)50.0000.0586160.058560.114450.8066
α=0.02, B=0(只开位移)49.10−0.1250.0645520.058710.114630.8148
α=0.02, B=2%(PLAN 首档完整方案)48.87−0.1250.0645520.058710.114590.8131

机制生效证据(PLAN mechanism_evidence 对应项)

  1. 置换统计:预算 497 对,3 轮扫描只找到 75 对精确增益 >EPS 的改善交换即收敛(无改善交换停止);能量 E0=105046.8 → E1=104718.5,只降 0.313% —— 位移后 copy_last 配对仍是坐标-15NN Dirichlet 能量的强局部最优,PLAN 核心假设(微小位移打破局部最优、释放置换收益)不成立。
  2. 邻域变化:置换使 neighborhood_mmd 0.11463→0.11459(≈0,A 半 σ=0 下真实但无意义);且 occupancy_dice 0.8148→0.8131 —— 配对重排虽不动坐标点集,仍通过行序影响评分器占据抽样,反伤 shape_scale(与节点 7/9 官方分 shape 掉到 48 的观察一致)。
  3. 四组分对比(α=0.02+B=2% vs α=0.02+B=0 vs identity):expression_change 50→47.72(两档相同,全部来自位移的 clip 伪影);cell_state 50→48.75(variogram 0.0586→0.0646,与节点 11 同族恶化);local_spatial 50→49.96;shape_scale 50→49.05(置换再扣 occupancy)。
  4. DE 保护自检(PLAN 风险3):α=0.02 时 std(dp)=0.00452、max|dp|=0.0236、clip(0) 命中 8.10M 条目(≈65%)——PLAN 假设"α≤0.03 时 clip 伪影极小、保护不击穿"被证伪:de_score=−0.125、de_direction=−0.0598,保护已击穿(复刻 node6/11 失败模式,且阈值比节点 11 的 α≥0.20 低一个量级——均匀位移 v 的 std(v)=0.41 比 PCA 缩放残差大得多)。

机制关对照(PLAN mechanism_off_control)

VEC_ALPHA=0 且 VEC_SWAP=0(提交默认):跳过两阶段,输出与 copy_last 逐位一致(sha256 a26c0b78ed1aa4c4…,seed 0 两次运行相同;seed 1 的 .X 与 obsm 逐位相同,仅 uns.generator_seed 字段不同)。预期分数 = 50.00(父节点/节点 1/3/6/8/10/11 提交态实测)。"位移单独开"档 49.10 < identity,证明本方案无任何一档优于机制关。

PLAN 止损执行

PLAN 步骤(5)/风险1:首档(α=0.02, B=2%)= 48.87 ≤ 50.00 → 立即止损,提交 off,不再追加 α×B 网格(位移在 α=0.02 已击穿 DE 保护,更小 α 只会同时缩小"破局"与收益;置换独立收益已被 75/497、0.313%、nb Δ≈0 三个数判死)。

验证过 / 没验证过

  • 验证过:提交态 vec-check --task T2:heart:val_extrap/proxy_noscale = ok(注意:--data 形式的 vec-check 在本客户端被拒 "task not allowed",需带尺子后缀的 --task);seed 0/1 的 .X、坐标逐位一致;CPU 运行提交态 ~4 s、机制开启态 ~110 s,内存 <1.5 GB(limits 28 GB/30 min 内);单输入阶段回退(prev=None 跳过位移,置换仍可跑)。
  • 没验证过:B 半与伪装视图(提交态与父节点逐位相同,无迁移风险;代码只读 manifest 数据与相对顺序,无绝对时间/路径分支);真实 final 视图(3 输入时 v 取倒数两输入,机制默认关,不影响提交态);B>2% 或更小 α 的完整网格(止损规则)。

给树的结论

  • T2HX-04 在本榜两种形态均证伪:纯 copy_last 基座上的有界置换(节点 7/9/10:49.60/49.60/50.00)与"微小全局位移破局+置换"(本节点:48.87)。坐标-15NN 配对能量在 copy_last 处已近局部最优(可改善交换 <0.4% 细胞、能量降 0.3%),任何位移预处理都不改变这一事实;置换还会经行序扰动 occupancy_dice。
  • 均匀伪批量位移的 clip 伪影击穿 DE 保护的阈值远低于 PCA 缩放族(α≈0.02 vs 0.20):std(v)=0.41 的全局方向上 α=0.02 就产生 de_score<0。改表达值方案的安全边界应按 std(dp) 而非 α 标定。
  • 与节点 11 结论合并:copy_last 基座上均值位移、方差缩放、配对重排及其组合已全部证伪,本榜视图内微扰族关闭;剩余杠杆只有引入视图外时间方向信息(跨阶段配对建模),或接受地板 50.00。

调研员的计划

名称微小表达位移破局+表达kNN坐标置换(复刻节点5成功条件)
动机节点5(52.74)是全树唯一超过地板的节点,方法为表达kNN引导坐标置换,且其parent(节点4,α=0.05 damped_shift)有微小表达位移。节点10在纯copy_last上'复刻并约束node5'得50.00(机制开启仍无收益),说明纯copy_last的邻域结构是坐标置换的局部最优——微小表达位移打破该局部最优可能是节点5成功的关键前提。节点4本身49.89(α=0.05略有害),但节点5在其基础上通过坐标置换拿到52.74(+2.85)。本方案用更小α(0.01–0.03)降低位移本身损害,再叠加坐标置换。
做法步骤:(1) copy_last基座(锚阶段整份输出,坐标/基因序/细胞数不变)。(2) 阶段A表达位移:取manifest倒数两输入阶段(E8.25, E8.75),计算逐基因伪批量差 v=pb(late)−pb(early);对锚阶段每个细胞 X_i ← X_i + α·v(全局统一方向,非按型)。α初值0.02,搜索{0.01, 0.02, 0.03};位移后直接clip(0)(α≤0.03时clip伪影极小,先打印std(dp)/std(dt)确认<1%)。(3) 阶段B坐标置换:在位移后表达上建坐标15-NN图;贪心2-opt:遍历所有细胞对(i,j),若交换其坐标后'坐标15-NN内的表达余弦距离总和'下降,则执行交换;总交换预算B%(初值2%,搜索{1,2,4}%);达到预算或无改善交换时停止。(4) 单输入阶段退路:prev=None时跳过阶段A(α无效),阶段B仍可在锚阶段自身表达kNN上执行。(5) vec-score快筛:先查identity基线(1次)→α=0.02/B=0确认位移单独不破坏(1次)→α=0.02/B=2%完整方案(1次)→若>50则追加α×B网格(≤4次)→若首档≤50止损提交off。总查分≤8次。(6) 无视图路径/阶段名/绝对时间分支;只用manifest提供的阶段顺序与视图内数据。
风险1) α≤0.03的位移可能太小,无法打破copy_last的邻域局部最优,坐标置换仍无改善(与节点10相同结局)——Engineer在首档(α=0.02, B=2%)查分后若≤50.00立即止损;2) 坐标置换过度(B>3%)可能破坏已有邻域结构使neighborhood_mmd恶化并触发结构门——先试B=1%再递增;3) clip(0)在稀疏数据上引入微小均值漂移——实现时打印std(dp)/std(dt),若≥1%则回退为不做clip改用max(X,0)后重归一化每行总和;4) 节点5的52.74仅有单种子,可能是A半噪声高估——若首档>51,用同输出再查一次确认(σ=0已验证则无需)。

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

对比:父节点版本 ee234483ef。改动的文件:solution/METHOD.md +28 −31、solution/run.py +159 −75

diff --git a/solution/METHOD.md b/solution/METHOD.mdindex dd92180..61d4264 100644--- a/solution/METHOD.md+++ b/solution/METHOD.md@@ -1,45 +1,42 @@-# T2HX-03 PCA方差趋势外推(保均值调型内离散度):双向网格全劣于地板,按边界规则以机制关(VEC_ALPHA=0,逐位=copy_last)提交+# T2HX-04 微小全局位移(α=0.02)+表达引导坐标2-opt置换:位移clip伪影在α=0.02即击穿DE保护(49.10),置换仅降能量0.31%、无邻域收益(48.87),按PLAN止损以机制关(=copy_last逐位)提交 -copy_last 基座上实现 PLAN 家族 T2HX-03:在锚阶段表达 PCA 空间按两输入阶段(E8.25→E8.75,程序从 manifest 现场取倒数两条目)的逐 PC 方差比 r_j 对锚阶段 PC 得分做乘性缩放 sqrt(1+α(r_j−1)),delta 重构保均值、坐标不动。机制确认生效(缩放因子 f∈[0.963,1.036],19/20 PC 被缩放),但 A 半上 variogram 随 |α| 在**扩张(α>0)与收缩(α<0)两个方向都单调恶化**(0.0586→0.0620/0.0639/0.0665/0.0696),mmd_u 不动或更差,neighborhood_mmd 同步恶化,α=0.20 还击穿 DE 无变化保护(de_score −0.625)。PLAN go/no-go(两项同时低于 identity−3σ)全网格未过,按边界规则提交 VEC_ALPHA=0,提交态与父节点10逐位一致(预期 50.00,identity 本节点实测 3 次均 50.00)。+## 方法(PLAN 家族 T2HX-04,机制完整实现,开关默认关) -## 方法(PLAN 家族 T2HX-03,机制完整实现,开关默认关)+- 基座:`anchor_entry` 锚阶段整份输出(n=24826 ≤ max_cells=25179,无抽样),坐标点集、表达值、基因序不变;置换只重排细胞↔坐标配对。+- 阶段A(`VEC_ALPHA`):`extrap_step(manifest)` 现场取倒数两输入(E8.25_late→E8.75),v = pb(late)−pb(early)(全细胞伪批量),X ← clip(X + α·v, 0),全局统一方向(非按型)。单输入阶段自动跳过。+- 阶段B(`VEC_SWAP`=B%):坐标 15-NN(cKDTree)取并集对称图;贪心 2-opt 最小化图上表达余弦距离总和(Dirichlet 能量)。候选用快速近似 gain(i,j) = (x_j−x_i)·(N_i−N_j)(N=邻居单位向量和,批量矩阵化),每对候选先做**精确能量差验证**(含共邻/相邻修正)再执行;best-first,预算 B%·n 或无改善对或超时停止。+- 开关:`VEC_ALPHA`(默认 0=关)、`VEC_SWAP`(默认 0=关)、`VEC_EPS/ROUNDS/KNN/TIMECAP`。只用 manifest 阶段顺序与视图内数据,无视图路径、阶段名、绝对时间分支。 -- 基座:`anchor_entry` 锚阶段(n=24826 ≤ max_cells=25179 → 整份输出,无抽样),坐标、细胞数、基因序不变。-- 机制(VEC_ALPHA≠0 时):-  1. `extrap_step(manifest)` 取 (prev, last);单输入视图 prev=None → 机制自动跳过(PLAN 步骤5退路)。-  2. sklearn `PCA(n_components=min(50,n−1,G), svd_solver="full")` 拟合锚阶段 X(确定性 SVD);两阶段投影到同一载荷 V。-  3. 逐 PC 方差比 r_j = var(Z_late)/(var(Z_early)+1e-8);仅对前 K 个 PC 且 r_j∈[0.5,2.0] 的做 f_j = sqrt(1+α(r_j−1))(截断防爆炸)。-  4. **delta 重构** X_new = X + (Z·(f−1)) @ V(而非全重构),保留 off-PCA 残差结构;再 clip(0)。得分列中心化 → 重构前逐基因均值严格不变。-- 开关:`VEC_ALPHA`(默认 0=关)、`VEC_K`(默认 20)、`VEC_NPC`(默认 50)、`VEC_RLO/RHI`(默认 0.5/2.0)。只用相对时间差与视图数据,无绝对时间、无阶段名、无视图路径分支。+## 网格结果(vec-score T2:heart:val_extrap/proxy_noscale,A 半,共用 2 次查分) -## 机制生效证据(PLAN mechanism_evidence 对应项,VEC_DEBUG=1 实测)+| 配置 | 榜分 | de_score | variogram | mmd_u | neighborhood_mmd | occupancy_dice |+|---|---:|---:|---:|---:|---:|---:|+| identity(父节点实测,=copy_last) | 50.00 | 0 | 0.058616 | 0.05856 | 0.11445 | 0.8066 |+| α=0.02, B=0(只开位移) | 49.10 | −0.125 | 0.064552 | 0.05871 | 0.11463 | 0.8148 |+| α=0.02, B=2%(PLAN 首档完整方案) | **48.87** | −0.125 | 0.064552 | 0.05871 | 0.11459 | 0.8131 | -- (a) α=0.10/k=20:19/20 个 PC 被缩放(r_1=2.204>2.0 被截断),f∈[0.9983,1.0360],偏离 1 但不极端;r[:5]=[2.20,1.60,1.44,1.34,1.30](E8.25→E8.75 型内离散度整体在涨)。-- (b) 均值:delta 重构在 clip 前逐基因均值差为 0(数学恒等);clip(0) 在 ~6.25M 个条目(约 50%,稀疏零值处)生效后 max |基因均值漂移| = 1.97e-2,std(dp)=0.0041 —— 未达 PLAN 预期的 <1e-5,如实报告;但 α≤0.10 时无变化保护仍触发(de_score/de_direction 原始值均 0,expression_change 保持 50.00)。-- (c) 相对同次 identity 的原始值变化见下表;(d) 四组分变化:expression_change α≤0.10 保持 50.00、α=0.20 掉到 45.58(保护击穿,clip 伪影 dp 被当信号打分,复刻 node6 失败模式);cell_state 48.40–49.29(全劣);local_spatial/shape_scale 49.72–49.98(nb 微升触发结构门,坐标本身未动)。+## 机制生效证据(PLAN mechanism_evidence 对应项) -## 网格结果(vec-score T2:heart:val_extrap/proxy_noscale,A 半;共用 7 次查分)+1. **置换统计**:预算 497 对,3 轮扫描只找到 **75** 对精确增益 >EPS 的改善交换即收敛(无改善交换停止);能量 E0=105046.8 → E1=104718.5,**只降 0.313%** —— 位移后 copy_last 配对仍是坐标-15NN Dirichlet 能量的强局部最优,PLAN 核心假设(微小位移打破局部最优、释放置换收益)**不成立**。+2. **邻域变化**:置换使 neighborhood_mmd 0.11463→0.11459(≈0,A 半 σ=0 下真实但无意义);且 occupancy_dice 0.8148→0.8131 —— 配对重排虽不动坐标点集,仍通过行序影响评分器占据抽样,反伤 shape_scale(与节点 7/9 官方分 shape 掉到 48 的观察一致)。+3. **四组分对比**(α=0.02+B=2% vs α=0.02+B=0 vs identity):expression_change 50→47.72(两档相同,全部来自位移的 clip 伪影);cell_state 50→48.75(variogram 0.0586→0.0646,与节点 11 同族恶化);local_spatial 50→49.96;shape_scale 50→49.05(置换再扣 occupancy)。+4. **DE 保护自检**(PLAN 风险3):α=0.02 时 std(dp)=0.00452、max|dp|=0.0236、clip(0) 命中 8.10M 条目(≈65%)——PLAN 假设"α≤0.03 时 clip 伪影极小、保护不击穿"**被证伪**:de_score=−0.125、de_direction=−0.0598,保护已击穿(复刻 node6/11 失败模式,且阈值比节点 11 的 α≥0.20 低一个量级——均匀位移 v 的 std(v)=0.41 比 PCA 缩放残差大得多)。 -| 配置 | 榜分 | mmd_u | variogram | neighborhood_mmd | de_score |-|---|---:|---:|---:|---:|---:|-| **identity(提交态,=copy_last)** | **50.00** | 0.05856 | 0.058616 | 0.11445 | 0 |-| α=+0.05, k=10 | 49.81 | 0.05856 | 0.062019 | 0.11454 | 0 |-| α=+0.10, k=20(PLAN 快筛点) | 49.69 | 0.05855 | 0.063896 | 0.11476 | 0 |-| α=+0.20, k=50 | 48.41 | 0.05859 | 0.066513 | 0.11526 | −0.625 |-| α=−0.10, k=20(收缩对照) | 49.27 | 0.05948 | 0.069631 | 0.11572 | 0 |+## 机制关对照(PLAN mechanism_off_control) -- **噪声标定(PLAN 步骤1,2 次查分)**:同一份 identity 输出连续查分 2 次,全部 8 项原始值逐位相同(mmd_u 0.05856 / variogram 0.058616)→ 评分器对同一文件确定性,σ=0;父节点观察到的 0.1126 vs 0.11445 差异来自 A/B 半之分,不是逐次噪声。因此 go/no-go 阈值退化为"严格低于 identity",网格无一点达标(variogram 双向单调恶化,扩张 3 档 + 收缩 1 档)。-- 双向恶化说明:以 copy_last 的方差谱为起点,任何沿 PCA 轴的离散度扰动(无论顺趋势扩张还是逆趋势收缩)都同时推高 variogram 与 neighborhood_mmd;identity 是这 8 项指标在该扰动族下的局部最优。-- 机制关对照(PLAN mechanism_off_control):VEC_ALPHA=0 默认路径跳过 PCA,输出与父节点10/copy_last 逐位一致(X 的 sha256 前缀 eb2ca3f42ec88ed4 在 seed 0/1、真实/伪装视图上全部相同),identity 本节点 3 次查分(calib×2 + 误跑负α被 `ALPHA>0` 守卫跳过的那次)均 50.00、四组全 50.00。+VEC_ALPHA=0 且 VEC_SWAP=0(提交默认):跳过两阶段,输出与 copy_last **逐位一致**(sha256 a26c0b78ed1aa4c4…,seed 0 两次运行相同;seed 1 的 .X 与 obsm 逐位相同,仅 uns.generator_seed 字段不同)。预期分数 = 50.00(父节点/节点 1/3/6/8/10/11 提交态实测)。"位移单独开"档 49.10 < identity,证明本方案无任何一档优于机制关。++## PLAN 止损执行++PLAN 步骤(5)/风险1:首档(α=0.02, B=2%)= 48.87 ≤ 50.00 → 立即止损,提交 off,不再追加 α×B 网格(位移在 α=0.02 已击穿 DE 保护,更小 α 只会同时缩小"破局"与收益;置换独立收益已被 75/497、0.313%、nb Δ≈0 三个数判死)。  ## 验证过 / 没验证过 -- 验证过:提交态 seed 0/1 逐位一致;伪装视图(时间统一 +1 天、manifest 键序打乱、换路径)上提交态与机制开启态(α=0.10/k=20)输出均与真实视图逐位一致 → 视图无关;`vec-check` 通过;单输入阶段自动回退(prev=None 分支);CPU 运行 ~10 s、峰值内存 <1 GB(limits 28 GB/30 min 内)。-- 没验证过:真实 final 视图(3 输入,倒数两阶段的方差比可能与代理括号不同,但机制开关默认关,提交态就是 copy_last,不受影响);B 半上的表现(提交态与父节点逐位相同,无迁移风险)。-- 生物学知识来源:无外部生物学先验写入程序;机制只用视图内两输入阶段的表达统计(方差比),属 PLAN 允许的"从 manifest 输入现场计算"。external/ 的 Qiu E8.75 与锚阶段同时相、无时间方向,未使用(与 PLAN motivation 一致)。+- 验证过:提交态 `vec-check --task T2:heart:val_extrap/proxy_noscale` = ok(注意:`--data` 形式的 vec-check 在本客户端被拒 "task not allowed",需带尺子后缀的 --task);seed 0/1 的 .X、坐标逐位一致;CPU 运行提交态 ~4 s、机制开启态 ~110 s,内存 <1.5 GB(limits 28 GB/30 min 内);单输入阶段回退(prev=None 跳过位移,置换仍可跑)。+- 没验证过:B 半与伪装视图(提交态与父节点逐位相同,无迁移风险;代码只读 manifest 数据与相对顺序,无绝对时间/路径分支);真实 final 视图(3 输入时 v 取倒数两输入,机制默认关,不影响提交态);B>2% 或更小 α 的完整网格(止损规则)。  ## 给树的结论 -- T2HX-03 家族在本榜双向证伪:cell_state 组的 variogram/mmd_u 对"沿锚阶段 PCA 轴的方差缩放"在任一方向都无收益,identity 是局部最优;不要再用 |α| 更小的同族配置试探(单调性已确立)。-- α≥0.2 时 clip(0) 伪影会击穿 DE 无变化保护并反噬 expression_change(−4.4 分),任何改表达值的方案都必须先报 std(dp) 与保护是否触发。-- 至此 copy_last 基座上表达值微扰(T2HX-01 均值位移、T2HX-03 方差缩放)与坐标-表达配对重排(T2HX-04/06)三个族全部证伪;本榜剩余未试杠杆只有引入视图外信息的型内状态细化(external/ 同时相数据无方向,价值存疑)或接受地板。+- T2HX-04 在本榜**两种形态均证伪**:纯 copy_last 基座上的有界置换(节点 7/9/10:49.60/49.60/50.00)与"微小全局位移破局+置换"(本节点:48.87)。坐标-15NN 配对能量在 copy_last 处已近局部最优(可改善交换 <0.4% 细胞、能量降 0.3%),任何位移预处理都不改变这一事实;置换还会经行序扰动 occupancy_dice。+- 均匀伪批量位移的 clip 伪影击穿 DE 保护的阈值远低于 PCA 缩放族(α≈0.02 vs 0.20):std(v)=0.41 的全局方向上 α=0.02 就产生 de_score<0。改表达值方案的安全边界应按 std(dp) 而非 α 标定。+- 与节点 11 结论合并:copy_last 基座上均值位移、方差缩放、配对重排及其组合已全部证伪,本榜视图内微扰族关闭;剩余杠杆只有引入视图外时间方向信息(跨阶段配对建模),或接受地板 50.00。diff --git a/solution/run.py b/solution/run.pyindex 4734044..6ede9b6 100644--- a/solution/run.py+++ b/solution/run.py@@ -1,29 +1,34 @@ #!/usr/bin/env python3-"""PCA variance-trend extrapolation (T2 heart extrap, family T2HX-03).--copy_last base (anchor = last input stage, stratified sample to the manifest-cell range; coordinates untouched).--Mechanism: fit a PCA on the anchor stage's expression matrix. Project both-input stages (early = second-to-last, late = anchor) onto the anchor's-components and compute per-PC variance ratios r_j = var_late / var_early.-Scale the anchor's PC scores multiplicatively, Z_new[:, j] =-Z[:, j] * sqrt(1 + alpha * (r_j - 1)), for the top K PCs whose r_j lies in-[R_LO, R_HI] (extreme ratios are truncated). Reconstruction is done as a-delta, X_new = X + (Z_new - Z) @ V, so the residual (off-PCA) structure is-kept and the per-gene mean is unchanged (score columns are centred). This-extrapolates the within-population dispersion trend between the two observed-stages without moving the pseudobulk mean.--VEC_ALPHA=0 (default) skips the mechanism entirely and reproduces copy_last-bit-for-bit (mechanism-off control). With a single input stage the variance-ratio cannot be estimated and the mechanism is skipped as well.+"""T2HX-04: micro global expression shift + expression-kNN-guided coord 2-opt swap.++copy_last base (anchor = last input stage, all cells within the manifest range;+coordinate point set and expression values kept, only the cell<->coordinate+pairing may be rearranged).++Mechanism (two stages):+  A) global shift: v = pb(late) - pb(early) from the last two input stages+     (pseudobulk over ALL cells of each stage); X_i <- clip(X_i + alpha*v, 0).+     alpha is tiny (<=0.03) so the DE no-change protection still applies.+  B) coord permutation: build the coordinate 15-NN graph (fixed; the point set+     never moves); greedily swap the coordinates of cell pairs (i,j) when the+     swap lowers the total expression cosine distance over the coord-15NN+     edges (Dirichlet energy). Candidates come from the fast approximation+         gain(i,j) ~ (x_j - x_i) . (N_i - N_j)+     with N_i = sum of unit expression vectors of i's coord neighbours; each+     candidate is re-checked with the exact energy delta before executing.+     Swaps run best-first until the budget (SWAP% of cells) is reached, no+     improving swap is found, or the time cap is hit.++VEC_ALPHA=0 and VEC_SWAP=0 skip both stages and reproduce copy_last+bit-for-bit (mechanism-off control). With a single input stage the shift is+skipped; the swap still runs on the anchor's own expression. """  from __future__ import annotations  import argparse import os+import time  import numpy as np @@ -37,62 +42,119 @@ from src.task2_spatial.view_io import (     write_t2, ) -# Mechanism switch. Local grid (A-half): variogram degrades monotonically with-# |alpha| in BOTH directions (expand alpha>0: 0.0586 -> 0.0620/0.0639/0.0665;-# shrink alpha<0: -> 0.0696), mmd_u flat or worse, nb worse; alpha=0.20 also-# breaks the DE no-change protection (de_score -0.625). Boundary rule applies:-# default 0 = off = bit-for-bit copy_last.-ALPHA = float(os.environ.get("VEC_ALPHA", "0.0"))  # 0 = mechanism off = copy_last-K_PC = int(os.environ.get("VEC_K", "20"))  # number of leading PCs to rescale-N_PC = int(os.environ.get("VEC_NPC", "50"))  # PCA components fitted-R_LO = float(os.environ.get("VEC_RLO", "0.5"))  # variance-ratio truncation-R_HI = float(os.environ.get("VEC_RHI", "2.0"))+# Mechanism switches. Local A-half grid: alpha=0.02 shift ALONE breaks the DE+# no-change protection via clip(0) artefacts (de_score -0.125,+# expression_change 47.72) -> 49.10; adding the 2% coord swap gives 48.87+# (nb 0.11463->0.11459 negligible, occupancy_dice 0.8148->0.8131 hurt by the+# row reordering). PLAN stop-loss (first config <= 50) applies: defaults 0 =+# mechanism off = bit-for-bit copy_last.+ALPHA = float(os.environ.get("VEC_ALPHA", "0.0"))  # 0 = shift off = copy_last X+SWAP = float(os.environ.get("VEC_SWAP", "0.0"))  # % of cells to swap; 0 = off+EPS = float(os.environ.get("VEC_EPS", "0.002"))  # min exact gain to accept a swap+ROUNDS = int(os.environ.get("VEC_ROUNDS", "3"))+KNN = int(os.environ.get("VEC_KNN", "15"))+TIME_CAP = float(os.environ.get("VEC_TIMECAP", "480"))+SEED_BATCH = 1024+TOP_CAND = 16 DEBUG = bool(os.environ.get("VEC_DEBUG"))  -def variance_extrapolate(-    X: np.ndarray, X_early: np.ndarray, alpha: float, k: int, seed: int-) -> np.ndarray:-    """Mean-preserving per-PC variance scaling of X along the early->late trend."""-    from sklearn.decomposition import PCA--    n, g = X.shape-    n_comp = int(min(N_PC, n - 1, g))-    if n_comp < 1 or X_early.shape[0] < 32 or alpha == 0.0:-        return X-    pca = PCA(n_components=n_comp, svd_solver="full", random_state=seed)-    pca.fit(X)-    V = pca.components_  # (n_comp, g)-    mu = pca.mean_-    Z = (X.astype(np.float64) - mu) @ V.T-    Ze = (X_early.astype(np.float64) - mu) @ V.T-    var_late = Z.var(axis=0, ddof=1)-    var_early = Ze.var(axis=0, ddof=1)-    r = var_late / (var_early + 1e-8)--    kk = int(min(k, n_comp))-    f = np.ones(n_comp, dtype=np.float64)-    mask = (r[:kk] >= R_LO) & (r[:kk] <= R_HI)-    f[:kk] = np.where(mask, np.sqrt(1.0 + alpha * (r[:kk] - 1.0)), 1.0)--    if DEBUG:-        nmask = int(mask.sum())-        print(-            f"PCs rescaled {nmask}/{kk} (ratio in [{R_LO},{R_HI}]); "-            f"f range [{f.min():.4f},{f.max():.4f}]; "-            f"r[:5]={np.round(r[:5], 3)} f[:5]={np.round(f[:5], 4)}"+def coord_swap(X: np.ndarray, coords: np.ndarray, budget: int, seed: int) -> tuple[np.ndarray, dict]:+    """Permute coords rows (cell<->coordinate pairing) to minimise expression+    cosine distance over the coord-15NN graph. Returns (permuted coords, stats)."""+    from scipy import sparse+    from scipy.spatial import cKDTree++    n = X.shape[0]+    rng = np.random.default_rng(seed + 12345)+    tree = cKDTree(coords)+    nbr = tree.query(coords, k=min(KNN, n - 1) + 1)[1][:, 1:]++    rows = np.repeat(np.arange(n), nbr.shape[1])+    A = sparse.coo_matrix((np.ones(rows.size), (rows, nbr.ravel())), shape=(n, n))+    U = (A + A.T).astype(bool).tocsr()+    deg = np.diff(U.indptr)+    maxdeg = int(deg.max())+    Uadj = np.full((n, maxdeg), n, dtype=np.int64)  # pad -> scratch zero row+    for q in range(n):+        Uadj[q, : deg[q]] = U.indices[U.indptr[q] : U.indptr[q + 1]]++    P = X.astype(np.float64)+    P /= np.maximum(np.linalg.norm(P, axis=1, keepdims=True), 1e-12)+    P = np.ascontiguousarray(np.vstack([P, np.zeros((1, P.shape[1]))]))  # scratch row n+    body = slice(0, n)++    def recompute() -> tuple[np.ndarray, np.ndarray, float]:+        N = np.ascontiguousarray(P[Uadj].sum(axis=1))+        d = np.einsum("ij,ij->i", P[body], N)+        E = 0.5 * (float(deg.sum()) - float(d.sum()))+        return N, d, E++    N, d, E0 = recompute()+    stats = {"E0": E0, "E1": E0, "swaps": 0, "rounds": 0, "gain_total": 0.0, "budget": budget}+    if budget <= 0:+        return coords[np.arange(n)], stats++    budget = int(min(budget, n // 2))+    perm = np.arange(n)  # output row c gets coords[perm[c]]+    swaps_done = 0+    t0 = time.time()++    def exact_gain(a: int, b: int) -> float:+        na = Uadj[a, : deg[a]]+        nb = Uadj[b, : deg[b]]+        na = na[na != b]+        nb = nb[nb != a]+        ua, ub = P[a], P[b]+        Pa, Pb = P[na], P[nb]+        return float(+            (Pa @ ub).sum() + (Pb @ ua).sum() - (Pa @ ua).sum() - (Pb @ ub).sum()         ) -    dZ = Z * (f - 1.0)[None, :]-    X_new = X + (dZ @ V).astype(np.float32)-    X_new = np.clip(X_new, 0.0, None)--    if DEBUG:-        dmean = np.abs(X_new.mean(axis=0) - X.mean(axis=0)).max()-        nclip = int((X + (dZ @ V).astype(np.float32) < 0).sum())-        dnorm = np.abs(X_new - X).mean()-        print(f"max |gene-mean shift| = {dmean:.3e}; clipped entries = {nclip}; mean |dX| = {dnorm:.4f}")-    return X_new.astype(np.float32)+    for rd in range(ROUNDS):+        stats["rounds"] = rd + 1+        if swaps_done >= budget or time.time() - t0 > TIME_CAP:+            break+        order = rng.permutation(n)+        moved = np.zeros(n, dtype=bool)+        for s in range(0, n, SEED_BATCH):+            if swaps_done >= budget or time.time() - t0 > TIME_CAP:+                break+            I = order[s : s + SEED_BATCH]+            I = I[~moved[I]]+            if I.size == 0:+                continue+            Pb_ = P[body]+            G = Pb_ @ N[I].T + N @ Pb_[I].T - d[:, None] - d[I][None, :]+            G[I, :] = -np.inf+            flat = G.ravel()+            k = min(TOP_CAND, flat.size - 1)+            top = np.argpartition(flat, -k)[-k:]+            top = top[np.argsort(flat[top])[::-1]]+            done = False+            for f in top:+                if flat[f] <= EPS:+                    break+                a, t = divmod(int(f), I.size)+                b = int(I[t])+                g = exact_gain(a, b)+                if g > EPS:+                    perm[[a, b]] = perm[[b, a]]+                    P[[a, b]] = P[[b, a]]+                    moved[a] = moved[b] = True+                    N, d, _ = recompute()+                    swaps_done += 1+                    stats["gain_total"] += g+                    if DEBUG and swaps_done % 50 == 0:+                        print(f"swap {swaps_done}: gain={g:.4f} t={time.time()-t0:.0f}s", flush=True)+                    done = True+                    break+            if not done and flat.max() <= EPS:+                pass  # no promising pair in this batch+    _, _, E1 = recompute()+    stats["E1"] = E1+    stats["swaps"] = swaps_done+    return coords[perm], stats   def main() -> None:@@ -109,21 +171,43 @@ def main() -> None:     rng = np.random.default_rng(args.seed)     if n <= stage.n:         rows = np.sort(take(stage.labels, n, rng))-    else:  # fewer cells than min_cells: resample with replacement+    else:         rows = np.sort(rng.choice(stage.n, size=n, replace=True))     X = stage.X[rows].toarray().astype(np.float32)     coords = stage.coords[rows] +    # ---- stage A: global micro shift ----     if ALPHA != 0.0:         prev_entry, _, _ = extrap_step(manifest)         if prev_entry is not None:             prev = read_stage(args.data, prev_entry, genes)-            X_early = prev.X.toarray().astype(np.float32)-            X = variance_extrapolate(X, X_early, ALPHA, K_PC, args.seed)+            pb_early = np.asarray(prev.X.mean(axis=0)).ravel().astype(np.float64)+            pb_late = np.asarray(stage.X.mean(axis=0)).ravel().astype(np.float64)+            v = pb_late - pb_early+            X0 = X.mean(axis=0).astype(np.float64)+            Xs = X.astype(np.float64) + ALPHA * v[None, :]+            X = np.clip(Xs, 0.0, None).astype(np.float32)             if DEBUG:-                print(f"VEC_ALPHA={ALPHA} VEC_K={K_PC} applied")+                dp = X.mean(axis=0).astype(np.float64) - X0+                print(+                    f"alpha={ALPHA} std(v)={v.std():.4f} std(dp)={dp.std():.5f} "+                    f"max|dp|={np.abs(dp).max():.4f} n_clip={int((Xs < 0).sum())}",+                    flush=True,+                )         elif DEBUG:-            print("single input stage: mechanism skipped, copy_last")+            print("single input stage: shift skipped", flush=True)++    # ---- stage B: coord permutation ----+    if SWAP > 0.0:+        budget = int(round(SWAP / 100.0 * X.shape[0]))+        coords, st = coord_swap(X, coords, budget, args.seed)+        if DEBUG:+            drop = st["E0"] - st["E1"]+            print(+                f"swaps={st['swaps']}/{st['budget']} rounds={st['rounds']} "+                f"E0={st['E0']:.1f} E1={st['E1']:.1f} drop={drop:.2f} ({100*drop/max(st['E0'],1e-9):.3f}%)",+                flush=True,+            )      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:改了什么、各组分数怎么变、假设是否成立、经验和下一步建议。

改了什么在 copy_last 基座上实现 T2HX-04 两阶段机制(A:两输入阶段伪批量差 v 的极小全局位移 X←clip(X+αv,0),α=0.02;B:坐标 15-NN 图上表达余弦距离的 best-first 贪心 2-opt 坐标置换,预算 B=2%,含精确能量差验证)。A 半查分两档均劣于 identity(49.10 / 48.87),按 PLAN 止损规则以机制关(VEC_ALPHA=VEC_SWAP=0)提交,输出与父节点 copy_last 逐位一致。
各组分数的变化cell_state:无变化:50.00→50.00,mmd_u 0.05832→0.05832、variogram 0.058058→0.058058,八项原始值全部逐位相同
expression_change:无变化:50.00→50.00,de_score/de_direction 原始值均为 0(=地板,DE 无变化保护生效),提交态与父节点同一份文件
local_spatial:无变化:50.00→50.00,neighborhood_mmd 0.11261→0.11261;机制开启态在 A 半仅使 nb 0.11463→0.11459(Δ≈0,非收益),occupancy_dice 0.8148→0.8131 反降
shape_scale:无变化:50.00→50.00,d2_shape 0.04911、occupancy_dice 0.8066、scale_log_ratio -0.4334 均与父节点相同
family_idT2HX-04
假设是否成立否
经验
  1. copy_last 基座上,坐标-15NN 表达配对已近局部最优:加 α=0.02 全局位移后再跑 2-opt,3 轮扫描只找到 75/497 对精确增益>EPS 的改善交换、Dirichlet 能量只降 0.313%、neighborhood_mmd 变化≈0,说明'微小表达位移可打破配对局部最优'的前提不成立,与节点 10 在纯 copy_last 上的结论一致。
  2. 均匀伪批量位移的 clip(0) 伪影击穿 DE 无变化保护的阈值远低于 PCA 缩放族:std(v)=0.41 的全局方向上 α=0.02 就得到 std(dp)=0.00452、de_score=−0.125、expression_change 50→47.72(节点 11 的方差缩放要到 α≥0.20 才击穿);改表达值的方案应按 std(dp) 而非 α 标定安全边界,且 clip 命中率(此处 65% 条目)是伪影规模的直接指标。
  3. 只重排细胞↔坐标配对(坐标点集不动)也会改变输出行序,进而影响 occupancy_dice 的抽样:本节点 0.8148→0.8131,shape_scale 50→49.05,与节点 7/9 官方分 shape 掉到 48 的观察同向;置换类方案必须把 occupancy/d2 的行序敏感性计入代价。
  4. 同一份输出文件评分确定性 σ=0(节点 11/13 各重复查分逐位相同),本节点提交态 nb=0.11261 与 A 半 identity 的 0.11445 之差来自 A/B 半(评测划分)而非逐次噪声;go/no-go 阈值因此退化为'严格优于同半 identity',且不能跨半比较原始值。
  5. 机制关默认 + 首档≤地板即止损的写法有效:2 次查分就判死一个族,避免把 α×B 网格的预算烧在期望收益<1 分噪声的方向上。
mechanism_active否
下一步建议
  1. 停止在 T2:heart:val_extrap 的 copy_last 基座上继续做视图内微扰(均值位移 T2HX-01、方差缩放 T2HX-03、配对重排 T2HX-04/06 及其组合均已双向证伪),预算转向心脏/全胚插值榜——那里本地尺子与官网分接近,收益可兑现。
  2. 若仍要在本榜找增量,只试'引入视图外时间方向信息'的方案:例如用 external/ 或视图内两输入阶段做跨阶段细胞配对(OT/最近邻)后仅对配对成功的高置信子集做型内状态细化,并先离线验证 std(dp) 与 DE 保护是否触发,再上 vec-score。
  3. 任何改表达值的后续节点,实现里固定打印 std(dp)、max|dp|、clip 命中条目数,并把 std(dp) < 1%×std(dt) 作为硬门槛(不满足则自动回退机制关),避免重复 node6/11/13 的 clip 伪影击穿模式。
  4. 任何改细胞行序或坐标配对的节点,除 neighborhood_mmd 外必须同时报 occupancy_dice 与 d2_shape 的变化(本节点 occupancy 因行序掉 0.0017),并优先保持输出行序与锚阶段一致以隔离变量。

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

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

分析员

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

工程师

角色工程师 alibaba-token-plan-cn/qwen3.8-max
调用次数1 次
轮数28
工具调用共 31 次:—
用时20 分
token 数输入 70,694 · 输出 12,531 · 思考 18,136
任务(第一行)按计划修改程序:微小表达位移破局+表达kNN坐标置换(复刻节点5成功条件)
最后的回答(摘录)
**完成。** 做了什么:按 PLAN 实现 T2HX-04(微小全局伪批量位移 α + 表达引导的坐标 2-opt 置换,精确能量差验证的 best-first 贪心)。

查分(2/20 次,A 半):
- α=0.02, B=0(只位移)→ **49.10**:clip(0) 伪影在 α=0.02 就击穿 DE 保护(de_score −0.125,PLAN 假设 <1% 被证伪),variogram 恶化。
- α=0.02, B=2%(PLAN 首档)→ **48.87**:3 轮扫描仅找到 75/497 对改善交换、能量只降 0.313%,nb Δ≈0,occupancy 反被行序扰动扣分——"位移破局"假设不成立。
- 按 PLAN 止损规则提交机制关(VEC_ALPHA=VEC_SWAP=0),输出与 copy_last 逐位一致(sha256 a26c0b78…),vec-check ok,预期 50.00。

下一步最值得试:本榜 copy_last 基座上的视图内微扰族(均值位移、方差缩放、配对重排及其组合)已全部证伪;继续投入期望收益 <1 分噪声,建议预算转向心脏/全胚插值榜,或引入视图外时间方向信息的跨阶段状态建模。
原始记录位置/home/spark-longxinyang/vec/runs/formal/20261003-172000-search-t2-heart-extrap-chain-12h/nodes/13/engineer.jsonl (文件不在)

调研员

角色调研员 alibaba-token-plan-cn/qwen3.8-max
调用次数1 次
轮数1
工具调用共 0 次:—
用时7 分
token 数输入 16,385 · 输出 12,147 · 思考 8,192
任务(第一行)为节点 n13(改进,父节点 n11)写改进计划 PLAN.json
最后的回答(摘录)
e": "微小表达位移破局+表达kNN坐标置换(复刻节点5成功条件)",
  "motivation": "节点5(52.74)是全树唯一超过地板的节点,方法为表达kNN引导坐标置换,且其parent(节点4,α=0.05 damped_shift)有微小表达位移。节点10在纯copy_last上'复刻并约束node5'得50.00(机制开启仍无收益),说明纯copy_last的邻域结构是坐标置换的局部最优——微小表达位移打破该局部最优可能是节点5成功的关键前提。节点4本身49.89(α=0.05略有害),但节点5在其基础上通过坐标置换拿到52.74(+2.85)。本方案用更小α(0.01–0.03)降低位移本身损害,再叠加坐标置换。",
  "approach": "步骤:(1) copy_last基座(锚阶段整份输出,坐标/基因序/细胞数不变)。(2) 阶段A表达位移:取manifest倒数两输入阶段(E8.25, E8.75),计算逐基因伪批量差 v=pb(late)−pb(early);对锚阶段每个细胞 X_i ← X_i + α·v(全局统一方向,非按型)。α初值0.02,搜索{0.01, 0.02, 0.03};位移后直接clip(0)(α≤0.03时clip伪影极小,先打印std(dp)/std(dt)确认<1%)。(3) 阶段B坐标置换:在位移后表达上建坐标15-NN图;贪心2-opt:遍历所有细胞对(i,j),若交换其坐标后'坐标15-NN内的表达余弦距离总和'下降,则执行交换;总交换预算B%(初值2%,搜索{1,2,4}%);达到预算或无改善交换时停止。(4) 单输入阶段退路:prev=None时跳过阶段A(α无效),阶段B仍可在锚阶段自身表达kNN上执行。(5) vec-score快筛:先查identity基线(1次)→α=0.02/B=0确认位移单独不破坏(1次)→α=0.02/B=2%完整方案(1次)→若>50则追加α×B网格(≤4次)→若首档≤50止损提交off。总查分≤8次。(6) 无视图路径/阶段名/绝对时间分支;只用manifest提供的阶段顺序与视图内数据。",
  "expected_groups": ["local_spatial", "shape_scale"],
  "risks": "1) α≤0.03的位移可能太小,无法打破copy_last的邻域局部最优,坐标置换仍无改善(与节点10相同结局)——Engineer在首档(α=0.02, B=2%)查分后若≤50.00立即止损;2) 坐标置换过度(B>3%)可能破坏已有邻域结构使neighborhood_mmd恶化并触发结构门——先试B=1%再递增;3) clip(0)在稀疏数据上引入微小均值漂移——实现时打印std(dp)/std(dt),若≥1%则回退为不做clip改用max(X,0)后重归一化每行总和;4) 节点5的52.74仅有单种子,可能是A半噪声高估——若首档>51,用同输出再查一次确认(σ=0已验证则无需)。",
  "family_id": "T2HX-04",
  "mechanism": "先用两阶段伪批量差做极微小全局表达位移打破copy_last邻域局部最优,再用表达kNN引导的贪心2-opt坐标置换重排细胞-坐标配对,使空间相邻细胞的表达更一致,改善neighborhood_mmd。",
  "vs_constant_shift": "常数位移是对每个细胞类型加相同表达偏移(T2HX-01),只动表达值不动配对;本方案的核心收益来自坐标-细胞配对的重排(哪个细胞占哪个空间位置),表达位移仅为打破局部最优的前置步骤且幅度极小(α≤0.03),且不对不同型做差异化处理。",
  "mechanism_off_control": "环境变量VEC_ALPHA=0且VEC_SWAP=0(默认)时,程序跳过位移和置换,输出与copy_last逐位一致(sha256校验);预期分数=50.00,四组全50.00。若VEC_ALPHA≠0但VEC_SWAP=0,只开位移不开置换,预期≤50(位移本身无害但也无益);这证明收益来自置换而非位移。",
  "mechanism_evidence": "1) 置换统计:实际执行的交换次数/预算比、被交换细胞的空间分布;2) 邻域变化:置换前后坐标15-NN表达余弦距离总和的下降幅度;3) 四组分对比:α=0.02+SWAP=0 vs α=0.02+SWAP=2% vs identity,分离位移与置换各自贡献;4) 若local_spatial>50且expression_change≥50(std(dp)/std(dt)<1%确认DE保护未击穿),则机制生效。"
}
```
原始记录位置/home/spark-longxinyang/vec/runs/formal/20261003-172000-search-t2-heart-extrap-chain-12h/nodes/13/researcher.jsonl (文件不在)