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

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

节点 n27

全云各向异性轴比时间插值(固定 SVD 参考轴上 σ 做 log 插值目标,混抽+坐标链后逐轴缩放):代理上 λ=0.5/1.0 的 occupancy_dice 均劣化且快于 d2_shape 改善,总分单调低于对照,按预注册放弃规则提交 λ=0,输出与父 17/19/24 管线逐位相同。

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

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

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

全云各向异性轴比时间插值(固定 SVD 参考轴上 σ 做 log 插值目标,混抽+坐标链后逐轴缩放):代理上 λ=0.5/1.0 的 occupancy_dice 均劣化且快于 d2_shape 改善,总分单调低于对照,按预注册放弃规则提交 λ=0,输出与父 17/19/24 管线逐位相同。

方法族与机制(PLAN T2HI-05,family T2HI-05)

在父 24(=父 17/19 管线:procrustes 对齐 → logit 配额混抽 → 同型 kNN 收缩 k=20 α=1.25 → β=1.3 逐类型逐轴方差恢复 → jitter + scale_to_rms)的坐标链末端、jitter/scale_to_rms 之前插入全云各向异性缩放(只动坐标,表达全程不触碰):

  1. 混抽前:取 procrustes 对齐 + 缩放到 target_rms 后的全部 a 侧 + b 侧细胞坐标,计算全云质心 c0,对去质心联合云做 SVD,取前 3 个右奇异向量为固定参考轴 V(3×3);
  2. 分别计算 a、b 两侧全云在 V 各轴上的投影标准差 σ_a[3]、σ_b[3];
  3. 目标轴标准差(log 空间时间插值):σ_t[j] = exp((1−t)·ln σ_a[j] + t·ln σ_b[j]);
  4. 配额混抽与既有坐标链(收缩 / aniso restore / centroid restore)照常执行,不改动;
  5. 坐标链末端:预测云在同一 c0、同一 V 下计算投影标准差 σ_p[3];
  6. 逐轴缩放因子 s[j] = 1 + λ·(σ_t[j]/σ_p[j] − 1),clip 到 [1−C, 1+C](C = T2HI_GANISO_CLIP,默认 0.25);
  7. x' = c0 + V·diag(s)·Vᵀ·(x − c0),随后照常 jitter + scale_to_rms(等比,不改轴比)。

环境变量:T2HI_GANISO_LAM(默认 0.0 = 关闭,早退,逐位无操作)、T2HI_GANISO_CLIP(默认 0.25)。单输入阶段 / 无括号走既有 copy_last 分支,本步不执行。视图无关:只用时间差 t、坐标数据;不读 board / 路径 / 阶段名 / 绝对时间。生物学先验:未使用(PLAN sources 为空)。

机制生效证据(proxy E8.25+E9.5→E8.75,t=0.4,seed 0,λ=1.0)

  • σ_a = [238.5, 202.6, 148.4],σ_b = [250.9, 169.5, 168.2],σ_t = [243.4, 188.6, 156.0];轴比 σ_b/σ_a = [1.052, 0.837, 1.133]——第 2 轴偏离 10% 以上(−16%),机制有非平凡作用空间(PLAN 提前终止条件不触发)。
  • V 的方向余弦:第 1 轴 ≈ (0.08, −0.99, −0.11)、第 2 轴 ≈ (−0.98, −0.06, −0.20)、第 3 轴 ≈ (0.20, 0.12, −0.97)——三轴近似与坐标轴对齐(第 3 轴 ≈ z 切片方向),参考系稳定、由全云主导。
  • 实际缩放因子 s = [1.011, 1.064, 1.008](λ=1):第 2 轴 +6.4%,非全 1,机制确实在改变坐标(λ=0.5 时 s = [1.0055, 1.0320, 1.0039])。
  • 缩放前后投影标准差:σ_p = [240.7, 177.3, 154.8] → σ_post = [243.4, 188.6, 156.0](λ=1 时精确到达 σ_t,clip 未触发)。
  • 四组分变化(A 半):expression_change 72.08 → 72.08(+0.00,机制不触碰表达,de_score 0.5435 / de_direction 0.6619 逐位不变);cell_state 71.56 → 71.56(+0.00,mmd_u 0.02386 / variogram 0.022669 不变);local_spatial 69.96 → 69.96(nbd 0.04145 → 0.04145/0.04140,λ=0.5/1 变化 <0.2%,远低于 10% 恶化阈);shape_scale 52.51 → 52.23(λ=0.5)/ 51.99(λ=1)——组内 d2_shape raw 0.03915 → 0.03810 → 0.03725(改善),但 occupancy_dice raw 0.8246 → 0.8159 → 0.8080(劣化,skill 0.5246 → 0.4959 跌破地板),净效应为负。

关闭机制对照与网格(全部 vec-score A 半,同会话,seed 0,共 5 次查分 / 额度 20)

对照 λ=0:与父 24(=父 17/19 管线)默认输出 .X 与 obsm 均 np.array_equal = True,A 半总分 66.53,八项 raw 与父会话逐位一致,基座复现确认。

配置总分d2_shape rawoccupancy_dice rawnbd rawshape_scale
λ=0(提交默认)66.530.039150.82460.0414552.51
λ=0.5, clip=0.2566.480.038100.81590.0414052.23
λ=1.0, clip=0.2566.400.037250.80800.0414551.99

预注册放弃规则触发:λ=1 时 occupancy_dice raw 改善 <0.005(实际 −0.0166,劣化)→ 提交 λ=0。未再扫 λ=0.3/0.7:d2_shape 收益与 occupancy_dice 损失均随 λ 单调,λ=0.5 已是两点内插且仍低于对照,无内部极大值迹象(与节点 24 相同的止损逻辑)。

