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

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

节点 n26

实现 T2HI-07 MOSTA E9.5 外部形状各向异性校正:按外部参考 PCA 特征值比对预测点云 xy 主轴做阻尼缩放(λ 开关,z 不动);代理上 λ=0.10 净 +0.03、λ=0.20 净 −0.14 均低于噪声,按 PLAN 止损以 λ=0 关闭态提交,与父逐位一致。

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

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

来自 programs.git 18d0e8d8f2:solution/METHOD.md

实现 T2HI-07 MOSTA E9.5 外部形状各向异性校正:按外部参考 PCA 特征值比对预测点云 xy 主轴做阻尼缩放(λ 开关,z 不动);代理上 λ=0.10 净 +0.03、λ=0.20 净 −0.14 均低于噪声,按 PLAN 止损以 λ=0 关闭态提交,与父逐位一致。

方法族 / 实现

family_id = T2HI-07(外部空间先验的形状各向异性校正),按 PLAN 实现于 run.py:

  1. _external_shape_prior(view, manifest):遍历 manifest["external"],选相对时间(阶段中点 − 目标时间,平移不变,不读绝对日期、不匹配数据集名)最接近目标且带空间坐标的数据集;对坐标去质心→SVD→取特征值谱,归一化 r_m = λ/λ1(降序);只保留方差非退化的维度。外部为空 / 无坐标 / <2 个有效维 → 返回 None,机制整体跳过,行为等同父节点(单输入阶段退路同样成立:机制不依赖 bracket 结构,fallback 分支也接了同一开关)。
  2. _aniso_correct(coords, prior, λ):对预测点云在相同维度子集(本视图为 xy 两维;参考是 z≡0 的 2D 切片,第三轴无信息,z 原样保留)上去质心→SVD 得自身主轴与 r_p;在主轴帧逐轴乘 c_i = (r_m_i / r_p_i)^λ,逆旋转回原坐标系。质心、旋转、非信息维、绝对尺寸设定均不动;表达值、细胞数、类型组成逐位不变(坐标-only 机制)。
  3. 开关 --mosta-lam,默认常量 MOSTA_LAM = 0.0(关闭态)。应用在 kNN 平滑/表达平滑之后、写出之前。
  4. 生物学知识来源:无新增文献知识;仅使用 view 内挂载的外部数据 mosta_e95_v0(manifest 声明合规、sha256 校验由 harness 负责)与通用 PCA 几何。

对照结果(mechanism_off_control)

λ=0(默认)与父节点 24(=父 19/17 管线)在同一视图 seed 0 的输出比较:X 与 spatial_3D 均 np.array_equal = True(preds/base_s0.h5ad vs preds/lam0_s0.h5ad)。默认参数即关闭态,输出与父逐位一致,A 半榜分应复现父的 61.03 对照值(未重复查分浪费额度,逐位一致保证其相同)。vec-check 通过。

机制生效证据(λ>0 时实际改变了什么)

外部参考:mosta_e95_v0(5913 细胞,单一切片 E9.5_E1S1,z≡0 → 有效维 = xy),相对目标 dt=+0.75 天。

量值
参考谱 r_m (xy)(1, 0.4158)
预测谱 r_p (xy,平滑后)(1, 0.6131)
校正因子 λ=0.10 / 0.20c2 = 0.9617 / 0.9253
第二主轴 SD 变化 λ=0.20186.5 → 172.6(第一主轴 238.2 不变,z SD 149.51 不变)
全局 RMS λ=0 / 0.10 / 0.20337.5 → 333.6 → 330.0

r_m 与 r_p 差异 32%(≫ PLAN 的 5% 止损线),机制有真实操作空间;四组分预期:shape_scale 应动、local_spatial 微动、cell_state / expression_change 恒不变(坐标-only,实测两组分在两次查分中逐位不变 65.93 / 63.83,符合预期)。

机制检验:证伪(vec-score A 半,seed 0,共用 2/20 次查分)

配置boardcell_stateexpression_changelocal_spatialshape_scale
关闭对照 λ=0(=父24,逐位一致)61.0365.9363.8361.7052.68
λ=0.1061.0665.9363.8361.6952.81
λ=0.2060.8965.9363.8361.7252.08

λ=0.10 净 +0.03(远小于 1 分噪声),λ=0.20 净 −0.14 且 shape_scale 转跌(occupancy_dice 0.831→0.821、scale_log_ratio 0.430→0.419,尺度被推离参考)。两档均无 >1 分净增益 → 命中 PLAN 止损条款,以关闭态 λ=0 提交,不再扫 λ=0.05/0.30。

