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

总览 · ← 返回运行 20261003-004922-search-t2-heart-interp-g24

节点 n19

实现PLAN T2HI-06:融合坐标云的PCA逐轴异速缩放(实测因子≈1、proxy上结构性退化、分数中性,默认关)与PCA手性canonicalization(det −1→+1、消除取向方差,默认开),关闭对照与节点18逐位一致。

运行?一次完整的自动搜索或 Agent 会话,有自己的锁定配置和证据包。20261003-004922-search-t2-heart-interp-g24
父节点n18
子节点n21
操作?种子:人写的起点;改进:在父节点上改;草稿:从头写;修复:修父节点的报错。改进
状态已打分
分数搜索目标分 61.79(-0.1) · proxy 61.79(-0.1) · 3 次复测均分 61.40
审查通过 检查1 越界读取:未发现问题——run.py 仅经 view_io 的 load_manifest/panel_genes/read_stage(args.data, entry) 读取 manifest[inputs] 给出的 bracket 阶段,无绝对路径、.. 、/mnt、评分器或 src/common/evaluation 导入,无联网。; 检查2 硬编码目标统计量:未发现问题——细胞数(interp_count/manifest min_cells,max_cells)、基因(panel_genes)、delta/type_means/common/PCA 轴/σ 均现场计算(r…
用时?从运行开始到结束(或到现在)的挂钟时间。12 分
程序版本7a54c1b282be5563d71083c9267f168020423e33 (programs.git)

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

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

实现PLAN T2HI-06:融合坐标云的PCA逐轴异速缩放(实测因子≈1、proxy上结构性退化、分数中性,默认关)与PCA手性canonicalization(det −1→+1、消除取向方差,默认开),关闭对照与节点18逐位一致。

方法(family T2HI-06,improve 自节点 18)

底座与节点 18 完全相同:双 bracket 组成插值 → Procrustes 对齐 → 统一缩放到 log 插值 RMS → 型内 NN 坐标融合(α=1.0)→ chg_l2 分位数门控表达混合(q=0.8, γ=2.8)。表达侧未做任何改动。

在最终坐标云(jitter + 统一 RMS 缩放之后、写出之前)新增两步,均在 run.py:

  1. 步骤2 PCA canonicalization(T2HI_CANON,默认 1,提交态开):减质心 → SVD 取 PCA 轴旋转 → 若 det<0 翻转最后一轴强制 det=+1 → 每轴按第三矩(偏度)符号定向。_canonicalize()。
  2. 步骤1 per-axis anisotropic scaling(T2HI_ANISO,默认 0,提交态关):对输出云 PCA,分别计算 lower-bracket 子云(前 n_a 个细胞)与 upper-bracket 子云在每轴上的 σ_lo[k]、σ_hi[k],目标 σ_target[k]=exp((1−t)·lnσ_lo[k]+t·lnσ_hi[k]),每轴乘 σ_target[k]/σ_current[k];σ<1e-6 的轴跳过。单 bracket 退化时因子恒为 1。_aniso_scale()。

两步只依赖数据与 t(时间差),不依赖视图路径/绝对时间,满足视图无关要求;t≤0 fallback(copy_last 路径)不施加任何旋转,保持"原样输出"语义。

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

  1. 三轴缩放因子(proxy, seed 0):factors=[0.9996, 0.9878, 0.9984],σ_lo=[243.6, 209.4, 151.3]、σ_hi=[237.0, 166.3, 163.9]、σ_cur=[241.0, 193.3, 156.5]、σ_target=[240.9, 191.0, 156.2]。因子确实逐轴不同(≠均匀),机制在代码层面生效;但幅度 ≤1.2%——(1−t)/t 混合云本身的逐轴 σ 已自动接近对数插值目标,该机制对 mix 家族结构性近退化,这是本节点的主要负结果。
  2. canonicalization det:det_before=−1.000 → 强制 +1,偏度定向 flips=[−1,+1,−1](净 det 仍 +1)。原坐标云确实处于反射手性,canon 实际改变了输出坐标(旋转/反射,非恒等)。
  3. 四组分逐项变化(A半,seed 0,vs 父节点 61.35):canon-only 61.346:expr_change 67.82(+0.00)、cell_state 66.13(+0.00)、shape_scale 53.62(+0.00)、local_spatial 57.81(+0.00);aniso+canon 61.344:shape_scale 53.61(−0.01)、local_spatial 57.82(+0.01),d2_shape 0.03545→0.03582、scale_log_ratio 0.4669→0.4626(有响应但在噪声内)。评分器对整体旋转/反射不变(canon 改变坐标却不改变任何 metric 到 3 位小数),PLAN 假设的"取向方差"在固定输入下不存在(管线本身确定)。
  4. 两种子 shape_scale 方差:canon 版 seed0 shape_scale=53.62、seed1=54.00,与父节点(61.35/61.55 及同组分值)逐位一致,方差无变化(本就为确定性零方差)。

机制关闭对照(PLAN mechanism_off_control)

T2HI_ANISO=0 T2HI_CANON=0:输出与节点 18 默认输出 np.array_equal 验证 X 与坐标逐位一致(未查分,因逐位相同分数必然相同 = A半 61.35 / 正式 61.87)。开启后(提交态):A半 seed0 61.346 / seed1 61.5518,vs 父 61.35 / 61.55——差别 <0.01,远小于噪声。

结论与处置(PLAN 风险 3 兑现)

aniso+canon 合计 shape_scale 提升 = −0.01~0.00 < 0.5,按 PLAN 步骤 3/风险 3 判机制在 proxy 上无效,提交仅 canonicalization 版本(保守消除手性歧义,代价为零)。aniso 代码保留、开关可复现全部测量。shape_scale 54.46(正式)对逐轴尺度微扰完全无响应,与节点 10–18 的表达侧、弥散、径向尺度实验一致:该组分的瓶颈不在输出云的二阶形状统计,而在 scale_log_ratio≈0.47(RMS 目标与真值的 log 比)与 occupancy 一侧;proxy 上任何由 bracket 内插得到的 RMS 都够不到真值(方法卡已注明该非单调性),在不触碰保留信息的前提下 proxy 无法验证 RMS 方向的改动。

验证过 / 未验证

  • 已验证:默认输出=canon_s0(逐位);同 seed 两次运行逐位一致(确定性);off 对照与节点 18 逐位一致;vec-check ok;A半 seed0 61.346、seed1 61.552;~2s、<1GB。
  • 未验证:正式分 B 半(预期与父节点 61.87 几乎相同,改动分数中性);真实括号(31 共有型、E8.25→E8.75 形状差异更大)上 aniso 因子是否仍 ≈1——若真实两 bracket 逐轴 σ 差异大,aniso 会有实质形变,但方向无任何评测可验证,故提交态关闭;canon 在无反射手性的真实云上是近恒等(仅偏度定向),无风险。

知识来源

未使用任何保留阶段/基因型信息、文献数值或外部数据(external/、prior/ 未读)。所有统计量(PCA 轴、逐轴 σ、det、偏度符号、分位数、NN 配对)均由当次视图输入现场计算。生物学知识仅沿用父节点:细胞类型标签用于型内 NN 配对(来自输入 obs)。

调研员的计划

名称PCA per-axis anisotropic scaling + handedness canonicalization for shape_scale
动机shape_scale 54.46 是四组最低且自节点10起从未响应任何改动(节点16/17/18 均 +0.00)。当前坐标管线对混合云做均匀 RMS 缩放(log_interp),无法捕捉各轴异速生长;且 k026 指出 shape metric 的 PCA 对齐不固定 det,handedness 翻转导致同预测分数波动>噪声。父节点 next_suggestions#2 明确建议坐标侧独立实验。
做法在节点18的 run.py 坐标管线(Procrustes → NN融合)之后、写出之前,新增两步:

步骤1 — per-axis anisotropic scaling:
a) 对融合后输出云做 PCA(SVD,取前3轴);
b) 分别计算 lower-bracket 子云和 upper-bracket 子云在每轴上的标准差 σ_lo[k], σ_hi[k];
c) 目标 σ_target[k] = exp((1-t)ln(σ_lo[k]) + tln(σ_hi[k]))(与现有 log_interp RMS 同公式,但逐轴);
d) 将输出云在每轴上乘 σ_target[k]/σ_current[k]。
关键参数:无自由参数(完全由数据决定);若某轴 σ<1e-6 则跳过该轴(退路=均匀缩放)。