结论与教训(本节点验证了什么、没验证什么)

  • 证伪(本节点核心负结果):"混抽云的全云轴比偏离两侧 log 插值目标"这一结构假设在代理上部分成立(轴比确被拉向 σ_t),但把轴比校正到 log 插值目标不是 occupancy_dice 的改善方向:occupancy_dice 在 ±3 RMS 的 16³ 网格上比较占据体素,对径向质量分布(壳层/空隙结构)敏感,而不仅是各轴二阶矩;沿第 2 轴拉伸 6.4% 使 d2_shape(尺度归一距离分布)变好的同时把占据体素推离真值网格。混抽 + 逐类型 aniso restore 后的全云轴比已经处在比 log 插值目标更优的位置。
  • d2_shape 与 occupancy_dice 可以朝相反方向走(本节点实测),shape_scale 组内不存在"轴比对齐即全组改善"的单一杠杆。
  • 未验证:λ∈{0.3, 0.7}、clip 更小值、"保体积各向异性"(s 归一化到 det=1)、只在 z 轴或只在 xy 内校正(放弃规则触发后未扫);外推榜与胚榜(本节点只做 heart:val_interp)。
  • 已验证:λ=0 输出与父逐位相同(np.array_equal .X/obsm)、vec-check ok(seed 0 与 seed 1)、单 seed 复跑确定。

下一步建议

  • shape_scale 组的二阶矩类全局校正(RMS 缩放、轴比插值)已两轮证伪(节点 17/19/21 平台 + 本节点),若再挖需要占据结构层面的机制(径向密度剖面校正),且必须同时监控 d2_shape 与 occupancy_dice 的反向风险。
  • 表达侧"修正 dp"方向维持关闭(节点 15/22/24 三次证伪);de_score 提升需 Δ 之外的信息源(prior/ 或 external/ MOSTA E9.5),属新机制族 draft。
  • neighborhood_mmd(skill 0.700,25 分权重最大)对坐标扰动极稳健(本节点 ±6% 轴缩放下 raw 变化 <0.2%),说明温和的全局坐标变形不消耗结构门余量——后续坐标机制可以把门风险预算花在别处。

调研员的计划

名称全云各向异性轴比时间插值(global anisotropic shape calibration)
动机shape_scale 组(51.86)是四组最低,三项 skill 均贴地板(0.507–0.537)。父节点 ANALYSIS 明确指出坐标链全局缩放已平台化(节点 17/19/21 全网格 <1 分),需非全局形状机制。occupancy_dice skill=0.507 几乎等于地板,说明当前类型内操作(收缩+逐类型 aniso restore)未改善全云占据形状。结构原因:节点 17 的 aniso restore 是逐类型的(恢复类型内轴比),不改变类型间空间关系;而 occupancy_dice 在居中、主轴对齐、RMS 归一化后比较全云占据体素,主要由全云轴比(各轴相对展布)决定。两个输入阶段(E8.5/E9.5)的全云轴比存在发育趋势,但混抽后的轴比是两者的加权混合而非时间插值目标,需要显式校正。
做法在父管线 procrustes 对齐后、配额混抽后、jitter/scale_to_rms 前,插入全云各向异性缩放步骤:

1. 混抽前:取 procrustes 对齐后的全部 a 侧 + b 侧细胞坐标,计算全云质心 c0 并减去,做 SVD 取前 3 个右奇异向量作为固定参考轴 V(3×3)。
2. 分别计算 a 侧、b 侧细胞在 V 各轴上的投影标准差 σ_a[3]、σ_b[3]。
3. 目标轴标准差(log 空间插值):σ_t[j] = exp((1−t)·ln σ_a[j] + t·ln σ_b[j])。
4. 执行已有的配额混抽(不改动)。
5. 混抽后:计算预测细胞在同一 V、同一 c0 下的投影标准差 σ_p[3]。
6. 缩放因子:s[j] = 1 + λ·(σ_t[j]/σ_p[j] − 1),clip 到 [1−C, 1+C](C=T2HI_GANISO_CLIP,默认 0.25)。
7. 对每个细胞坐标:x' = c0 + V·diag(s)·Vᵀ·(x − c0)。
8. 继续已有管线(jitter + scale_to_rms)。

环境变量:T2HI_GANISO_LAM(默认 0.0 = 关闭,早退,逐位无操作);T2HI_GANISO_CLIP(默认 0.25)。

网格:λ ∈ {0.5, 1.0};若 λ=1 有效再试 {0.3, 0.7}。预注册放弃规则:λ=1 时 occupancy_dice raw 改善 <0.005 或 neighborhood_mmd raw 恶化 >10%(相对对照 0.04153),则提交 λ=0。

单输入阶段退路:无括号(只有一个输入阶段)时跳过此步骤,走 copy_last 分支。

