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

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

节点 n26

表达时移扩展到 matched_align 跨类型相关匹配对(γ 按 r 幂次加权);代理上 expr +2 但 cell_state −1.6、board +0.2(噪声内),按判据提交关闭态(=父,逐位一致)。

运行?一次完整的自动搜索或 Agent 会话,有自己的锁定配置和证据包。20261003-043412-search-t2-heart-interp-g24-D-s1
父节点n24
子节点n29
操作?种子:人写的起点;改进:在父节点上改;草稿:从头写;修复:修父节点的报错。改进
状态已打分
分数搜索目标分 68.38(+0.0) · proxy 68.38(+0.0) · 3 次复测均分 66.96
审查通过 1 越界读取:未发现问题。run.py 仅通过框架 view_io(load_manifest/read_stage/panel_genes,均基于 --data 路径)读输入,无绝对路径、'..'、/mnt、/home、data/raw、打分器路径,无联网代码(grep 全部源码确认)。; 2 硬编码目标统计量:未发现问题。类型比例、均值、配对均由输入现场计算(type_pseudobulk_means、matched_centroids);CONTRACT_K=0.62(run.py:87)是单一标量尺度校正,经代理板 vec-score 校准(与方法卡 scale_damp 同一调参通…
用时?从运行开始到结束(或到现在)的挂钟时间。11 分
程序版本54558c64205b04826d4c1fad97dc643cf1d11297 (programs.git)

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

来自 programs.git 54558c6420:solution/METHOD.md

表达时移扩展到 matched_align 跨类型相关匹配对(γ 按 r 幂次加权);代理上 expr +2 但 cell_state −1.6、board +0.2(噪声内),按判据提交关闭态(=父,逐位一致)。

方法(family T2HI-01,improve)

基座与父节点 24(=21=19=13)完全相同:mix 插值(按 t 从括号两端分层抽真实细胞)

  • 空间连续簇抽样(k=25、每型 10 簇)+ matched-align Procrustes(r≥0.3 贪心跨类型地标)
  • 压实尺度校正(K=0.62)+ 类型级表达均值时移(γ=2,mean>2 基因,clip [0,∞))。

本节点机制(PLAN 指定):把表达时移的配对从同名交集(仅 5 对)扩展到 matched_align 已算出的跨类型表达相关贪心匹配对(r≥min_r 过滤),每对 γ_pair = γ_base·(r/min_r)^α。开关 T2_EXPR_SHIFT_MODE=matched|name(默认 name)、 T2_SHIFT_MIN_R(默认 0.4)、T2_SHIFT_ALPHA(默认 0)、T2_SHIFT_SAME_NAME_ONLY(消融)。 min_mean=2 过滤、[0,∞) 截断、其余路径不变。单输入阶段(b is None)同父,不进平移分支。

机制生效证据(stderr JSON,A 半代理 E8.25+E9.5→E8.75,t=0.4)

  • 配对数:matched 21 对(min_r=0.4)vs name 5 对;机制确实改变了更多细胞 (如 ExEM-2→early-VEC 881/179 个、NCC→NCC 619/341 个被平移)。
  • 新对 ‖Δ‖ 14–27,与同名对同量级;高 r 对生物学合理(Endo↔Great Artery Endoth r=0.86、JCF↔Peri 0.84、IFT-CM↔A-CM 0.81、d-CSE↔SE 0.77)。
  • 四组分变化(vs name 对照):expression_change +2.80(66.13→68.93 @r0.4)、 cell_state −4.64、local_spatial −0.78、shape_scale +0.00(坐标不动,符合设计)。

对照与网格(vec-score A 半,seed 0;父 name=67.79)

配置boardexprcell_statelocal_spatial
name(父,OFF 对照)67.7966.1367.1066.92
matched r0.4 α067.1368.9362.4666.14
matched r0.6 α067.5868.4064.1466.76
matched r0.7 α067.9968.1265.4667.37
matched r0.7 α167.8367.8565.2267.24
matched r0.75 / r0.8 α067.16 / 67.0865.56 / 65.1465.59 / 66.0066.49 / 66.17
matched r0.7 仅同名(1 对)67.3965.2967.3265.92

结论:expr 随配对放宽单调上升、cell_state 单调下降,board 最高仅 +0.20(r0.7), 远小于 ~2 分噪声,也不满足「>父+1 才提交」判据 → 按 PLAN 回退,提交关闭态。 消融显示:仅同名+r 过滤(1 对)反而 −0.40,说明 name 模式的 5 个无过滤同名对 本身已是好配置;r0.7 的微小领先来自 12 对混合,不可靠。

OFF 对照验证

默认(无环境变量)走 name 路径,与父节点 24/21/19 逐语句等价;实测默认输出 两次运行逐位一致(np.array_equal),且 A 半查分 67.7899 与父记录 67.79 一致, 四组分 +0.00。

验证过 / 未验证

  • 验证:代理视图(两输入括号)上 8 个配置、确定性、OFF 逐位对照、vec-check。
  • 未验证:真实括号(E8.25+E8.75→E9.0?)上 matched 配对质量;γ_base>2 与 matched 的组合(父建议的 γ=2.5/3.0 方向未在本节点探,留给后续)。

知识来源

仅复用方法卡中已发布阶段的 RMS 轨迹(E8.25/E8.75/E9.5,均为允许输入阶段)与 通用谱系知识(匹配对合理性核对:内皮/心肌/心外膜谱系对应关系,属通用机制知识)。 未使用任何保留阶段(E8.5、E10.5、E12.5、禁窗)或保留基因型信息。

调研员的计划

名称表达时移扩展至相关匹配类型对(matched-mode shift + 相关度加权γ)
动机expression_change 是最弱组(66.67),当前仅 5 个同名共有类型获得 γ=2 平移,类型覆盖不足。节点 24 证伪了基因级重加权,节点 23 证伪了空间平滑,节点 21 证伪了自适应簇粒度;但「哪些类型对参与平移」这一维度从未探过。matched_align 已计算跨类型表达相关匹配对(贪心、r≥0.3),却仅用于 Procrustes 地标,未用于表达平移。将平移扩展到相关匹配对可增加被校正的细胞比例,且按匹配置信度(相关系数)加权 γ 可控制噪声,属类型对级别(非基因级)结构化改动,规避节点 24 教训。
做法步骤:(1) 在 run.py 的 apply_type_mean_shift 中,当 T2_EXPR_SHIFT_MODE=matched 时,复用 matched_align.py 已返回的贪心匹配对列表(每对含 type_a、type_b、Pearson r),替代同名交集;(2) 对每对 (ca,cb) 计算 Δ=mean_b−mean_a,平移公式不变(a 侧 +γ_pair·t·Δ,b 侧 −γ_pair·(1−t)·Δ),但 γ_pair=γ_base·(r_pair/r_min)^α,γ_base=2,r_min 为匹配阈值;(3) 匹配阈值 T2_SHIFT_MIN_R 默认 0.4(比对齐阈值 0.3 更严),min_mean=2 过滤不变,[0,∞) 截断不变;(4) 网格:min_r∈{0.3,0.4,0.5}×α∈{0,1}(α=0 即所有对统一 γ=2,作消融);先跑 α=0/min_r=0.4 确认方向,再细调;(5) 若 matched 模式首次查分 expr≤父+0.8,立即回退 name 模式;(6) 单输入阶段(b is None)同父,不进入平移分支。vec-score 快速筛选:先 seed 0 单查,超父+1 再确认。
风险1) 相关匹配对可能引入噪声(非同名类型表达分布差异大)→ Engineer 应在 stderr 输出每对 (type_a,type_b,r,Δ_norm),若多数对 r<0.5 或 Δ_norm 远大于同名对,说明配对不可靠,应提高 min_r 或回退;2) 匹配对数量可能很少(心脏类型注释较一致,跨名匹配本身少)→ 若新增对 <2 则收益有限,应尽早发现并回退;3) α 加权方向错误(高相关对应更大 γ 的假设不成立)→ α=0 消融可区分。

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