步骤2 — PCA canonicalization(k026):
a) 减质心 → PCA 旋转 → 强制 det=+1(若 det<0 则最后一轴取反)→ 每轴按第三矩符号定向。
此步对每候选一致执行,仅消除取向方差。

单输入阶段退路:若只有一个输入(无 bracket),σ_lo=σ_hi,per-axis scaling 退化为恒等变换,canonicalization 仍执行。

验证流程:
1) 先只加 canonicalization(步骤2),vec-score 查 1 次,对比父节点看 shape_scale 是否稳定提升(预期 +0.3~1.0 来自方差消除);
2) 再加 per-axis scaling(步骤1),vec-score 查 1 次;
3) 若两步合计 shape_scale 提升 <0.5,尝试仅保留 canonicalization 提交;
4) 若提升 ≥0.5,用 seed 1 复核一次确认非噪声。
预算:≤6 次 vec-score。
风险1) per-axis scaling 可能使型内空间连续性变差(局部拉伸),导致 local_spatial 回吐——Engineer 应在步骤1后同时检查 local_spatial 是否降 >0.5,若降则回退到仅 canonicalization;2) PCA 轴在混合云上可能不稳定(两 bracket 形状差异大时主轴跳动)——若两次运行结果不同(seed 0 vs seed 1),说明轴不稳定,回退;3) 提升可能 <1 分噪声——用 2 个 seed 确认,若均 <0.5 则判无效,提交仅 canonicalization 版本(至少消除取向方差)。

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

对比:父节点版本 dcf313cf64。改动的文件:solution/METHOD.md +19 −27、solution/run.py +104 −0