vec-score 快速筛选:先跑 λ=0(对照,确认逐位复现)和 λ=1,比较八项。重点看 occupancy_dice raw(基线 0.8143)和 neighborhood_mmd raw(基线 0.04153)。若两者都无显著变化(<噪声),检查 σ_a 与 σ_b 的轴比差异——若三轴差异均 <10%,说明该代理上两阶段形状接近,机制无收益空间,直接提交 λ=0。
风险1. 两个输入阶段的全云轴比差异可能很小(心脏在 E8.5→E9.5 形状变化有限),缩放因子接近 1,效果在噪声内。Engineer 应在执行缩放前先打印 σ_a、σ_b、σ_t,若三轴 σ_b/σ_a 均在 [0.9, 1.1] 内则预期收益极小,可提前终止。2. 全云 PCA 轴可能不稳定(受细胞数多的类型主导),缩放方向不反映真正的形状趋势。检查方法:打印 V 的方向余弦,确认主轴与解剖方向大致对应。3. 非等比缩放改变细胞间距离,可能恶化 neighborhood_mmd(当前 skill 0.703,门阈值 0.5,有余量但不能过度消耗)。若 nbd raw 恶化 >10%,降低 λ 或放弃。4. 评分器的 occupancy_dice 会对预测做自己的主轴对齐,若缩放改变了预测的内在主轴方向,效果可能被部分抵消——但温和缩放(因子在 0.75–1.25)下主轴方向变化很小。

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

对比:父节点版本 09d265baad。改动的文件:solution/METHOD.md +30 −28、solution/run.py +81 −1