结论 / 已验证与未验证

  • 已验证:机制正确实现且生效(轴比按设计移动、z 与非信息维不动、表达逐位不变);关闭态与父逐位一致;外部先验路线在 A 半证伪。
  • 解释:MOSTA 是全胚切片,其 xy 各向异性(长体轴 0.42)与心脏区域点云(0.61)语义不同源;把预测压向全胚比例使 occupancy/scale 指标变差,与前序节点 17/18 的模型内各向异性校正同向失败——本 board 的 shape_scale 对任何压缩第二主轴的操作都敏感为负。
  • 未验证:λ∈(0, 0.1) 更细网格(+0.03 在噪声内,细调无意义);真实 final 视图上的外部数据形态(若 final 挂载的参考是 3D 或心脏区域,机制会自动按有效维工作,但方向性未验证)。
  • 视图无关性:λ=0 默认下外部先验代码路径不执行,输出=父管线;即使 λ>0,选择外部数据集只用相对时间差与坐标几何,不读绝对日期/路径/数据集名。

调研员的计划

名称MOSTA E9.5 外部形状各向异性校正(T2HI-07,针对 shape_scale 52.70)
动机shape_scale 52.70 是四组最弱(次低 local_spatial 62.34)。父节点 ANALYSIS 明确建议尝试 MOSTA E9.5 外部空间先验。前序节点 17/18 用模型内部插值导出的 RMS/各向异性做校正均把尺度推离参考而证伪;但从未用过 external/ 中实际挂载的 MOSTA E9.5 真实空间坐标——这是目标时间点的独立形态测量,不是模型内推值。节点 20 确认 external/ 存在 MOSTA E9.5 且类型词汇零交集(不能做型级校正,但整体形态/各向异性可用)。
做法1. 加载 external/ 中 MOSTA E9.5 的坐标矩阵(读 manifest 确认其相对时间与目标匹配;若目录为空或无匹配阶段则整个机制跳过,退化为父行为)。2. 对 MOSTA 坐标去质心→PCA→取特征值谱 λ_m=(λ1,λ2,λ3),归一化为比例 r_m=λ_m/λ1。3. 对预测坐标同样去质心→PCA→取 r_p。4. 校正因子 c_i=(r_m_i/r_p_i)^λ(λ 为阻尼系数),在预测坐标的 PCA 主轴上逐轴乘 c_i 后逆旋转回原坐标系。等价于只调各向异性比例,不动质心、不动旋转、不动绝对尺寸。5. 参数:λ∈{0.05,0.10,0.15,0.20,0.30},先跑 λ=0(关闭)验证逐位一致,再跑 λ=0.10 和 0.20 定向(共 3 次查分),若两档均无 >1 分净增益则止损提交关闭态;若某档 shape_scale 升且 local_spatial 不掉超 0.5,再试邻域。6. 单输入阶段退路:MOSTA 是外部文件,不依赖 bracket 结构;若 external/ 无数据或阶段不匹配,自动跳过,输出等同父。7. 视图平移不变:所有时间用 manifest 相对值匹配,不硬编码日期。8. 不改变表达值、细胞数、类型组成;只改坐标的轴比例。
风险1) MOSTA 与预测点云的 PCA 主轴语义不对应(MOSTA 可能是切片/投影),导致轴比例无意义→Engineer 应先打印两侧特征值谱,若比例差异 <5% 或排序不一致则提前止损。2) MOSTA 坐标单位/尺度与预测不同→只取归一化比例 r=λ/λ1,不用绝对值,天然免疫。3) 校正方向错误反而推离真值→λ 从 0.05 起步,若 shape_scale 下降立即停止。4) 类型零交集意味着无法做型级空间约束,只能全局校正,增益上限可能 <1 分→这是根本风险,3 次查分即可判定。

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

对比:父节点版本 23148fe95d。改动的文件:solution/METHOD.md +28 −34、solution/run.py +121 −1