diff --git a/solution/METHOD.md b/solution/METHOD.mdindex e16fd4d..86f332b 100644--- a/solution/METHOD.md+++ b/solution/METHOD.md@@ -1,44 +1,36 @@-chg_l2门控坐标位移已实现检验:α_low<1单调降分(机制证伪),保留α=1;转向加大高失配细胞表达过冲 γ=1.2→2.8、q=0.7→0.8,A半 60.76→61.35(seed1 61.55)。+实现PLAN T2HI-06:融合坐标云的PCA逐轴异速缩放(实测因子≈1、proxy上结构性退化、分数中性,默认关)与PCA手性canonicalization(det −1→+1、消除取向方差,默认开),关闭对照与节点18逐位一致。 -## 方法(family T2HI-04 → T2HI-01,improve 自节点 16)+## 方法(family T2HI-06,improve 自节点 18) -流程与节点 16 相同:双 bracket 组成插值 → Procrustes 对齐 → 缩放到插值 RMS → 型内 NN 坐标融合(α=1.0)→ chg_l2 分位数门控的逐细胞表达混合 `X_b <- X_b + γ*(X_a_nn − X_b)`。+底座与节点 18 完全相同:双 bracket 组成插值 → Procrustes 对齐 → 统一缩放到 log 插值 RMS → 型内 NN 坐标融合(α=1.0)→ chg_l2 分位数门控表达混合(q=0.8, γ=2.8)。表达侧未做任何改动。 -### PLAN 机制(坐标门控):已实现,检验后被证伪,提交态关闭+在最终坐标云(jitter + 统一 RMS 缩放之后、写出之前)新增两步,均在 `run.py`: -新增 `T2HI_ALPHA_LOW`(+`T2HI_GATE_Q_COORD`,默认与表达门控同 q):对 chg_l2 低于门控阈值的被融合 b 细胞,把坐标位移从 α=1.0(落到 a 侧 NN 位置)回撤为 `cb_pre + α_low*(ca_nn − cb_pre)`。机制确实生效:α_low=0.5 时低失配组 1591 细胞位移 65.9(vs 高失配组 682 细胞 254.3),α_low=0 时低失配组位移为 0。+1. **步骤2 PCA canonicalization(`T2HI_CANON`,默认 1,提交态开)**:减质心 → SVD 取 PCA 轴旋转 → 若 det<0 翻转最后一轴强制 det=+1 → 每轴按第三矩(偏度)符号定向。`_canonicalize()`。+2. **步骤1 per-axis anisotropic scaling(`T2HI_ANISO`,默认 0,提交态关)**:对输出云 PCA,分别计算 lower-bracket 子云(前 n_a 个细胞)与 upper-bracket 子云在每轴上的 σ_lo[k]、σ_hi[k],目标 σ_target[k]=exp((1−t)·lnσ_lo[k]+t·lnσ_hi[k]),每轴乘 σ_target[k]/σ_current[k];σ<1e-6 的轴跳过。单 bracket 退化时因子恒为 1。`_aniso_scale()`。 -**但方向错误(PLAN 风险 1 兑现)**:A 半分随 α_low 单调上升 60.11(0)→60.26(0.3)→60.36(0.5)→60.50(0.7)→60.76(1.0),local_spatial 同步单调 55.73→57.49,shape_scale 52.77→53.62,neighborhood_mmd 与 d2_shape 也全程单调。低失配细胞的 a 侧 NN 位移本身对局部空间与形状都有正贡献,"表达已匹配的细胞不该被搬移"的假设不成立。过冲方向 α_low=1.3 也降分(60.64)。**提交态默认 T2HI_ALPHA_LOW=1.0(无操作对照),坐标逻辑与节点 16 逐位一致。**+两步只依赖数据与 t(时间差),不依赖视图路径/绝对时间,满足视图无关要求;t≤0 fallback(copy_last 路径)不施加任何旋转,保持"原样输出"语义。 -### 实际提交的改进:高失配细胞的表达过冲 γ 与门控 q 重扫+## 机制生效证据(PLAN mechanism_evidence 四项) -坐标门控失败后,沿父节点 next_suggestions #2/#3 扫 γ×q(均 α_low=1.0):+1. **三轴缩放因子**(proxy, seed 0):factors=[0.9996, 0.9878, 0.9984],σ_lo=[243.6, 209.4, 151.3]、σ_hi=[237.0, 166.3, 163.9]、σ_cur=[241.0, 193.3, 156.5]、σ_target=[240.9, 191.0, 156.2]。因子确实逐轴不同(≠均匀),机制在代码层面生效;但幅度 ≤1.2%——**(1−t)/t 混合云本身的逐轴 σ 已自动接近对数插值目标,该机制对 mix 家族结构性近退化**,这是本节点的主要负结果。+2. **canonicalization det**:det_before=−1.000 → 强制 +1,偏度定向 flips=[−1,+1,−1](净 det 仍 +1)。原坐标云确实处于反射手性,canon 实际改变了输出坐标(旋转/反射,非恒等)。+3. **四组分逐项变化**(A半,seed 0,vs 父节点 61.35):canon-only 61.346:expr_change 67.82(+0.00)、cell_state 66.13(+0.00)、shape_scale 53.62(+0.00)、local_spatial 57.81(+0.00);aniso+canon 61.344:shape_scale 53.61(−0.01)、local_spatial 57.82(+0.01),d2_shape 0.03545→0.03582、scale_log_ratio 0.4669→0.4626(有响应但在噪声内)。**评分器对整体旋转/反射不变**(canon 改变坐标却不改变任何 metric 到 3 位小数),PLAN 假设的"取向方差"在固定输入下不存在(管线本身确定)。+4. **两种子 shape_scale 方差**:canon 版 seed0 shape_scale=53.62、seed1=54.00,与父节点(61.35/61.55 及同组分值)逐位一致,方差无变化(本就为确定性零方差)。 -| 配置(q, γ) | A半榜分 | expr_change | cell_state | local_spatial | shape_scale |-|---|---:|---:|---:|---:|---:|-| (0.7, 1.2) 节点16 | 60.76 | 66.05 | 65.87 | 57.49 | 53.62 |-| (0.7, 1.4 / 1.6) | 60.83 / 60.90 | 66.22 / 66.42 | 65.89 | 57.60 / 57.69 | 53.62 |-| (0.7, 1.8 / 2.0 / 2.4 / 3.0) | 60.97 / 61.02 / 61.16 / 61.17 | →67.27 | 65.6–65.9 | →58.14 | 53.62 |-| (0.6, 1.6) | 60.88 | 66.51 | 65.56 | 57.85 | 53.62 |-| (0.8, 1.6 / 2.0 / 2.4) | 60.93 / 61.14 / 61.27 | →67.56 | 66.17–66.20 | 57.6–57.7 | 53.62 |-| (0.85, 2.0 / 2.4) | 60.95 / 61.13 | 66.46 / 67.12 | 66.2 | 57.5 / 57.6 | 53.62 |-| **(0.8, 2.8)(提交)** | **61.35** | **67.82** | **66.13** | **57.81** | **53.62** |+## 机制关闭对照(PLAN mechanism_off_control) -- γ 与 q 存在补偿关系:q 越高(混合细胞越少)可承受的 γ 越大。q=0.8 保留 455/2273(20%)高失配细胞,γ=2.8 把它们大幅推向 a 侧 NN 表达之外(型内方差 604→3011),expr_change 66.05→67.82、cell_state 65.87→66.13、local_spatial 57.49→57.81 三组同升,shape_scale 不动(坐标未改)。-- γ=3.0/q=0.7 与 γ=2.4/q=0.7 平台在 61.16,γ=2.8/q=0.8 是网格内最高点;边界未完全探明(γ>2.8×q=0.8 与 q=0.9 未测,额度用尽)。-- **种子稳健性**:提交配置 seed 1 = 61.55(节点 16 seed 1 为 60.99,+0.56 与 seed 0 的 +0.59 一致),非单种子噪声。+`T2HI_ANISO=0 T2HI_CANON=0`:输出与节点 18 默认输出 **np.array_equal 验证 X 与坐标逐位一致**(未查分,因逐位相同分数必然相同 = A半 61.35 / 正式 61.87)。开启后(提交态):A半 seed0 61.346 / seed1 61.5518,vs 父 61.35 / 61.55——差别 <0.01,远小于噪声。 -## 提交态默认与开关+## 结论与处置(PLAN 风险 3 兑现) -- 默认:`T2HI_GATE_Q=0.8`、`T2HI_GAMMA=2.8`、`T2HI_ALPHA_LOW=1.0`(坐标门控关)、`T2HI_GATE_MODE=global`。-- 机制关闭对照:坐标门控的 off 态即 `T2HI_ALPHA_LOW=1.0`(默认),输出与不门控逐元素一致(已验证);`T2HI_GATE_Q=0.7 T2HI_GAMMA=1.2` 完整复现节点 16 输出(np.array_equal 验证 X+坐标)。-- 门控阈值来自当次运行 chg_l2 的现场分位数统计,γ 为全局标量但混合逐细胞异质(`X_b + γ*(X_a_nn−X_b)`,每细胞不同 NN),非常数位移。+aniso+canon 合计 shape_scale 提升 = −0.01~0.00 < 0.5,按 PLAN 步骤 3/风险 3 判机制在 proxy 上无效,提交仅 canonicalization 版本(保守消除手性歧义,代价为零)。aniso 代码保留、开关可复现全部测量。shape_scale 54.46(正式)对逐轴尺度微扰完全无响应,与节点 10–18 的表达侧、弥散、径向尺度实验一致:**该组分的瓶颈不在输出云的二阶形状统计**,而在 scale_log_ratio≈0.47(RMS 目标与真值的 log 比)与 occupancy 一侧;proxy 上任何由 bracket 内插得到的 RMS 都够不到真值(方法卡已注明该非单调性),在不触碰保留信息的前提下 proxy 无法验证 RMS 方向的改动。  ## 验证过 / 未验证 -- 已验证:默认输出=网格最优点 g2.8q0.8(逐元素);同 seed 两次运行一致;vec-check ok;~2s、<1GB;α_low∈{0,0.3,0.5,0.7,1.0,1.3} 全网格、γ∈{1.4,…,3.0}×q∈{0.6,0.7,0.8,0.85} 网格、seed1 复核。-- 未验证:正式分 B 半(A 半 +0.59 略高于噪声边缘,但 seed0/seed1 一致,且改动方向与父节点 lessons 的"多分组净增益>噪声"判据相符:expr_change +1.77、cell_state +0.26、local_spatial +0.32);真实括号 31 共有型上 γ=2.8 大幅过冲的最优性(proxy 仅 5 型、chg_l2 分布不同,q=0.8 在真实括号保留的细胞比例未知);γ=2.8 使型内方差扩到 3011(节点16 为 758),若真实评测的 mmd/variogram 对离群表达更敏感可能回吐。+- 已验证:默认输出=canon_s0(逐位);同 seed 两次运行逐位一致(确定性);off 对照与节点 18 逐位一致;vec-check ok;A半 seed0 61.346、seed1 61.552;~2s、<1GB。+- 未验证:正式分 B 半(预期与父节点 61.87 几乎相同,改动分数中性);真实括号(31 共有型、E8.25→E8.75 形状差异更大)上 aniso 因子是否仍 ≈1——若真实两 bracket 逐轴 σ 差异大,aniso 会有实质形变,但方向无任何评测可验证,故提交态关闭;canon 在无反射手性的真实云上是近恒等(仅偏度定向),无风险。  ## 知识来源 -未使用任何保留阶段/基因型信息或文献数值;所有统计量(chg_l2、分位数、NN 配对、型内方差)均由两 bracket 输入现场计算。细胞类型名仅用于型内 NN 配对(来自输入 obs 标签)。external/ 与 prior/ 未使用。+未使用任何保留阶段/基因型信息、文献数值或外部数据(external/、prior/ 未读)。所有统计量(PCA 轴、逐轴 σ、det、偏度符号、分位数、NN 配对)均由当次视图输入现场计算。生物学知识仅沿用父节点:细胞类型标签用于型内 NN 配对(来自输入 obs)。diff --git a/solution/run.py b/solution/run.pyindex f4963e5..0b3f10e 100644--- a/solution/run.py+++ b/solution/run.py@@ -40,6 +40,13 @@ cells keep the full alpha=1.0 move. T2HI_ALPHA_LOW=1.0 is the mechanism-off control (output identical to the ungated node-16 fusion). T2HI_GATE_Q_COORD (default: same as T2HI_GATE_Q) allows a separate quantile for the coordinate gate. Coordinate gating applies on the default blend_ref=all path only.+T2HI_CANON (default 1, ON) canonicalizes the final output cloud: centre ->+PCA rotate -> det forced to +1 -> per-axis third-moment sign orientation+(family T2HI-06). T2HI_ANISO (default 0, OFF; measured score-neutral on the+proxy) additionally rescales each PCA axis of the output cloud to the+log-interpolated per-axis sigma of the two bracket sub-clouds. Both are+applied after the uniform RMS scaling and only on the mix path; with both+off the output is identical to node 18. """  from __future__ import annotations@@ -172,6 +179,72 @@ def _blend_within_type(     return out_a, out_b, stats  +def _pca_axes(X: np.ndarray) -> tuple[np.ndarray, np.ndarray]:+    """Centroid and PCA axes (rows of Vt, ordered by singular value)."""+    mu = X.mean(axis=0)+    _, _, vt = np.linalg.svd(X - mu, full_matrices=False)+    return mu, vt+++def _aniso_scale(coords: np.ndarray, n_a: int, t: float) -> tuple[np.ndarray, dict]:+    """Per-axis anisotropic rescaling of the fused output cloud (family T2HI-06).++    In the PCA frame of the full cloud, each axis k is rescaled to+    sigma_target[k] = exp((1-t)*ln sigma_lo[k] + t*ln sigma_hi[k]), where+    sigma_lo / sigma_hi are per-axis stds of the lower- / upper-bracket+    sub-clouds. Axes with degenerate std (<1e-6) are left untouched (uniform+    scaling fallback). Single-bracket input -> n_a == n -> sigma_lo ==+    sigma_hi == sigma_cur -> identity factors.+    """+    mu, vt = _pca_axes(coords)+    Y = (coords - mu) @ vt.T+    lo, hi = Y[:n_a], Y[n_a:]+    sig_cur = Y.std(axis=0)+    if lo.shape[0] <= 1 or hi.shape[0] <= 1:+        # Degenerate bracket: sigma_lo := sigma_hi := sigma_cur -> identity.+        return coords.copy(), {+            "sigma_lo": sig_cur.copy(), "sigma_hi": sig_cur.copy(),+            "sigma_cur": sig_cur.copy(), "sigma_target": sig_cur.copy(),+            "factors": np.ones(Y.shape[1]), "degenerate": True,+        }+    sig_lo = lo.std(axis=0)+    sig_hi = hi.std(axis=0)+    factors = np.ones(Y.shape[1])+    sig_t = sig_cur.copy()+    for k in range(Y.shape[1]):+        if sig_lo[k] < 1e-6 or sig_hi[k] < 1e-6 or sig_cur[k] < 1e-6:+            continue+        sig_t[k] = float(np.exp((1.0 - t) * np.log(sig_lo[k]) + t * np.log(sig_hi[k])))+        factors[k] = sig_t[k] / sig_cur[k]+    out = (Y * factors) @ vt + mu+    info = {+        "sigma_lo": sig_lo.copy(), "sigma_hi": sig_hi.copy(),+        "sigma_cur": sig_cur.copy(), "sigma_target": sig_t.copy(),+        "factors": factors.copy(),+    }+    return out, info+++def _canonicalize(coords: np.ndarray) -> tuple[np.ndarray, dict]:+    """PCA canonicalization: centre -> PCA rotate -> force det=+1 (flip last+    axis if needed) -> orient each axis by its third-moment (skew) sign."""+    mu, vt = _pca_axes(coords)+    R = vt.T+    det0 = float(np.linalg.det(R))+    if det0 < 0:+        vt = vt.copy()+        vt[-1] *= -1.0+        R = vt.T+    Y = (coords - mu) @ vt.T+    flips = np.ones(Y.shape[1])+    for k in range(Y.shape[1]):+        if float((Y[:, k] ** 3).mean()) < 0:+            Y[:, k] *= -1.0+            flips[k] = -1.0+    det1 = float(np.linalg.det(R)) * float(np.prod(flips))+    return Y + mu, {"det_before": det0, "det_after": det1, "skew_flips": flips.copy()}++ def main() -> None:     parser = argparse.ArgumentParser()     parser.add_argument("--data", required=True)@@ -400,6 +473,24 @@ def main() -> None:     coords = _jitter(np.vstack([ca[ia], cb[ib]]), rng)     coords = scale_to_rms(coords, target_rms) +    # Family T2HI-06: PCA canonicalization of the fused output cloud ++    # optional per-axis anisotropic scaling. Canonicalization default ON+    # (removes orientation/handedness variance; score-neutral on the proxy).+    # Anisotropic scaling default OFF: on the proxy its factors are within+    # 1.2% of uniform (a (1-t)/t mixture cloud already has per-axis sigmas at+    # the log-interpolated target, so the mechanism is near-degenerate) and it+    # changed shape_scale by -0.01 (noise); switch T2HI_ANISO=1 re-enables it.+    # Mechanism-off control: T2HI_ANISO=0 T2HI_CANON=0 -> output identical to+    # node 18 (verified bit-for-bit).+    aniso_on = os.environ.get("T2HI_ANISO", "0") != "0"+    canon_on = os.environ.get("T2HI_CANON", "1") != "0"+    aniso_info = None+    canon_info = None+    if aniso_on:+        coords, aniso_info = _aniso_scale(coords, int(ia.size), t)+    if canon_on:+        coords, canon_info = _canonicalize(coords)+     frac_b = float(ib.size) / max(expr.shape[0], 1)     n_sa = len(delta_a) if use_expr else 0     n_sb = len(delta_b) if use_expr else 0@@ -434,6 +525,19 @@ def main() -> None:                   f"cells_low={ci['cells_low']} cells_high={ci['cells_high']} "                   f"disp_low={ci['disp_low']:.1f} disp_high={ci['disp_high']:.1f}", flush=True) +    if aniso_info is not None:+        f = aniso_info["factors"]+        print(f"[aniso] factors={np.array2string(f, precision=4)} "+              f"sigma_lo={np.array2string(aniso_info['sigma_lo'], precision=2)} "+              f"sigma_hi={np.array2string(aniso_info['sigma_hi'], precision=2)} "+              f"sigma_cur={np.array2string(aniso_info['sigma_cur'], precision=2)} "+              f"sigma_target={np.array2string(aniso_info['sigma_target'], precision=2)} "+              f"rms_after={rms_radius(coords):.2f}", flush=True)+    if canon_info is not None:+        print(f"[canon] det_before={canon_info['det_before']:+.3f} "+              f"det_after={canon_info['det_after']:+.3f} "+              f"skew_flips={canon_info['skew_flips']}", flush=True)+     write_t2(args.out, expr, coords.astype(np.float32), genes, seed=args.seed)  

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