diff --git a/solution/METHOD.md b/solution/METHOD.mdindex 62dfa2d..d5e3071 100644--- a/solution/METHOD.md+++ b/solution/METHOD.md@@ -1,46 +1,48 @@-逐基因零阶矩符号校正(全细胞加同一常数 c_g=λ(tΔ_g−dp_g)):代理上 flip 集恒为空,full-ref/all 变体 de_score 均降且 variogram 超阈,按预注册规则提交 λ=0,输出与父 17/19 管线逐位相同。+全云各向异性轴比时间插值(固定 SVD 参考轴上 σ 做 log 插值目标,混抽+坐标链后逐轴缩放):代理上 λ=0.5/1.0 的 occupancy_dice 均劣化且快于 d2_shape 改善,总分单调低于对照,按预注册放弃规则提交 λ=0,输出与父 17/19/24 管线逐位相同。 -## 方法族与机制(PLAN T2HI-01,family T2HI-01)+## 方法族与机制(PLAN T2HI-05,family T2HI-05) -在父 22(=父 19/17 管线:procrustes 对齐 → logit 配额混抽 → 同型 kNN 收缩 k=20 α=1.25 → β=1.3 逐轴方差恢复 → jitter + scale_to_rms)的**配额混抽之后、坐标链之前**插入表达侧步骤(只动表达,坐标链不受影响):+在父 24(=父 17/19 管线:procrustes 对齐 → logit 配额混抽 → 同型 kNN 收缩 k=20 α=1.25 → β=1.3 逐类型逐轴方差恢复 → jitter + scale_to_rms)的**坐标链末端、jitter/scale_to_rms 之前**插入全云各向异性缩放(只动坐标,表达全程不触碰): -1. Δ_g = mean_b,g − mean_a,g(括号时间信号;`T2HI_SIGN_REF=drawn` 用两侧全部抽取细胞均值,`=full` 用两侧完整阶段均值);-2. dp_g = pb_pred,g − pb_ref,g(pb_ref 按 PLAN 用抽取的 side-a 均值近似;full 模式用完整 stage-a 均值);-3. 校正集:`T2HI_SIGN_MODE=flip`(PLAN 原案)取 sign(dp)≠sign(Δ) 且 |Δ|>T2HI_SIGN_THRESH(0.25);`=all` 取所有 |Δ|>0.25;-4. 对校正集基因,**所有细胞加同一常数** c_g = λ·(t·Δ_g − dp_g),clip ≥ 0;`T2HI_SIGN_PASSES` 可多遍补偿 clip 偏差;-5. 环境变量:`T2HI_SIGN_LAM`(默认 **0.0** = 关闭,早退,逐位无操作)、`T2HI_SIGN_THRESH`(0.25)、`T2HI_SIGN_MODE`(flip)、`T2HI_SIGN_REF`(drawn)、`T2HI_SIGN_PASSES`(1)。+1. 混抽前:取 procrustes 对齐 + 缩放到 target_rms 后的**全部** a 侧 + b 侧细胞坐标,计算全云质心 c0,对去质心联合云做 SVD,取前 3 个右奇异向量为固定参考轴 V(3×3);+2. 分别计算 a、b 两侧全云在 V 各轴上的投影标准差 σ_a[3]、σ_b[3];+3. 目标轴标准差(log 空间时间插值):σ_t[j] = exp((1−t)·ln σ_a[j] + t·ln σ_b[j]);+4. 配额混抽与既有坐标链(收缩 / aniso restore / centroid restore)照常执行,不改动;+5. 坐标链末端:预测云在**同一 c0、同一 V** 下计算投影标准差 σ_p[3];+6. 逐轴缩放因子 s[j] = 1 + λ·(σ_t[j]/σ_p[j] − 1),clip 到 [1−C, 1+C](C = T2HI_GANISO_CLIP,默认 0.25);+7. x' = c0 + V·diag(s)·Vᵀ·(x − c0),随后照常 jitter + scale_to_rms(等比,不改轴比)。 -单输入/无括号走 copy_last 分支(本步不执行)。视图无关:只用时间差 t、表达矩阵、manifest 上下限;不读 board/路径/阶段名/绝对时间。生物学先验:未使用(PLAN sources 为空)。+环境变量:`T2HI_GANISO_LAM`(默认 **0.0** = 关闭,早退,逐位无操作)、`T2HI_GANISO_CLIP`(默认 0.25)。单输入阶段 / 无括号走既有 copy_last 分支,本步不执行。视图无关:只用时间差 t、坐标数据;不读 board / 路径 / 阶段名 / 绝对时间。生物学先验:未使用(PLAN sources 为空)。  ## 机制生效证据(proxy E8.25+E9.5→E8.75,t=0.4,seed 0,λ=1.0) -- **flip 集在 drawn ref 下为空(结构性发现)**:混抽伪批量满足恒等式 dp = w_b·Δ_drawn(w_b=n_b/n>0),符号永远一致,|S|=0——PLAN 假设的"组成混抽使部分基因呈现错误符号"在该参考近似下**不可能发生**,λ=0.5/1.0 均为逐位无操作。-- full ref(消掉抽取噪声后)|S|=20,mean|c_g|=0.294;mode=all:drawn 182 基因 mean|c|=0.066、full 192 基因 mean|c|=0.129——确为稀疏逐基因修正而非全局操作。-- 修正确实只动基因均值:所有细胞同一基因加同一常数;但 **clip ≥ 0 破坏均匀性**——校正基因的平均 std 变化 drawn-all −0.023、full-flip −0.123、full-all −0.039,variogram 随之劣化(见下表),PLAN 的"variogram 精确不变"只在无 clip 时成立。-- 坐标全程未动:d2_shape 0.03915、occupancy_dice 0.8246、scale_log_ratio 0.4669 在全部配置间逐位一致。+- σ_a = [238.5, 202.6, 148.4],σ_b = [250.9, 169.5, 168.2],σ_t = [243.4, 188.6, 156.0];轴比 σ_b/σ_a = [1.052, 0.837, 1.133]——第 2 轴偏离 10% 以上(−16%),机制有非平凡作用空间(PLAN 提前终止条件不触发)。+- V 的方向余弦:第 1 轴 ≈ (0.08, −0.99, −0.11)、第 2 轴 ≈ (−0.98, −0.06, −0.20)、第 3 轴 ≈ (0.20, 0.12, −0.97)——三轴近似与坐标轴对齐(第 3 轴 ≈ z 切片方向),参考系稳定、由全云主导。+- 实际缩放因子 s = [1.011, 1.064, 1.008](λ=1):第 2 轴 +6.4%,非全 1,机制确实在改变坐标(λ=0.5 时 s = [1.0055, 1.0320, 1.0039])。+- 缩放前后投影标准差:σ_p = [240.7, 177.3, 154.8] → σ_post = [243.4, 188.6, 156.0](λ=1 时精确到达 σ_t,clip 未触发)。+- 四组分变化(A 半):expression_change 72.08 → 72.08(+0.00,机制不触碰表达,de_score 0.5435 / de_direction 0.6619 逐位不变);cell_state 71.56 → 71.56(+0.00,mmd_u 0.02386 / variogram 0.022669 不变);local_spatial 69.96 → 69.96(nbd 0.04145 → 0.04145/0.04140,λ=0.5/1 变化 <0.2%,远低于 10% 恶化阈);shape_scale 52.51 → 52.23(λ=0.5)/ 51.99(λ=1)——组内 d2_shape raw 0.03915 → 0.03810 → 0.03725(改善),但 occupancy_dice raw 0.8246 → 0.8159 → 0.8080(劣化,skill 0.5246 → 0.4959 跌破地板),净效应为负。  ## 关闭机制对照与网格(全部 vec-score A 半,同会话,seed 0,共 5 次查分 / 额度 20) -对照 λ=0:与父 22(=父 19/17 管线)默认输出 `.X` 与 `obsm` 均 np.array_equal = **True**,A 半总分 **66.53**,八项 raw 与父会话逐位一致(de_score 0.5435、de_direction 0.6619、mmd_u 0.02386、variogram 0.022669、nbd 0.04145),基座复现确认。+对照 λ=0:与父 24(=父 17/19 管线)默认输出 `.X` 与 `obsm` 均 np.array_equal = **True**,A 半总分 **66.53**,八项 raw 与父会话逐位一致,基座复现确认。 -| 配置 | 总分 | de_score | de_direction | mmd_u | variogram | nbd |-|---|---:|---:|---:|---:|---:|---:|-| **λ=0(提交默认)** | **66.53** | 0.5435 | 0.6619 | 0.02386 | 0.022669 | 0.04145 |-| flip, drawn ref, λ=1 | (=对照,\|S\|=0 逐位相同) | — | — | — | — | — |-| flip, full ref, λ=1 | 65.87 | 0.5000 | 0.6509 | 0.02514 | 0.022871 | 0.04278 |-| all, drawn ref, λ=1 | 65.80 | 0.5326 | 0.6597 | 0.02434 | 0.027819 | 0.04179 |-| all, full ref, λ=1 | 62.76 | 0.4674 | 0.6354 | 0.02692 | 0.049033 | 0.04600 |+| 配置 | 总分 | d2_shape raw | occupancy_dice raw | nbd raw | shape_scale |+|---|---:|---:|---:|---:|---:|+| **λ=0(提交默认)** | **66.53** | 0.03915 | 0.8246 | 0.04145 | 52.51 |+| λ=0.5, clip=0.25 | 66.48 | 0.03810 | 0.8159 | 0.04140 | 52.23 |+| λ=1.0, clip=0.25 | 66.40 | 0.03725 | 0.8080 | 0.04145 | 51.99 | -PLAN 快筛标准(de_score raw 上升 ≥0.01 且 variogram ≤ 基线+5%)**全部不满足**:de_score 不升反降(−0.011 ~ −0.076),variogram +1% ~ +116%。按预注册放弃规则停止网格(未再扫 λ=0.3/0.7,因 λ=1 已是该方向上界且单调劣化模式与节点 15/22 一致),提交 λ=0。+**预注册放弃规则触发**:λ=1 时 occupancy_dice raw 改善 <0.005(实际 −0.0166,劣化)→ 提交 λ=0。未再扫 λ=0.3/0.7:d2_shape 收益与 occupancy_dice 损失均随 λ 单调,λ=0.5 已是两点内插且仍低于对照,无内部极大值迹象(与节点 24 相同的止损逻辑)。  ## 结论与教训(本节点验证了什么、没验证什么) -- **证伪(本节点核心负结果)**:零阶矩逐基因修正在本管线上**信息论上无收益空间**——混抽伪批量已满足 dp = w_b·Δ_drawn + 小噪声,而 de_score/de_direction 是秩基指标:对 dp 加任何 c_g = f(Δ_g),若 f 单调则秩不变、若非单调(或 clip 扭曲实现值)则偏离 Δ 的秩。dt 的秩信息除 Δ 之外无本地来源,故该机制族不可能提升 DE 组,只可能通过 clip 损伤 cell_state 组。三次实测全部符合此预测。-- 未验证:λ∈{0.3,0.7}、passes=2、thresh=0(放弃规则触发后未扫);外推榜与胚榜(本节点只做 heart:val_interp)。-- 已验证:λ=0 输出与父逐位相同(np.array_equal .X/obsm)、vec-check ok、单 seed(0)。+- **证伪(本节点核心负结果)**:"混抽云的全云轴比偏离两侧 log 插值目标"这一结构假设在代理上部分成立(轴比确被拉向 σ_t),但**把轴比校正到 log 插值目标不是 occupancy_dice 的改善方向**:occupancy_dice 在 ±3 RMS 的 16³ 网格上比较占据体素,对径向质量分布(壳层/空隙结构)敏感,而不仅是各轴二阶矩;沿第 2 轴拉伸 6.4% 使 d2_shape(尺度归一距离分布)变好的同时把占据体素推离真值网格。混抽 + 逐类型 aniso restore 后的全云轴比已经处在比 log 插值目标更优的位置。+- d2_shape 与 occupancy_dice 可以朝相反方向走(本节点实测),shape_scale 组内不存在"轴比对齐即全组改善"的单一杠杆。+- 未验证:λ∈{0.3, 0.7}、clip 更小值、"保体积各向异性"(s 归一化到 det=1)、只在 z 轴或只在 xy 内校正(放弃规则触发后未扫);外推榜与胚榜(本节点只做 heart:val_interp)。+- 已验证:λ=0 输出与父逐位相同(np.array_equal .X/obsm)、vec-check ok(seed 0 与 seed 1)、单 seed 复跑确定。  ## 下一步建议 -- 表达侧"修正 dp"路线(节点 15 均值位移、22 配对插值、24 符号校正)已三次证伪,**关闭该方向**:任何仅由括号数据计算的逐基因/逐细胞表达修改都无法超越 Δ 的秩信息,且 clip/方差压缩必然损伤 cell_state 组。-- de_score 若要提升,需要 Δ 之外的 dt 信息源:prior/(通路注释推断基因非线性轨迹)或 external/(MOSTA E9.5)——属于新机制族,需 draft 节点。-- 坐标链已确认平台(节点 17/19/21 全网格 <1 分),不建议再动。+- shape_scale 组的二阶矩类全局校正(RMS 缩放、轴比插值)已两轮证伪(节点 17/19/21 平台 + 本节点),若再挖需要**占据结构**层面的机制(径向密度剖面校正),且必须同时监控 d2_shape 与 occupancy_dice 的反向风险。+- 表达侧"修正 dp"方向维持关闭(节点 15/22/24 三次证伪);de_score 提升需 Δ 之外的信息源(prior/ 或 external/ MOSTA E9.5),属新机制族 draft。+- neighborhood_mmd(skill 0.700,25 分权重最大)对坐标扰动极稳健(本节点 ±6% 轴缩放下 raw 变化 <0.2%),说明温和的全局坐标变形不消耗结构门余量——后续坐标机制可以把门风险预算花在别处。diff --git a/solution/run.py b/solution/run.pyindex c18fa28..9172c75 100644--- a/solution/run.py+++ b/solution/run.py@@ -10,7 +10,18 @@ T2HI_COMPOSITION=linear). Shared types split their quota between the sides as (1-t, t); single-side types draw from that side only, capped by availability with proportional redistribution. -Addition in this node (T2HI-01, per-gene zeroth-moment sign correction):+Addition in this node (T2HI-05, global anisotropic axis-ratio time interpolation):+- env T2HI_GANISO_LAM (default 0.0 = off, early-return bit-for-bit no-op),+  T2HI_GANISO_CLIP (default 0.25): before mixing, the full aligned+scaled a/b+  clouds define a fixed frame (centroid c0, top-3 SVD axes V) and per-axis+  projection stds sigma_a/sigma_b; the target is the log-space time+  interpolation sigma_t = exp((1-t) ln sigma_a + t ln sigma_b). After mixing+  and the existing contraction/aniso/centroid chain, the prediction cloud is+  rescaled per axis around c0 on V by s_j = 1 + lam*(sigma_t_j/sigma_p_j - 1)+  clipped to [1-clip, 1+clip], then the usual jitter + scale_to_rms follow.+  Coordinates only; expression is never touched.++Kept from parent (T2HI-01, per-gene zeroth-moment sign correction): - env T2HI_SIGN_LAM (default 0.0 = off, bit-for-bit no-op): after quota mixing,   compute delta_g = mean_b,g - mean_a,g (drawn cells; or full stage means with   T2HI_SIGN_REF=full), dp_g = pb_pred,g - pb_ref,g, and add the SAME constant@@ -134,6 +145,47 @@ def _jitter(coords: np.ndarray, rng: np.random.Generator) -> np.ndarray:     return out  +def ganiso_axes(ca: np.ndarray, cb: np.ndarray, t: float):+    """Fixed reference frame + per-axis log-interpolated target std (T2HI-05 global).++    Computed on the FULL aligned+scaled side-a and side-b clouds before mixing:+    c0 = global centroid, V = top-3 right singular vectors of the joint cloud,+    sigma_a/sigma_b = per-axis projection std of each side around c0, and+    sigma_t = exp((1-t)*ln sigma_a + t*ln sigma_b). Returns (c0, V, sigma_a,+    sigma_b, sigma_t).+    """+    joint = np.vstack([ca, cb])+    c0 = joint.mean(axis=0)+    dev = joint - c0+    _, _, Vt = np.linalg.svd(dev, full_matrices=False)+    V = Vt[:3].T+    sa = (ca - c0) @ V+    sb = (cb - c0) @ V+    sigma_a = np.maximum(sa.std(axis=0), 1e-9)+    sigma_b = np.maximum(sb.std(axis=0), 1e-9)+    sigma_t = np.exp((1.0 - t) * np.log(sigma_a) + t * np.log(sigma_b))+    return c0, V, sigma_a, sigma_b, sigma_t+++def ganiso_scale(coords: np.ndarray, c0: np.ndarray, V: np.ndarray, sigma_t: np.ndarray, lam: float, clip: float):+    """Anisotropically rescale the mixed cloud toward the target axis stds.++    sigma_p = per-axis projection std of the prediction cloud around the SAME c0+    on the SAME axes V; per-axis factor s_j = 1 + lam*(sigma_t_j/sigma_p_j - 1)+    clipped to [1-clip, 1+clip]; x' = c0 + V diag(s) V^T (x - c0). lam=0 is a+    bit-for-bit no-op (early return). Returns (coords, report dict).+    """+    if lam == 0.0 or coords.shape[0] < 4:+        return coords, {"active": False}+    proj = (coords - c0) @ V+    sigma_p = np.maximum(proj.std(axis=0), 1e-9)+    s = 1.0 + lam * (sigma_t / sigma_p - 1.0)+    s = np.clip(s, 1.0 - clip, 1.0 + clip)+    out = c0 + (proj * s) @ V.T+    sigma_post = np.maximum(((out - c0) @ V).std(axis=0), 1e-9)+    return out, {"active": True, "sigma_p": sigma_p, "s": s, "sigma_post": sigma_post}++ def colocalize(ca, la_sel, cb, lb_sel, t: float, gamma: float, min_count: int):     """Translate each shared type's two drawn sub-clouds onto their interpolated centroid. @@ -612,6 +664,20 @@ def run(view: str, out: str, seed: int) -> None:     target_rms = log_interp(rms_a, rms_b, float(t), damp)     ca = scale_to_rms(aligned_a, target_rms)     cb = scale_to_rms(aligned_b, target_rms)+    ganiso_lam = float(os.environ.get("T2HI_GANISO_LAM", "0.0"))+    ganiso_clip = float(os.environ.get("T2HI_GANISO_CLIP", "0.25"))+    ganiso_frame = None+    if ganiso_lam != 0.0 and ca.shape[0] and cb.shape[0]:+        c0, V, sigma_a, sigma_b, sigma_t = ganiso_axes(ca, cb, float(t))+        ganiso_frame = (c0, V, sigma_t)+        ratio_ba = sigma_b / sigma_a+        print(+            f"[ganiso-pre] lam={ganiso_lam} clip={ganiso_clip} t={float(t):.4f}\n"+            f"  sigma_a={[f'{v:.1f}' for v in sigma_a]} sigma_b={[f'{v:.1f}' for v in sigma_b]}\n"+            f"  sigma_t={[f'{v:.1f}' for v in sigma_t]} ratio_b/a={[f'{v:.3f}' for v in ratio_ba]}\n"+            f"  V_dir_cosines={[[f'{x:.3f}' for x in row] for row in V.T.tolist()]}",+            flush=True,+        )     n = interp_count(stage_a.n, stage_b.n, float(t), lo, hi, 1.0)      types, f_use, f_lin, pa, pb = composition(stage_a.labels, stage_b.labels, float(t), mode, eps)@@ -743,6 +809,20 @@ def run(view: str, out: str, seed: int) -> None:         print(f"[inter] gamma={inter_gamma} min={inter_min} types={len(inter_rep)} rms={rms_radius(coords):.1f}", flush=True)         for ty, cnt, dnorm, delnorm in inter_rep:             print(f"  {ty}: n={cnt} |d_pre-d_post|={dnorm:.4f} |delta|={delnorm:.4f}", flush=True)+    if ganiso_frame is not None:+        c0, V, sigma_t = ganiso_frame+        coords, g_rep = ganiso_scale(coords, c0, V, sigma_t, ganiso_lam, ganiso_clip)+        if g_rep["active"]:+            print(+                f"[ganiso] sigma_p={[f'{v:.1f}' for v in g_rep['sigma_p']]} "+                f"s={[f'{v:.4f}' for v in g_rep['s']]} "+                f"sigma_post={[f'{v:.1f}' for v in g_rep['sigma_post']]} "+                f"sigma_target/sigma_post={[f'{v:.3f}' for v in (sigma_t / g_rep['sigma_post'])]} "+                f"rms={rms_radius(coords):.1f}",+                flush=True,+            )+        else:+            print("[ganiso] inactive (too few cells)", flush=True)     coords = _jitter(coords, rng)     coords = scale_to_rms(coords, target_rms)     print(f"[out] n={expr.shape[0]} out_rms={rms_radius(coords):.1f}", flush=True)

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

