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

总览 · ← 返回运行 20261003-171955-search-t2-embryo-interp-chain-12h

节点 n11 在终选来历上

父节点8之上新增型内NN配对中点收缩:共有类型a/b侧细胞在DE基因维度贪心配对,双方仅沿DE维度向配对中点收缩β=0.2(nnz-only、坐标不动),压缩Δ方向之外的型内残余方差。

运行?一次完整的自动搜索或 Agent 会话,有自己的锁定配置和证据包。20261003-171955-search-t2-embryo-interp-chain-12h
父节点n8
子节点n13
操作?种子:人写的起点;改进:在父节点上改;草稿:从头写;修复:修父节点的报错。改进
状态已打分
分数搜索目标分 61.79(+0.0) · proxy 61.79(+0.0) · 3 次复测均分 61.80
审查通过 1 越界读取:未发现问题——run.py 仅通过 view_io 的 load_manifest/read_stage/panel_genes 从 --data 读取(run.py:306-316),无绝对路径、..、/mnt、网络访问;src.task2_spatial.* 为框架自带模块。; 2 硬编码目标统计量:未发现问题——Δ、类型均值、DE 掩码均由两个输入阶段现场计算(run.py:115-127, 203-204);α=5/λ=6/β=0.2/阈值0.25 等为算法超参数(run.py:60-89),非细胞类型比例或基因列表等目标统计量。; 3 钻评分器漏洞:未发现问题——坐标…
用时?从运行开始到结束(或到现在)的挂钟时间。19 分
程序版本dbf8b5759773e6509cc2ff811b75c532aa54a1fd (programs.git)
导入自20261003-094242-search-t2-embryo-interp-g24-D-s2#11
备注re-scored at launch (origin 20261003-094242-search-t2-embryo-interp-g24-D-s2 node 11, score there 61.79)

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

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

父节点8之上新增型内NN配对中点收缩:共有类型a/b侧细胞在DE基因维度贪心配对,双方仅沿DE维度向配对中点收缩β=0.2(nnz-only、坐标不动),压缩Δ方向之外的型内残余方差。

方法(family T2EI-01,PLAN:型内NN配对中点收缩修复variogram)

保留父节点 8 全部管线(procrustes3d、scale_damp=0.5、分层混抽 n=5000、α=5、λ=6、|Δ|≥0.25 DE 掩码、nnz-only、坐标不动),在 λ 加权位移之后新增:

  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. 单输入阶段退路:同父节点,分层复制最后观测阶段,无位移无配对。

机制生效证据(seed 0,proxy E6.75+E8.0→E7.25,t=0.4,β=0.2 de-only)

  • 9 个类型完成配对、共 868 对(第 10 个共有类型因输出侧细胞 <10 被跳过)。
  • 平均配对距离 / 型内直径 = 0.648(<0.8,配对有意义;PLAN 判据满足)。
  • 配对前后型内表达 std 比(DE 维度)= 0.948;沿 Δ 正交方向(PC2+PC3)方差比 = 0.915——正交方向压缩更多,正是 λ 投影加权未触及的自由度(对照:λ 机制的型内 std 比 0.920 主要沿 Δ)。
  • 稀疏结构保持:收缩只动 nnz 项且限于 DE 维度。

关闭对照(mechanism_off_control)

T2_PAIR_BETA=0:输出与父节点 8(α=5, λ=6)逐位相同(X 与 spatial_3D array_equal=True)——管线正确性验证通过。

查分结果(同日 A 半锚点;控制组 β=0 当日 = 60.72,与父节点 METHOD 同日锚点一致)

全基因收缩(de_only=0)与 DE-only 收缩两组网格:

配置seed0seed1mmd_u skillvariogram skillnbr skill
β=0(=父节点8)60.7260.710.599/0.6020.368/0.3610.585/0.582
全基因 β=0.05/0.1/0.15/0.2/0.360.75/60.76/60.78/60.79/60.78—0.601→0.609 单调0.369→0.376 单调0.584→0.577
全基因 β=0.5/1.060.52/59.91—0.608/0.5880.382/0.3990.571/0.550
de-only β=0.3/0.5/1.060.80/60.75/60.2560.48/—0.609/0.611/0.6020.374/0.378/0.3900.579/0.574/0.558
de-only β=0.2(提交)60.7960.630.607/0.6110.372/0.3650.581/0.579

如实结论:机制方向性信号一致——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 更差)。

  • 已验证:β=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) 细扫(差别在噪声内,无意义)。

知识来源

