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

总览 · ← 返回运行 20261003-043412-search-t2-heart-interp-g24-D-s1

节点 n14

按 PLAN 在 T2HI-01 输出坐标端实现确定性 PCA 规范化(减质心→PCA 旋转→det=+1→三阶矩定向)并做 ON/OFF 对照;对照显示形状对齐已旋转不变、规范化仅微伤 occupancy,按 PLAN 判据关闭提交,产物与父节点12逐位一致。

运行?一次完整的自动搜索或 Agent 会话,有自己的锁定配置和证据包。20261003-043412-search-t2-heart-interp-g24-D-s1
父节点n12
子节点n20
操作?种子:人写的起点;改进:在父节点上改;草稿:从头写;修复:修父节点的报错。改进
状态已打分
分数搜索目标分 63.01(+0.0) · proxy 63.01(+0.0)
审查未审查
用时?从运行开始到结束(或到现在)的挂钟时间。10 分
程序版本88dd0156db787cefb0258a1bec27d12065bb0374 (programs.git)

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

来自 programs.git 88dd0156db:solution/METHOD.md

按 PLAN 在 T2HI-01 输出坐标端实现确定性 PCA 规范化(减质心→PCA 旋转→det=+1→三阶矩定向)并做 ON/OFF 对照;对照显示形状对齐已旋转不变、规范化仅微伤 occupancy,按 PLAN 判据关闭提交,产物与父节点12逐位一致。

方法族与实现

PLAN 指定家族 T2HI-01(对齐 → logit 组成插值 → 共有类型内 k-NN 簇抽样 + 逐细胞表达凸组合,坐标 hold),family 机制全部保持打开(T2HI_INTERP=1, T2HI_EXPR=1, T2HI_COORD=hold, K=25/C=10,父节点12 已验证的 matched-align 保持 OFF)。

本节点新增 PLAN 机制 canonicalise(canonicalize_coords,solution/run.py):在最终写文件之前对输出坐标做一次

  1. 减质心;
  2. 对称 eigh 求协方差特征分解,旋转到 PCA 主轴(特征值降序);
  3. 若旋转矩阵 det=-1,将最后一轴乘 -1 强制 det=+1;
  4. 逐轴按第三中心矩符号定向(正偏度指向 +轴)。

只在三个最终输出点各应用一次(interp / control-mix / 单阶段 fallback),不影响对齐、插值、抽样等任何中间步骤。开关 T2_CANONICAL,提交默认 0(关);设 1 可复现机制对照。

机制生效证据(实际改变了什么)

机制确实激活并改变输出(非空转),且为纯刚体变换:

  • 坐标全部改变:ON vs OFF spatial_3D 不相等(整体旋转+反射作用于每个细胞,位移随位置而异);规范化后质心 ≈ (0,0,0)(~1e-5),协方差非对角元 ≤1.3e-5(对角化),det=+1,三轴第三矩均为正(305k / 624k / 84k)——PLAN mechanism_evidence 的四条几何性质全部实测成立。
  • 表达完全不变:ON vs OFF 的 .X array_equal=True;RMS 不变(346.33);k=5 近邻索引集合 array_equal=True(距离结构逐位保留)。
  • 四组分变化:只有 shape_scale 动了(56.21 → 55.97);cell_state 65.73、expression_change 64.77、local_spatial 63.66 三组逐项不变——符合刚体变换预期。
  • 不是常数位移(每细胞位移不同、质心被减掉后旋转作用于全云),也不是组成重加权(细胞数、类型配额、表达值完全不变)。

对照结果(A 半,seed 0,官方评分器)

配置boardshape_scalelocal_spatialcell_stateexpr_change
canonical ON62.5355.9763.6665.7364.77
canonical OFF(提交,=父节点12)62.5956.2163.6665.7364.77

关闭对照:T2_CANONICAL=0(提交默认)与父节点12输出逐位一致(.X 与 spatial_3D 均 array_equal=True),seed 0 两次运行逐位相同。

结论:机制生效但无收益,按 PLAN 判据回退关闭。 细分指标给出了机理:ON/OFF 的 d2_shape(0.02542)与 scale_log_ratio(0.4669)完全相同——评分器的形状对齐本身已对旋转/手性不变,k026 假设的"旋转方差源"在 shape 分量上不存在;规范化唯一改变的是 occupancy_dice(0.8247 → 0.8207,占据栅格依赖绝对朝向,PCA 规范帧不如 Procrustes 对齐到 a 阶段的原始帧),使 shape_scale 净降 0.24(噪声内但方向为负)。PLAN 成功判据「shape_scale 提升 > 1」未满足 → 提交 OFF。

已验证 / 未验证

已验证:(1) proxy 全流程 ~2s 纯 CPU,vec-check ok;(2) 提交默认与父节点12逐位一致、对 seed 确定(np.random.default_rng(seed));(3) ON/OFF 对照如上,机制的四条几何性质逐条实测;(4) 视图无关:canonicalize_coords 只用输出坐标本身(数据驱动、无绝对时间、无路径/board/manifest 字段依赖),且提交默认 OFF 路径 = 父节点12(已证视图无关)。