用到的知识库条目

编号标题出处
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
k016Degenerate-solution checks for population predictionsnotes/handover/02_知识学习路线.md

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

改了什么按 PLAN T2HI-05 在父 24 管线坐标链末端插入全云各向异性缩放(两侧全云 SVD 定固定参考轴,σ 做 log 时间插值得目标轴展布,混抽后逐轴缩放,λ/clip 环境变量控制);代理网格显示 λ=0.5/1.0 时 d2_shape 改善但 occupancy_dice 劣化更快,触发预注册放弃规则,最终提交 λ=0,输出与父节点逐位相同(np.array_equal 验证,66.58 = 父 66.58)。
各组分数的变化cell_state:噪声内(+0.00,72.43→72.43,mmd_u 0.02337 / variogram 0.0206 与对照逐位一致)
expression_change:噪声内(+0.00,71.71→71.71,提交 λ=0 与父逐位相同;机制本就不触碰表达)
local_spatial:噪声内(+0.00,70.32→70.32);网格实测 ±6% 轴缩放下 neighborhood_mmd raw 变化 <0.2%(0.04145→0.04140/0.04145)
shape_scale:噪声内(+0.00,51.86→51.86);网格内部实测:λ=1 时 d2_shape raw 0.03915→0.03725(改善)但 occupancy_dice raw 0.8246→0.8080(劣化,skill 跌破地板),shape_scale 52.51→51.99,净效应为负
family_idT2HI-05
假设是否成立否
经验
  1. 在混抽+逐类型 aniso restore 管线上,把全云轴比校正到两侧 log 插值目标不是 occupancy_dice 的改善方向:occupancy_dice 对径向质量分布(占据体素)敏感而非仅二阶矩,实测沿第 2 轴拉伸 6.4% 使 d2_shape 变好(0.03915→0.03725)的同时 occupancy_dice 劣化(0.8246→0.8080,skill 跌破地板)。
  2. d2_shape 与 occupancy_dice 可以朝相反方向走,shape_scale 组内不存在'轴比对齐即全组改善'的单一杠杆;任何形状机制必须同时监控两项的方向。
  3. shape_scale 组的二阶矩类全局校正(RMS 缩放、轴比插值)已两轮证伪(节点 17/19/21 平台 + 本节点),该子空间已挖尽。
  4. 温和的全局坐标变形(±6% 轴缩放)几乎不消耗结构门余量:neighborhood_mmd raw 变化 <0.2%,后续坐标机制可放心使用门预算。
  5. 预注册放弃规则 + 两点单调趋势判断止损有效:d2 收益与 occupancy 损失均随 λ 单调、λ=0.5 已是内插点仍低于对照,无需扫完网格即可提交 λ=0,节省查分额度(5/20)。