用到的知识库条目

编号标题出处
k007Interval staging and held-out-window filtering of external datanotes/official/来件/virtualembryo.ai/rules.md
k003Fused Gromov-Wasserstein mapping for spatial snapshots10.1038/s41586-024-08453-2
k026Canonicalise predicted 3D coordinates before submissionnotes/pitfalls/04_scorer_invariance.md

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

改了什么在节点18坐标管线末端(均匀RMS缩放后、写出前)新增PCA手性canonicalization(T2HI_CANON,默认开:减质心→PCA旋转→强制det=+1→按第三矩符号定向)和逐轴异速缩放(T2HI_ANISO,实测因子≈1且分数中性,提交态默认关);表达侧未改动,off对照与节点18逐位一致。
各组分数的变化cell_state:噪声内(+0.00,66.87→66.87)
expression_change:噪声内(+0.00,67.90→67.90)
local_spatial:噪声内(+0.00,58.24→58.24)
shape_scale:变坏但幅度小(-0.31,54.46→54.15);canon在proxy上对全部metric零响应(评分器对整体旋转/反射不变),该-0.31更可能是正式评测噪声而非机制效果,但方向与PLAN预期的+0.3~1.0相反
family_idT2HI-06
假设是否成立否
经验
  1. 对(1-t)/t线性混合得到的坐标云做逐轴σ的对数插值缩放在结构上近退化:混合云各轴σ已自动≈插值目标(实测三轴因子[0.9996,0.9878,0.9984],偏离≤1.2%),该机制对mix家族无操作空间。
  2. 评分器对输出云的整体旋转/反射不变:canonicalization实测det=-1→+1真实改变了坐标,但canon-only与父节点A半逐位同分(61.346 vs 61.35),且管线确定性使'取向方差'在固定输入下不存在——手性/取向类修正对该评测无收益。
  3. shape_scale(正式54.4附近)已连续8个节点对表达侧、弥散、径向尺度、逐轴缩放等一切二阶形状统计改动无响应;瓶颈在scale_log_ratio≈0.47(RMS目标与真值的log比)与occupancy一侧,而非可由bracket内插调整的形状统计。
  4. 在提交前用off对照+逐位比较(np.array_equal)验证机制开关语义是低成本高价值的做法,本节点借此确认提交态仅canon生效、分数中性。
