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

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

节点 n13 在终选来历上

在父节点11全部表达管线之上,新增坐标各向异性整形:沿对齐括号合并云的PCA主轴,把输出云每轴展幅向 log 插值目标(γ=damp×t,damp=1.25)缩放,再均匀回缩到原目标RMS,表达逐位不动。

运行?一次完整的自动搜索或 Agent 会话,有自己的锁定配置和证据包。20261003-094242-search-t2-embryo-interp-g24-D-s2
父节点n11
子节点n15、n19
操作?种子:人写的起点;改进:在父节点上改;草稿:从头写;修复:修父节点的报错。改进
状态已打分
分数搜索目标分 62.52(+0.7) · proxy 62.52(+0.7) · 3 次复测均分 62.32
审查通过 1 越界读取:未发现问题——run.py 只通过 view_io 的 load_manifest/read_stage/panel_genes 用 --data 读视图内文件(run.py:365-376),无绝对路径、'..'、/mnt、打分器或 src/common/evaluation 引用,无网络访问;导入的 src.task2_spatial.* 为任务提供的脚手架助手模块。; 2 硬编码目标统计量:未发现问题——所有常量为机制超参(α=5、λ=6、β=0.2、damp=1.25、DE 阈值 0.25、clip 0.3/3.0,run.py:62-107),细胞数 n 与 min/…
用时?从运行开始到结束(或到现在)的挂钟时间。20 分
程序版本a54054257d520100dd51fc3fe3e8d7e3eff03109 (programs.git)

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

来自 programs.git a54054257d:solution/METHOD.md

在父节点11全部表达管线之上,新增坐标各向异性整形:沿对齐括号合并云的PCA主轴,把输出云每轴展幅向 log 插值目标(γ=damp×t,damp=1.25)缩放,再均匀回缩到原目标RMS,表达逐位不动。

方法(family T2EI-06,PLAN:各向异性PCA坐标整形修复occupancy_dice)

保留父节点 11 全部管线(mix 分层混抽、procrustes3d 对齐、scale_damp=0.5、α=5 类型级收敛位移、λ=6 投影加权、β=0.2 型内配对收缩),在坐标组装后、jitter 与最终 RMS 回缩之前新增:

  1. 对齐后的两括号阶段坐标(align_pair 输出,同一帧、各自原生尺度)合并做 PCA,取 3 根主轴(协方差 eigh,按特征值降序)。
  2. 计算 stage_a、stage_b 在每根主轴上的投影 std:spread_a[k]、spread_b[k]。
  3. 目标展幅 target[k] = exp(log spread_a[k] + γ·(log spread_b[k] − log spread_a[k])),γ = T2_ANISO_DAMP × t(t 为插值时间分数,只用时间差,视图无关)。
  4. 输出细胞坐标去中心后投影到主轴,每轴乘 factor[k] = clip(target[k]/cur[k], 0.3, 3.0)(cur 为输出云该轴投影 std),再逆旋转回原坐标系。
  5. 整形后照旧走 _jitter + scale_to_rms(target_rms):均匀回缩保证 scale_log_ratio 与 RMS 完全不变(已验证 raw 逐位不变)。
  6. 环境变量:T2_ANISO_DAMP(默认 1.25,非 PLAN 初始 2.5——网格显示 2.5 处 d2_shape 崩塌快于 occupancy 收益,见下)、T2_ANISO_ENABLE(默认 1)、T2_ANISO_CLIP_LO/HI(0.3/3.0)。
  7. 单输入阶段退路:interp_bracket 无 b 时提前 return 分层复制,整形不执行(与 PLAN 一致)。

机制生效证据(seed 0,proxy E6.75+E8.0→E7.25,t=0.4,γ=0.5)

  • 三主轴展幅(std):stage_a [60.8, 63.6, 85.5],stage_b [226.5, 202.1, 120.4],整形前输出云 [88.0, 83.4, 87.3](纵横比 [1.02, 0.97, 1.01],接近各向同性——混抽+等RMS缩放抹掉了括号形状差),目标 [117.3, 113.4, 101.5],整形后纵横比 [1.06, 1.02, 0.92],factor [1.33, 1.36, 1.16]。轴比确实改变(PLAN 风险 1 排除:输出轴比≈1 而括号轴比差异大,头寸存在)。
  • occupancy_dice raw 0.7765→0.8066(seed0)、0.7806→0.7953(seed1),skill 0.369→0.421 / 0.375→0.400,预期方向上升。
  • scale_log_ratio raw 0.0162 逐位不变(均匀回缩正确),out_rms 149.228 与关闭时相同。
  • expression_change 与 cell_state 全部 4 项指标 raw/skill/points 逐位不变(de_score 0.2500、de_direction 0.3853、mmd_u 0.0116、variogram 0.0144),且 X 矩阵 array_equal=True——整形只动坐标。
  • d2_shape raw 0.0063→0.0047(不降反升为 skill 0.954→0.979:目标展幅插值同时改善了归一化距离分布);neighborhood_mmd 0.0552→0.0551/0.0557→0.0553,噪声内不动,结构门不受影响(nbr skill 0.58 > 0.5)。

关闭对照(mechanism_off_control)

T2_ANISO_ENABLE=0:整形代码不执行,输出与父节点 11 管线逐位相同(代码路径完全一致;同日 off 查分 seed0=60.79 / seed1=60.63,即父节点管线在当日锚点上的基线)。开启(γ=0.5)后 occupancy_dice/d2_shape 均改变,机制生效。

查分结果(同日 A 半锚点,seed0;base=off 60.79)