未验证 / 风险:(1) occupancy_dice 对朝向的敏感性提示"换一个非 PCA 的规范朝向"可能有 ≤0.1 量级的波动,但父帧(Procrustes 到 a 阶段)已是实测更优朝向,无证据存在更好选择,未做搜索(避免过拟合 A 半噪声);(2) 未在伪装视图实跑,仅代码层面论证;(3) shape_scale 的真正瓶颈仍是 target_rms(log-线性 346 vs proxy 真值 217,scale_log_ratio≈0.467),任何刚体变换都无法触及。

生物学知识来源

未引入外部文献/数据库/检索知识,未用保留阶段(E8.5/E10.5/E12.5、禁窗 (8.25,8.75) 与 9.5<E≤13.5)或保留基因型的任何信息;输入为视图给定的 E8.25_late 与 E9.5(均在允许范围)。PCA、特征分解、第三矩定向均为通用统计/几何方法。未读 external/ 与 prior/。

下一步

  1. shape_scale 已被证明对姿态类改法完全不敏感(matched-align、PCA 规范化双双证伪,d2_shape 恒为 0.02542)——不要再做任何对齐/朝向类尝试;唯一剩余杠杆是 target_rms 估计(如 RMS~log 细胞数 / 阶段间隔的视图内回归),但需警惕 proxy 非单调 dip(354→217→335)导致的过拟合。
  2. occupancy_dice 是唯一随朝向变的形状子指标且现帧更优;若未来改动细胞空间分布(如簇参数),需连同 occupancy 一起复测。
  3. cell_state/expr/local 前沿仍被父配置占满,突破需换机制(容量约束双向互匹配的表达插值等,见父 ANALYSIS)。

调研员的计划

名称PCA 规范化输出坐标系 + 保持 T2HI-01 插值框架
动机父节点12及整个 node-10 谱系(node10→12)的 shape_scale 停滞在 56.09,是四组中最低分。ANALYSIS 指出 shape_scale 的主惩罚来源是 target_rms 估计偏差(log-线性给 346,真值≈217,scale_log_ratio≈0.467),且对齐类改法已饱和(matched-align 在 node12 被证伪)。但文献库 k026 指出一个尚未尝试的结构性问题:形状指标对点云做 PCA 对齐但不固定行列式,因此同一次预测的旋转/手性翻转可能改变形状分。当前 node10 系从未做过坐标规范化(canonicalisation),这个方差源仍然存在。通过规范化自身输出的坐标系(减质心→旋转到 PCA 轴→强制 det=+1→三阶矩定向),可以消除评分器引入的额外形状方差,而不改变预测内容的内在结构。预期对 shape_scale 有正向影响(减少随机旋转带来的分数损失)。
做法步骤:
1. 在 solution/run.py 的预测坐标输出端(写文件之前)新增一个坐标规范化函数:(a) 减去质心;(b) 对预测坐标做 PCA,旋转到主成分轴;(c) 计算旋转矩阵行列式,若为 -1 则将最后一个轴乘以 -1 使 det=+1;(d) 用第三阶矩(第三中心矩)的符号翻转每个轴,使方向唯一确定。
2. 该函数只在最终输出坐标上应用一次,不影响对齐、插值、抽样等中间步骤。
3. 对照开关 T2_CANONICAL=0(默认1),关闭时行为与当前父节点完全一致(跳过规范化步骤)。
4. 先小样本验证:跑一次 proxy,确认 vec-check 通过、输出文件非空、规范化前后坐标确实不同(旋转变化)但基因表达不变。
5. 用 vec-score 查分比较 shape_scale 是否提升 > 1 分。若提升则提交;若未提升或下降,检查是否规范化引入了问题(例如 PCA 轴与形状指标期望不一致),再回退关闭。
6. 不改动任何插值逻辑(INTERP_ENABLED, EXPR_INTERP, COORD_MODE, KNN_K, N_CLUSTERS 等全部保持父节点默认值),只加规范化后处理。
单输入阶段退路:单阶段时坐标仍来自同一阶段,规范化逻辑不变,无额外依赖。
vec-score 快速筛选:只需一次查询即可判断(规范化是确定性变换,无随机性),若 shape_scale 提升 > 1 即有效。
风险风险1:规范化可能恰好把形状指标期望的手性方向反过来了(例如评分器内部 PCA 的 det 习惯与规范化不一致),导致 shape_scale 反而下降。Engineer 应在第一次查分后立刻比较 shape_scale 前后差异,若下降 > 1 分则关闭规范化并提交父节点。
风险2:PCA 轴在三阶矩定向时若数据分布对称导致符号不确定,可能产生微小抖动,但这在规范化的设计内,影响极小。
风险3:只影响 shape_scale,其他三组应不变;若出现其他组变化,说明规范化影响了坐标结构(不应发生,因为只是刚体变换)。

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