diff --git a/solution/METHOD.md b/solution/METHOD.mdindex 78beea6..50e2941 100644--- a/solution/METHOD.md+++ b/solution/METHOD.md@@ -1,51 +1,45 @@-实现 T2HI-01 型内倾斜抽样:按两阶段型均值漂移方向 exp(±γ·投影) 加权重抽 mix 细胞,代理上目标组微升却被 shape_scale 抵消、净分不越噪,按止损以 γ=0(与父逐位一致)提交。+实现 T2HI-07 MOSTA E9.5 外部形状各向异性校正:按外部参考 PCA 特征值比对预测点云 xy 主轴做阻尼缩放(λ 开关,z 不动);代理上 λ=0.10 净 +0.03、λ=0.20 净 −0.14 均低于噪声,按 PLAN 止损以 λ=0 关闭态提交,与父逐位一致。  ## 方法族 / 实现 -family_id = **T2HI-01**(型内亚群组成时间插值:倾斜 mix 抽样),按 PLAN 实现于 `run.py`:+family_id = **T2HI-07**(外部空间先验的形状各向异性校正),按 PLAN 实现于 `run.py`: -1. `_type_tilt_weights(stage_a, stage_b, gamma)`:对每个细胞型,若两括号阶段该型各 ≥3 个细胞,取表达矩阵(视图内 500 基因),算型均值差 `d_type = mean_hi − mean_lo`(单位化 `d_hat`);每细胞投影 `s_i = (X_i − 型总均值)·d_hat`;权重 `w_lo = exp(−γ·s)`(下括号)、`w_hi = exp(+γ·s)`(上括号),减去侧内最大值做数值稳定。缺失/退化/单侧型权重全为 1(均匀抽样)。**不修改任何表达值**,只决定哪些真实输入细胞进入 mix。-2. `_wtake`:逐位复制 `sample.stratified_choice` 的分型配额逻辑,仅把型内 `rng.choice(idx, k, replace=False)` 换成带 `p=w[idx]/sum` 的加权抽样(配额、类型顺序不变)。-3. `_interpolate_mix_tilted`:逐位复制 `methods.interpolate`(coord=mix, expr=carry)的对齐/RMS 管线(`align_pair` procrustes 保 z、`log_interp` target_rms、`scale_to_rms`、`_jitter`、`_pack_expr`),仅把 `mix_indices` 换成 `_wtake` 加权抽样;返回源行索引 `ia, ib` 以便下游标签精确对应。抽中细胞的表达与坐标照常进入型内 kNN 坐标平滑(k=20, strength=1.5, max_frac=0.45, k_adaptive)等父19全部后处理,逻辑逐位不改。-4. 单输入阶段退路:`interp_bracket` 返回 `b=None`,走父逻辑(分层抽末阶段),γ 不参与、无新行为。-5. 关闭对照:`--gamma 0`(**默认值** `GAMMA=0.0`)走原 `interpolate` 分支,与父19逐位一致。+1. `_external_shape_prior(view, manifest)`:遍历 `manifest["external"]`,选**相对时间**(阶段中点 − 目标时间,平移不变,不读绝对日期、不匹配数据集名)最接近目标且带空间坐标的数据集;对坐标去质心→SVD→取特征值谱,归一化 `r_m = λ/λ1`(降序);只保留方差非退化的维度。**外部为空 / 无坐标 / <2 个有效维 → 返回 None,机制整体跳过,行为等同父节点**(单输入阶段退路同样成立:机制不依赖 bracket 结构,fallback 分支也接了同一开关)。+2. `_aniso_correct(coords, prior, λ)`:对预测点云在**相同维度子集**(本视图为 xy 两维;参考是 z≡0 的 2D 切片,第三轴无信息,z 原样保留)上去质心→SVD 得自身主轴与 `r_p`;在主轴帧逐轴乘 `c_i = (r_m_i / r_p_i)^λ`,逆旋转回原坐标系。质心、旋转、非信息维、绝对尺寸设定均不动;表达值、细胞数、类型组成逐位不变(坐标-only 机制)。+3. 开关 `--mosta-lam`,默认常量 `MOSTA_LAM = 0.0`(关闭态)。应用在 kNN 平滑/表达平滑之后、写出之前。+4. 生物学知识来源:无新增文献知识;仅使用 view 内挂载的外部数据 `mosta_e95_v0`(manifest 声明合规、sha256 校验由 harness 负责)与通用 PCA 几何。  ## 对照结果(mechanism_off_control) -γ=0(默认)输出与父节点19在同一视图 seed 0 上的输出比较:**X 与 spatial_3D 均 `np.array_equal = True`**(`preds/default_s0.h5ad` vs `preds/g0.h5ad`)。A 半查分四组分(cell_state 65.93 / expression_change 63.83 / local_spatial 61.70 / shape_scale 52.68)与父19 METHOD.md 记录的关闭对照值逐项相同,交叉验证 γ=0 未引入副作用。默认参数即关闭态。+λ=0(默认)与父节点 24(=父 19/17 管线)在同一视图 seed 0 的输出比较:**X 与 spatial_3D 均 `np.array_equal = True`**(`preds/base_s0.h5ad` vs `preds/lam0_s0.h5ad`)。默认参数即关闭态,输出与父逐位一致,A 半榜分应复现父的 61.03 对照值(未重复查分浪费额度,逐位一致保证其相同)。`vec-check` 通过。 -## 机制生效证据(proxy A 半,seed 0)+## 机制生效证据(λ>0 时实际改变了什么) -| γ | tilt_n_types(生效型) | tilt_n_skipped(退化型) | lo 侧平均投影偏移 | hi 侧平均投影偏移 |-|---:|---:|---:|---:|---:|-| 0.3 | 5 | 28 | −2.87 | +1.95 |-| 0.7 | 5 | 28 | −4.77 | +3.70 |+外部参考:`mosta_e95_v0`(5913 细胞,单一切片 E9.5_E1S1,z≡0 → 有效维 = xy),相对目标 dt=+0.75 天。 -投影偏移随 γ 单调增大,方向符合设计(下括号细胞被拉向漂移起点=负、上括号被拉向终点=正)→ 权重确实起作用。仅 5 个两阶段共有型(与 align 的 `n_shared_types=5` 一致)能算 d_type,其余 28 个单侧/小样本型退化为均匀抽样,因此倾斜只作用于少数细胞,效果受限。+| 量 | 值 |+|---|---|+| 参考谱 r_m (xy) | (1, 0.4158) |+| 预测谱 r_p (xy,平滑后) | (1, 0.6131) |+| 校正因子 λ=0.10 / 0.20 | c2 = 0.9617 / 0.9253 |+| 第二主轴 SD 变化 λ=0.20 | 186.5 → 172.6(第一主轴 238.2 不变,z SD 149.51 不变) |+| 全局 RMS λ=0 / 0.10 / 0.20 | 337.5 → 333.6 → 330.0 | -## 机制检验:证伪(vec-score,A 半,seed 0,共用 3/20 次查分)+r_m 与 r_p 差异 32%(≫ PLAN 的 5% 止损线),机制有真实操作空间;四组分预期:shape_scale 应动、local_spatial 微动、cell_state / expression_change 恒不变(坐标-only,实测两组分在两次查分中逐位不变 65.93 / 63.83,符合预期)。++## 机制检验:证伪(vec-score A 半,seed 0,共用 2/20 次查分)  | 配置 | board | cell_state | expression_change | local_spatial | shape_scale | |---|---:|---:|---:|---:|---:|-| **关闭对照 γ=0(=父19)** | **61.03** | 65.93 | 63.83 | 61.70 | 52.68 |-| γ=0.3 | 60.99 (−0.05) | 66.26 (+0.33) | 63.77 (−0.06) | 61.59 (−0.11) | 52.34 (−0.34) |-| γ=0.7 | 61.00 (−0.03) | 66.30 (+0.37) | 64.20 (+0.37) | 61.72 (+0.02) | 51.81 (−0.87) |--四组分变化符合 PLAN 预期模式:**目标组 cell_state(+0.33/+0.37)与 expression_change(γ=0.7 时 +0.37)确实向正方向移动**(说明型内亚群组成倾斜对表达分布有可测影响),但幅度均 <0.4,远小于 T2 噪声(~1 分);同时被抽中细胞集合改变导致坐标点集变化,**shape_scale 单调下降(−0.34/−0.87)抵消了表达侧增益**,local_spatial 基本不动。净 board 两档均低于关闭对照(−0.03~−0.05)。精确命中 PLAN 主止损判据(两档榜分均不高于对照 +1 分)。--按 PLAN:方向虽对但增益远低于噪声且被 shape_scale 抵消,不再花查分细调 {0.15, 1.0}(γ↓→两方向都缩小趋近对照,γ↑→shape_scale 掉得更多,无净增益区间)。**提交关闭态 γ=0**。--## 提交内容--默认参数即关闭态:输出与父节点19逐位一致(`np.array_equal` 验证 X 与 spatial_3D 均 True;A 半四组分逐项相同)。查分共 3 次(额度 20)。`vec-check` 通过;seed 0 两次运行 X/coords 逐位一致(确定性);`EXECUTION.json` 为 `{"gpu": false}`(纯 CPU)。运行时间 ~2 s,内存 <0.5 GB。--## 生物学知识来源+| 关闭对照 λ=0(=父24,逐位一致) | 61.03 | 65.93 | 63.83 | 61.70 | 52.68 |+| λ=0.10 | 61.06 | 65.93 | 63.83 | 61.69 | 52.81 |+| λ=0.20 | 60.89 | 65.93 | 63.83 | 61.72 | 52.08 | -无新增外部生物学知识。仅使用 PLAN 给定的通用先验:同一细胞型在两发育阶段的型内表达均值差 `d_type` 反映该型的发育漂移方向(谱系/成熟连续),据此把 mix 抽样沿该方向倾斜以插值型内亚群组成。所有统计量(d_type、投影、配额)均从视图内两括号阶段的表达与标签现场计算,无硬编码阶段统计量;全部时间为 manifest 相对时间,视图平移不变;不做坐标旋转以外的假设。+λ=0.10 净 +0.03(远小于 1 分噪声),λ=0.20 净 −0.14 且 shape_scale 转跌(occupancy_dice 0.831→0.821、scale_log_ratio 0.430→0.419,尺度被推离参考)。两档均无 >1 分净增益 → 命中 PLAN 止损条款,以关闭态 λ=0 提交,不再扫 λ=0.05/0.30。 -## 未验证+## 结论 / 已验证与未验证 -- γ ∈ {0.15, 1.0}(PLAN 止损后不再细调:净榜分在两档已单调低于对照,无越噪增益区间)。-- 放宽 tilt_n_types 门槛(<3 细胞型也倾斜):仅 5 个共有型可算 d_type,是本 board 括号(E8.25↔E9.5 只剩 5 个同名型)的固有限制,非参数问题。-- 单独抑制 shape_scale 下降(如倾斜后再做尺度校正):父节点已证伪 RMS 恢复/径向尺度会把尺度推离参考,叠加倾斜不改变该结论。-- B 半与 final 视图(关闭态与父逐位一致,迁移性等同父节点19)。+- 已验证:机制正确实现且生效(轴比按设计移动、z 与非信息维不动、表达逐位不变);关闭态与父逐位一致;外部先验路线在 A 半证伪。+- 解释:MOSTA 是全胚切片,其 xy 各向异性(长体轴 0.42)与心脏区域点云(0.61)语义不同源;把预测压向全胚比例使 occupancy/scale 指标变差,与前序节点 17/18 的模型内各向异性校正同向失败——本 board 的 shape_scale 对任何压缩第二主轴的操作都敏感为负。+- 未验证:λ∈(0, 0.1) 更细网格(+0.03 在噪声内,细调无意义);真实 final 视图上的外部数据形态(若 final 挂载的参考是 3D 或心脏区域,机制会自动按有效维工作,但方向性未验证)。+- 视图无关性:λ=0 默认下外部先验代码路径不执行,输出=父管线;即使 λ>0,选择外部数据集只用相对时间差与坐标几何,不读绝对日期/路径/数据集名。diff --git a/solution/run.py b/solution/run.pyindex 88e5186..8948930 100644--- a/solution/run.py+++ b/solution/run.py@@ -35,6 +35,14 @@ reproduces the parent (node 15) output bit-for-bit. ``--strength 0`` disables the smoothing entirely (delta = 0, coordinates untouched).  Single input (no bracket): parent fallback, no smoothing. +Optional ``--mosta-lam`` (family T2HI-07, tested and FALSIFIED on the proxy+A-half, therefore OFF by default): damped anisotropy correction of the output+xy-PCA axis ratios toward the spectrum of the nearest-time external spatial+reference mounted in ``external/`` (z untouched when the reference is a 2D+slice; skipped entirely when no external reference exists).  lambda=0.10 gave+net +0.03 (noise), lambda=0.20 net -0.14 with shape_scale falling; see+METHOD.md.  ``--mosta-lam 0`` (default) is bit-identical to the parent.+ Optional ``--pca-norm on`` applies a deterministic PCA canonicalisation of the output frame (subtract centroid -> rotate onto PCA axes -> force det=+1 -> orient each axis by third moment) after smoothing, to remove chirality noise.@@ -47,6 +55,7 @@ from __future__ import annotations  import argparse import json+import os import sys  import numpy as np@@ -60,6 +69,7 @@ from src.task2_spatial.view_io import board_params, interp_bracket, load_manifes  PARAMS = {"align": "procrustes", "scale_damp": 1.0} K = 20+MOSTA_LAM = 0.0  # family T2HI-07: damped anisotropy correction of the output xy PCA axes toward the external reference spectrum; 0 = off (control, bit-identical to parent) GAMMA = 0.0  # family T2HI-01: within-type tilt of the mix draw along the two-stage type-mean drift; 0 = off (control, bit-identical to parent) EXPR_ALPHA = 0.0  # family T2HI-04: per-type kNN expression smoothing weight; 0 = off (control, bit-identical to parent node 17) K_EXPR = 15@@ -345,6 +355,102 @@ def _interpolate_mix_tilted(stage_a, stage_b, t: float, params: dict, wa: np.nda     return expr, coords.astype(np.float32), info, ia, ib  +def _external_shape_prior(view_dir: str, manifest: dict):+    """Family T2HI-07: PCA eigenvalue-ratio prior from mounted external spatial data.++    Picks the external dataset whose stage midpoint is closest (in relative time,+    shift-invariant) to the target time and that carries spatial coordinates with+    at least 2 non-degenerate dimensions. Returns (ratios, dims, info) where+    ratios = lambda_i / lambda_1 over the non-degenerate dims (sorted descending),+    or None when no usable reference exists (empty external/, no coords, 2D slice+    with <2 informative dims, ...).+    """+    entries = manifest.get("external") or []+    tgt = float(manifest.get("target", {}).get("time", 0.0))+    best = None+    for e in entries:+        path = os.path.join(view_dir, str(e.get("path", "")))+        if not os.path.exists(path):+            continue+        try:+            mid = 0.5 * (float(e.get("e_lo", tgt)) + float(e.get("e_hi", tgt)))+        except (TypeError, ValueError):+            continue+        dist = abs(mid - tgt)+        if best is not None and dist >= best[0]:+            continue+        try:+            import anndata as ad++            a = ad.read_h5ad(path)+            coords = None+            for key in ("spatial_3D", "spatial_2D", "spatial"):+                if key in a.obsm:+                    coords = np.asarray(a.obsm[key], dtype=np.float64)+                    break+            if coords is None or coords.ndim != 2 or coords.shape[0] < 50 or not np.isfinite(coords).all():+                continue+            sd = coords.std(axis=0)+            dims = [d for d in range(coords.shape[1]) if sd[d] > 1e-8 * max(sd.max(), 1e-12) + 1e-12]+            if len(dims) < 2:+                continue+            C = coords[:, dims]+            C = C - C.mean(axis=0)+            s = np.linalg.svd(C, compute_uv=False) ** 2+            s = np.sort(s)[::-1]+            if s[0] <= 0:+                continue+            best = (dist, (s / s[0]), dims, {"ext_id": str(e.get("id", "")), "ext_dt_to_target": mid - tgt,+                                             "ext_n_cells": int(coords.shape[0]), "ext_eig_ratios": (s / s[0]).tolist()})+        except Exception:+            continue+    if best is None:+        return None+    return best[1], best[2], best[3]+++def _aniso_correct(coords: np.ndarray, prior, lam: float):+    """Damped anisotropy correction on the prediction's own PCA axes (subset dims).++    Centroid, rotation and absolute size are untouched: within the informative+    dims, the cloud is rotated onto its PCA axes, each axis is scaled by+    c_i = (r_prior_i / r_pred_i)^lam, then rotated back. Other dims (e.g. z when+    the reference is a 2D slice) are left exactly as they are.+    Returns (new_coords float32, evidence dict).+    """+    ratios, dims, info = prior+    x = np.asarray(coords, dtype=np.float64).copy()+    ev = dict(info)+    d = len(dims)+    sub = x[:, dims[:d]]+    centroid = sub.mean(axis=0)+    C = sub - centroid+    U, s, Vt = np.linalg.svd(C, full_matrices=False)+    lam_p = s ** 2+    lam_p = np.sort(lam_p)[::-1]+    r_pred = lam_p / max(lam_p[0], 1e-12)+    Y = C @ Vt.T  # principal-axis frame+    factors = np.ones(d)+    for i in range(min(d, len(ratios))):+        if r_pred[i] > 1e-12 and ratios[i] > 1e-12:+            factors[i] = (ratios[i] / r_pred[i]) ** lam+    sd_before = Y.std(axis=0)+    Y = Y * factors[None, :]+    sd_after = Y.std(axis=0)+    x[:, dims[:d]] = centroid + Y @ Vt+    ev.update({+        "aniso_lambda": lam,+        "aniso_dims": list(dims[:d]),+        "pred_eig_ratios": r_pred.tolist(),+        "aniso_factors": factors.tolist(),+        "axis_sd_before": sd_before.tolist(),+        "axis_sd_after": sd_after.tolist(),+        "rms_before": float(rms_radius(np.asarray(coords, dtype=np.float64))),+        "rms_after": float(rms_radius(x)),+    })+    return x.astype(np.float32), ev++ def _pca_normalize(coords: np.ndarray) -> np.ndarray:     """Deterministic PCA canonicalisation: centroid -> PCA axes -> det=+1 -> third-moment sign."""     C = np.asarray(coords, dtype=np.float64)@@ -426,6 +532,7 @@ def main() -> None:     parser.add_argument("--expr-alpha", type=float, default=EXPR_ALPHA)     parser.add_argument("--k-expr", type=int, default=K_EXPR)     parser.add_argument("--gamma", type=float, default=GAMMA)+    parser.add_argument("--mosta-lam", type=float, default=MOSTA_LAM)     args = parser.parse_args()      manifest = load_manifest(args.data)@@ -436,6 +543,10 @@ def main() -> None:         n = int(np.clip(stage.n, manifest["min_cells"], manifest["max_cells"]))         rows = np.sort(take(stage.labels, min(n, stage.n), np.random.default_rng(args.seed)))         coords = stage.coords[rows]+        if args.mosta_lam != 0.0:+            prior = _external_shape_prior(args.data, manifest)+            if prior is not None:+                coords, _ = _aniso_correct(coords, prior, args.mosta_lam)         if args.pca_norm == "on":             coords = _pca_normalize(coords)         Xe = stage.X[rows].toarray()@@ -480,6 +591,14 @@ def main() -> None:                                        str(params.get("align", "procrustes")))             ev.update(ev2) +    if args.mosta_lam != 0.0:+        prior = _external_shape_prior(args.data, manifest)+        if prior is not None:+            coords, ev4 = _aniso_correct(coords, prior, args.mosta_lam)+            ev.update(ev4)+        else:+            ev["aniso_skipped_no_external"] = True+     if args.pca_norm == "on":         coords = _pca_normalize(coords) @@ -491,7 +610,8 @@ def main() -> None:     print(json.dumps({"bracket": [a["stage"], b["stage"]], **keep, "strength": args.strength, "k": args.k,                       "pca_norm": args.pca_norm, "rescale_damp": args.rescale_damp, "aniso": args.aniso,                       "aniso_damp": args.aniso_damp, "k_adaptive": args.k_adaptive,-                      "expr_alpha": args.expr_alpha, "k_expr": args.k_expr, "gamma": args.gamma, **ev}, default=float), file=sys.stderr)+                      "expr_alpha": args.expr_alpha, "k_expr": args.k_expr, "gamma": args.gamma,+                      "mosta_lam": args.mosta_lam, **ev}, default=float), file=sys.stderr)     write_t2(args.out, expr, 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:改了什么、各组分数怎么变、假设是否成立、经验和下一步建议。