对比:父节点版本 2f16d74866。改动的文件:solution/METHOD.md +43 −25、solution/run.py +54 −8

diff --git a/solution/METHOD.md b/solution/METHOD.mdindex af74cd2..683f0c8 100644--- a/solution/METHOD.md+++ b/solution/METHOD.md@@ -1,39 +1,57 @@-实现 PLAN 的基因级信噪比收缩表达时移(每基因乘 s=Δ²/(Δ²+κV),V=两侧型内方差均值+ε)并做 ON/OFF 对照;代理上 κ=1.0 与 κ=0.5 均不超父(board 随 κ 减小单调回到父值),按 PLAN 回退判据以关闭态提交,输出与父节点 21(=19)一致。+表达时移扩展到 matched_align 跨类型相关匹配对(γ 按 r 幂次加权);代理上 expr +2 但 cell_state −1.6、board +0.2(噪声内),按判据提交关闭态(=父,逐位一致)。 -## 提交配置(family T2HI-01,机制=基因级 SNR 收缩,状态:已实现、对照后关闭)+## 方法(family T2HI-01,improve) -提交 = 父节点 19/21 全部路径不动:matched-align Procrustes 对齐(r≥0.3 贪心、保 z)、K=0.62 压实尺度、固定簇抽样(k=25、每型 10 簇、random 播种、jitter 0.02)、类型级表达均值时间插值(同名共有类型、min_mean=2、γ=2、坐标不动)。单输入阶段退路(b is None)同父,不进入收缩分支。默认环境变量 T2_EXPR_SHRINK=0(关)。+基座与父节点 24(=21=19=13)完全相同:mix 插值(按 t 从括号两端分层抽真实细胞)++ 空间连续簇抽样(k=25、每型 10 簇)+ matched-align Procrustes(r≥0.3 贪心跨类型地标)++ 压实尺度校正(K=0.62)+ 类型级表达均值时移(γ=2,mean>2 基因,clip [0,∞))。 -## 机制实现(PLAN approach)+本节点机制(PLAN 指定):把表达时移的配对从**同名交集**(仅 5 对)扩展到+matched_align 已算出的**跨类型表达相关贪心匹配对**(r≥min_r 过滤),每对+γ_pair = γ_base·(r/min_r)^α。开关 `T2_EXPR_SHIFT_MODE=matched|name`(默认 name)、+`T2_SHIFT_MIN_R`(默认 0.4)、`T2_SHIFT_ALPHA`(默认 0)、`T2_SHIFT_SAME_NAME_ONLY`(消融)。+min_mean=2 过滤、[0,∞) 截断、其余路径不变。单输入阶段(b is None)同父,不进平移分支。 -- `run.py::apply_type_mean_shift`:开启时对每个共有类型对 (ca,cb)、每基因 g 计算 Δ=mean_b−mean_a、V=(var_a+var_b)/2+ε(ε=0.05 防除零,T2_EXPR_SHRINK_EPS 可调),收缩因子 s=Δ²/(Δ²+κ·V),实际平移 a 侧 +γ·s·t·Δ、b 侧 −γ·s·(1−t)·Δ;min_mean=2 过滤与 [0,∞) 截断不变。`type_pseudobulk_means` 增加 with_var 选项(E[X²]−E[X]²,现场计算)。-- 环境变量:T2_EXPR_SHRINK(0/1,默认 0)、T2_EXPR_SHRINK_K(κ,默认 1.0)。κ=1.0 先探方向,κ=0.5 补测网格下界;κ=2/4 未测——κ=1.0 已低于父且方向单调(更大 κ 更强收缩,只会更低),PLAN 回退判据已触发。-- 机制生效证据(stderr JSON):κ=1.0 时 s 中位数 0.020、94.4% 基因 s<0.5、2477/2500 基因 s<0.8;κ=0.5 时中位数 0.040、89.1% s<0.5。即绝大多数基因的 Δ² 远小于型内方差,收缩把 γ=2 平移几乎压到零,确实按设计逐基因差异化改变了平移幅度。+## 机制生效证据(stderr JSON,A 半代理 E8.25+E9.5→E8.75,t=0.4) -## 机制关闭对照(PLAN mechanism_off_control)+- 配对数:matched 21 对(min_r=0.4)vs name 5 对;机制确实改变了更多细胞+  (如 ExEM-2→early-VEC 881/179 个、NCC→NCC 619/341 个被平移)。+- 新对 ‖Δ‖ 14–27,与同名对同量级;高 r 对生物学合理(Endo↔Great Artery Endoth+  r=0.86、JCF↔Peri 0.84、IFT-CM↔A-CM 0.81、d-CSE↔SE 0.77)。+- 四组分变化(vs name 对照):expression_change +2.80(66.13→68.93 @r0.4)、+  cell_state −4.64、local_spatial −0.78、shape_scale +0.00(坐标不动,符合设计)。 -T2_EXPR_SHRINK=0 时代码跳过收缩分支(with_var=False,均值路径与父逐语句相同)。实测:OFF 输出 seed 0 两次运行逐位一致(h5 全部 9 个数据集 np.array_equal);OFF 查分四组与父节点 21 报告值完全相同(board 67.79,expr 66.13 / cell_state 67.10 / local 66.92 / shape 71.01),确认关闭态 = 父行为。+## 对照与网格(vec-score A 半,seed 0;父 name=67.79) -## 代理查分结果(T2:heart:val_interp A 半,seed 0,共 3 次)+| 配置 | board | expr | cell_state | local_spatial |+|---|---:|---:|---:|---:|+| name(父,OFF 对照) | 67.79 | 66.13 | 67.10 | 66.92 |+| matched r0.4 α0 | 67.13 | 68.93 | 62.46 | 66.14 |+| matched r0.6 α0 | 67.58 | 68.40 | 64.14 | 66.76 |+| matched r0.7 α0 | 67.99 | 68.12 | 65.46 | 67.37 |+| matched r0.7 α1 | 67.83 | 67.85 | 65.22 | 67.24 |+| matched r0.75 / r0.8 α0 | 67.16 / 67.08 | 65.56 / 65.14 | 65.59 / 66.00 | 66.49 / 66.17 |+| matched r0.7 仅同名(1 对) | 67.39 | 65.29 | 67.32 | 65.92 | -| 配置 | board | expr | cell_state | local | shape |-|---|---:|---:|---:|---:|---:|-| 父配置(OFF,=提交) | **67.79** | 66.13 | **67.10** | **66.92** | 71.01 |-| 收缩 κ=0.5 | 67.66 | 66.15 | 66.96 | 66.53 | 71.01 |-| 收缩 κ=1.0 | 67.50 | 65.79 | 66.90 | 66.29 | 71.01 |+结论:expr 随配对放宽单调上升、cell_state 单调下降,board 最高仅 +0.20(r0.7),+远小于 ~2 分噪声,也不满足「>父+1 才提交」判据 → 按 PLAN 回退,提交关闭态。+消融显示:仅同名+r 过滤(1 对)反而 −0.40,说明 name 模式的 5 个无过滤同名对+本身已是好配置;r0.7 的微小领先来自 12 对混合,不可靠。 -结论:PLAN 假设(低 SNR 基因的 γ=2 平移是纯噪声,收缩应提升 expression_change)被证伪——expression_change 不升反降(κ=1.0:66.13→65.79),de_score 同步下降(0.3913→0.3913/0.4022 之间波动,de_direction 0.5636→0.5496),local_spatial 也随 κ 单调下降(平移幅度整体变小使输出更像两端原始细胞的机械混合,邻域对比度降低)。board 随 κ→0 单调回到父值,说明 γ=2 统一平移的收益来自**全部**基因(含低 SNR 基因)的一致移动,而不是少数高 SNR 基因:Δ² ≪ V 的基因虽单个不可靠,但 collectively 贡献了可被评分器识别的整体时移方向。PLAN 回退判据(κ=1.0 的 expr ≤ 父+0.8)第一次查分即触发,风险 1(γ=2 过冲整体有益)应验。+## OFF 对照验证 -## 验证过 / 没验证+默认(无环境变量)走 name 路径,与父节点 24/21/19 逐语句等价;实测默认输出+两次运行逐位一致(np.array_equal),且 A 半查分 67.7899 与父记录 67.79 一致,+四组分 +0.00。 -- 验证过:OFF 态确定性(两次运行逐位一致)与父行为等价(四组分数逐项相同);vec-check 通过;耗时 ~2.5s、内存 <0.5GB;机制 ON 的收缩因子诊断输出。-- 没验证:κ∈(0, 0.5)(如 κ=0.1)——趋势单调,最多逼近父值不会超过;κ>1(更强收缩,单调更差);per-type κ 或按类型细胞数加权的 V(小类型方差估计不稳的风险 3 未单独检验,因为机制整体方向已证伪)。+## 验证过 / 未验证 -## 知识来源与合规+- 验证:代理视图(两输入括号)上 8 个配置、确定性、OFF 逐位对照、vec-check。+- 未验证:真实括号(E8.25+E8.75→E9.0?)上 matched 配对质量;γ_base>2 与 matched+  的组合(父建议的 γ=2.5/3.0 方向未在本节点探,留给后续)。 -无新增外部生物学知识;Δ、V、ε 全部运行时从 view 的两个输入阶段现场计算(伪批量均值/方差),无保留阶段信息、无硬编码统计量。视图无关:不读 board/路径/绝对时间,仅用 bracket 与时间差 t,时间平移不变。κ 网格用 vec-score A 半标定(允许通道),提交取回退态、不引入新超参。+## 知识来源 -## 下一步建议--- 表达侧「基因级重加权 γ」维度已双向探明:统一 γ=2 是局部最优,按 SNR 收缩(本节点)与 kNN 局部平滑(节点 23)均有害。剩余空间可能在 γ>2 方向或按基因功能集(如通路级)而非 SNR 级差异化。-- local_spatial 对平移幅度敏感且与 expr 同向变化,提示两组共享「输出偏离真实中间态的程度」这一潜变量;单独优化一组可能已饱和。+仅复用方法卡中已发布阶段的 RMS 轨迹(E8.25/E8.75/E9.5,均为允许输入阶段)与+通用谱系知识(匹配对合理性核对:内皮/心肌/心外膜谱系对应关系,属通用机制知识)。+未使用任何保留阶段(E8.5、E10.5、E12.5、禁窗)或保留基因型信息。diff --git a/solution/run.py b/solution/run.pyindex 22271bf..1bd8627 100644--- a/solution/run.py+++ b/solution/run.py@@ -119,6 +119,20 @@ EXPR_SHRINK = os.environ.get("T2_EXPR_SHRINK", "0") != "0" EXPR_SHRINK_K = float(os.environ.get("T2_EXPR_SHRINK_K", "1.0")) EXPR_SHRINK_EPS = float(os.environ.get("T2_EXPR_SHRINK_EPS", "0.05")) +# --- node 26: matched-mode expression shift (PLAN T2HI-01 improve) ---+# Extend the type-mean time shift from the exact-name intersection to the+# greedy cross-type expression-correlation matches already computed by+# matched_align (used so far only as Procrustes landmarks). Each pair+# (ca, cb, r) gets gamma_pair = gamma_base * (r / SHIFT_MIN_R)**SHIFT_ALPHA:+# alpha=0 -> uniform gamma_base for all accepted pairs (ablation), alpha=1 ->+# gamma grows linearly with match confidence. Pairs with r < SHIFT_MIN_R+# (stricter than the alignment threshold 0.3 by default) are dropped from the+# shift. T2_EXPR_SHIFT_MODE=name (default) -> parent node 24/21/19 path,+# bit-identical output (pairs=None branch untouched).+SHIFT_MIN_R = float(os.environ.get("T2_SHIFT_MIN_R", "0.4"))+SHIFT_ALPHA = float(os.environ.get("T2_SHIFT_ALPHA", "0.0"))+SHIFT_SAME_NAME_ONLY = os.environ.get("T2_SHIFT_SAME_NAME_ONLY", "0") != "0"+  def type_pseudobulk_means(X, labels, with_var=False):     """Dict type -> dense per-gene mean (and variance if with_var) over cells."""@@ -141,23 +155,30 @@ def type_pseudobulk_means(X, labels, with_var=False): def apply_type_mean_shift(expr, labels_a_sel, labels_b_sel, stage_a, stage_b, t, pairs=None):     """Add per-type interpolated-mean shifts in place; returns n shifted pairs. -    pairs=None -> exact-name shared types (PLAN default). Otherwise pairs is a-    list of (type_a, type_b) cross-stage matches (from matched_align), so the-    shift also covers types whose names differ across annotations.+    pairs=None -> exact-name shared types (PLAN default, node 19/21/24 path).+    Otherwise pairs is a list of (type_a, type_b, r) cross-stage matches from+    matched_align; each pair's gamma is gamma_base*(r/SHIFT_MIN_R)**SHIFT_ALPHA+    (node 26 mechanism), so higher-confidence matches shift more (alpha>0) or+    all shift uniformly (alpha=0).     """     mean_a, var_a = type_pseudobulk_means(stage_a.X, stage_a.labels, with_var=EXPR_SHRINK)     mean_b, var_b = type_pseudobulk_means(stage_b.X, stage_b.labels, with_var=EXPR_SHRINK)     if pairs is None:-        pairs = [(c, c) for c in mean_a if c in mean_b]+        pairs = [(c, c, None) for c in mean_a if c in mean_b]     na = int(labels_a_sel.shape[0])     part_a, part_b = expr[:na], expr[na:]     n_shared = 0     s_all = []-    for ca_, cb_ in pairs:+    pair_diag = []+    for ca_, cb_, r_ in pairs:         ma = mean_a.get(ca_)         mb = mean_b.get(cb_)         if ma is None or mb is None:             continue+        if r_ is not None:+            gamma_pair = EXPR_GAMMA * (max(float(r_), 1e-6) / SHIFT_MIN_R) ** SHIFT_ALPHA+        else:+            gamma_pair = EXPR_GAMMA         delta = mb - ma         if EXPR_CENTER:             delta = delta - delta.mean()@@ -166,19 +187,35 @@ def apply_type_mean_shift(expr, labels_a_sel, labels_b_sel, stage_a, stage_b, t,             d2 = delta * delta             s = d2 / (d2 + EXPR_SHRINK_K * V)             s_all.append(s)-            delta = EXPR_GAMMA * s * delta+            delta = gamma_pair * s * delta         else:-            delta = EXPR_GAMMA * delta+            delta = gamma_pair * delta         if EXPR_MIN_MEAN > 0.0:             keep = np.maximum(ma, mb) > EXPR_MIN_MEAN             delta = np.where(keep, delta, 0.0)         sel_a = labels_a_sel == ca_+        n_a_shift = int(sel_a.sum())         if sel_a.any():             part_a[sel_a] += (t * delta).astype(np.float32)         sel_b = labels_b_sel == cb_+        n_b_shift = int(sel_b.sum())         if sel_b.any():             part_b[sel_b] += (-(1.0 - t) * delta).astype(np.float32)         n_shared += 1+        if EXPR_SHIFT_MODE == "matched":+            pair_diag.append({"a": str(ca_), "b": str(cb_), "r": None if r_ is None else round(float(r_), 4),+                              "gamma": round(float(gamma_pair), 4),+                              "dnorm": round(float(np.linalg.norm(mb - ma)), 4),+                              "n_sel_a": n_a_shift, "n_sel_b": n_b_shift})+    if EXPR_SHIFT_MODE == "matched":+        n_name = len([c for c in mean_a if c in mean_b])+        print(json.dumps({+            "expr_shift_matched": {"min_r": SHIFT_MIN_R, "alpha": SHIFT_ALPHA,+                                   "gamma_base": EXPR_GAMMA,+                                   "n_pairs_matched": len(pair_diag),+                                   "n_pairs_name_mode": n_name,+                                   "gammas": [p["gamma"] for p in pair_diag],+                                   "pairs": pair_diag}}), file=sys.stderr)     if EXPR_SHRINK and s_all:         s_cat = np.concatenate(s_all)         print(json.dumps({@@ -312,7 +349,16 @@ def main() -> None:         if EXPR_SHIFT and ia.size and ib.size:             pairs = None             if EXPR_SHIFT_MODE == "matched" and info.get("matched"):-                pairs = [tuple(str(k).split("~", 1)) for k in info.get("match_keys", [])]+                keys = info.get("match_keys", [])+                corrs = info.get("match_corrs", [])+                pairs = []+                for k, r in zip(keys, corrs):+                    if float(r) < SHIFT_MIN_R:+                        continue+                    ta, tb = str(k).split("~", 1)+                    if SHIFT_SAME_NAME_ONLY and ta != tb:+                        continue+                    pairs.append((ta, tb, float(r)))             n_shift_types = apply_type_mean_shift(                 expr, stage_a.labels[ia], stage_b.labels[ib], stage_a, stage_b, t, pairs)         coords = _jitter(np.vstack(p_parts), rng)

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