对比:父节点版本 79854afc0c。改动的文件:solution/METHOD.md +25 −42、solution/run.py +43 −1

diff --git a/solution/METHOD.md b/solution/METHOD.mdindex 142c49c..15ccc50 100644--- a/solution/METHOD.md+++ b/solution/METHOD.md@@ -1,66 +1,49 @@-在父节点10实现跨类型表达相关匹配对齐(matched-align)替代exact-name作Procrustes地标;机制激活(22匹配对)但shape_scale未提升(55.2–56.2 vs 56.21),按PLAN回退关闭,提交=父节点行为。+按 PLAN 在 T2HI-01 输出坐标端实现确定性 PCA 规范化(减质心→PCA 旋转→det=+1→三阶矩定向)并做 ON/OFF 对照;对照显示形状对齐已旋转不变、规范化仅微伤 occupancy,按 PLAN 判据关闭提交,产物与父节点12逐位一致。  ## 方法族与实现 -PLAN 指定家族 **T2HI-01**(插值:对齐 → logit 组成插值 → 共有类型内 k-NN 簇抽样 + 逐细胞表达凸组合,坐标 hold)。本节点按 PLAN 新增 **matched_align** 子机制:把 Procrustes 对齐地标从 exact-name 共有类型换成**跨类型表达相关贪心匹配对**。核心家族机制(`INTERP_ENABLED=1`, `EXPR_INTERP=1`, `COORD_MODE=hold`, 簇抽样 K=25/C=10)全部保持打开。+PLAN 指定家族 **T2HI-01**(对齐 → logit 组成插值 → 共有类型内 k-NN 簇抽样 + 逐细胞表达凸组合,坐标 hold),family 机制全部保持打开(`T2HI_INTERP=1`, `T2HI_EXPR=1`, `T2HI_COORD=hold`, K=25/C=10,父节点12 已验证的 matched-align 保持 OFF)。 -matched_align 实现(`solution/run.py`):-1. 各侧按 celltype 算 pseudobulk 平均表达(每侧 ≥ `MATCH_MIN_CELLS` 细胞的类型)。-2. 计算 a-型 × b-型 Pearson 相关矩阵,按相关从高到低**贪心**选匹配对(每型至多用一次,r ≥ `MATCH_R`),权重 = min(两侧该型细胞数)。-3. 用匹配对质心做 Procrustes:xy Kabsch(允许反射),z 不旋转、符号由匹配质心 z 相关定。-4. 匹配对 < 3 → 回退 exact-name `align_pair`(其内部再回退 PCA)。-5. 开关 `T2_MATCHED_ALIGN=1/0`;另有 `T2_MATCH_R`、`T2_MATCH_MIN_CELLS`、`T2_MATCH_WEIGHT`(count/corr/corr2)、`T2_MATCH_ZFLIP` 供搜索。+本节点新增 PLAN 机制 **canonicalise**(`canonicalize_coords`,`solution/run.py`):在最终写文件之前对输出坐标做一次+1. 减质心;+2. 对称 `eigh` 求协方差特征分解,旋转到 PCA 主轴(特征值降序);+3. 若旋转矩阵 det=-1,将最后一轴乘 -1 强制 det=+1;+4. 逐轴按第三中心矩符号定向(正偏度指向 +轴)。++只在三个最终输出点各应用一次(interp / control-mix / 单阶段 fallback),不影响对齐、插值、抽样等任何中间步骤。开关 `T2_CANONICAL`,**提交默认 0(关)**;设 1 可复现机制对照。  ## 机制生效证据(实际改变了什么) -机制**确实激活并改变输出**(非空转)。proxy 上 r≥0.3 时贪心匹配到 **22 对**(远超回退阈值 3),含大量生物合理的跨类型匹配:Endo↔Great Artery Endoth(0.863)、V-CM↔V-CM(0.851)、JCF↔Peri(0.844)、Intra-Endoth-2↔BEC(0.812)、Lateral FG↔Foregut(0.812)、IFT-CM↔A-CM(0.807)、d-CSE↔SE(0.77)、pPHM↔aPHM(0.751) 等。相比 exact-name 仅 5 个共有类型(NCC/Peri/V-CM/aPHM/pPHM)。匹配地标改变了作用于**全部细胞坐标**的整体刚体+反射变换:det、xy 旋转、以及 z 符号判定(matched 给出 z_flipped=True,exact-name 为 False)都随之改变,因此每个细胞的落点随位置而异——不是常数位移,也不是组成重加权。+机制确实激活并改变输出(非空转),且为纯刚体变换:++- **坐标全部改变**:ON vs OFF `spatial_3D` 不相等(整体旋转+反射作用于每个细胞,位移随位置而异);规范化后质心 ≈ (0,0,0)(~1e-5),协方差非对角元 ≤1.3e-5(对角化),det=+1,三轴第三矩均为正(305k / 624k / 84k)——PLAN mechanism_evidence 的四条几何性质全部实测成立。+- **表达完全不变**:ON vs OFF 的 `.X` `array_equal=True`;RMS 不变(346.33);k=5 近邻索引集合 `array_equal=True`(距离结构逐位保留)。+- **四组分变化**:只有 shape_scale 动了(56.21 → 55.97);cell_state 65.73、expression_change 64.77、local_spatial 63.66 三组逐项不变——符合刚体变换预期。+- 不是常数位移(每细胞位移不同、质心被减掉后旋转作用于全云),也不是组成重加权(细胞数、类型配额、表达值完全不变)。  ## 对照结果(A 半,seed 0,官方评分器)  | 配置 | board | shape_scale | local_spatial | cell_state | expr_change | |---|---:|---:|---:|---:|---:|-| **提交:matched OFF(=父节点10)** | **62.59** | **56.21** | 63.66 | 65.73 | 64.77 |-| matched ON r0.3 count(z-flip) | 62.39 | 55.23 | 63.81 | 65.73 | 64.77 |-| matched ON r0.3 count(no z-flip) | 62.36 | 55.45 | 63.49 | 65.73 | 64.77 |-| matched ON r0.7(11 对) | 62.51 | 55.67 | 63.89 | 65.73 | 64.77 |-| matched ON weight=corr | 62.39 | 55.28 | 63.80 | 65.73 | 64.77 |-| matched ON weight=corr2(最佳) | 62.56 | 56.19 | 63.57 | 65.73 | 64.77 |--**关闭对照**:`T2_MATCHED_ALIGN=0` 与父节点10输出**逐位一致**(X 与 spatial_3D 均 `array_equal=True`),board 62.59、shape_scale 56.21,符合 PLAN 的 mechanism_off_control 预期。--**结论:机制生效但未带来收益。** 所有 matched-ON 配置的 shape_scale(55.2–56.2)均**不高于**父节点 exact-name 的 56.21;board 全部 ≤ 62.59。最佳的 corr2 加权(用 r² 压低可疑低相关对)仅把 shape_scale 拉回 56.19 ≈ 父节点,board 62.56 仍在噪声内略低。PLAN 的成功判据是「shape_scale 提升 > 1 且总分不降」——**未满足**,故按 PLAN 明确指示「否则回退 0」,提交 `T2_MATCHED_ALIGN=0`。--## 为什么不奏效(与节点8的差异)--节点8在 node7(mix 组成、shape_scale 52.78)上把地标换成 matched-align 得到 +3.15(→55.93)。但本父节点10(logit 组成 + coord=hold)的 exact-name 对齐**已经达到 shape_scale 56.09/56.21**,即 matched-align 在节点8 上换来的水平,node10 用 5 个空间可靠的同名类型就已达到。matched-align 再叠加只会在饱和点上波动:表达相关匹配把**空间上并不对应**的类型(如 Unknown↔OFT-CM、Allantois↔Branch Arch、Peri↔ST)也拉来当地标,Kabsch 为对齐这些表达相似但位置不符的质心而扭动 xy 旋转,反而不如同名地标稳。这正是 PLAN 风险 #1(与节点8/11 重叠、增益已被父节点吸收)的实现。--## 附加搜索:簇抽样参数(均 matched OFF)--顺带扫了 local_spatial 的最大杠杆——簇抽样 KNN_K × N_CLUSTERS(父=25×10):+| canonical ON | 62.53 | 55.97 | 63.66 | 65.73 | 64.77 |+| **canonical OFF(提交,=父节点12)** | **62.59** | **56.21** | 63.66 | 65.73 | 64.77 | -| K×C | board | shape_scale | local_spatial |-|---|---:|---:|---:|-| 25×10(父) | 62.59 | 56.21 | 63.66 |-| 50×10 | 62.58 | 55.01 | 64.04 |-| 25×20 | 62.57 | 55.20 | 63.90 |-| 25×5 | 61.63 | 51.50 | 65.10 |-| 40×8 | 61.95 | 51.85 | 64.93 |-| 15×10 | 61.31 | 50.79 | 64.39 |+**关闭对照**:`T2_CANONICAL=0`(提交默认)与父节点12输出**逐位一致**(`.X` 与 `spatial_3D` 均 `array_equal=True`),seed 0 两次运行逐位相同。 -shape_scale 对 K 极敏感,K=25/C=10 是尖峰最优;增大 K 或改 C 都以 shape 换 local,总分不升反降。父节点已坐在该前沿最优处,无免费改进。+**结论:机制生效但无收益,按 PLAN 判据回退关闭。** 细分指标给出了机理:ON/OFF 的 `d2_shape`(0.02542)与 `scale_log_ratio`(0.4669)**完全相同**——评分器的形状对齐本身已对旋转/手性不变,k026 假设的"旋转方差源"在 shape 分量上不存在;规范化唯一改变的是 `occupancy_dice`(0.8247 → 0.8207,占据栅格依赖绝对朝向,PCA 规范帧不如 Procrustes 对齐到 a 阶段的原始帧),使 shape_scale 净降 0.24(噪声内但方向为负)。PLAN 成功判据「shape_scale 提升 > 1」未满足 → 提交 OFF。  ## 已验证 / 未验证 -**已验证**:(1) proxy 全流程跑通(~2s,纯 CPU,峰值内存远低于 limits),`vec-check` ok;(2) 提交默认(无环境变量)与父节点10**逐位一致**,seed 0 两次逐位相同,`np.random.default_rng(seed)`,无全局随机;(3) matched ON/OFF 对照如上,机制激活时确实改变 22 对地标、xy 旋转与 z 符号(改变全部细胞坐标),OFF 时回退父节点;(4) 视图无关:matched_align/matched_landmarks 只用 coords、labels、X,不读 board/mode/path、不用绝对时间;t 由 `interp_bracket` 用时间**差**算,统一平移不变;默认 OFF 路径 = 父节点(已证视图无关)。+**已验证**:(1) proxy 全流程 ~2s 纯 CPU,`vec-check` ok;(2) 提交默认与父节点12逐位一致、对 seed 确定(`np.random.default_rng(seed)`);(3) ON/OFF 对照如上,机制的四条几何性质逐条实测;(4) 视图无关:`canonicalize_coords` 只用输出坐标本身(数据驱动、无绝对时间、无路径/board/manifest 字段依赖),且提交默认 OFF 路径 = 父节点12(已证视图无关)。 -**未验证 / 风险**:(1) matched-align 在 **final(31 共有类型)** 上是否更有价值未测——proxy 仅 5 个同名类型,matched 的 22 对里很多是跨类型,若 final 同名类型已足够多,matched 的边际收益可能仍为负;本节点据 proxy 判其不奏效并关闭。(2) shape_scale 受目标 RMS 制约:两端 log-线性给 346,proxy 真值 E8.75≈217(心脏尺度非单调 354→217→335),scale_log_ratio≈0.467 是 shape 的主惩罚,**无法从括号两端推出更小的目标**,matched-align 不改 RMS 故对此无能为力——这是方法卡已知弱点,未硬调 scale_damp 到 proxy 真值(会破坏视图无关)。(3) 未在 final/伪装视图实跑,仅代码层面论证视图无关。+**未验证 / 风险**:(1) occupancy_dice 对朝向的敏感性提示"换一个非 PCA 的规范朝向"可能有 ≤0.1 量级的波动,但父帧(Procrustes 到 a 阶段)已是实测更优朝向,无证据存在更好选择,未做搜索(避免过拟合 A 半噪声);(2) 未在伪装视图实跑,仅代码层面论证;(3) shape_scale 的真正瓶颈仍是 target_rms(log-线性 346 vs proxy 真值 217,`scale_log_ratio`≈0.467),任何刚体变换都无法触及。  ## 生物学知识来源 -未引入外部文献/数据库/检索知识,也未用保留阶段或保留基因型的任何信息。细胞类型名、表达、坐标全部来自视图给定的官方输入阶段(proxy: E8.25_late、E9.5,均在允许范围;目标 E8.75 未使用)。跨类型表达相关匹配、Pearson 相关、Kabsch/Procrustes、贪心匹配均为通用统计/几何方法,不含针对禁窗阶段的先验。未读 `external/` 与 `prior/`。+未引入外部文献/数据库/检索知识,未用保留阶段(E8.5/E10.5/E12.5、禁窗 (8.25,8.75) 与 9.5<E≤13.5)或保留基因型的任何信息;输入为视图给定的 E8.25_late 与 E9.5(均在允许范围)。PCA、特征分解、第三矩定向均为通用统计/几何方法。未读 `external/` 与 `prior/`。  ## 下一步 -1. matched-align 在本 base 饱和,**不要再在 node10 系上重试同款对齐**(本节点已证伪);若要验证它在多类型场景的价值,应在 final-like(多共有类型)视图上单独测,而非 proxy。-2. shape_scale 被目标 RMS 卡死:真正需要的是**不使用真值**的更好 RMS 估计(如 RMS 随 log 细胞数/阶段间隔的回归、或对称验证的 SCALE_DAMP),但要警惕过拟合 proxy 的非单调 dip。-3. local_spatial/expr 的前沿已被父节点占满;若要突破,需换机制(如容量约束/双向互匹配的表达插值、或亚型细分以在多类型下激活 expr interp),而非调簇参数。+1. shape_scale 已被证明对**姿态类**改法完全不敏感(matched-align、PCA 规范化双双证伪,d2_shape 恒为 0.02542)——不要再做任何对齐/朝向类尝试;唯一剩余杠杆是 target_rms 估计(如 RMS~log 细胞数 / 阶段间隔的视图内回归),但需警惕 proxy 非单调 dip(354→217→335)导致的过拟合。+2. occupancy_dice 是唯一随朝向变的形状子指标且现帧更优;若未来改动细胞空间分布(如簇参数),需连同 occupancy 一起复测。+3. cell_state/expr/local 前沿仍被父配置占满,突破需换机制(容量约束双向互匹配的表达插值等,见父 ANALYSIS)。diff --git a/solution/run.py b/solution/run.pyindex 565ec2f..46e31de 100644--- a/solution/run.py+++ b/solution/run.py@@ -46,6 +46,15 @@ MATCH_R = float(os.environ.get("T2_MATCH_R", "0.3")) MATCH_MIN_CELLS = int(os.environ.get("T2_MATCH_MIN_CELLS", "30")) MATCH_ZFLIP = os.environ.get("T2_MATCH_ZFLIP", "1") != "0"  # diagnostic: apply matched z-sign decision MATCH_WEIGHT = os.environ.get("T2_MATCH_WEIGHT", "count")  # count | corr | corr2+# canonicalise: deterministic canonical frame for the FINAL output coordinates+# (centre -> PCA rotation -> det=+1 -> third-moment axis orientation). Rigid+# transform only; expression, sampling and interpolation logic are untouched.+# Empirically REJECTED on this base (see METHOD.md): d2_shape/scale_log_ratio+# are unchanged by the rigid rotation (scorer's shape alignment is already+# rotation-invariant) and occupancy_dice slightly worsened (0.8247 -> 0.8207),+# shape_scale 56.21 -> 55.97. Submitted OFF per the PLAN criterion; set+# T2_CANONICAL=1 to re-enable the implemented mechanism for comparison.+CANONICAL = os.environ.get("T2_CANONICAL", "0") != "0" MIN_TYPE_CELLS = 5 KNN_K = int(os.environ.get("T2_KNN_K", "25")) N_CLUSTERS = int(os.environ.get("T2_N_CLUSTERS", "10"))@@ -159,6 +168,32 @@ def matched_align(coords_a, coords_b, labels_a, labels_b, X_a, X_b,     return aligned_a, aligned_b, info2  +def canonicalize_coords(coords: np.ndarray) -> np.ndarray:+    """Deterministic canonical frame for output coordinates.++    (a) subtract centroid; (b) rotate onto PCA axes (eigenvalues descending,+    computed via symmetric eigh for determinism); (c) if the rotation matrix has+    det=-1, flip the last axis to force det=+1; (d) orient each axis by the sign+    of its third central moment (positive skew points along +axis). Rigid+    transform: pairwise distances and all expression content are unchanged.+    """+    x = np.asarray(coords, dtype=np.float64)+    x = x - x.mean(axis=0)+    cov = (x.T @ x) / max(len(x) - 1, 1)+    evals, evecs = np.linalg.eigh(cov)+    order = np.argsort(-evals)+    rot = evecs[:, order]  # columns are PCA axes, descending variance+    if np.linalg.det(rot) < 0:+        rot = rot.copy()+        rot[:, -1] *= -1.0+    y = x @ rot+    for ax in range(y.shape[1]):+        col = y[:, ax]+        if float((col ** 3).mean()) < 0:+            y[:, ax] *= -1.0+    return y++ def cluster_take(coords: np.ndarray, n: int, rng: np.random.Generator) -> np.ndarray:     """Greedy k-NN region growth: ~N_CLUSTERS spatially contiguous blocks totalling n cells."""     m = len(coords)@@ -268,7 +303,10 @@ def run(view: str, out: str, seed: int) -> None:         n = int(np.clip(sa.n, lo, hi))         idx = take(sa.labels, n, rng)         expr = np.asarray(sa.X[idx].todense(), dtype=np.float32)-        vio.write_t2(out, expr, sa.coords[idx], genes, seed=seed)+        coords = sa.coords[idx]+        if CANONICAL:+            coords = canonicalize_coords(coords)+        vio.write_t2(out, expr, coords, genes, seed=seed)         print(f"[fallback] single anchor stage, n={n}", file=sys.stderr)         return @@ -326,6 +364,8 @@ def run(view: str, out: str, seed: int) -> None:         ])         coords = np.vstack([ca[ia], cb[ib]])         coords = scale_to_rms(_jitter(coords, rng), target_rms)+        if CANONICAL:+            coords = canonicalize_coords(coords)         vio.write_t2(out, expr, coords, genes, seed=seed)         print(f"[control] mix n={len(expr)} t={t:.3f}", file=sys.stderr)         return@@ -392,6 +432,8 @@ def run(view: str, out: str, seed: int) -> None:     expr = np.vstack(expr_parts).astype(np.float32)     coords = np.vstack(coord_parts)     coords = scale_to_rms(_jitter(coords, rng), target_rms)+    if CANONICAL:+        coords = canonicalize_coords(coords)     print(         f"[interp] t={t:.3f} n={len(expr)} shared={len(shared)} {shared} "         f"interp_cells={n_interp_cells} align={info.get('align')} "

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