T2_ANISO_DAMPγ榜分occupancy skilld2 skill备注
off—60.790.3690.954=父节点11管线
0.50.260.260.3660.894d2 变差
1.00.461.090.3870.971
1.10.4461.150.3890.978
1.250.561.450.4210.979提交(seed1: 61.07 vs base 60.63,+0.44)
1.40.5661.140.3950.966
1.50.661.000.3940.951
1.750.761.030.4520.895d2 开始崩
2.00.860.400.4410.830
2.51.059.750.4950.704occupancy 最高但净亏
3.0/3.51.2/1.458.81/59.130.431/0.4340.654/0.690clip 生效、过冲

如实结论:occupancy_dice 随 γ 升到 ~1.0 才饱和,但 d2_shape 从 γ≈0.6 起加速恶化(两项同权 8.33),净榜分峰值在 γ=0.5(damp=1.25),两 seed 一致 +0.4~+0.7,在 T2 约 1 分噪声边缘、方向一致且机制指标(occupancy↑、d2↑、nbr 平、scale/表达逐位不变)全部按 PLAN 预期。PLAN 初始 damp=2.5 在本管线上净亏 1 分,未采用(PLAN 授权网格内取优)。

  • 已验证:damp∈{0.5,1.0,1.1,1.25,1.4,1.5,1.75,2.0,2.5,3.0,3.5} 网格(seed0);提交配置 seed0+seed1 双查;off 对照 seed0+seed1;同 seed 两次运行逐位相同(无新增随机源,PCA 为确定性 eigh);默认参数输出与网格最优文件逐位一致;vec-check 通过;n=5000 在 [583, 5000] 内。
  • 未验证:真实括号(E7.25+E8.0→目标,t=1/3 时 γ=0.417,比 proxy 的 0.5 更保守,方向相同);damp∈(1.25,1.4) 细扫(差异在噪声内);seed≥2。

视图无关性

整形只依赖:对齐坐标(数据)、t(由 manifest 时间差计算,平移不变)、seed(不新增随机源)。无绝对时间、无路径/文件名/board 字段、无硬编码统计量。

知识来源

未使用新的生物学知识。展幅、主轴、γ 插值全部由 view 内两个输入阶段坐标现场计算。

下一步建议

  • occupancy_dice skill 仍只有 0.42(真值天花板对应 raw≈0.9+):γ=0.5 的保守值受 d2_shape 牵制,可试「整形后对每细胞坐标加沿主轴的小幅噪声/重排」在不动展幅分布均值的前提下改善占据格点匹配,或按类型分别整形(不同类型的空间占据不同,整体 PCA 三轴可能不是占据形状的自由度)。
  • 表达侧权衡已到上限(父节点教训):cell_state 组 variogram skill 0.37 仍是最大单项失分,需组成层面改动(类型比例插值生成中间态细胞)而非方差压缩。

调研员的计划

名称各向异性PCA坐标整形修复occupancy_dice(叠加于父节点11表达管线)
动机父节点11的occupancy_dice skill仅0.367(raw 0.7735),是shape_scale组唯一失分项(d2_shape 0.934、scale_log_ratio 0.932已近天花板)。当前管线只做各向同性RMS缩放,保留了混抽输入云的主轴比,无法匹配目标阶段的各向异性。节点7在另一分支证明沿PCA主轴展幅对数插值可将shape_scale从64.54→83.19(occupancy_dice skill 0.503→0.579),且与表达机制完全正交(cell_state/expression_change逐位不变)。ANALYSIS明确指出这是最大剩余头寸(约+2榜分)。
做法在父节点11全部表达处理(α=5、λ=6、β=0.2)和坐标procrustes3d对齐+RMS缩放完成后,新增各向异性整形步骤:
1. 对对齐后的两括号阶段坐标合并做PCA,取前3个主轴(eigenvectors)。
2. 分别计算stage_a、stage_b在每根主轴上的投影标准差spread_a[k]、spread_b[k](k=1,2,3)。
3. 目标展幅:target_spread[k] = exp(log(spread_a[k]) + γ·(log(spread_b[k])−log(spread_a[k]))),其中γ = T2_ANISO_DAMP × t(t为插值时间分数)。初始γ=0.9(对应damp=2.5、t≈0.36),搜索范围damp∈{0.5,1.0,1.5,2.0,2.5,3.0,3.5}。
4. 对输出细胞的坐标,投影到PCA主轴,每根轴乘以target_spread[k]/current_spread[k](current_spread为输出云在该轴的投影标准差)。
5. 整形后重新均匀缩放至目标RMS(log_interp(rms_a,rms_b,t,scale_damp=0.5)),保证scale_log_ratio不变。
6. 环境变量:T2_ANISO_DAMP(默认2.5)、T2_ANISO_ENABLE(默认1,设0跳过整形)。
7. 单输入阶段退路:无括号时跳过各向异性整形,仅做各向同性RMS缩放(与现有fallback一致)。
8. 可选(方差控制):整形后按k026做坐标规范化(居中→PCA轴→det=+1→第三矩定向),消除手性/朝向评分方差;对每种子均执行,不改变形状。
9. vec-score快速筛选:先跑damp=2.5单点,确认occupancy_dice raw上升且expression/cell_state逐位不变,再扫网格。
风险1) 本管线混抽后坐标的主轴结构与node 7分支(乘法表达推进)不同,PCA轴可能不稳定或展幅比已接近目标,收益小于预期——Engineer应先打印三轴展幅比(a/b/输出),若比值已接近1则收益有限;2) 各向异性整形改变坐标会轻微影响neighborhood_mmd(15-NN空间覆盖变化),但node 7显示该影响在噪声内(+0.02);3) 若PCA第三轴方差极小(近2D结构),该轴展幅插值可能放大噪声——可设最小展幅比clip [0.3, 3.0]。

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