未使用新的生物学知识。Δ、类型均值、配对全部由 view 内两个输入阶段现场计算;无硬编码统计量、无保留阶段/基因型信息。DE 阈值 0.25 沿用评分器公开的 DE 定义(方法卡)。

下一步建议

  • 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 榜分级别)。

调研员的计划

名称型内NN配对中点收缩修复variogram(叠加于λ加权位移)
动机父节点8的cell_state组49.75是四组最弱,核心瓶颈是variogram skill 0.386(低于地板0.5)。ANALYSIS明确指出:沿Δ的投影加权对variogram无效(0.389→0.386),型内双峰残差主要不在Δ方向上,基因共变结构未被修复。mmd_u skill 0.610尚有空间。occupancy_dice skill 0.367属坐标侧问题,与表达机制正交,本节点不动。
做法保留父节点8全部管线(procrustes3d、scale_damp=0.5、分层混抽n=5000、α=5、λ=6、nnz-only、坐标不动),在λ加权位移之后新增型内配对收缩:
1. 对每个共有类型k(a/b各≥10细胞),取该型在输出中的a侧细胞集A_k和b侧细胞集B_k(已经过α+λ位移)。
2. 距离计算:只用|Δ_k|≥0.25的DE基因维度,计算A_k×B_k的欧氏距离矩阵。若DE基因数<10则跳过该型。
3. 贪心NN匹配:对A_k中每个细胞找B_k中最近未匹配细胞,形成配对集(|A_k|≠|B_k|时多余细胞不配对)。
4. 配对收缩:对每对(a_i, b_j),midpoint m=(a_i+b_j)/2;a_i ← a_i + β·(m−a_i),仅作用于a_i>0的项,clip≥0;b_j对称。β默认0.15,搜索{0.05,0.1,0.15,0.2,0.3}。
5. β=0时配对步骤不执行,输出与父节点8逐位相同(关闭对照)。
6. 环境变量T2_PAIR_BETA(默认0.15)、T2_PAIR_MIN_CELLS(默认10)。
7. 单输入阶段退路:同父节点,分层复制最后观测阶段,无位移无配对。
8. vec-score筛选:先跑β=0确认逐位复现父节点;再跑β=0.15,看variogram skill是否从0.386上升;若上升则扩展网格,若不上升则尝试β=0.3/0.5。
9. 预期耗时增加<0.5s(每型距离矩阵≤300×300×50维)。
风险1) α=5+λ=6已大幅压缩型内方差,残余双峰可能很小,配对收缩无空间→检查配对前后型内std比值,若变化<5%则机制无信号;2) β过大→型内多样性塌缩→mmd_u反降;护栏:mmd_u skill不低于0.59;3) 贪心NN在高维稀疏空间可能配对质量差→报告配对距离中位数与型内直径之比,若>0.8说明配对无意义;4) 总收益可能<1分噪声→若首次查分差<0.5,换β再查2次确认方向。

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

对比:父节点版本 95a9992ba8。改动的文件:solution/EXECUTION.json +1 −0、solution/METHOD.md +36 −30、solution/README.md +7 −5、solution/run.py +124 −2