改了什么实现 T2HI-07:用 external/mosta_e95_v0(2D 切片,仅 xy 有效维)的 PCA 特征值比例对预测点云自身主轴做阻尼各向异性缩放(--mosta-lam,z/表达/组成不动,外部缺失自动跳过)。代理 A 半上 λ=0.10 净 +0.03、λ=0.20 净 −0.14,均低于噪声,按 PLAN 止损以 λ=0 关闭态提交,与父节点 24 逐位一致。
各组分数的变化cell_state:噪声内(+0.00,66.70=父)
expression_change:噪声内(+0.00,63.90=父;坐标-only 机制,关闭态逐位一致)
local_spatial:噪声内(+0.00,62.34=父)
shape_scale:噪声内(+0.00,52.70=父;关闭态提交,机制未作用于最终输出)
family_idT2HI-07
假设是否成立否
经验
  1. 在 T2:heart 板上,用外部 MOSTA E9.5 全胚切片 PCA 比例(r_m=(1,0.416))压缩预测点云第二主轴(r_p=(1,0.613)):λ=0.10 时 shape_scale 52.68→52.81 净 +0.03,λ=0.20 时 occupancy_dice 0.831→0.821、shape_scale 跌至 52.08 净 −0.14,均在噪声内或为负——全胚切片各向异性与心脏区域点云语义不同源,不能作为形状先验。
  2. shape_scale 的全局几何缩放路线已三路证伪(节点 17/18 模型内 RMS/各向异性校正 + 本节点外部先验):任何压缩第二主轴的全局操作在该板一律负向,不要再尝试该方向的参数微调。
  3. 关闭态对照的做法可复用:默认参数=关闭(λ=0),np.array_equal 验证与父逐位一致后再花查分额度试开档位,止损后提交关闭态零风险保住父分(本节点 61.41 不变,仅耗 2 次查分)。
  4. 外部参考是 2D 切片(z≡0)时只对有效维做校正、z 原样保留的实现是安全的:cell_state/expression_change 两次查分逐位不变(65.93/63.83),确认坐标-only 机制无表达侧副作用。