用到的知识库条目

编号标题出处
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:改了什么、各组分数怎么变、假设是否成立、经验和下一步建议。

改了什么在 solution/run.py 最终输出坐标端新增确定性 PCA 规范化函数 canonicalize_coords(减质心→PCA 旋转→det=+1→三阶矩定向),由 T2_CANONICAL 开关控制;对照显示无收益后按 PLAN 判据以默认 OFF 提交,产物与父节点12逐位一致(.X 与 spatial_3D 均 array_equal)。
各组分数的变化cell_state:噪声内(+0.00,66.54,提交配置=父节点)
expression_change:噪声内(+0.00,65.25,提交配置=父节点)
local_spatial:噪声内(+0.00,64.17,提交配置=父节点)
shape_scale:噪声内(+0.00,56.09,提交配置=父节点;Engineer 的 ON 对照中 56.21→55.97,-0.24 也在 T2 约 1 分噪声内但方向为负)
family_idT2HI-01
假设是否成立否
经验
  1. 在官方评分器下,d2_shape 与 scale_log_ratio 对预测坐标的任何刚体旋转/手性变换完全不变(ON/OFF 均为 0.02542 / 0.4669),即评分器的形状对齐本身已旋转不变——k026 假设的『PCA 对齐不固定行列式导致旋转方差』在 shape 分量上不存在。
  2. 形状子指标中唯一随朝向变化的是 occupancy_dice(占据栅格依赖绝对朝向):PCA 规范帧使其 0.8247→0.8207,父节点的 Procrustes 到 a 阶段的原始帧是实测更优朝向。
  3. node10 谱系的 shape_scale(≈56.1)对姿态类改法已双双证伪(node12 matched-align、node14 PCA 规范化),不要再做任何对齐/旋转/规范化方向的尝试;其真正瓶颈是 target_rms 估计偏差(log-线性给 346,proxy 真值≈217,scale_log_ratio≈0.467),刚体变换无法触及。
  4. 『实现机制→ON/OFF 对照查分→按预注册判据回退』的流程有效:本节点用一次 proxy 查分即证伪假设并以零损失(提交=父节点)退出,避免了把负向改动带上榜。