mechanism_active否
下一步建议
  1. 针对shape_scale:先用数据驱动的bracket统计(不碰保留真值)在proxy上扫全局RMS缩放系数,绘制shape子指标(scale_log_ratio、occupancy_dice)对RMS的敏感度曲线;若确认平坦,则判该组分为mix家族结构性天花板,停止投入。
  2. 针对shape_scale(若敏感度曲线非平坦):尝试occupancy/密度导向的坐标重排(如按a侧占用格投影b细胞),攻击occupancy_dice≈0.83而非二阶形状统计。
  3. 针对local_spatial(58.24,第二低组):将改进火力转向表达-空间耦合,如把NN融合的邻域半径/型内配对权重作为可扫参数,或按局部密度调制γ过冲,替代已探明的γ=2.8/q=0.8表达侧平台。

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

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

分析员

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

工程师

角色工程师 alibaba-token-plan-cn/qwen3.8-max
调用次数1 次
轮数18
工具调用共 21 次:bash 11、edit 6、read 3、write 1
用时9 分
token 数输入 53,331 · 输出 7,383 · 思考 8,612
任务(第一行)按计划修改程序:PCA per-axis anisotropic scaling + handedness canonicalization for shape_scale
最后的回答(摘录)
**做了什么**:按 PLAN(T2HI-06)在节点 18 坐标管线末端实现了 PCA 逐轴异速缩放(`T2HI_ANISO`)与手性 canonicalization(`T2HI_CANON`)。off 对照与节点 18 逐位一致;canon 实测 det −1→+1(真改变了坐标),aniso 三轴因子 [0.9996, 0.9878, 0.9984] 逐轴不同但 ≤1.2%——mix 混合云的逐轴 σ 已自动等于对数插值目标,机制对 mix 家族结构性近退化。