diff --git a/solution/EXECUTION.json b/solution/EXECUTION.jsonnew file mode 100644index 0000000..9d5125c--- /dev/null+++ b/solution/EXECUTION.json@@ -0,0 +1 @@+{"gpu": false}diff --git a/solution/METHOD.md b/solution/METHOD.mdindex 4db8403..3656ee8 100644--- a/solution/METHOD.md+++ b/solution/METHOD.md@@ -1,44 +1,50 @@-父节点 mix+类型级常数收敛位移之上,把位移改为逐细胞投影加权:细胞沿 Δ 方向已前伸的少移、极端的多移(w=clip(1∓λp,0.2,2.5),λ=6),型内分布向中间压缩而非刚性平移。+父节点8之上新增型内NN配对中点收缩:共有类型a/b侧细胞在DE基因维度贪心配对,双方仅沿DE维度向配对中点收缩β=0.2(nnz-only、坐标不动),压缩Δ方向之外的型内残余方差。 -## 方法(family T2EI-01,PLAN:型内投影加权异质位移)+## 方法(family T2EI-01,PLAN:型内NN配对中点收缩修复variogram) -保留父节点 5 全部管线(procrustes3d 对齐、scale_damp=0.5、按类型分层混抽 (1−t,t)、n=5000、共有类型 Δ=μ_b−μ_a 只保留 |Δ|≥0.25、nnz-only + clip≥0、坐标不动、α=5),只把常数位移改成逐细胞加权:+保留父节点 8 全部管线(procrustes3d、scale_damp=0.5、分层混抽 n=5000、α=5、λ=6、|Δ|≥0.25 DE 掩码、nnz-only、坐标不动),在 λ 加权位移之后新增: -1. 对每个共有类型 k、Δ≠0 的基因维度:a 侧细胞 i 计算偏差投影 p_i = dot(x_i − μ_a,k, Δ_k)/(‖Δ_k‖²+ε),ε=1.0;权重 w_i = clip(1 − λ·p_i, 0.2, 2.5);位移 x_i ← clip(x_i + α·t·w_i·Δ_k, 0),只作用于 x_i>0 的项。-2. b 侧对称:p_i 相对 μ_b,k,w_i = clip(1 + λ·p_i, 0.2, 2.5),位移 −α·(1−t)·w_i·Δ_k。-3. 直觉:已沿 Δ 方向伸展较远(更接近中间态)的细胞获得更小位移,极端细胞获得更大位移 → 型内端点双峰被压缩而非整块平移。-4. λ=0 时 w≡1,退化为父节点常数位移(对照,验证逐位相同)。λ 默认 6.0,环境变量 `T2_CONVERGE_LAMBDA` / `T2_CONVERGE_EPS` 可覆盖,提交时保持打开。-5. 单输入阶段退路:同父节点,分层复制最后观测阶段,无位移。坐标完全不动,表达-位置配对不因机制被破坏。+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. 单输入阶段退路:同父节点,分层复制最后观测阶段,无位移无配对。 -## 机制生效证据(seed 0,proxy E6.75+E8.0→E7.25,t=0.4,10 个共有类型全部位移)+## 机制生效证据(seed 0,proxy E6.75+E8.0→E7.25,t=0.4,β=0.2 de-only) -- 权重分布:λ=6 时 w_mean=1.096、w_std=0.652(≫0.05,投影有区分力;均值略高于 1 因下界 0.2/上界 2.5 的 clip 不对称)。λ=1/2/3 时 w_std=0.15/0.29/0.40,随 λ 单调。-- 型内表达标准差比(after/before)0.920、型间均值距离比 0.804;零元结构保持(nnz-only 位移)。-- λ=0 输出与父节点 run.py 输出逐位相同(X 与坐标 array_equal=True)——关闭对照通过。+- 9 个类型完成配对、共 868 对(第 10 个共有类型因输出侧细胞 <10 被跳过)。+- 平均配对距离 / 型内直径 = **0.648**(<0.8,配对有意义;PLAN 判据满足)。+- 配对前后型内表达 std 比(DE 维度)= **0.948**;沿 Δ 正交方向(PC2+PC3)方差比 = **0.915**——正交方向压缩更多,正是 λ 投影加权未触及的自由度(对照:λ 机制的型内 std 比 0.920 主要沿 Δ)。+- 稀疏结构保持:收缩只动 nnz 项且限于 DE 维度。 -## 对照与查分结果(全部为同一时段 A 半查分;父节点输出同日重查 = 60.55,此前变化量表中的 61.51 属另一次评分锚点,跨日绝对值不可直接比)+## 关闭对照(mechanism_off_control) -| 配置 | 总分 | mmd_u skill | variogram skill | neighborhood skill | cell_state 组 |+T2_PAIR_BETA=0:输出与父节点 8(α=5, λ=6)逐位相同(X 与 spatial_3D array_equal=True)——管线正确性验证通过。++## 查分结果(同日 A 半锚点;控制组 β=0 当日 = 60.72,与父节点 METHOD 同日锚点一致)++全基因收缩(de_only=0)与 DE-only 收缩两组网格:++| 配置 | seed0 | seed1 | mmd_u skill | variogram skill | nbr skill | |---|---:|---:|---:|---:|---:|-| λ=0(对照=父节点,逐位相同) | 60.55 | 0.585 | 0.371 | 0.583 | 47.82 |-| λ=0.5 | 60.60 | 0.587 | 0.374 | 0.583 | 48.07 |-| λ=1.0 | 60.65 | 0.590 | 0.376 | 0.582 | 48.29 |-| λ=2.0 | 60.67 | 0.596 | 0.373 | 0.581 | 48.47 |-| λ=3.0 | 60.69 | 0.599 | 0.371 | 0.582 | 48.50 |-| **λ=6.0(提交)** | **60.72** | 0.599 | 0.368 | 0.585 | 48.33 |-| λ=10.0 | 60.49 | 0.592 | 0.365 | 0.587 | 47.88 |-| λ=1/3, ε=0.1 | 60.65/60.69 | 0.590/0.599 | 0.376/0.371 | 0.582 | — |--- 收益来源是 mmd_u skill(0.585→0.599,随 λ 单调到 6 后在 10 回落),variogram 基本持平(0.371→0.368),neighborhood、DE 两项、形状三项不动。-- **如实说明**:同日同锚点下总收益 +0.17(60.55→60.72),低于 T2 约 1 分的查分噪声,PLAN 预期的 variogram 明显上升没有出现;只有 mmd_u 的单调改善是跨 λ 一致的方向性信号(护栏 mmd_u≥0.585、neighborhood≥0.58 均未破)。λ=10 过冲回落,平台在 3–6,取 λ=6。-- 已验证:λ=0 逐位复现父节点;λ∈{0.5,1,2,3,6,10}、ε∈{0.1,1.0} 网格;vec-check 通过;默认参数输出与 λ=6 网格输出一致;无新增随机源,对 seed 确定。-- 未验证:λ 与 α 的联合网格(α 固定 5);真实括号(跨度更窄、Δ 更小,投影 p 的尺度随 ‖Δ‖ 变化,λ 的最优值可能移动——ε=1.0 在 ‖Δ‖² 小时会稀释权重,跨括号迁移性存疑);proxy2/final 视图未跑(本节点只挂 proxy 尺子)。+| β=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 |++**如实结论**:机制方向性信号一致——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 更差)。++- 已验证:β=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) 细扫(差别在噪声内,无意义)。  ## 知识来源 -未使用新的生物学知识;Δ 向量、类型均值全部由 view 内两个输入阶段现场计算,无硬编码统计量,无保留阶段/基因型信息。+未使用新的生物学知识。Δ、类型均值、配对全部由 view 内两个输入阶段现场计算;无硬编码统计量、无保留阶段/基因型信息。DE 阈值 0.25 沿用评分器公开的 DE 定义(方法卡)。  ## 下一步建议 -- variogram 对"沿 Δ 的投影加权"不敏感,说明双峰残差主要不在 Δ 方向上;可试型内沿主成分的分位数压缩,或对 a/b 两侧细胞做型内 OT 配对后向配对中点收缩(保 nnz 结构)。-- occupancy_dice skill 0.369 仍是形状组主要失分项,与表达机制正交,值得单独做坐标侧改进。+- 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 榜分级别)。diff --git a/solution/README.md b/solution/README.mdindex aa33d1e..41f8ea6 100644--- a/solution/README.md+++ b/solution/README.md@@ -1,6 +1,8 @@-# mix + 类型级表达时间收敛(T2:embryo:val_interp)+# mix + 型内表达收敛位移 + NN配对中点收缩(T2:embryo:val_interp) -父节点 mix(procrustes3d、scale_damp=0.5、分层混抽)之上新增:共有类型按 Δ=μ_b−μ_a-对 a 侧 +α·t·Δ、b 侧 −α·(1−t)·Δ 位移,只动已表达项、只留 |Δ|≥0.25 基因,clip≥0,坐标不动。-α 默认 5(`T2_CONVERGE_ALPHA` 可覆盖;α=0 逐位复现父节点)。proxy A 半:对照 56.36 → 60.55(seed 1:60.34)。-详见 METHOD.md。+父节点 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。diff --git a/solution/run.py b/solution/run.pyindex 201dac6..5505261 100644--- a/solution/run.py+++ b/solution/run.py@@ -30,6 +30,14 @@ 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,+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,+nnz entries only, clipped at 0. Compresses within-type residual spread in all+directions (the projection-weighted shift only compresses along Δ). β = 0+reproduces the λ-parent bit-for-bit. """  from __future__ import annotations@@ -63,6 +71,22 @@ CONVERGE_NNZ_ONLY = os.environ.get("T2_CONVERGE_NNZ_ONLY", "1") == "1" # it. λ = 0 gives w ≡ 1 and reproduces the constant-shift parent bit-for-bit. CONVERGE_LAMBDA = float(os.environ.get("T2_CONVERGE_LAMBDA", "6.0")) CONVERGE_EPS = float(os.environ.get("T2_CONVERGE_EPS", "1.0"))+# Within-type NN pairing midpoint shrinkage (family T2EI-01 refine, this node):+# after the λ-weighted displacement, for every shared type with ≥PAIR_MIN_CELLS+# cells on both output sides, greedily match each a-side cell to its nearest+# unmatched b-side cell (Euclidean distance restricted to DE genes |Δ|≥0.25)+# and shrink both partners a fraction β toward their pair midpoint, applied+# only to entries already expressed in each cell and clipped at 0. This+# compresses within-type residual spread in ALL directions (not just along Δ),+# which the projection-weighted shift provably does not touch. β = 0 skips the+# step entirely and reproduces the λ-parent bit-for-bit.+PAIR_BETA = float(os.environ.get("T2_PAIR_BETA", "0.2"))+PAIR_MIN_CELLS = int(os.environ.get("T2_PAIR_MIN_CELLS", "10"))+PAIR_MIN_DE = int(os.environ.get("T2_PAIR_MIN_DE", "10"))+# DE-only shrinkage: move paired cells toward each other only on genes with+# |Δ|≥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"   def mix_converge(stage_a, stage_b, t: float, params: dict, alpha: float):@@ -161,6 +185,102 @@ def mix_converge(stage_a, stage_b, t: float, params: dict, alpha: float):                 conv["between_type_mean_dist_rel"] = float(np.mean(dists_a) / max(np.mean(dists_b), 1e-12))             conv["n_shared_types_converged"] = len(shared) +    pair_info = {"pair_beta": PAIR_BETA, "n_paired_types": 0, "n_pairs": 0,+                 "pair_within_std_rel": None, "pair_orth_var_rel": None,+                 "pair_dist_over_diam": None}+    if PAIR_BETA != 0.0 and ia.size and ib.size:+        labs_a = np.asarray(stage_a.labels).astype(str)[ia]+        labs_b = np.asarray(stage_b.labels).astype(str)[ib]+        means_a = type_means(stage_a.X, stage_a.labels)+        means_b = type_means(stage_b.X, stage_b.labels)+        cnt_oa = {k: int((labs_a == k).sum()) for k in set(labs_a.tolist())}+        cnt_ob = {k: int((labs_b == k).sum()) for k in set(labs_b.tolist())}+        pair_types = sorted(k for k in set(means_a) & set(means_b)+                            if cnt_oa.get(k, 0) >= PAIR_MIN_CELLS and cnt_ob.get(k, 0) >= PAIR_MIN_CELLS)+        stds, ortho, ratios, n_pairs = [], [], [], 0+        n_types_paired = 0+        for lab in pair_types:+            d = (means_b[lab] - means_a[lab]).astype(np.float32)+            de = np.abs(d) >= CONVERGE_MIN_DELTA+            if int(de.sum()) < PAIR_MIN_DE:+                continue+            ma = labs_a == lab+            mb = labs_b == lab+            A = xa[np.where(ma)[0]][:, de].astype(np.float64)+            B = xb[np.where(mb)[0]][:, de].astype(np.float64)+            ia_idx = np.where(ma)[0]+            ib_idx = np.where(mb)[0]+            # pairwise distances |A| x |B| on DE dims+            D2 = (A * A).sum(1)[:, None] + (B * B).sum(1)[None, :] - 2.0 * (A @ B.T)+            np.maximum(D2, 0.0, out=D2)+            used = np.zeros(B.shape[0], dtype=bool)+            pairs = []+            for i in range(A.shape[0]):+                row = D2[i].copy()+                row[used] = np.inf+                j = int(np.argmin(row))+                if not np.isfinite(row[j]):+                    break+                used[j] = True+                pairs.append((i, j))+            if not pairs:+                continue+            n_types_paired += 1+            n_pairs += len(pairs)+            # evidence: within-type std and orthogonal (PC2/PC3) variance before pairing+            comb_before = np.vstack([A, B])+            mu = comb_before.mean(0)+            centered = comb_before - mu+            cov = centered.T @ centered+            evals, evecs = np.linalg.eigh(cov)+            order = np.argsort(evals)[::-1]+            evecs = evecs[:, order[1:3]]  # PC2, PC3+            var_before = ((centered @ evecs) ** 2).mean(0)+            # diameter: max pairwise distance within the type (subsample pairs)+            sub = comb_before[np.linspace(0, len(comb_before) - 1, min(len(comb_before), 200)).astype(int)]+            dsub = np.sqrt(np.maximum((sub * sub).sum(1)[:, None] + (sub * sub).sum(1)[None, :] - 2.0 * (sub @ sub.T), 0.0))+            diam = float(dsub.max()) if dsub.size else 0.0+            pdists = [float(np.sqrt(D2[i, j])) for i, j in pairs]+            if diam > 0:+                ratios.append(float(np.mean(pdists)) / diam)+            # apply midpoint shrinkage on nnz entries of the FULL gene vector+            Afull_before = xa[ia_idx]+            Bfull_before = xb[ib_idx]+            Afull = Afull_before.copy()+            Bfull = Bfull_before.copy()+            for i, j in pairs:+                a_row = Afull[i]+                b_row = Bfull[j]+                mid = 0.5 * (a_row.astype(np.float64) + b_row.astype(np.float64))+                da = PAIR_BETA * (mid - a_row.astype(np.float64))+                db = PAIR_BETA * (mid - b_row.astype(np.float64))+                if PAIR_DE_ONLY:+                    da = da * de+                    db = db * de+                na = np.clip(a_row.astype(np.float64) + da, 0.0, None)+                nb = np.clip(b_row.astype(np.float64) + db, 0.0, None)+                Afull[i] = np.where(a_row > 0, na, a_row).astype(np.float32)+                Bfull[j] = np.where(b_row > 0, nb, b_row).astype(np.float32)+            xa[ia_idx] = Afull+            xb[ib_idx] = Bfull+            # evidence after pairing (DE dims only, for orth variance)+            A2 = Afull[:, de].astype(np.float64)+            B2 = Bfull[:, de].astype(np.float64)+            comb_after = np.vstack([A2, B2])+            centered_a = comb_after - mu  # same frame as before+            var_after = ((centered_a @ evecs) ** 2).mean(0)+            ortho.append(var_after.sum() / max(var_before.sum(), 1e-12))+            stds.append((comb_after.std(0).mean(), comb_before.std(0).mean()))+        if stds:+            arr = np.array(stds)+            pair_info["pair_within_std_rel"] = float(arr[:, 0].mean() / max(arr[:, 1].mean(), 1e-12))+        if ortho:+            pair_info["pair_orth_var_rel"] = float(np.mean(ortho))+        if ratios:+            pair_info["pair_dist_over_diam"] = float(np.mean(ratios))+        pair_info["n_paired_types"] = n_types_paired+        pair_info["n_pairs"] = n_pairs+     expr = np.clip(np.vstack([xa, xb]), 0.0, None).astype(np.float32) if (ia.size or ib.size) else np.zeros((0, len(stage_a.genes)), np.float32)     coord_parts = []     if ia.size:@@ -171,7 +291,7 @@ def mix_converge(stage_a, stage_b, t: float, params: dict, alpha: float):     coords = scale_to_rms(coords, target_rms)     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,+        out_rms=rms_radius(coords), n_from_a=int(ia.size), n_from_b=int(ib.size), **conv, **pair_info,     )     return expr, coords.astype(np.float32), info @@ -199,7 +319,9 @@ def main() -> None:     keep = {k: info.get(k) for k in ("t", "n", "rms_a", "rms_b", "out_rms", "n_shared_types", "z_dot", "z_flipped",                                      "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")}+                                      "lambda", "weight_mean", "weight_std",+                                      "pair_beta", "n_paired_types", "n_pairs", "pair_within_std_rel",+                                      "pair_orth_var_rel", "pair_dist_over_diam")}     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:改了什么、各组分数怎么变、假设是否成立、经验和下一步建议。