mechanism_active否
下一步建议
  1. 针对 shape_scale:改用视图内 target_rms 估计(如 RMS 随 log 细胞数/阶段间隔的回归,或对称验证的 SCALE_DAMP),把 346 拉向真值量级;注意 proxy 心脏尺度非单调(354→217→335),勿硬调到 proxy 真值以免过拟合。
  2. 针对 expression_change/cell_state:换机制而非调参——如容量约束的双向互匹配表达插值,或亚型细分以在多共有类型(final-like)场景激活 expr interp(见父节点12 ANALYSIS)。
  3. 若未来改动细胞空间分布(如簇抽样参数),需连同 occupancy_dice 一起复测,因为它是唯一随朝向/分布变的形状子指标;且 KNN_K=25/N_CLUSTERS=10 已被 node12 扫参证明是尖峰最优,不要再扫。

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

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

分析员

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

工程师

角色工程师 alibaba-token-plan-cn/qwen3.8-max
调用次数1 次
轮数19
工具调用共 20 次:bash 14、edit 3、read 2、write 1
用时5 分
token 数输入 47,417 · 输出 6,182 · 思考 4,107
任务(第一行)按计划修改程序:PCA 规范化输出坐标系 + 保持 T2HI-01 插值框架
最后的回答(摘录)
完成。做了什么、查分结果、下一步:

- **做了什么**:按 PLAN 在 T2HI-01 输出坐标端实现确定性 PCA 规范化(减质心→PCA 旋转→det=+1→三阶矩定向,`T2_CANONICAL` 开关),只作用于最终写出的坐标。机制生效证据齐全:坐标全变(质心≈0、协方差对角化、det=+1、三阶矩全正),`.X`/RMS/kNN 结构逐位不变,仅 shape_scale 一组动。
- **查分(A 半,用 2/20)**:ON 62.53(shape_scale 55.97)vs OFF=父节点 62.59(56.21)。机理明确:`d2_shape` 与 `scale_log_ratio` ON/OFF 完全相同(评分器形状对齐本就旋转不变),仅 `occupancy_dice` 0.8247→0.8207 微伤。按 PLAN 判据(提升>1 才提交)**关闭提交**,产物与父节点12逐位一致,vec-check ok、seed 确定。
- **下一步最值得试**:shape_scale 对一切姿态类改法已双双证伪(matched-align、规范化),唯一杠杆是 target_rms 估计(视图内 RMS~log 细胞数/阶段间隔回归,警惕 proxy 非单调 dip 过拟合);cell_state/expr 需换机制(容量约束双向互匹配插值)。
原始记录位置/home/spark-longxinyang/vec/runs/formal/20261003-043412-search-t2-heart-interp-g24-D-s1/nodes/14/engineer.jsonl 137 KB
/home/spark-longxinyang/vec/runs/formal/20261003-043412-search-t2-heart-interp-g24-D-s1/nodes/14/engineer.stderr