对比:父节点版本 dbf8b57597。改动的文件:solution/METHOD.md +40 −31、solution/README.md +8 −7、solution/run.py +66 −4

diff --git a/solution/METHOD.md b/solution/METHOD.mdindex 3656ee8..7f826e5 100644--- a/solution/METHOD.md+++ b/solution/METHOD.md@@ -1,50 +1,59 @@-父节点8之上新增型内NN配对中点收缩:共有类型a/b侧细胞在DE基因维度贪心配对,双方仅沿DE维度向配对中点收缩β=0.2(nnz-only、坐标不动),压缩Δ方向之外的型内残余方差。+在父节点11全部表达管线之上,新增坐标各向异性整形:沿对齐括号合并云的PCA主轴,把输出云每轴展幅向 log 插值目标(γ=damp×t,damp=1.25)缩放,再均匀回缩到原目标RMS,表达逐位不动。 -## 方法(family T2EI-01,PLAN:型内NN配对中点收缩修复variogram)+## 方法(family T2EI-06,PLAN:各向异性PCA坐标整形修复occupancy_dice) -保留父节点 8 全部管线(procrustes3d、scale_damp=0.5、分层混抽 n=5000、α=5、λ=6、|Δ|≥0.25 DE 掩码、nnz-only、坐标不动),在 λ 加权位移之后新增:+保留父节点 11 全部管线(mix 分层混抽、procrustes3d 对齐、scale_damp=0.5、α=5 类型级收敛位移、λ=6 投影加权、β=0.2 型内配对收缩),在坐标组装后、jitter 与最终 RMS 回缩之前新增: -1. 对每个共有类型 k(输出中 a/b 两侧各 ≥ T2_PAIR_MIN_CELLS=10 个细胞),取位移后的 a 侧集 A_k、b 侧集 B_k。-2. 距离只用 |Δ_k|≥0.25 的 DE 基因维度(<10 个 DE 基因则跳过该型),算 A_k×B_k 欧氏距离矩阵。-3. 贪心 NN 匹配:按 A_k 索引顺序,每个细胞配 B_k 中最近的未匹配细胞;多余细胞不配对。-4. 配对收缩:m=(a_i+b_j)/2;a_i ← clip(a_i+β(m−a_i),0)、b_j 对称,**仅作用于 DE 维度**(T2_PAIR_DE_ONLY=1,非 DE 基因保持实测值)、仅 nnz 项。-5. β=0 完全跳过配对,逐位复现父节点 8(已验证 array_equal=True,X 与坐标均同)。-6. 环境变量:T2_PAIR_BETA(默认 0.2)、T2_PAIR_MIN_CELLS(10)、T2_PAIR_MIN_DE(10)、T2_PAIR_DE_ONLY(1)。-7. 单输入阶段退路:同父节点,分层复制最后观测阶段,无位移无配对。+1. 对齐后的两括号阶段坐标(`align_pair` 输出,同一帧、各自原生尺度)合并做 PCA,取 3 根主轴(协方差 `eigh`,按特征值降序)。+2. 计算 stage_a、stage_b 在每根主轴上的投影 std:spread_a[k]、spread_b[k]。+3. 目标展幅 target[k] = exp(log spread_a[k] + γ·(log spread_b[k] − log spread_a[k])),γ = T2_ANISO_DAMP × t(t 为插值时间分数,只用时间差,视图无关)。+4. 输出细胞坐标去中心后投影到主轴,每轴乘 factor[k] = clip(target[k]/cur[k], 0.3, 3.0)(cur 为输出云该轴投影 std),再逆旋转回原坐标系。+5. 整形后照旧走 `_jitter` + `scale_to_rms(target_rms)`:均匀回缩保证 scale_log_ratio 与 RMS 完全不变(已验证 raw 逐位不变)。+6. 环境变量:T2_ANISO_DAMP(默认 **1.25**,非 PLAN 初始 2.5——网格显示 2.5 处 d2_shape 崩塌快于 occupancy 收益,见下)、T2_ANISO_ENABLE(默认 1)、T2_ANISO_CLIP_LO/HI(0.3/3.0)。+7. 单输入阶段退路:`interp_bracket` 无 b 时提前 return 分层复制,整形不执行(与 PLAN 一致)。 -## 机制生效证据(seed 0,proxy E6.75+E8.0→E7.25,t=0.4,β=0.2 de-only)+## 机制生效证据(seed 0,proxy E6.75+E8.0→E7.25,t=0.4,γ=0.5) -- 9 个类型完成配对、共 868 对(第 10 个共有类型因输出侧细胞 <10 被跳过)。-- 平均配对距离 / 型内直径 = **0.648**(<0.8,配对有意义;PLAN 判据满足)。-- 配对前后型内表达 std 比(DE 维度)= **0.948**;沿 Δ 正交方向(PC2+PC3)方差比 = **0.915**——正交方向压缩更多,正是 λ 投影加权未触及的自由度(对照:λ 机制的型内 std 比 0.920 主要沿 Δ)。-- 稀疏结构保持:收缩只动 nnz 项且限于 DE 维度。+- 三主轴展幅(std):stage_a [60.8, 63.6, 85.5],stage_b [226.5, 202.1, 120.4],整形前输出云 [88.0, 83.4, 87.3](纵横比 [1.02, 0.97, 1.01],接近各向同性——混抽+等RMS缩放抹掉了括号形状差),目标 [117.3, 113.4, 101.5],整形后纵横比 [1.06, 1.02, 0.92],factor [1.33, 1.36, 1.16]。轴比确实改变(PLAN 风险 1 排除:输出轴比≈1 而括号轴比差异大,头寸存在)。+- occupancy_dice raw 0.7765→0.8066(seed0)、0.7806→0.7953(seed1),skill 0.369→0.421 / 0.375→0.400,预期方向上升。+- scale_log_ratio raw 0.0162 逐位不变(均匀回缩正确),out_rms 149.228 与关闭时相同。+- expression_change 与 cell_state 全部 4 项指标 raw/skill/points 逐位不变(de_score 0.2500、de_direction 0.3853、mmd_u 0.0116、variogram 0.0144),且 X 矩阵 array_equal=True——整形只动坐标。+- d2_shape raw 0.0063→0.0047(不降反升为 skill 0.954→0.979:目标展幅插值同时改善了归一化距离分布);neighborhood_mmd 0.0552→0.0551/0.0557→0.0553,噪声内不动,结构门不受影响(nbr skill 0.58 > 0.5)。  ## 关闭对照(mechanism_off_control) -T2_PAIR_BETA=0:输出与父节点 8(α=5, λ=6)逐位相同(X 与 spatial_3D array_equal=True)——管线正确性验证通过。+T2_ANISO_ENABLE=0:整形代码不执行,输出与父节点 11 管线逐位相同(代码路径完全一致;同日 off 查分 seed0=60.79 / seed1=60.63,即父节点管线在当日锚点上的基线)。开启(γ=0.5)后 occupancy_dice/d2_shape 均改变,机制生效。 -## 查分结果(同日 A 半锚点;控制组 β=0 当日 = 60.72,与父节点 METHOD 同日锚点一致)+## 查分结果(同日 A 半锚点,seed0;base=off 60.79) -全基因收缩(de_only=0)与 DE-only 收缩两组网格:+| T2_ANISO_DAMP | γ | 榜分 | occupancy skill | d2 skill | 备注 |+|---:|---:|---:|---:|---:|---|+| off | — | 60.79 | 0.369 | 0.954 | =父节点11管线 |+| 0.5 | 0.2 | 60.26 | 0.366 | 0.894 | d2 变差 |+| 1.0 | 0.4 | 61.09 | 0.387 | 0.971 | |+| 1.1 | 0.44 | 61.15 | 0.389 | 0.978 | |+| **1.25** | **0.5** | **61.45** | **0.421** | **0.979** | **提交(seed1: 61.07 vs base 60.63,+0.44)** |+| 1.4 | 0.56 | 61.14 | 0.395 | 0.966 | |+| 1.5 | 0.6 | 61.00 | 0.394 | 0.951 | |+| 1.75 | 0.7 | 61.03 | 0.452 | 0.895 | d2 开始崩 |+| 2.0 | 0.8 | 60.40 | 0.441 | 0.830 | |+| 2.5 | 1.0 | 59.75 | 0.495 | 0.704 | occupancy 最高但净亏 |+| 3.0/3.5 | 1.2/1.4 | 58.81/59.13 | 0.431/0.434 | 0.654/0.690 | clip 生效、过冲 | -| 配置 | seed0 | seed1 | mmd_u skill | variogram skill | nbr skill |-|---|---:|---:|---:|---:|---:|-| β=0(=父节点8) | 60.72 | 60.71 | 0.599/0.602 | 0.368/0.361 | 0.585/0.582 |-| 全基因 β=0.05/0.1/0.15/0.2/0.3 | 60.75/60.76/60.78/60.79/60.78 | — | 0.601→0.609 单调 | 0.369→0.376 单调 | 0.584→0.577 |-| 全基因 β=0.5/1.0 | 60.52/59.91 | — | 0.608/0.588 | 0.382/0.399 | 0.571/0.550 |-| de-only β=0.3/0.5/1.0 | 60.80/60.75/60.25 | 60.48/— | 0.609/0.611/0.602 | 0.374/0.378/0.390 | 0.579/0.574/0.558 |-| **de-only β=0.2(提交)** | **60.79** | **60.63** | 0.607/0.611 | 0.372/0.365 | 0.581/0.579 |+如实结论:occupancy_dice 随 γ 升到 ~1.0 才饱和,但 d2_shape 从 γ≈0.6 起加速恶化(两项同权 8.33),净榜分峰值在 γ=0.5(damp=1.25),两 seed 一致 +0.4~+0.7,在 T2 约 1 分噪声边缘、方向一致且机制指标(occupancy↑、d2↑、nbr 平、scale/表达逐位不变)全部按 PLAN 预期。PLAN 初始 damp=2.5 在本管线上净亏 1 分,未采用(PLAN 授权网格内取优)。 -**如实结论**:机制方向性信号一致——mmd_u skill 随 β 单调升(0.599→0.611,两个 seed 均复现),variogram skill 单调升(0.368→0.399,β=1.0 时越过地板 0.389),证明配对收缩确实作用于 PLAN 针对的型内全方向残余方差;但 neighborhood_mmd 同步单调降(0.585→0.550,型内压缩让邻域平均分布偏离真值),榜分净收益两 seed 均值 ≈ +0.0(60.71→60.71),全部在 T2 约 1 分噪声内。取 β=0.2 de-only:榜分平台(60.79/60.63)内 nbr 损失最小、护栏全保(mmd_u≥0.59 ✓、nbr≥0.577,接近但未破 0.58 线;β=0.3 时 nbr 0.577 且 seed1 榜分 60.48 更差)。+- 已验证:damp∈{0.5,1.0,1.1,1.25,1.4,1.5,1.75,2.0,2.5,3.0,3.5} 网格(seed0);提交配置 seed0+seed1 双查;off 对照 seed0+seed1;同 seed 两次运行逐位相同(无新增随机源,PCA 为确定性 eigh);默认参数输出与网格最优文件逐位一致;vec-check 通过;n=5000 在 [583, 5000] 内。+- 未验证:真实括号(E7.25+E8.0→目标,t=1/3 时 γ=0.417,比 proxy 的 0.5 更保守,方向相同);damp∈(1.25,1.4) 细扫(差异在噪声内);seed≥2。 -- 已验证:β=0 逐位复现父节点;β∈{0.05,0.1,0.15,0.2,0.3,0.5,1.0}×{全基因,de-only} 网格;两 seed(0,1)复核提交配置;vec-check 通过;同 seed 两次运行逐位相同(无新增随机源,贪心匹配按固定索引序确定);默认参数输出与网格文件逐位一致。-- 未验证:真实括号(E7.25+E8.0,更窄、共有类型更多但每型细胞数分布不同,配对距离/直径比可能变化);α×β、λ×β 联合网格;β∈(0.2,0.3) 细扫(差别在噪声内,无意义)。+## 视图无关性++整形只依赖:对齐坐标(数据)、t(由 manifest 时间差计算,平移不变)、seed(不新增随机源)。无绝对时间、无路径/文件名/board 字段、无硬编码统计量。  ## 知识来源 -未使用新的生物学知识。Δ、类型均值、配对全部由 view 内两个输入阶段现场计算;无硬编码统计量、无保留阶段/基因型信息。DE 阈值 0.25 沿用评分器公开的 DE 定义(方法卡)。+未使用新的生物学知识。展幅、主轴、γ 插值全部由 view 内两个输入阶段坐标现场计算。  ## 下一步建议 -- cell_state 的 mmd_u/variogram 与 local_spatial 的 neighborhood_mmd 在"型内方差压缩"上存在直接权衡(压缩帮 mmd_u/variogram、伤 nbr,权重 25 vs 12.5+12.5),纯表达侧压缩已到收益上限;再提升需改变邻域平均本身(如坐标侧让同型细胞更聚簇,使 nbr 平均更像真值),或做组成层面的改动(插值型比例而非整细胞混抽)。-- occupancy_dice skill 0.367–0.369 仍是形状组最大失分项(d2/scale 已 0.93+),坐标侧各向异性整形(node 7 在另一分支做到 shape_scale 83)与本表达机制正交、可叠加,是最大的剩余头寸(形状组满打满算 +2 榜分级别)。+- occupancy_dice skill 仍只有 0.42(真值天花板对应 raw≈0.9+):γ=0.5 的保守值受 d2_shape 牵制,可试「整形后对每细胞坐标加沿主轴的小幅噪声/重排」在不动展幅分布均值的前提下改善占据格点匹配,或按类型分别整形(不同类型的空间占据不同,整体 PCA 三轴可能不是占据形状的自由度)。+- 表达侧权衡已到上限(父节点教训):cell_state 组 variogram skill 0.37 仍是最大单项失分,需组成层面改动(类型比例插值生成中间态细胞)而非方差压缩。diff --git a/solution/README.md b/solution/README.mdindex 41f8ea6..00a910e 100644--- a/solution/README.md+++ b/solution/README.md@@ -1,8 +1,9 @@-# mix + 型内表达收敛位移 + NN配对中点收缩(T2:embryo:val_interp)+# mix + 表达收敛管线 + 各向异性PCA坐标整形(T2:embryo:val_interp) -父节点 8(mix 混抽 + α=5 类型级收敛位移 + λ=6 投影加权)之上新增:共有类型的 a/b 侧输出细胞-在 DE 基因维度(|Δ|≥0.25)上贪心最近邻配对,双方仅沿 DE 维度向配对中点收缩 β=0.2-(nnz-only、clip≥0、坐标不动),压缩沿 Δ 之外的型内残余方差,改善 mmd_u / variogram。-β=0 逐位复现父节点 8(`T2_PAIR_BETA` 可覆盖;另有 `T2_PAIR_DE_ONLY`、`T2_PAIR_MIN_CELLS`、`T2_PAIR_MIN_DE`)。-proxy A 半同日锚点:对照 60.72/60.71(seed 0/1)→ 本节点 60.79/60.63;mmd_u skill 0.599→0.607、-variogram 0.368→0.372 一致上升,榜分净差在噪声内。详见 METHOD.md。+父节点 11(mix 混抽 + α=5 类型级收敛位移 + λ=6 投影加权 + β=0.2 型内配对收缩)之上新增坐标侧+各向异性整形(family T2EI-06):对齐括号合并云的 PCA 主轴上,把输出云每轴展幅向+target = exp(log spread_a + γ(log spread_b − log spread_a))、γ = T2_ANISO_DAMP×t(默认 damp=1.25)+缩放(factor clip [0.3, 3.0]),随后照旧均匀回缩到目标 RMS——scale_log_ratio 与表达矩阵逐位不变,+只改点云纵横比。T2_ANISO_ENABLE=0 逐位复现父节点 11。+proxy A 半同日锚点:对照(off)60.79/60.63(seed 0/1)→ 本节点 61.45/61.07;+occupancy_dice skill 0.369→0.421、d2_shape 0.954→0.979,其余六项逐位不变或噪声内。详见 METHOD.md。diff --git a/solution/run.py b/solution/run.pyindex 5505261..c1b126e 100644--- a/solution/run.py+++ b/solution/run.py@@ -31,7 +31,10 @@ bimodality until clipping and over-shooting take over. If the target is not bracketed, falls back to a stratified copy of the latest input before it (no displacement possible without two stages). -Newest mechanism (PAIR_BETA, this node): after the λ-weighted displacement,+Newest mechanism (ANISO, family T2EI-06, this node): coordinate-side+anisotropic PCA reshaping, see aniso_reshape below. Expression untouched.++Earlier mechanism (PAIR_BETA, parent): after the λ-weighted displacement, within-type greedy NN pairing between the a-side and b-side output cells (distance on DE genes |Δ|≥0.25 only, ≥10 cells per side, ≥10 DE genes), then both partners shrink β toward their pair midpoint, DE-gene dimensions only,@@ -87,6 +90,56 @@ PAIR_MIN_DE = int(os.environ.get("T2_PAIR_MIN_DE", "10")) # |Δ|≥CONVERGE_MIN_DELTA; all other genes keep their measured values, so the # bulk of the sparse structure and co-variance is untouched. PAIR_DE_ONLY = os.environ.get("T2_PAIR_DE_ONLY", "1") == "1"+# Anisotropic PCA coordinate reshaping (family T2EI-06, this node): the mix+# output inherits the aspect ratio of the two bracketing clouds rescaled to a+# common RMS, which need not match the target stage's anisotropy. Reshape the+# output cloud along the principal axes of the merged aligned brackets: each+# axis spread is log-interpolated from spread_a to spread_b with fraction+# gamma = ANISO_DAMP * t, then the cloud is uniformly rescaled to the same+# target RMS (scale_log_ratio untouched, expression untouched). ANISO_ENABLE=0+# skips the step and reproduces the parent bit-for-bit.+ANISO_ENABLE = os.environ.get("T2_ANISO_ENABLE", "1") == "1"+# damp=1.25 (γ=0.5 at t=0.4) is the proxy-grid optimum: occupancy_dice and+# d2_shape both improve; γ≥0.6 keeps buying occupancy but d2_shape collapses+# faster (weight-for-weight), net board score peaks at γ≈0.5.+ANISO_DAMP = float(os.environ.get("T2_ANISO_DAMP", "1.25"))+ANISO_CLIP = (float(os.environ.get("T2_ANISO_CLIP_LO", "0.3")),+              float(os.environ.get("T2_ANISO_CLIP_HI", "3.0")))+++def aniso_reshape(coords, aligned_a, aligned_b, t: float, damp: float):+    """Rescale per-axis spreads of `coords` toward the log-interpolated bracket spreads."""+    a = np.asarray(aligned_a, dtype=np.float64)+    b = np.asarray(aligned_b, dtype=np.float64)+    merged = np.vstack([a, b])+    mu = merged.mean(axis=0)+    X = merged - mu+    cov = (X.T @ X) / max(len(X) - 1, 1)+    evals, evecs = np.linalg.eigh(cov)+    axes = evecs[:, np.argsort(evals)[::-1]]  # columns = principal axes+    spread_a = np.maximum(((a - mu) @ axes).std(axis=0), 1e-9)+    spread_b = np.maximum(((b - mu) @ axes).std(axis=0), 1e-9)+    gamma = float(damp) * float(t)+    target = np.exp(np.log(spread_a) + gamma * (np.log(spread_b) - np.log(spread_a)))+    c = np.asarray(coords, dtype=np.float64)+    c = c - c.mean(axis=0)+    proj = c @ axes+    cur = np.maximum(proj.std(axis=0), 1e-9)+    factor = np.clip(target / cur, ANISO_CLIP[0], ANISO_CLIP[1])+    new_proj = proj * factor+    out = new_proj @ axes.T+    new_spread = new_proj.std(axis=0)+    info = {+        "aniso_gamma": gamma,+        "aniso_spread_a": spread_a.tolist(),+        "aniso_spread_b": spread_b.tolist(),+        "aniso_spread_cur": cur.tolist(),+        "aniso_spread_target": target.tolist(),+        "aniso_factor": factor.tolist(),+        "aniso_aspect_out": (new_spread / max(new_spread.mean(), 1e-12)).tolist(),+        "aniso_aspect_in": (cur / max(cur.mean(), 1e-12)).tolist(),+    }+    return out, info   def mix_converge(stage_a, stage_b, t: float, params: dict, alpha: float):@@ -287,8 +340,14 @@ def mix_converge(stage_a, stage_b, t: float, params: dict, alpha: float):         coord_parts.append(np.asarray(ca[ia], dtype=np.float64))     if ib.size:         coord_parts.append(np.asarray(cb[ib], dtype=np.float64))-    coords = _jitter(np.vstack(coord_parts), rng)+    coords = np.vstack(coord_parts)+    aniso_info = {"aniso_enable": bool(ANISO_ENABLE), "aniso_damp": ANISO_DAMP}+    if ANISO_ENABLE and coords.shape[0] >= 10:+        coords, ai = aniso_reshape(coords, aligned_a, aligned_b, t, ANISO_DAMP)+        aniso_info.update(ai)+    coords = _jitter(coords, rng)     coords = scale_to_rms(coords, target_rms)+    info.update(aniso_info)     info.update(         t=t, n=int(expr.shape[0]), rms_a=rms_a, rms_b=rms_b, target_rms=target_rms,         out_rms=rms_radius(coords), n_from_a=int(ia.size), n_from_b=int(ib.size), **conv, **pair_info,@@ -320,8 +379,11 @@ def main() -> None:                                      "align", "alpha", "n_shared_types_converged", "within_type_std_rel",                                      "between_type_mean_dist_rel", "n_from_a", "n_from_b",                                       "lambda", "weight_mean", "weight_std",-                                      "pair_beta", "n_paired_types", "n_pairs", "pair_within_std_rel",-                                      "pair_orth_var_rel", "pair_dist_over_diam")}+                                       "pair_beta", "n_paired_types", "n_pairs", "pair_within_std_rel",+                                       "pair_orth_var_rel", "pair_dist_over_diam",+                                       "aniso_enable", "aniso_damp", "aniso_gamma", "aniso_spread_a",+                                       "aniso_spread_b", "aniso_spread_cur", "aniso_spread_target",+                                       "aniso_factor", "aniso_aspect_in", "aniso_aspect_out")}     print(json.dumps({"bracket": [a["stage"], b["stage"]], **keep}, 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
k024World-model evaluation dimensions for state-transition predictorsnotes/competition/07_biomedical_world_models.md
k026Canonicalise predicted 3D coordinates before submissionnotes/pitfalls/04_scorer_invariance.md

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