改了什么在父节点8(mix混抽+α=5类型级收敛位移+λ=6投影加权)之后新增型内NN配对中点收缩:共有类型a/b侧输出细胞在DE基因维度(|Δ|≥0.25)贪心配对,双方仅沿DE维度向配对中点收缩β=0.2(nnz-only、坐标不动);β=0逐位复现父节点。
各组分数的变化cell_state:噪声内略好:mmd_u 0.01158→0.01123,skill 0.610→0.617,得分+0.09;variogram 0.01414→0.01392,skill 0.386→0.389,得分+0.05;组+0.56,未超1分噪声
expression_change:噪声内:de_score 0.3103不变(+0.00),de_direction 0.3944→0.3986(得分+0.02),组+0.09
local_spatial:噪声内略差:neighborhood_mmd 0.05015→0.05119,skill 0.608→0.603,得分-0.12,组-0.49
shape_scale:不变:三项原始值与得分全部相同,组+0.00
family_idT2EI-01
假设是否成立否
经验
  1. 型内配对收缩确实按PLAN机制工作(Engineer报告PC2/PC3正交方差比0.915、配对距离/直径0.648、β单调提升mmd_u/variogram skill),但每次压缩型内方差都同幅度推高neighborhood_mmd——邻域平均分布随型内塌缩偏离真值,权重25对12.5+12.5,净榜分为零。
  2. 在α=5+λ=6已压缩型内方差的管线上,纯表达侧的型内离散度压缩已到权衡上限:本节点与父节点8的榜分差+0.04完全在噪声内,任何进一步的表达侧收缩(更大β、全基因)只会让nbr损失抵消cell_state收益。
  3. 关闭对照(β=0逐位复现父节点array_equal=True)+ 跨β单调的skill变化(mmd_u 0.599→0.611、variogram 0.368→0.399、nbr 0.585→0.550,两seed一致)能确证机制生效,但机制生效≠榜分收益,权衡结构决定天花板。
  4. greedy NN配对按固定索引序无随机源,两seed结果稳定,此类确定性配对可安全叠加而不引入查分噪声之外的方差。