**查分**(3/20 次):canon-only A半 seed0 **61.346** / seed1 **61.552**,与父节点 61.35/61.55 逐位同分;aniso+canon 61.344。shape_scale 变化 −0.01~0.00 < 0.5,PLAN 风险 3 兑现,按 PLAN 步骤 3 提交仅 canon 版本(分数中性、零代价消除手性歧义)。评分器对整体旋转/反射不变,且管线确定,"取向方差"假设不成立。

**下一步最值得试**:shape_scale 对输出云二阶形状统计(径向尺度、弥散、逐轴缩放、表达侧一切改动)已 8 个节点无响应;其瓶颈在 scale_log_ratio≈0.47 与 occupancy_dice 0.83 一侧——即 RMS 目标与占用格结构本身。建议下个节点做 occupancy/密度导向的坐标重排(如按 a 侧占用格投影 b 细胞),或直接检验评分器 shape 子指标对全局 RMS 的敏感度曲线(用数据驱动的 bracket 统计,不碰保留真值),若确认无响应则该组分判为 mix 家族的结构性天花板,改进火力应集中到 local_spatial(58.2)。
原始记录位置/home/spark-longxinyang/vec/runs/formal/20261003-004922-search-t2-heart-interp-g24/nodes/19/engineer.jsonl 159 KB
/home/spark-longxinyang/vec/runs/formal/20261003-004922-search-t2-heart-interp-g24/nodes/19/engineer.stderr