改了什么在父节点11全部表达管线之上,坐标组装后、jitter与RMS回缩之前新增各向异性整形(aniso_reshape):对齐括号合并云的3根PCA主轴上,把输出云每轴展幅向log插值目标(γ=damp×t,默认damp=1.25)缩放并clip[0.3,3.0],再均匀回缩到原目标RMS;表达矩阵不动。T2_ANISO_ENABLE=0逐位复现父节点。
各组分数的变化board:榜分61.79→62.52(+0.73,接近T2约1分噪声,但逐项分解与机制预测方向一致且Engineer报告两seed同日锚点复现+0.44/+0.66)。
cell_state:噪声内:mmd_u 0.01123、variogram 0.01392逐位不变(+0.00)。
expression_change:噪声内:de_score/de_direction raw与得分逐位不变(0.3103/0.3986,+0.00),验证表达未动。
local_spatial:噪声内:neighborhood_mmd 0.05119→0.05112,得分+0.01,结构门不受影响。
shape_scale:变好:组分74.43→77.31(+2.88,超出噪声)。分解:d2_shape raw 0.00841→0.00661(skill 0.934→0.963,+0.25分);occupancy_dice raw 0.7735→0.8086(skill 0.367→0.424,+0.47分);scale_log_ratio raw 0.0099逐位不变(均匀回缩正确)。
family_idT2EI-06
假设是否成立是
经验
  1. 混抽+各向同性RMS缩放会抹掉括号阶段的形状差(输出云纵横比≈1.0,而括号轴展幅差异大如60→226),沿PCA主轴做展幅log插值能直接补回occupancy_dice失分,且与表达机制完全正交(表达/状态8项中4项逐位不变)。
  2. 各向异性整形存在内部权衡:occupancy_dice随γ单调升到~1.0才饱和,但d2_shape从γ≈0.6起加速恶化(两项同权8.33),净收益峰值在γ≈0.5(damp=1.25);PLAN初始damp=2.5虽把occupancy skill推到0.495但净亏1分——形状组多指标叠加时不能只盯单项,必须扫网格取净分。
  3. 坐标整形后用均匀回缩到目标RMS可以保住scale_log_ratio逐位不变,是把形状改动与尺度改动解耦的可靠做法;neighborhood_mmd对这种保RMS的线性整形几乎不敏感(±0.01)。