调研员

角色调研员 alibaba-token-plan-cn/qwen3.8-max
调用次数1 次
轮数1
工具调用共 0 次:—
用时4 分
token 数输入 13,194 · 输出 1,137 · 思考 8,192
任务(第一行)为节点 n14(改进,父节点 n12)写改进计划 PLAN.json
最后的回答(摘录)
10→12)的 shape_scale 停滞在 56.09,是四组中最低分。ANALYSIS 指出 shape_scale 的主惩罚来源是 target_rms 估计偏差(log-线性给 346,真值≈217,scale_log_ratio≈0.467),且对齐类改法已饱和(matched-align 在 node12 被证伪)。但文献库 k026 指出一个尚未尝试的结构性问题:形状指标对点云做 PCA 对齐但不固定行列式,因此同一次预测的旋转/手性翻转可能改变形状分。当前 node10 系从未做过坐标规范化(canonicalisation),这个方差源仍然存在。通过规范化自身输出的坐标系(减质心→旋转到 PCA 轴→强制 det=+1→三阶矩定向),可以消除评分器引入的额外形状方差,而不改变预测内容的内在结构。预期对 shape_scale 有正向影响(减少随机旋转带来的分数损失)。",
 "approach": "步骤:\n1. 在 solution/run.py 的预测坐标输出端(写文件之前)新增一个坐标规范化函数:(a) 减去质心;(b) 对预测坐标做 PCA,旋转到主成分轴;(c) 计算旋转矩阵行列式,若为 -1 则将最后一个轴乘以 -1 使 det=+1;(d) 用第三阶矩(第三中心矩)的符号翻转每个轴,使方向唯一确定。\n2. 该函数只在最终输出坐标上应用一次,不影响对齐、插值、抽样等中间步骤。\n3. 对照开关 T2_CANONICAL=0(默认1),关闭时行为与当前父节点完全一致(跳过规范化步骤)。\n4. 先小样本验证:跑一次 proxy,确认 vec-check 通过、输出文件非空、规范化前后坐标确实不同(旋转变化)但基因表达不变。\n5. 用 vec-score 查分比较 shape_scale 是否提升 > 1 分。若提升则提交;若未提升或下降,检查是否规范化引入了问题(例如 PCA 轴与形状指标期望不一致),再回退关闭。\n6. 不改动任何插值逻辑(INTERP_ENABLED, EXPR_INTERP, COORD_MODE, KNN_K, N_CLUSTERS 等全部保持父节点默认值),只加规范化后处理。\n单输入阶段退路:单阶段时坐标仍来自同一阶段,规范化逻辑不变,无额外依赖。\nvec-score 快速筛选:只需一次查询即可判断(规范化是确定性变换,无随机性),若 shape_scale 提升 > 1 即有效。",
 "expected_groups": ["shape_scale"],
 "risks": "风险1:规范化可能恰好把形状指标期望的手性方向反过来了(例如评分器内部 PCA 的 det 习惯与规范化不一致),导致 shape_scale 反而下降。Engineer 应在第一次查分后立刻比较 shape_scale 前后差异,若下降 > 1 分则关闭规范化并提交父节点。\n风险2:PCA 轴在三阶矩定向时若数据分布对称导致符号不确定,可能产生微小抖动,但这在规范化的设计内,影响极小。\n风险3:只影响 shape_scale,其他三组应不变;若出现其他组变化,说明规范化影响了坐标结构(不应发生,因为只是刚体变换)。",
 "family_id": "T2HI-01",
 "mechanism": "在最终预测坐标上应用确定性坐标规范化(减质心→PCA 旋转→det=+1→三阶矩定向),消除评分器 PCA 对齐中因旋转/手性自由度引入的形状分方差。",
 "vs_constant_shift": "这是坐标系的刚体旋转与手性固定,不是每型常数位移(每细胞位移随其坐标位置而异,质心被减掉后旋转矩阵作用于所有细胞),也不是全局组成重加权(细胞数、类型配额、表达值完全不变)。",
 "mechanism_evidence": "Engineer 应比较规范化前后的坐标:(1) 质心应变为 (0,0,0);(2) 协方差矩阵应变为对角(PCA 轴);(3) 旋转矩阵行列式应为 +1;(4) 四组分中只有 shape_scale 应变化,其余三组应不变(因为是刚体变换,不影响表达、邻域距离的相对值)。若规范化后 shape_scale 提升 > 1 分,说明之前确实存在旋转/手性方差损失。",
 "mechanism_off_control": "设 T2_CANONICAL=0 时,跳过规范化步骤,输出坐标与当前父节点12完全一致(应验证 array_equal)。预期差别:规范化关闭时 shape_scale 保持在 56.09,开启后应有变化(提升或下降,取决于手性是否匹配评分器期望)。若开启后分数不变,说明规范化对该组无影响,可回退关闭。",
 "sources": []}
```
原始记录位置/home/spark-longxinyang/vec/runs/formal/20261003-043412-search-t2-heart-interp-g24-D-s1/nodes/14/researcher.jsonl 5 KB
/home/spark-longxinyang/vec/runs/formal/20261003-043412-search-t2-heart-interp-g24-D-s1/nodes/14/researcher.stderr