mechanism_active否
下一步建议
  1. shape_scale 组:若继续挖,改用占据结构层面的机制(径向密度剖面校正,比较预测与混抽云到质心的距离分布并温和重排),针对 shape_scale 组,必须同时监控 d2_shape 与 occupancy_dice 的反向风险,预注册两项都不劣化的门槛。
  2. expression_change 组:de_score 提升需要 Δ 之外的信息源(prior/ 通路注释或 external/ MOSTA E9.5),属新机制族,需 draft 节点;'修正 dp'路线(节点 15/22/24)已三次证伪,维持关闭。
  3. 坐标机制设计时可利用 nbd 对温和全局变形稳健这一事实(±6% 缩放 raw 变化 <0.2%),把结构门风险预算留给更激进的空间重组(如类型间相对位置调整)。

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

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

分析员

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

工程师

角色工程师 alibaba-token-plan-cn/qwen3.8-max
调用次数1 次
轮数18
工具调用共 24 次:bash 18、edit 4、read 1、write 1
用时7 分
token 数输入 41,389 · 输出 7,785 · 思考 6,997
任务(第一行)按计划修改程序:全云各向异性轴比时间插值(global anisotropic shape calibration)
最后的回答(摘录)
完成。总结:

- **做了什么**:按 PLAN T2HI-05 在父 24 管线的坐标链末端(jitter/scale_to_rms 前)实现全云各向异性轴比时间插值:混抽前用两侧全云 SVD 定固定参考轴,σ 做 log 空间时间插值得目标轴展布,混抽后逐轴缩放(`T2HI_GANISO_LAM`/`CLIP`,默认 λ=0 关闭)。机制确认生效:轴比 σ_b/σ_a=[1.05, 0.84, 1.13],λ=1 时缩放因子 [1.011, 1.064, 1.008],精确到达 σ_t。
- **查分结果**(5/20 次):对照 λ=0 = 66.53(与父逐位相同,np.array_equal 验证);λ=0.5 = 66.48;λ=1.0 = 66.40。d2_shape 随 λ 改善(0.03915→0.03725)但 occupancy_dice 劣化更快(0.8246→0.8080,skill 跌破地板),nbd 变化 <0.2%。预注册放弃规则触发,**提交 λ=0**,正式分与父一致(66.58),vec-check ok(seed 0/1)、复跑确定。
- **下一步最值得试**:① shape_scale 需占据结构层面机制(径向密度剖面),二阶矩类全局校正已两轮证伪,且注意 d2_shape 与 occupancy_dice 可反向;② de_score 提升需 Δ 之外信息源(prior/ 通路或 external/ MOSTA E9.5),属新机制族 draft;③ 温和全局坐标变形几乎不耗结构门余量(nbd 稳健),坐标机制可大胆用门预算。
原始记录位置/home/spark-longxinyang/vec/runs/formal/20261003-094241-search-t2-heart-interp-g24-D-s2/nodes/27/engineer.jsonl 165 KB
/home/spark-longxinyang/vec/runs/formal/20261003-094241-search-t2-heart-interp-g24-D-s2/nodes/27/engineer.stderr