mechanism_active是
下一步建议
  1. 针对shape_scale:occupancy skill仍仅0.42(真值天花板对应raw≈0.9+),整体PCA三轴可能不是占据形状的正确自由度——试按细胞类型或空间分块分别整形,或整形后沿主轴加小幅扰动/局部重排,在不破坏d2的前提下解锁更大γ。
  2. 针对cell_state:variogram skill 0.389是最大单项失分且纯表达侧压缩已到上限(父节点教训),试组成层面插值——生成介于a/b之间的中间态细胞(如型比例插值或OT配对点)而非整细胞混抽,注意会牵动neighborhood_mmd,需盯结构门(nbr skill≥0.5)。
  3. 针对提交稳健性:真实括号下t=1/3、γ=0.417比proxy的0.5更保守,方向相同但未验证;可在真实括号上补一次off/on对照查分确认收益,并补seed≥2。

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

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

分析员

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

工程师

角色工程师 alibaba-token-plan-cn/qwen3.8-max
调用次数1 次
轮数28
工具调用共 31 次:bash 19、edit 6、read 4、write 2
用时16 分
token 数输入 71,716 · 输出 9,970 · 思考 11,761
任务(第一行)按计划修改程序:各向异性PCA坐标整形修复occupancy_dice(叠加于父节点11表达管线)
最后的回答(摘录)
**做了什么**:在父节点 11 全部表达管线之上新增坐标各向异性 PCA 整形(T2EI-06):对齐括号合并云的 3 根主轴上,把输出云每轴展幅向 log 插值目标(γ=damp×t)缩放并 clip [0.3,3.0],再均匀回缩到原目标 RMS;表达逐位不动。`T2_ANISO_ENABLE=0` 逐位复现父节点(off 对照当日查分 60.79/60.63 = 父节点当日分,确认无副作用)。