用到的知识库条目

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

改了什么run.py 实现了 matched-mode 表达时移:把类型均值时移的配对从同名交集扩展到 matched_align 的跨类型相关匹配对(T2_SHIFT_MIN_R 过滤、gamma_pair=gamma_base*(r/min_r)^T2_SHIFT_ALPHA、T2_SHIFT_SAME_NAME_ONLY 消融)并加 stderr 诊断;但代理上不超父,提交态是默认 name 路径(关闭态),故本节点实际输出与父节点 24 逐位一致,代码只新增了未被激活的开关。
各组分数的变化cell_state:无变化:67.95 → 67.95(+0.00)。代理上 matched r0.4 为 −4.64,是回退的直接原因。
expression_change:噪声内 / 无变化:66.67 → 66.67(+0.00)。Engineer 在 A 半代理上报告的 matched r0.4 expr +2.80 未进入提交态。
local_spatial:无变化:67.32 → 67.32(+0.00);代理上 matched r0.4 为 −0.78。
shape_scale:无变化:71.58 → 71.58(+0.00),坐标不动,符合设计。
family_idT2HI-01
假设是否成立否
经验
  1. 在 T2:heart 上把表达时移的配对从 5 个同名对扩展到 21 个跨类型相关匹配对(min_r=0.4, gamma=2),expression_change +2.80 但 cell_state −4.64、board 仅 +0.20(噪声内):跨名配对带来的 expr 收益被 cell_state 损失抵消。
  2. 提高匹配阈值可单调换取 expr/cell_state 权衡(r0.4→0.7:expr 68.93→68.12、cell_state 62.46→65.46、board 67.13→67.99),但 r≥0.75 后 expr 反跌(65.56/65.14),说明配对覆盖存在上限,board 峰值也只是父值 +0.2(噪声内)。
  3. alpha=1 的相关度幂次加权不优于 alpha=0 统一 gamma(r0.7:67.99 vs 67.83,expr 68.12 vs 67.85),即「高相关对给更大 gamma」的方向假设未被证实。
  4. 消融「仅同名 + r≥0.7 过滤」(只剩 1 对)board 67.39,低于不过滤的 5 个同名对 67.79:name 模式的价值来自覆盖 5 个类型,加 r 过滤反而丢覆盖;r 过滤只适用于跨名对。
  5. 结合节点 24(基因级 SNR 收缩)与本节点(类型对级扩展):expression_change 在 gamma=2、同名全覆盖这一点已是局部最优,基因维度和配对维度两个正交方向都探到边界,expr 与 cell_state 共享同一权衡轴,单独推 expr 必然损 cell_state。
  6. 代理(A 半)board 与真实榜分不一致:代理父值 67.79 vs 榜分 68.38,代理上 +0.20 的差异不足以判断真实收益,回退判据「>父+1」是合理的保守门槛。