调研员

角色调研员 alibaba-token-plan-cn/qwen3.8-max
调用次数1 次
轮数1
工具调用共 0 次:—
用时1 分
token 数输入 13,402 · 输出 1,234 · 思考 3,693
任务(第一行)为节点 n19(改进,父节点 n18)写改进计划 PLAN.json
最后的回答(摘录)
对混合云做均匀 RMS 缩放(log_interp),无法捕捉各轴异速生长;且 k026 指出 shape metric 的 PCA 对齐不固定 det,handedness 翻转导致同预测分数波动>噪声。父节点 next_suggestions#2 明确建议坐标侧独立实验。",
  "approach": "在节点18的 run.py 坐标管线(Procrustes → NN融合)之后、写出之前,新增两步:\n\n步骤1 — per-axis anisotropic scaling:\n  a) 对融合后输出云做 PCA(SVD,取前3轴);\n  b) 分别计算 lower-bracket 子云和 upper-bracket 子云在每轴上的标准差 σ_lo[k], σ_hi[k];\n  c) 目标 σ_target[k] = exp((1-t)*ln(σ_lo[k]) + t*ln(σ_hi[k]))(与现有 log_interp RMS 同公式,但逐轴);\n  d) 将输出云在每轴上乘 σ_target[k]/σ_current[k]。\n  关键参数:无自由参数(完全由数据决定);若某轴 σ<1e-6 则跳过该轴(退路=均匀缩放)。\n\n步骤2 — PCA canonicalization(k026):\n  a) 减质心 → PCA 旋转 → 强制 det=+1(若 det<0 则最后一轴取反)→ 每轴按第三矩符号定向。\n  此步对每候选一致执行,仅消除取向方差。\n\n单输入阶段退路:若只有一个输入(无 bracket),σ_lo=σ_hi,per-axis scaling 退化为恒等变换,canonicalization 仍执行。\n\n验证流程:\n  1) 先只加 canonicalization(步骤2),vec-score 查 1 次,对比父节点看 shape_scale 是否稳定提升(预期 +0.3~1.0 来自方差消除);\n  2) 再加 per-axis scaling(步骤1),vec-score 查 1 次;\n  3) 若两步合计 shape_scale 提升 <0.5,尝试仅保留 canonicalization 提交;\n  4) 若提升 ≥0.5,用 seed 1 复核一次确认非噪声。\n  预算:≤6 次 vec-score。",
  "expected_groups": ["shape_scale", "local_spatial"],
  "risks": "1) per-axis scaling 可能使型内空间连续性变差(局部拉伸),导致 local_spatial 回吐——Engineer 应在步骤1后同时检查 local_spatial 是否降 >0.5,若降则回退到仅 canonicalization;2) PCA 轴在混合云上可能不稳定(两 bracket 形状差异大时主轴跳动)——若两次运行结果不同(seed 0 vs seed 1),说明轴不稳定,回退;3) 提升可能 <1 分噪声——用 2 个 seed 确认,若均 <0.5 则判无效,提交仅 canonicalization 版本(至少消除取向方差)。",
  "family_id": "T2HI-06",
  "mechanism": "将均匀 RMS 缩放替换为逐轴异速缩放(捕捉各轴不同的生长速率),并通过固定 PCA 手性与轴方向消除评分器的取向敏感性。",
  "vs_constant_shift": "per-axis scaling 是乘性、轴依赖、位置依赖的变换:距质心越远的细胞在某轴上位移越大,且三轴缩放因子不同,改变云的形状(各向异性);常数位移对所有细胞加同一向量,不改变形状。",
  "mechanism_evidence": "Engineer 应记录:(1) 三轴缩放因子 σ_target/σ_current 是否显著不同(若三者相等则机制退化为均匀缩放,未生效);(2) canonicalization 前后 det 值(若原已 +1 且轴方向一致则无实际变化);(3) shape_scale 与 local_spatial 四组分的逐项变化;(4) 两个 seed 的 shape_scale 方差是否缩小。",
  "mechanism_off_control": "关闭机制:设环境变量 T2HI_ANISO=0 且 T2HI_CANON=0,此时跳过步骤1和步骤2,输出与节点18逐位一致(均匀 RMS 缩放、无定向修正)。预期差别:关闭后三轴缩放因子被强制为同一值(=均匀),且不做手性修正;若机制有效,关闭后 shape_scale 应降回 54.46 附近。"
}
```
原始记录位置/home/spark-longxinyang/vec/runs/formal/20261003-004922-search-t2-heart-interp-g24/nodes/19/researcher.jsonl 5 KB
/home/spark-longxinyang/vec/runs/formal/20261003-004922-search-t2-heart-interp-g24/nodes/19/researcher.stderr

审查员

角色审查员 alibaba-token-plan-cn/qwen3.8-max
调用次数1 次
轮数11
工具调用共 18 次:bash 9、read 6、grep 2、write 1
用时4 分
token 数输入 34,628 · 输出 3,145 · 思考 6,973
任务(第一行)审查节点 n19 的程序是否越界读取、写死目标、钻评分器漏洞
最后的回答(摘录)
REVIEW.json written
原始记录位置/home/spark-longxinyang/vec/runs/formal/20261003-004922-search-t2-heart-interp-g24/nodes/19/reviewer.jsonl 146 KB
/home/spark-longxinyang/vec/runs/formal/20261003-004922-search-t2-heart-interp-g24/nodes/19/reviewer.stderr