**查分结果**(18/20 次):damp 网格 {0.5…3.5} 中 damp=1.25(γ=0.5)最优——seed0 **61.45**(base 60.79,+0.66)、seed1 **61.07**(base 60.63,+0.44)。机制按 PLAN 预期生效:occupancy_dice skill 0.369→0.421 / 0.375→0.400,d2_shape 0.954→0.979,scale_log_ratio 与表达/状态 4 项逐位不变,nbr 噪声内。PLAN 初始 damp=2.5 净亏 1 分(occupancy 升到 0.495 但 d2 崩到 0.704),未采用。确定性、vec-check、默认输出与最优网格文件逐位一致均已验证。

**下一步最值得试**:① occupancy skill 仍仅 0.42,整体 PCA 三轴可能不是占据形状的正确自由度——按类型/空间分块分别整形或整形后小幅沿轴扰动可能解锁更大 γ 而不伤 d2;② variogram skill 0.37 是最大单项失分,需组成层面插值(生成中间态细胞)而非整细胞混抽。
原始记录位置/home/spark-longxinyang/vec/runs/formal/20261003-094242-search-t2-embryo-interp-g24-D-s2/nodes/13/engineer.jsonl 182 KB
/home/spark-longxinyang/vec/runs/formal/20261003-094242-search-t2-embryo-interp-g24-D-s2/nodes/13/engineer.stderr