mechanism_active否
下一步建议
  1. 针对 expression_change:在 name 模式(提交态路径)下扫 T2_EXPR_GAMMA∈{2.5, 3.0},纯幅度方向未探;同时盯 cell_state,若 cell_state 掉幅 > expr 涨幅(本节点代理上约 1:1.6)则立即回退。
  2. 针对 cell_state/expression_change 权衡:若再动配对维度,只对 r≥0.7 的跨名对施加部分 gamma(0.3–0.5·gamma_base)而非全量,保留 5 个同名对不动,代理验证需 board 超父 +1 才提交。
  3. 针对 shape_scale(71.58,最高组且 K=0.62 未细调):扫 K∈{0.55, 0.60, 0.65, 0.70},这是唯一未被 expr/cell_state 权衡污染的独立维度。

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

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

分析员

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

工程师

角色工程师 alibaba-token-plan-cn/qwen3.8-max
调用次数1 次
轮数26
工具调用共 27 次:bash 19、edit 5、read 2、write 1
用时8 分
token 数输入 53,803 · 输出 8,513 · 思考 7,425
任务(第一行)按计划修改程序:表达时移扩展至相关匹配类型对(matched-mode shift + 相关度加权γ)
最后的回答(摘录)
完成。总结:

**做了什么**:按 PLAN 实现 matched-mode 表达时移——把类型均值时移的配对从同名交集(5 对)扩展到 matched_align 跨类型表达相关贪心匹配对(21 对 @r≥0.4),γ_pair=2·(r/min_r)^α,含 stderr 诊断与 OFF 对照开关。