mechanism_active是
下一步建议
  1. 针对shape_scale:occupancy_dice skill 0.367是该组唯一失分项(d2/scale已0.93+),做坐标侧各向异性整形(node 7另一分支shape_scale达83),与本表达机制正交可叠加,头寸约+2榜分级别。
  2. 针对cell_state与local_spatial的权衡:放弃型内压缩,改做组成层面插值(按类型比例生成中间细胞而非整细胞混抽),或坐标侧让同型细胞更聚簇以直接改善邻域平均分布(提升nbr同时不动型内方差)。
  3. 针对local_spatial: neighborhood_mmd 0.05119、skill 0.603距地板12.5只有+2.58收益,尝试微调输出细胞密度/邻域覆盖(15近邻在更密或更疏的点云覆盖范围不同),但需警惕评分器对密度的敏感性未标定。

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

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

分析员

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

工程师

角色工程师 alibaba-token-plan-cn/qwen3.8-max
调用次数1 次
轮数31
工具调用共 35 次:—
用时17 分
token 数输入 60,587 · 输出 10,926 · 思考 10,015
任务(第一行)按计划修改程序:型内NN配对中点收缩修复variogram(叠加于λ加权位移)
最后的回答(摘录)
完成。总结:

**做了什么**:按 PLAN 在父节点 8(mix + α=5 收敛位移 + λ=6 投影加权)之上实现型内 NN 配对中点收缩——共有类型 a/b 侧输出细胞在 DE 基因维度(|Δ|≥0.25)上贪心配对,双方仅沿 DE 维度向配对中点收缩 β(nnz-only、坐标不动)。机制证据齐全:9 型 868 对、配对距离/直径 0.648、型内 std 比 0.948、正交方向(PC2/PC3)方差比 0.915(比沿 Δ 压缩更多,正是 λ 未触及的自由度)。关闭对照 β=0 逐位复现父节点。