调研员

角色调研员 alibaba-token-plan-cn/qwen3.8-max
调用次数1 次
轮数1
工具调用共 0 次:—
用时2 分
token 数输入 16,377 · 输出 1,191 · 思考 5,981
任务(第一行)为节点 n13(改进,父节点 n11)写改进计划 PLAN.json
最后的回答(摘录)
.932已近天花板)。当前管线只做各向同性RMS缩放,保留了混抽输入云的主轴比,无法匹配目标阶段的各向异性。节点7在另一分支证明沿PCA主轴展幅对数插值可将shape_scale从64.54→83.19(occupancy_dice skill 0.503→0.579),且与表达机制完全正交(cell_state/expression_change逐位不变)。ANALYSIS明确指出这是最大剩余头寸(约+2榜分)。",
  "approach": "在父节点11全部表达处理(α=5、λ=6、β=0.2)和坐标procrustes3d对齐+RMS缩放完成后,新增各向异性整形步骤:\n1. 对对齐后的两括号阶段坐标合并做PCA,取前3个主轴(eigenvectors)。\n2. 分别计算stage_a、stage_b在每根主轴上的投影标准差spread_a[k]、spread_b[k](k=1,2,3)。\n3. 目标展幅:target_spread[k] = exp(log(spread_a[k]) + γ·(log(spread_b[k])−log(spread_a[k]))),其中γ = T2_ANISO_DAMP × t(t为插值时间分数)。初始γ=0.9(对应damp=2.5、t≈0.36),搜索范围damp∈{0.5,1.0,1.5,2.0,2.5,3.0,3.5}。\n4. 对输出细胞的坐标,投影到PCA主轴,每根轴乘以target_spread[k]/current_spread[k](current_spread为输出云在该轴的投影标准差)。\n5. 整形后重新均匀缩放至目标RMS(log_interp(rms_a,rms_b,t,scale_damp=0.5)),保证scale_log_ratio不变。\n6. 环境变量:T2_ANISO_DAMP(默认2.5)、T2_ANISO_ENABLE(默认1,设0跳过整形)。\n7. 单输入阶段退路:无括号时跳过各向异性整形,仅做各向同性RMS缩放(与现有fallback一致)。\n8. 可选(方差控制):整形后按k026做坐标规范化(居中→PCA轴→det=+1→第三矩定向),消除手性/朝向评分方差;对每种子均执行,不改变形状。\n9. vec-score快速筛选:先跑damp=2.5单点,确认occupancy_dice raw上升且expression/cell_state逐位不变,再扫网格。",
  "expected_groups": ["shape_scale"],
  "risks": "1) 本管线混抽后坐标的主轴结构与node 7分支(乘法表达推进)不同,PCA轴可能不稳定或展幅比已接近目标,收益小于预期——Engineer应先打印三轴展幅比(a/b/输出),若比值已接近1则收益有限;2) 各向异性整形改变坐标会轻微影响neighborhood_mmd(15-NN空间覆盖变化),但node 7显示该影响在噪声内(+0.02);3) 若PCA第三轴方差极小(近2D结构),该轴展幅插值可能放大噪声——可设最小展幅比clip [0.3, 3.0]。",
  "family_id": "T2EI-06",
  "mechanism": "沿对齐坐标的PCA主轴,将每轴展幅从括号阶段a向b做对数阻尼插值,改变点云各向异性(长宽比),再均匀缩放回目标RMS,仅改形状不改尺度和表达。",
  "vs_constant_shift": "常数位移对每个细胞加相同向量,不改变细胞间相对位置;本机制按每根主轴的投影距离比例缩放,离中心远的细胞移动多、近的移动少,改变云的纵横比(aspect ratio),是形状变换而非平移,且不触碰表达矩阵。",
  "mechanism_evidence": "Engineer应报告:(1) 整形前后三根PCA轴的展幅(std),验证目标轴比确实改变;(2) occupancy_dice raw值变化(预期从0.7735上升);(3) scale_log_ratio raw不变(验证均匀回缩正确);(4) expression_change和cell_state组8项指标逐位不变(验证表达未动);(5) d2_shape raw基本不变(该指标对轴比不敏感时作为对照)。",
  "mechanism_off_control": "设T2_ANISO_ENABLE=0(或T2_ANISO_DAMP=0使γ=0,展幅不变),跳过整形步骤,输出应与父节点11逐位相同(坐标和表达均array_equal)。若关闭后输出不变,说明机制未引入副作用;若开启后occupancy_dice不变,说明机制未生效。",
  "sources": []
}
原始记录位置/home/spark-longxinyang/vec/runs/formal/20261003-094242-search-t2-embryo-interp-g24-D-s2/nodes/13/researcher.jsonl 5 KB
/home/spark-longxinyang/vec/runs/formal/20261003-094242-search-t2-embryo-interp-g24-D-s2/nodes/13/researcher.stderr

审查员

角色审查员 alibaba-token-plan-cn/qwen3.8-max
调用次数1 次
轮数7
工具调用共 11 次:read 7、bash 3、write 1
用时1 分
token 数输入 28,504 · 输出 1,663 · 思考 4,180
任务(第一行)审查节点 n13 的程序是否越界读取、写死目标、钻评分器漏洞
最后的回答(摘录)
REVIEW.json written
原始记录位置/home/spark-longxinyang/vec/runs/formal/20261003-094242-search-t2-embryo-interp-g24-D-s2/nodes/13/reviewer.jsonl 114 KB
/home/spark-longxinyang/vec/runs/formal/20261003-094242-search-t2-embryo-interp-g24-D-s2/nodes/13/reviewer.stderr