**查分结果**(A 半,7/20 次):机制确实生效(expr 66.13→68.93 @r0.4),但 cell_state 单调受损(67.10→62.46);最优 r0.7/α0 仅 67.99 vs 父 67.79(+0.20,噪声内),仅同名+过滤消融更差(67.39)。按 PLAN 判据回退,提交关闭态,输出与父逐位一致(已验证 np.array_equal + vec-check ok + 确定性)。

**下一步最值得试**:① 父建议的 γ>2 全局放大(T2_EXPR_GAMMA=2.5/3.0,name 模式)——本节点证实 expr 对"平移覆盖/幅度"敏感且与 cell_state 存在权衡,纯幅度方向未探;② 若再碰配对维度,只对高 r 跨名对施加**部分** γ(如 0.5·γ)而非全量,缓解 cell_state 损失;③ shape_scale(71.01)与 K=0.62 的联合微调仍是最大剩余空间。
原始记录位置/home/spark-longxinyang/vec/runs/formal/20261003-043412-search-t2-heart-interp-g24-D-s1/nodes/26/engineer.jsonl 150 KB
/home/spark-longxinyang/vec/runs/formal/20261003-043412-search-t2-heart-interp-g24-D-s1/nodes/26/engineer.stderr

调研员

角色调研员 alibaba-token-plan-cn/qwen3.8-max
调用次数1 次
轮数1
工具调用共 0 次:—
用时2 分
token 数输入 13,191 · 输出 1,037 · 思考 5,303
任务(第一行)为节点 n26(改进,父节点 n24)写改进计划 PLAN.json
最后的回答(摘录)
```json
{
  "name": "表达时移扩展至相关匹配类型对(matched-mode shift + 相关度加权γ)",
  "motivation": "expression_change 是最弱组(66.67),当前仅 5 个同名共有类型获得 γ=2 平移,类型覆盖不足。节点 24 证伪了基因级重加权,节点 23 证伪了空间平滑,节点 21 证伪了自适应簇粒度;但「哪些类型对参与平移」这一维度从未探过。matched_align 已计算跨类型表达相关匹配对(贪心、r≥0.3),却仅用于 Procrustes 地标,未用于表达平移。将平移扩展到相关匹配对可增加被校正的细胞比例,且按匹配置信度(相关系数)加权 γ 可控制噪声,属类型对级别(非基因级)结构化改动,规避节点 24 教训。",
  "approach": "步骤:(1) 在 run.py 的 apply_type_mean_shift 中,当 T2_EXPR_SHIFT_MODE=matched 时,复用 matched_align.py 已返回的贪心匹配对列表(每对含 type_a、type_b、Pearson r),替代同名交集;(2) 对每对 (ca,cb) 计算 Δ=mean_b−mean_a,平移公式不变(a 侧 +γ_pair·t·Δ,b 侧 −γ_pair·(1−t)·Δ),但 γ_pair=γ_base·(r_pair/r_min)^α,γ_base=2,r_min 为匹配阈值;(3) 匹配阈值 T2_SHIFT_MIN_R 默认 0.4(比对齐阈值 0.3 更严),min_mean=2 过滤不变,[0,∞) 截断不变;(4) 网格:min_r∈{0.3,0.4,0.5}×α∈{0,1}(α=0 即所有对统一 γ=2,作消融);先跑 α=0/min_r=0.4 确认方向,再细调;(5) 若 matched 模式首次查分 expr≤父+0.8,立即回退 name 模式;(6) 单输入阶段(b is None)同父,不进入平移分支。vec-score 快速筛选:先 seed 0 单查,超父+1 再确认。",
  "expected_groups": ["expression_change", "local_spatial"],
  "risks": "1) 相关匹配对可能引入噪声(非同名类型表达分布差异大)→ Engineer 应在 stderr 输出每对 (type_a,type_b,r,Δ_norm),若多数对 r<0.5 或 Δ_norm 远大于同名对,说明配对不可靠,应提高 min_r 或回退;2) 匹配对数量可能很少(心脏类型注释较一致,跨名匹配本身少)→ 若新增对 <2 则收益有限,应尽早发现并回退;3) α 加权方向错误(高相关对应更大 γ 的假设不成立)→ α=0 消融可区分。",
  "family_id": "T2HI-01",
  "mechanism": "将表达时移的类型配对从同名交集扩展到 matched_align 的跨类型表达相关贪心匹配对,并按 Pearson 相关系数对每对的 γ 做幂次加权,使更多类型(含名称不同但表达谱对应的类型)获得时间插值平移。",
  "vs_constant_shift": "常数位移对所有类型施加相同 γ·t·Δ,不区分配对来源与置信度;本方案按表达相关匹配确定配对关系(非同名单向映射),且 γ 随匹配置信度(r)连续变化,低置信度对平移更小,高置信度对保持 γ≈2。",
  "mechanism_evidence": "Engineer 在 stderr JSON 中输出:(a) matched 模式下的配对数与同名模式下的配对数对比;(b) 每对的 type_a、type_b、r、‖Δ‖;(c) 有效 γ_pair 分布;(d) 四组分各自变化。若配对数增加且新增对的 ‖Δ‖ 与同名对同量级,说明机制在运行;若 expression_change 提升 >1 分(超噪声)则机制有效。",
  "mechanism_off_control": "T2_EXPR_SHIFT_MODE=name(默认)时代码走同名交集路径,与父节点 19/21 逐语句相同;预期 OFF 输出与父逐位一致(np.array_equal),四组分数 +0.00。"
}
```
原始记录位置/home/spark-longxinyang/vec/runs/formal/20261003-043412-search-t2-heart-interp-g24-D-s1/nodes/26/researcher.jsonl 4 KB
/home/spark-longxinyang/vec/runs/formal/20261003-043412-search-t2-heart-interp-g24-D-s1/nodes/26/researcher.stderr

审查员

角色审查员 alibaba-token-plan-cn/qwen3.8-max
调用次数1 次
轮数7
工具调用共 12 次:read 9、bash 2、write 1
用时2 分
token 数输入 29,905 · 输出 1,653 · 思考 3,828
任务(第一行)审查节点 n26 的程序是否越界读取、写死目标、钻评分器漏洞
最后的回答(摘录)
REVIEW.json written
原始记录位置/home/spark-longxinyang/vec/runs/formal/20261003-043412-search-t2-heart-interp-g24-D-s1/nodes/26/reviewer.jsonl 144 KB
/home/spark-longxinyang/vec/runs/formal/20261003-043412-search-t2-heart-interp-g24-D-s1/nodes/26/reviewer.stderr