调研员

角色调研员 alibaba-token-plan-cn/qwen3.8-max
调用次数1 次
轮数1
工具调用共 0 次:—
用时6 分
token 数输入 18,261 · 输出 9,236 · 思考 8,192
任务(第一行)为节点 n27(改进,父节点 n24)写改进计划 PLAN.json
最后的回答(摘录)
异向量作为固定参考轴 V(3×3)。\n2. 分别计算 a 侧、b 侧细胞在 V 各轴上的投影标准差 σ_a[3]、σ_b[3]。\n3. 目标轴标准差(log 空间插值):σ_t[j] = exp((1−t)·ln σ_a[j] + t·ln σ_b[j])。\n4. 执行已有的配额混抽(不改动)。\n5. 混抽后:计算预测细胞在**同一** V、同一 c0 下的投影标准差 σ_p[3]。\n6. 缩放因子:s[j] = 1 + λ·(σ_t[j]/σ_p[j] − 1),clip 到 [1−C, 1+C](C=T2HI_GANISO_CLIP,默认 0.25)。\n7. 对每个细胞坐标:x' = c0 + V·diag(s)·Vᵀ·(x − c0)。\n8. 继续已有管线(jitter + scale_to_rms)。\n\n环境变量:T2HI_GANISO_LAM(默认 0.0 = 关闭,早退,逐位无操作);T2HI_GANISO_CLIP(默认 0.25)。\n\n网格:λ ∈ {0.5, 1.0};若 λ=1 有效再试 {0.3, 0.7}。预注册放弃规则:λ=1 时 occupancy_dice raw 改善 <0.005 或 neighborhood_mmd raw 恶化 >10%(相对对照 0.04153),则提交 λ=0。\n\n单输入阶段退路:无括号(只有一个输入阶段)时跳过此步骤,走 copy_last 分支。\n\nvec-score 快速筛选:先跑 λ=0(对照,确认逐位复现)和 λ=1,比较八项。重点看 occupancy_dice raw(基线 0.8143)和 neighborhood_mmd raw(基线 0.04153)。若两者都无显著变化(<噪声),检查 σ_a 与 σ_b 的轴比差异——若三轴差异均 <10%,说明该代理上两阶段形状接近,机制无收益空间,直接提交 λ=0。",
  "expected_groups": ["shape_scale"],
  "risks": "1. 两个输入阶段的全云轴比差异可能很小(心脏在 E8.5→E9.5 形状变化有限),缩放因子接近 1,效果在噪声内。Engineer 应在执行缩放前先打印 σ_a、σ_b、σ_t,若三轴 σ_b/σ_a 均在 [0.9, 1.1] 内则预期收益极小,可提前终止。2. 全云 PCA 轴可能不稳定(受细胞数多的类型主导),缩放方向不反映真正的形状趋势。检查方法:打印 V 的方向余弦,确认主轴与解剖方向大致对应。3. 非等比缩放改变细胞间距离,可能恶化 neighborhood_mmd(当前 skill 0.703,门阈值 0.5,有余量但不能过度消耗)。若 nbd raw 恶化 >10%,降低 λ 或放弃。4. 评分器的 occupancy_dice 会对预测做自己的主轴对齐,若缩放改变了预测的内在主轴方向,效果可能被部分抵消——但温和缩放(因子在 0.75–1.25)下主轴方向变化很小。",
  "family_id": "T2HI-05",
  "mechanism": "用两个输入阶段全云在固定参考轴上的轴标准差做 log 空间时间插值,得到目标轴比,然后沿各轴非等比缩放混抽后的坐标,使预测点云的归一化占据形状(各轴相对展布)更接近目标阶段。",
  "vs_constant_shift": "这是坐标空间的各向异性缩放(三个主轴方向各自不同的缩放因子),不是表达值的逐基因常数位移,也不是等比全局缩放。它改变的是细胞间的相对距离和全云的轴比(形状),不改变任何基因的表达值,也不改变全云 RMS(最后有 scale_to_rms)。",
  "mechanism_evidence": "Engineer 应打印:(1) σ_a[3]、σ_b[3]、σ_t[3] 和缩放因子 s[3]——若三轴缩放因子不全为 1(至少一轴偏离 >5%),机制在运行;(2) 缩放前后全云沿各轴的投影标准差变化;(3) occupancy_dice raw 是否改善(基线 0.8143);(4) neighborhood_mmd raw 是否保持(基线 0.04153,恶化应 <10%);(5) d2_shape raw 变化方向。若缩放因子全部 ≈1 但分数变化,说明变化来自数值噪声而非机制。",
  "mechanism_off_control": "T2HI_GANISO_LAM=0 时,缩放因子全为 1,坐标不变,程序早退不执行任何计算。预期:输出 .X 和 obsm 与父节点逐位相同(np.array_equal),vec-score 八项 raw 完全一致(66.53 对照分)。",
  "sources": []
}
```
原始记录位置/home/spark-longxinyang/vec/runs/formal/20261003-094241-search-t2-heart-interp-g24-D-s2/nodes/27/researcher.jsonl 35 KB
/home/spark-longxinyang/vec/runs/formal/20261003-094241-search-t2-heart-interp-g24-D-s2/nodes/27/researcher.stderr