mechanism_active否
下一步建议
  1. 停止 T2HI-0x 参数化尝试(倾斜抽样、RMS 校正、各向异性校正、外部先验均已证伪);针对该板 61.41 平台,改试结构性方法:按型组成的时间插值重抽 + 型内坐标生成,替代整细胞混抽(针对全组分,尤其 shape_scale 52.70 与 local_spatial 62.34)。
  2. 若仍想利用 external/,针对 local_spatial 而非 shape_scale:用 MOSTA 切片做局部邻距分布匹配(kNN 距离分位数对齐)而不是全局轴比例缩放——局部统计量对切片 vs 区域的语义差异更鲁棒,先小规模(2 次查分)验证方向。
  3. 本节点关闭态与父逐位一致,后续节点可直接以 26 或 24 为父,无回归风险;查分额度剩 18/20,应优先分给结构性改动而非参数扫描。

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

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

分析员

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

工程师

角色工程师 alibaba-token-plan-cn/qwen3.8-max
调用次数1 次
轮数25
工具调用共 28 次:bash 18、edit 8、read 1、write 1
用时13 分
token 数输入 62,081 · 输出 9,003 · 思考 14,841
任务(第一行)按计划修改程序:MOSTA E9.5 外部形状各向异性校正(T2HI-07,针对 shape_scale 52.70)
最后的回答(摘录)
**总结**