**查分**(同日 A 半锚点,对照 β=0 = 60.72/60.71 seed 0/1):提交 de-only β=0.2 得 60.79/60.63。mmd_u skill 0.599→0.611、variogram 0.368→0.399(β 单调,两 seed 一致,β=1 时 variogram 越过地板 0.389),但 neighborhood_mmd 同步单调下降(0.585→0.550),榜分净收益 ≈0,在 1 分噪声内——机制方向被证实,榜分已到该权衡的上限。额度用尽(20 次)。

**下一步最值得试**:(1) occupancy_dice(skill 0.367)是形状组最大失分,坐标侧各向异性整形与本表达机制正交可叠加(node 7 在另一分支做到 shape_scale 83);(2) 型内压缩与 neighborhood_mmd 存在结构性权衡(权重 25 vs 25),纯表达压缩无剩余头寸,改做组成插值(按型比例而非整细胞混抽)或让同型细胞坐标更聚簇以直接改善邻域平均。
原始记录位置/home/spark-longxinyang/vec/runs/formal/20261003-171955-search-t2-embryo-interp-chain-12h/nodes/11/engineer.jsonl (文件不在)

调研员

角色调研员 alibaba-token-plan-cn/qwen3.8-max
调用次数1 次
轮数1
工具调用共 0 次:—
用时2 分
token 数输入 15,592 · 输出 1,152 · 思考 3,971
任务(第一行)为节点 n11(改进,父节点 n8)写改进计划 PLAN.json
最后的回答(摘录)
```json
{
  "name": "型内NN配对中点收缩修复variogram(叠加于λ加权位移)",
  "motivation": "父节点8的cell_state组49.75是四组最弱,核心瓶颈是variogram skill 0.386(低于地板0.5)。ANALYSIS明确指出:沿Δ的投影加权对variogram无效(0.389→0.386),型内双峰残差主要不在Δ方向上,基因共变结构未被修复。mmd_u skill 0.610尚有空间。occupancy_dice skill 0.367属坐标侧问题,与表达机制正交,本节点不动。",
  "approach": "保留父节点8全部管线(procrustes3d、scale_damp=0.5、分层混抽n=5000、α=5、λ=6、nnz-only、坐标不动),在λ加权位移之后新增型内配对收缩:\n1. 对每个共有类型k(a/b各≥10细胞),取该型在输出中的a侧细胞集A_k和b侧细胞集B_k(已经过α+λ位移)。\n2. 距离计算:只用|Δ_k|≥0.25的DE基因维度,计算A_k×B_k的欧氏距离矩阵。若DE基因数<10则跳过该型。\n3. 贪心NN匹配:对A_k中每个细胞找B_k中最近未匹配细胞,形成配对集(|A_k|≠|B_k|时多余细胞不配对)。\n4. 配对收缩:对每对(a_i, b_j),midpoint m=(a_i+b_j)/2;a_i ← a_i + β·(m−a_i),仅作用于a_i>0的项,clip≥0;b_j对称。β默认0.15,搜索{0.05,0.1,0.15,0.2,0.3}。\n5. β=0时配对步骤不执行,输出与父节点8逐位相同(关闭对照)。\n6. 环境变量T2_PAIR_BETA(默认0.15)、T2_PAIR_MIN_CELLS(默认10)。\n7. 单输入阶段退路:同父节点,分层复制最后观测阶段,无位移无配对。\n8. vec-score筛选:先跑β=0确认逐位复现父节点;再跑β=0.15,看variogram skill是否从0.386上升;若上升则扩展网格,若不上升则尝试β=0.3/0.5。\n9. 预期耗时增加<0.5s(每型距离矩阵≤300×300×50维)。",
  "expected_groups": ["cell_state"],
  "risks": "1) α=5+λ=6已大幅压缩型内方差,残余双峰可能很小,配对收缩无空间→检查配对前后型内std比值,若变化<5%则机制无信号;2) β过大→型内多样性塌缩→mmd_u反降;护栏:mmd_u skill不低于0.59;3) 贪心NN在高维稀疏空间可能配对质量差→报告配对距离中位数与型内直径之比,若>0.8说明配对无意义;4) 总收益可能<1分噪声→若首次查分差<0.5,换β再查2次确认方向。",
  "family_id": "T2EI-01",
  "mechanism": "在类型级常数位移+λ投影加权之后,对同型a/b侧细胞做表达空间NN配对,双方向配对中点收缩β比例,直接压缩型内全方向残余方差(而非仅沿Δ),修复基因共变结构。",
  "vs_constant_shift": "常数位移/λ加权位移对所有细胞施加同一方向(Δ)的力,只移动型均值、压缩Δ方向方差;本机制为每个细胞找到其最近的异侧同型伙伴,沿两者连线(任意方向)收缩,直接减少型内全维度离散度,对variogram度量的基因对差异有直接作用。",
  "mechanism_evidence": "Engineer应报告:(1) 配对前后各型内表达标准差比(预期<0.95);(2) 配对前后型内沿Δ正交方向(PC2,PC3)的方差比(预期明显下降,这是λ机制未触及的);(3) 平均配对距离与型内直径之比(<0.6说明配对有意义);(4) variogram skill从0.386是否上升;(5) mmd_u skill不低于0.59。",
  "mechanism_off_control": "设T2_PAIR_BETA=0,配对步骤完全跳过,输出应与父节点8(λ=6, α=5)逐位相同(array_equal=True)。若不同则管线有bug。预期差别:β>0时variogram skill上升、型内方差下降,β=0时与父节点无差异。",
  "sources": []
}
```
原始记录位置/home/spark-longxinyang/vec/runs/formal/20261003-171955-search-t2-embryo-interp-chain-12h/nodes/11/researcher.jsonl (文件不在)

审查员

角色审查员 alibaba-token-plan-cn/qwen3.8-max
调用次数1 次
轮数7
工具调用共 10 次:—
用时1 分
token 数输入 23,629 · 输出 1,236 · 思考 4,799
任务(第一行)审查节点 n11 的程序是否越界读取、写死目标、钻评分器漏洞
最后的回答(摘录)
REVIEW.json written
原始记录位置/home/spark-longxinyang/vec/runs/formal/20261003-171955-search-t2-embryo-interp-chain-12h/nodes/11/reviewer.jsonl (文件不在)