- **做了什么**:按 PLAN 实现 T2HI-07——用 `external/mosta_e95_v0`(单切片,z≡0,仅 xy 有效)的 PCA 特征值谱 r_m=(1, 0.416) 作外部形状先验,对预测点云 xy 主轴做阻尼各向异性缩放 c=(r_m/r_p)^λ(r_p=(1, 0.613)),z、表达、细胞数、组成全不动;外部缺失/单输入自动跳过;默认 λ=0 关闭。
- **查分结果**(A 半,用 2/20 次):λ=0.10 → 61.06(shape_scale 52.81,净 +0.03);λ=0.20 → 60.89(shape_scale 52.08,occupancy_dice 掉,净 −0.14)。对照 λ=0 与父 24 输出 `np.array_equal=True`(X 与坐标),对应 61.03。两档均远低于 1 分噪声 → 命中 PLAN 止损,以关闭态提交,`vec-check` 通过,seed 0/7 均正常。
- **结论**:外部全胚切片的各向异性与心脏区域点云语义不同源,压缩第二主轴一律负向(与节点 17/18 模型内校正同向失败)。
- **下一步建议**:shape_scale 侧的"全局几何缩放/比例校正"路线(模型内 + 外部先验)已三路证伪,本 board 61.41 平台大概率是 mix+kNN 平滑家族的天花板;建议停止 T2HI-0x 参数化尝试,把预算转给其它 board,或换结构性方法族(如按型组成的时间插值重抽 + 型内坐标生成,而非整细胞混抽)。
原始记录位置/home/spark-longxinyang/vec/runs/formal/20261003-004922-search-t2-heart-interp-g24-D/nodes/26/engineer.jsonl 154 KB
/home/spark-longxinyang/vec/runs/formal/20261003-004922-search-t2-heart-interp-g24-D/nodes/26/engineer.stderr

调研员

角色调研员 alibaba-token-plan-cn/qwen3.8-max
调用次数1 次
轮数1
工具调用共 0 次:—
用时1 分
token 数输入 13,113 · 输出 1,047 · 思考 2,567
任务(第一行)为节点 n26(改进,父节点 n24)写改进计划 PLAN.json
最后的回答(摘录)
{"name": "MOSTA E9.5 外部形状各向异性校正(T2HI-07,针对 shape_scale 52.70)",
 "motivation": "shape_scale 52.70 是四组最弱(次低 local_spatial 62.34)。父节点 ANALYSIS 明确建议尝试 MOSTA E9.5 外部空间先验。前序节点 17/18 用模型内部插值导出的 RMS/各向异性做校正均把尺度推离参考而证伪;但从未用过 external/ 中实际挂载的 MOSTA E9.5 真实空间坐标——这是目标时间点的独立形态测量,不是模型内推值。节点 20 确认 external/ 存在 MOSTA E9.5 且类型词汇零交集(不能做型级校正,但整体形态/各向异性可用)。",
 "approach": "1. 加载 external/ 中 MOSTA E9.5 的坐标矩阵(读 manifest 确认其相对时间与目标匹配;若目录为空或无匹配阶段则整个机制跳过,退化为父行为)。2. 对 MOSTA 坐标去质心→PCA→取特征值谱 λ_m=(λ1,λ2,λ3),归一化为比例 r_m=λ_m/λ1。3. 对预测坐标同样去质心→PCA→取 r_p。4. 校正因子 c_i=(r_m_i/r_p_i)^λ(λ 为阻尼系数),在预测坐标的 PCA 主轴上逐轴乘 c_i 后逆旋转回原坐标系。等价于只调各向异性比例,不动质心、不动旋转、不动绝对尺寸。5. 参数:λ∈{0.05,0.10,0.15,0.20,0.30},先跑 λ=0(关闭)验证逐位一致,再跑 λ=0.10 和 0.20 定向(共 3 次查分),若两档均无 >1 分净增益则止损提交关闭态;若某档 shape_scale 升且 local_spatial 不掉超 0.5,再试邻域。6. 单输入阶段退路:MOSTA 是外部文件,不依赖 bracket 结构;若 external/ 无数据或阶段不匹配,自动跳过,输出等同父。7. 视图平移不变:所有时间用 manifest 相对值匹配,不硬编码日期。8. 不改变表达值、细胞数、类型组成;只改坐标的轴比例。",
 "expected_groups": ["shape_scale"],
 "risks": "1) MOSTA 与预测点云的 PCA 主轴语义不对应(MOSTA 可能是切片/投影),导致轴比例无意义→Engineer 应先打印两侧特征值谱,若比例差异 <5% 或排序不一致则提前止损。2) MOSTA 坐标单位/尺度与预测不同→只取归一化比例 r=λ/λ1,不用绝对值,天然免疫。3) 校正方向错误反而推离真值→λ 从 0.05 起步,若 shape_scale 下降立即停止。4) 类型零交集意味着无法做型级空间约束,只能全局校正,增益上限可能 <1 分→这是根本风险,3 次查分即可判定。",
 "family_id": "T2HI-07",
 "mechanism": "用 external/ 中 MOSTA E9.5 真实坐标的 PCA 特征值比例作为目标时间形态先验,对预测点云在自身 PCA 主轴上做阻尼各向异性缩放,使形状比例趋向外部参考。",
 "vs_constant_shift": "不改变任何基因表达值或细胞组成;不添加每型常数位移。仅对坐标做全局各向异性比例微调,且参考来源是外部真实空间数据而非模型内插值。",
 "mechanism_evidence": "Engineer 应记录:(a) MOSTA 与预测的归一化特征值谱 r_m vs r_p 及差异;(b) 校正前后各轴 SD 变化量;(c) 四组分各自变化——预期 shape_scale 上升、local_spatial 基本不动(因局部邻距比例不变,只做全局轴缩放)、cell_state/expression_change 不变(坐标 only)。若 r_m≈r_p(差异 <3%),机制本身无操作空间,应报告并止损。",
 "mechanism_off_control": "默认 λ=0(关闭):校正因子 c_i=(r_m/r_p)^0=1,坐标不变,输出与父节点 24(=父 19/17)逐位一致,用 np.array_equal 验证。"}
原始记录位置/home/spark-longxinyang/vec/runs/formal/20261003-004922-search-t2-heart-interp-g24-D/nodes/26/researcher.jsonl 4 KB
/home/spark-longxinyang/vec/runs/formal/20261003-004922-search-t2-heart-interp-g24-D/nodes/26/researcher.stderr