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

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

节点 n15

实现 PLAN T2HI-01 表达插值机制(共有类型细胞向插值型均值位移 f 倍,阈值 |Δμ|>0.1):代理上 f=0.1/0.2/0.3 全部劣于父节点(variogram raw 0.0206→≥0.0265,超 PLAN 放弃阈值 0.022),按 PLAN 风险条款 2 放弃,默认 f=0,输出与父节点 13 逐位相同;另复测收缩 k/α 网格,均不超父配置(k=10, α=1.25

运行?一次完整的自动搜索或 Agent 会话,有自己的锁定配置和证据包。20261003-094241-search-t2-heart-interp-g24-D-s2
父节点n13
子节点n17、n21
操作?种子:人写的起点;改进:在父节点上改;草稿:从头写;修复:修父节点的报错。改进
状态已打分
分数搜索目标分 66.21(+0.0) · proxy 66.21(+0.0)
审查通过 1 越界读取:未发现问题。run.py 只通过 src.task2_spatial.view_io(load_manifest/panel_genes/interp_bracket/read_stage/write_t2)读取 --data 指定的视图,全文无绝对路径、'..'、/mnt、/home、data/raw、downloads、评分器路径,无联网下载。; 2 硬编码目标统计量:未发现问题。类型比例 pa/pb、RMS、细胞数 n 均由 read_stage 读入的两侧输入现场计算(composition/allocate_sides/interp_count);出现的常量(eps=…
用时?从运行开始到结束(或到现在)的挂钟时间。11 分
程序版本4a7df4abc364022a26fcd69a288f1ec047e03160 (programs.git)

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

来自 programs.git 4a7df4abc3:solution/METHOD.md

实现 PLAN T2HI-01 表达插值机制(共有类型细胞向插值型均值位移 f 倍,阈值 |Δμ|>0.1):代理上 f=0.1/0.2/0.3 全部劣于父节点(variogram raw 0.0206→≥0.0265,超 PLAN 放弃阈值 0.022),按 PLAN 风险条款 2 放弃,默认 f=0,输出与父节点 13 逐位相同;另复测收缩 k/α 网格,均不超父配置(k=10, α=1.25)。

做了什么

  1. PLAN 机制(T2HI_EXPR_INTERP,实现完整、实测有害、默认 0):抽样后、同型 kNN 收缩之前,对每个两侧各 ≥10 个抽取细胞的共有类型,计算 a/b 侧逐基因均值 μ_a、μ_b,μ_t=(1−t)μ_a+tμ_b;a 侧细胞 x+=f·(μ_t−μ_a),b 侧 x+=f·(μ_t−μ_b),只作用于 |μ_a−μ_b|>0.1(T2HI_EXPR_THRESH)的基因,位移后 clip≥0。逐类型、逐基因、逐侧不同,不是常数位移。f=0 提前返回,输出与父节点逐位相同(anndata 比对通过)。
  2. 对照与扫描(proxy:E8.25+E9.5→E8.75,t=0.4,n=17616,seed 0,均 vec-score A 半):
配置榜分de_score rawmmd_u rawvariogram rawnbd_mmd raw
f=0(=父 13,对照)66.21(父实测)0.52130.023370.02060.04178
f=0.1, th=0.165.480.53260.024310.02650.04207
f=0.2, th=0.565.280.52170.024720.02700.04239
f=0.3, th=0.164.790.51090.025300.02990.04298

机制生效证据:f=0.3 时 5 个共有类型、1267 型×基因次被位移(约 253 基因/型),全基因平均 std −0.0136(双峰→单峰方向正确);f=0.1 时 std −0.0048。de_direction raw 三档全部不动(0.6623–0.6626 vs 父 0.6625)。

  1. 放弃理由(PLAN 自带的放弃分支):所有 f 下 variogram raw ≥0.0265,远超 PLAN 风险条款 2 的放弃阈值 0.022;mmd_u 在 f=0.3 恶化 +8.3%(>5% 条款);de_score 的收益不稳定(f=0.1 升、f=0.3 反降,且父节点 METHOD 记录同文件 de_score raw 查询漂移可达 0.52→0.54,单项差异淹没在评分噪声里),而 cell_state 组的损失单调、一致。型均值方向的小步加性位移把细胞拉向"两端均值的混合",破坏了真值 E8.75 的基因间共变结构——与节点 4(全局位移 DE↑mmd↓)同一折中,限定共有类型+小步长只是减轻、没有消除。
  2. 收缩参数复测(父节点 next_suggestions):k=20/α=1.25 → 66.09(nbd raw 0.0395 更好,但 d2/occupancy 致密化代价使 shape_scale 50.51→49.78);k=15 → 65.97;k=20/α=1.0 → 65.95;α=1.5 → 65.96。均不超父配置,保留 k=10、α=1.25 默认。neighborhood 与 shape 之间存在一致的此消彼长(收缩越狠 nbd 越好、d2/occupancy 越差),k=10/α=1.25 恰在总分平台顶点附近。

提交状态

默认 T2HI_EXPR_INTERP=0,输出与父节点 13 完全一致(预期正式分 ≈ 父 66.2 的 B 半水平);机制代码保留、可用环境变量开启,供后续节点在别的括号(如 final E8.25+E8.75,31 个共有类型)上复测——本 proxy 括号只有 5 个共有类型,型内均值估计噪声大,共有类型多时结论可能不同(未验证)。

验证过的

  • 默认(f=0)两次运行输出逐位相同(X 与坐标 array_equal);vec-check 通过;纯 CPU ~4 s、内存 <1 GB;np.random.default_rng(seed),无全局随机态。
  • 视图无关:只用时间差 t、标签、坐标、manifest 上下限;不读 board/mode/路径/阶段名;单输入/不被括号走 copy_last 分支,在机制之前返回。

没验证的 / 风险

  • f>0 的全部结论只在 proxy(5 个共有类型)上;final(31 个共有类型)未测,机制可能在类型更多、均值估计更稳时表现不同,但 variogram 损失是结构性的(型均值方向位移必然压缩共变),预期同样为负。
  • 本节点无净改进:如实报告负结果 + 保住父分数。评分 A/B 半与 ±1 分噪声下,66.2 与 66.0–66.1 的收缩变体不可区分,未替换父配置。
  • 知识来源:仅通用统计做法(型均值插值、kNN 收缩),未使用任何保留阶段/基因型的测量信息。

调研员的计划

名称共有类型表达向插值均值收缩(type-conditional expression interp)
动机父节点 13 的 expression_change 组 71.71(de_score skill 0.684、de_direction 0.750)是除已证不可修的 shape_scale(50.51,三项贴地板)外最弱组。当前方法只插值组成(抽哪些细胞),不插值表达:共有类型的 a 侧细胞携带 E_a 表达、b 侧携带 E_b 表达,型内表达呈双峰而非单峰中间态,伪批量估计被型内方差稀释,基因排序精度受限。节点 4 已证明类型特异表达位移可提 DE(65.47→de_score↑),但因全局无差别位移导致 mmd_u↓;本方案限定共有类型、按型均值方向、小步长,规避该折中。
做法在父节点 13 管线(logit 组成混抽 + 同型 kNN 收缩 α=1.25)的抽样之后、收缩之前,插入表达插值步骤:
1. 对每个共有类型 ty(两侧各 ≥10 个抽取细胞),计算该型在 a 侧的逐基因均值 μ_a、b 侧 μ_b,插值目标 μ_t=(1−t)μ_a+tμ_b。
2. 对从 a 侧抽出的该型细胞:x_new = x + f·(μ_t − μ_a);b 侧同理 x_new = x + f·(μ_t − μ_b)。f 为全局阻尼系数。
3. 只对 |μ_a−μ_b| > 0.1 的基因施加位移(避免噪声基因),其余基因不动。
4. 位移后照常执行 kNN 收缩、jitter、scale_to_rms。

参数:f 初值 0.3,扫描 {0.1, 0.2, 0.3, 0.5};基因阈值固定 0.1。
单输入阶段退路:copy_last 分支在机制之前返回,机制不生效。
快速筛选:先跑 f=0(对照)和 f=0.3 各一次 vec-score,看 de_score/de_direction raw 是否升、mmd_u raw 是否升(恶化);若 mmd_u raw 恶化 >5% 则降 f 或放弃。
预期:de_score raw 从 0.521 提至 ~0.55-0.57,de_direction 从 0.663 提至 ~0.68-0.70,expression_change 组 +1~2 分;mmd_u raw 变化 <3%(型内双峰减少应略有利)。
风险1) mmd_u 恶化:若 f 过大,表达被拉向均值、型内多样性丧失,mmd_u raw 上升。Engineer 应在 f=0.3 时检查 mmd_u raw(当前 0.02337),若 >0.025 则降 f 至 0.1。2) variogram 受损:型内共变结构被均值位移破坏;监控 variogram raw(当前 0.0206),若 >0.022 则放弃。3) 收益 <噪声(~1 分):de_score 是排序指标,小幅位移可能不改变排序;需对比 raw 值而非仅看组分。4) 与 kNN 收缩交互:表达改变后邻域平均表达改变,可能影响 neighborhood_mmd;但收缩只动坐标,表达插值在其之前完成,影响应很小。

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

对比:父节点版本 5c59611483。改动的文件:solution/METHOD.md +22 −18、solution/run.py +69 −0

diff --git a/solution/METHOD.md b/solution/METHOD.mdindex b6726c2..7625429 100644--- a/solution/METHOD.md+++ b/solution/METHOD.md@@ -1,29 +1,33 @@-在节点 10(logit 组成插值 mix)之上加"同型 kNN 收缩"坐标后处理:每个抽样细胞向同类型 k=10 近邻质心移动 α=1.25 倍位移,表达不动,抬升 neighborhood_mmd 与 local_spatial。+实现 PLAN T2HI-01 表达插值机制(共有类型细胞向插值型均值位移 f 倍,阈值 |Δμ|>0.1):代理上 f=0.1/0.2/0.3 全部劣于父节点(variogram raw 0.0206→≥0.0265,超 PLAN 放弃阈值 0.022),按 PLAN 风险条款 2 放弃,默认 f=0,输出与父节点 13 逐位相同;另复测收缩 k/α 网格,均不超父配置(k=10, α=1.25)。 -## 实现(family T2HI-05 计划 → 实际机制替换,见下)+## 做了什么 -基座 = 父节点 10 原样:procrustes 对齐、log 线性 RMS 目标、logit 组成插值(eps=5e-4)按配额抽真实细胞。在此之上新增:+1. **PLAN 机制(T2HI_EXPR_INTERP,实现完整、实测有害、默认 0)**:抽样后、同型 kNN 收缩之前,对每个两侧各 ≥10 个抽取细胞的共有类型,计算 a/b 侧逐基因均值 μ_a、μ_b,μ_t=(1−t)μ_a+tμ_b;a 侧细胞 x+=f·(μ_t−μ_a),b 侧 x+=f·(μ_t−μ_b),只作用于 |μ_a−μ_b|>0.1(T2HI_EXPR_THRESH)的基因,位移后 clip≥0。逐类型、逐基因、逐侧不同,不是常数位移。f=0 提前返回,输出与父节点逐位相同(anndata 比对通过)。+2. **对照与扫描(proxy:E8.25+E9.5→E8.75,t=0.4,n=17616,seed 0,均 vec-score A 半)**: -1. **T2HI_SCALE_DAMP(PLAN 机制,默认 1.0 = 不生效,代码保留)**:target_rms = exp(ln rms_a + DAMP·t·(ln rms_b − ln rms_a))。**实测证明在本榜是死路**:proxy 括号 rms_a=354.1、rms_b=335.0,几何插值可达范围被夹在 [335, 354],而真值 RMS ≈ 346.3·e^(−0.4688) ≈ 217——任何 DAMP 都无法达到;最大可能改动(DAMP→∞ 等价 t'=1)只把 scale_log_ratio raw 从 0.4688 移到 log(335/217)=0.437(skill +0.01,<0.1 分)。PLAN 风险条款 2 的"放弃此方向"分支成立(不是过冲,是可达域不含目标)。PLAN 字面公式 geo^DAMP 依赖坐标单位(346^0.92≈217 纯属单位巧合),换视图即失效,未采用。故未消耗查分额度扫描 DAMP。-2. **T2HI_COLOC(试验后放弃,默认 0)**:共有类型两侧抽取子云平移到其 (1−t,t) 质心插值点。实测有害:γ=1.0 → 64.0、γ=0.35 → 64.8(父 65.25),neighborhood_mmd raw 0.0510→0.0574/0.0530,occupancy 0.819→0.795/0.818。类型质心平移抹掉类型内部结构、把两侧细胞硬拼在一起反而破坏表达-位置配对。-3. **T2HI_CONTRACT=type(生效机制,α=1.25,k=10)**:对拼接后的抽取坐标,每个细胞在其**同类型**细胞内找 k=10 近邻(不含自身),位移 x += α·(centroid−x);之后照常 jitter、scale_to_rms(target)。α=0 或 none 时输出与父节点逐位相同(已验证)。+| 配置 | 榜分 | de_score raw | mmd_u raw | variogram raw | nbd_mmd raw |+|---|---:|---:|---:|---:|---:|+| f=0(=父 13,对照) | 66.21(父实测) | 0.5213 | 0.02337 | 0.0206 | 0.04178 |+| f=0.1, th=0.1 | 65.48 | 0.5326 | 0.02431 | 0.0265 | 0.04207 |+| f=0.2, th=0.5 | 65.28 | 0.5217 | 0.02472 | 0.0270 | 0.04239 |+| f=0.3, th=0.1 | 64.79 | 0.5109 | 0.02530 | 0.0299 | 0.04298 | -## 机制生效证据(proxy:E8.25+E9.5→E8.75,t=0.4,n=17616,seed 0)+机制生效证据:f=0.3 时 5 个共有类型、1267 型×基因次被位移(约 253 基因/型),全基因平均 std −0.0136(双峰→单峰方向正确);f=0.1 时 std −0.0048。de_direction raw 三档全部不动(0.6623–0.6626 vs 父 0.6625)。 -- 实际改变的细胞:全部 17616 个抽取细胞的**坐标**(表达矩阵逐位不动);收缩后 RMS 331.6→325.1,再缩放回 346.3。共有类型(V-CM、Peri、NCC、aPHM、pPHM)的 a/b 两个重复子簇从内部合并(比 coloc 的整簇平移温和,保留簇内梯度),单侧类型区域被致密化。-- 四组分变化(A 半,同程序对照 none → type/α=1.25):expression_change 72.08 → 72.08(不变,表达未动);cell_state 71.56 → 71.56(不变);local_spatial 65.80 → 69.80(neighborhood_mmd raw 0.0510→0.0418,skill 0.658→0.697,+1.0 分);shape_scale 51.08 → 50.75(d2 0.0452→0.0453、occupancy 0.819→0.816、scale 不变,−0.3 在噪声内)。-- 对照:`T2HI_CONTRACT=none` 输出与父节点文件 X、坐标逐位相同(anndata 比对通过);父节点分 65.25。+3. **放弃理由(PLAN 自带的放弃分支)**:所有 f 下 variogram raw ≥0.0265,远超 PLAN 风险条款 2 的放弃阈值 0.022;mmd_u 在 f=0.3 恶化 +8.3%(>5% 条款);de_score 的收益不稳定(f=0.1 升、f=0.3 反降,且父节点 METHOD 记录同文件 de_score raw 查询漂移可达 0.52→0.54,单项差异淹没在评分噪声里),而 cell_state 组的损失单调、一致。型均值方向的小步加性位移把细胞拉向"两端均值的混合",破坏了真值 E8.75 的基因间共变结构——与节点 4(全局位移 DE↑mmd↓)同一折中,限定共有类型+小步长只是减轻、没有消除。+4. **收缩参数复测(父节点 next_suggestions)**:k=20/α=1.25 → 66.09(nbd raw 0.0395 更好,但 d2/occupancy 致密化代价使 shape_scale 50.51→49.78);k=15 → 65.97;k=20/α=1.0 → 65.95;α=1.5 → 65.96。均不超父配置,保留 k=10、α=1.25 默认。neighborhood 与 shape 之间存在一致的此消彼长(收缩越狠 nbd 越好、d2/occupancy 越差),k=10/α=1.25 恰在总分平台顶点附近。++## 提交状态++默认 T2HI_EXPR_INTERP=0,输出与父节点 13 完全一致(预期正式分 ≈ 父 66.2 的 B 半水平);机制代码保留、可用环境变量开启,供后续节点在别的括号(如 final E8.25+E8.75,31 个共有类型)上复测——本 proxy 括号只有 5 个共有类型,型内均值估计噪声大,共有类型多时结论可能不同(未验证)。  ## 验证过的 -- α 扫描(seed 0,type,k=10):0.3→65.47、0.6→65.60、1.0→65.91、**1.25→66.05**、1.5→65.96、2.0→66.13;global 模式 0.3→65.02(差于 type)。neighborhood_mmd raw 随 α 单调降到 ~0.041 后平台;α=2.0 分数最高但 d2_shape raw 恶化(0.0452→0.0472),取平台中部 α=1.25。-- 最终默认配置:seed 0 → **66.05**(local_spatial 69.8),seed 1 → **66.55**;父 65.25 / rank3 65.16。评分器本身有 ±0.3 左右的漂移(同一文件两次查询 de_score raw 0.5213→0.5435 量级的差异来自评分抽样,非程序)。-- `vec-check` 通过;默认输出与查分文件逐位一致;重跑确定(无全局随机态,sklearn kNN 确定);纯 CPU,运行 ~4 s,内存 <1 GB。-- 视图无关:只用时间差 t、标签、坐标与 manifest 上下限;不读 board/mode/阶段名,无硬编码细胞数、类型名或统计量。单输入/不被括号:copy_last 分支在机制之前返回,机制自动不生效。+- 默认(f=0)两次运行输出逐位相同(X 与坐标 array_equal);`vec-check` 通过;纯 CPU ~4 s、内存 <1 GB;`np.random.default_rng(seed)`,无全局随机态。+- 视图无关:只用时间差 t、标签、坐标、manifest 上下限;不读 board/mode/路径/阶段名;单输入/不被括号走 copy_last 分支,在机制之前返回。  ## 没验证的 / 风险 -- final 视图(E8.25+E8.75,31 个共有类型)未跑;同型收缩不依赖共有类型数(单侧类型同样被致密化),预期方向一致,但幅度未验证。-- scale_log_ratio raw≈0.47 仍贴地板:真值 RMS(217) 低于括号两端 [335,354],任何由输入现场计算的插值都无法达到,形状组的这一项在本 proxy 上不可合法修复(见上);shape_scale 组三项全部在地板附近。-- α=1.25 在 1.0–2.0 平台内,B 半上最优 α 可能略移,但平台宽(±0.5 分内),风险小。-- 知识来源:仅通用做法——单一真实阶段的同类细胞占据连续区域,跨阶段混抽会产生重复子簇;向同型局部质心收缩恢复"一型一区"的局部组织。未使用任何保留阶段/保留基因型的测量信息。+- f>0 的全部结论只在 proxy(5 个共有类型)上;final(31 个共有类型)未测,机制可能在类型更多、均值估计更稳时表现不同,但 variogram 损失是结构性的(型均值方向位移必然压缩共变),预期同样为负。+- 本节点无净改进:如实报告负结果 + 保住父分数。评分 A/B 半与 ±1 分噪声下,66.2 与 66.0–66.1 的收缩变体不可区分,未替换父配置。+- 知识来源:仅通用统计做法(型均值插值、kNN 收缩),未使用任何保留阶段/基因型的测量信息。diff --git a/solution/run.py b/solution/run.pyindex 531873d..2a3e29b 100644--- a/solution/run.py+++ b/solution/run.py@@ -22,6 +22,12 @@ Additions in this node:   types from the inside, improving expression-location pairing   (neighborhood_mmd). Coordinates only; expression is never touched; the cloud   is rescaled to target_rms afterwards as in the parent.+- env T2HI_EXPR_INTERP (default 0.0, measured harmful on proxy): type-conditional+  expression interpolation. For each shared type with >= T2HI_EXPR_MIN drawn+  cells per side, side-a cells get x += f*(mu_t - mu_a) and side-b cells+  x += f*(mu_t - mu_b), where mu_t = (1-t)*mu_a + t*mu_b over drawn cells,+  applied only to genes with |mu_a - mu_b| > T2HI_EXPR_THRESH. f=0 is a+  bit-for-bit no-op (parent behaviour). - env T2HI_COLOC (default 0.0, measured harmful on proxy): shared-type centroid   colocalisation. For every   cell type drawn from BOTH sides with >= T2HI_COLOC_MIN cells on each side,@@ -124,6 +130,58 @@ def contract(coords: np.ndarray, labels_sel: np.ndarray, mode: str, alpha: float     return coords + alpha * (cent - coords)  +def expr_interp(+    expr: np.ndarray,+    lab_sel: np.ndarray,+    n_a: int,+    t: float,+    f: float,+    thresh: float,+    min_count: int,+):+    """Shift each shared type's drawn cells toward the interpolated type mean.++    For every type present on both sides with >= min_count drawn cells each,+    mu_a / mu_b are the per-gene means of the drawn side-a / side-b cells and+    mu_t = (1-t)*mu_a + t*mu_b. Side-a cells get x += f*(mu_t - mu_a), side-b+    cells get x += f*(mu_t - mu_b), but only on genes with |mu_a - mu_b| >+    thresh. f=0 is a bit-for-bit no-op. Returns (expr, n_types, n_genes_shifted,+    mean_std_change).+    """+    if f == 0.0 or expr.shape[0] == 0:+        return expr, 0, 0, 0.0+    n_b = expr.shape[0] - n_a+    if n_a <= 0 or n_b <= 0:+        return expr, 0, 0, 0.0+    la = lab_sel[:n_a]+    lb = lab_sel[n_a:]+    std_before = float(expr.std(axis=0).mean())+    n_types = 0+    n_genes = 0+    out = expr.copy()+    for ty in sorted(set(la.tolist()) & set(lb.tolist())):+        ia = np.flatnonzero(la == ty)+        ib = np.flatnonzero(lb == ty)+        if ia.size < min_count or ib.size < min_count:+            continue+        mu_a = expr[ia].mean(axis=0).astype(np.float64)+        mu_b = expr[n_a + ib].mean(axis=0).astype(np.float64)+        delta = mu_b - mu_a+        mask = np.abs(delta) > thresh+        if not mask.any():+            continue+        mu_t = (1.0 - t) * mu_a + t * mu_b+        shift_a = np.where(mask, f * (mu_t - mu_a), 0.0).astype(np.float32)+        shift_b = np.where(mask, f * (mu_t - mu_b), 0.0).astype(np.float32)+        out[ia] += shift_a+        out[n_a + ib] += shift_b+        n_types += 1+        n_genes += int(mask.sum())+    out = np.clip(out, 0.0, None)+    std_after = float(out.std(axis=0).mean())+    return out, n_types, n_genes, std_after - std_before++ def composition(labels_a, labels_b, t: float, mode: str, eps: float):     """Per-type target fractions at time t over the union of both sides' types."""     la = np.asarray(labels_a).astype(str)@@ -280,6 +338,17 @@ def run(view: str, out: str, seed: int) -> None:         coord_parts.append(cb_sel)     coords = np.vstack(coord_parts)     lab_sel = np.concatenate([la_sel, lb_sel]) if (la_sel.size or lb_sel.size) else la_sel+    f_interp = float(os.environ.get("T2HI_EXPR_INTERP", "0.0"))+    e_thresh = float(os.environ.get("T2HI_EXPR_THRESH", "0.1"))+    e_min = int(os.environ.get("T2HI_EXPR_MIN", "10"))+    expr, ei_types, ei_genes, ei_dstd = expr_interp(+        expr, lab_sel, int(ia.size), float(t), f_interp, e_thresh, e_min+    )+    print(+        f"[expr_interp] f={f_interp} thresh={e_thresh} min={e_min} types={ei_types} "+        f"genes_shifted={ei_genes} mean_gene_std_change={ei_dstd:+.5f}",+        flush=True,+    )     cmode = os.environ.get("T2HI_CONTRACT", "type").strip().lower()     calpha = float(os.environ.get("T2HI_CONTRACT_A", "1.25"))     ck = int(os.environ.get("T2HI_CONTRACT_K", "10"))

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

用到的知识库条目

编号标题出处
k007Interval staging and held-out-window filtering of external datanotes/official/来件/virtualembryo.ai/rules.md
k027Joint expression-geometry generation with relative geometrynotes/competition/03_solution_landscape.md
k026Canonicalise predicted 3D coordinates before submissionnotes/pitfalls/04_scorer_invariance.md

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

改了什么完整实现了 PLAN 的 T2HI-01 表达插值(共有类型 a/b 侧细胞各向 μ_t=(1−t)μ_a+tμ_b 位移 f 倍,只作用于 |Δμ|>0.1 的基因,位移后 clip≥0),并在 proxy 上扫 f=0.1/0.2/0.3;结果全部劣于父节点,故按 PLAN 放弃分支把默认设成 f=0(提前返回、输出与父 13 逐位相同),另外复测了收缩 k/α 网格。因此本节点实际交付的代码路径 = 父节点管线,没有任何机制在运行。
各组分数的变化cell_state:不变(72.43 → 72.43,+0.00)。机制开启时变坏:variogram raw 0.0206→0.0265(f=0.1)/0.0270(f=0.2)/0.0299(f=0.3),mmd_u raw 0.02337→0.02431/0.02472/0.02530(f=0.3 恶化 +8.3%,超过 PLAN 的 5% 阈值),对应总榜分 65.48/65.28/64.79 均低于父 66.21。
expression_change:不变(71.71 → 71.71,+0.00);de_score raw 0.5213、de_direction raw 0.6625 与父完全相同,因为默认 f=0。机制开启时(Engineer 自测,未成为提交分):f=0.1 de_score raw 0.5213→0.5326 但 f=0.3 反降到 0.5109,de_direction raw 三档恒定 0.6623–0.6626 完全不动,收益在噪声内且不稳定。
local_spatial:不变(70.19 → 70.19,+0.00),neighborhood_mmd raw 0.04178、skill 0.702。表达位移对它是小幅负面(f=0.3 时 raw 0.04178→0.04298)。
shape_scale:不变(50.51 → 50.51,+0.00),三项仍贴地板(d2_shape skill 0.499、occupancy_dice 0.504、scale_log_ratio 0.512)。收缩参数复测显示 neighborhood 与 shape 此消彼长:k=20/α=1.25 使 nbd raw 更好但 shape_scale 50.51→49.78。
family_idT2HI-01
假设是否成立否
经验
  1. 在 T2 heart interp proxy(E8.25+E9.5→E8.75,只有 5 个共有类型)上,做型均值方向的加性表达位移(f=0.1–0.3、阈值 0.1)会把基因间共变压掉:variogram raw 0.0206→0.0265–0.0299,cell_state 组净损 1.4–2.1 分,而 de_score 只涨 0.011 且非单调(f=0.3 反降)、de_direction 完全不动,收益远小于损失。
  2. de_direction 是对全基因秩偏相关的指标,型内小步加性位移(每型一个方向向量、只动 |Δμ|>0.1 的基因)对它零影响(raw 恒定 0.6623–0.6626);要动 de_direction 必须改变跨细胞的全局基因排序,不是型内位移。
  3. 表达插值与坐标收缩在 neighborhood_mmd 上是同向敏感的:动表达会同时改邻域平均表达,f 越大 neighborhood_mmd raw 越差(0.04178→0.04298),所以"只插值表达不碰坐标"并不能保住 local_spatial。
  4. 同型 kNN 收缩存在稳定的 neighborhood ↔ shape 折中:k=20/α=1.25 nbd raw 0.0418→0.0395(更好)但 d2/occupancy 因过度致密化使 shape_scale 50.51→49.78,k=15→65.97、α=1.0→65.95、α=1.5→65.96 全不超 k=10/α=1.25 的 66.21;该配置已在总分平台顶点,纯参数复扫无收益。
  5. 实现完整 + 实测有害时,用 f=0 提前返回并逐位比对(anndata array_equal)把默认退回父节点,可以在只花 3 次查分的情况下保住父分数并留下可复用的机制代码与负结果记录——这是处理"假设被否证"的正确姿势,比强行提交劣化配置好。
  6. 同一文件两次评分查询的 de_score raw 可漂移 0.52→0.54 量级,所以任何单项 raw 差异 <0.02 都不能当作机制收益的证据,必须靠多项一致变化或总榜分(且总榜分本身 ±1)。
mechanism_active否
下一步建议
  1. 针对 shape_scale(三项全贴地板、当前 50.51 是最弱组):不要再在"收缩强度"上扫参数(已证平台顶点),改为收缩后做逐类型各向异性尺度恢复(每型按自身 PCA 主轴分别缩放回原型的轴长比),试图解耦 neighborhood_mmd 与 d2_shape/occupancy_dice 的此消彼长;先只在本 proxy 上比 shape_scale 三项 raw 与 nbd raw。
  2. 针对 expression_change 的 de_direction(skill 0.750,raw 0.6625 对型内位移完全免疫):换机制族——不再做加性位移,而是改跨细胞的全局排序,例如按两侧阶段真实细胞的伪批量差 dt 的方向对预测 dp 做逐基因符号/秩对齐(保幅度只改序),或按基因在两侧的方差重加权后重排;每次改动都要看 de_direction raw 是否 >0.67 才算动到了它。
  3. 若仍想复活表达插值(T2HI-01):只在共有类型数多的括号上试(final E8.25+E8.75 有 31 个共有类型,型均值估计噪声更小),并把 f 压到 ≤0.05、阈值提到 |Δμ|>0.5 只动最强的少数基因,先单跑一次看 variogram raw 是否守住 <0.022;预期仍为负,优先级排在前两条之后。
  4. cell_state(72.43,最强组)暂不动;后续任何改表达的机制都必须在提交前记录 variogram raw 与 mmd_u raw,把 0.022 / 0.0245 当作硬性放弃线,避免重复本节点的损失。

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

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

分析员

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

工程师

角色工程师 alibaba-token-plan-cn/qwen3.8-max
调用次数1 次
轮数18
工具调用共 18 次:bash 11、edit 4、read 2、write 1
用时8 分
token 数输入 46,601 · 输出 6,311 · 思考 5,401
任务(第一行)按计划修改程序:共有类型表达向插值均值收缩(type-conditional expression interp)
最后的回答(摘录)
**节点 15 完成**(7/20 次查分)。

- **做了什么**:完整实现 PLAN 的 T2HI-01 表达插值机制(共有类型细胞向 (1−t)μ_a+tμ_b 位移 f 倍,仅 |Δμ|>0.1 基因);f=0 对照与父节点输出逐位相同。另复测收缩 k/α 变体(k=15/20、α=1.0/1.5)。
- **查分结果**:f=0.1/0.2/0.3 → 65.48 / 65.28 / 64.79,全部低于父 66.21;variogram raw 0.0206→≥0.0265,触发 PLAN 风险条款 2 的放弃阈值(0.022),de_score 收益被评分噪声淹没。收缩变体 65.95–66.09,均不超 k=10/α=1.25。**按 PLAN 放弃分支提交 f=0 默认**,输出与父逐位一致(vec-check 通过、确定、纯 CPU ~4s)。
- **下一步最值得试**:(1) neighborhood 与 shape_scale 存在一致的此消彼长(收缩越狠 nbd 越好、d2/occupancy 越差),可试收缩后按类型各向异性恢复尺度而非全局等比缩放,解耦这两组;(2) 表达插值在 final(31 个共有类型)上或有不同表现,但 variogram 损失是结构性的,优先级低;(3) de_direction 对型均值位移完全不敏感(0.6625 恒定),要动它需要改变全局基因排序(如按通路先验重排伪批量变化方向),而非型内小步位移。
原始记录位置/home/spark-longxinyang/vec/runs/formal/20261003-094241-search-t2-heart-interp-g24-D-s2/nodes/15/engineer.jsonl 107 KB
/home/spark-longxinyang/vec/runs/formal/20261003-094241-search-t2-heart-interp-g24-D-s2/nodes/15/engineer.stderr

调研员

角色调研员 alibaba-token-plan-cn/qwen3.8-max
调用次数1 次
轮数1
工具调用共 0 次:—
用时1 分
token 数输入 16,611 · 输出 1,220 · 思考 2,749
任务(第一行)为节点 n15(改进,父节点 n13)写改进计划 PLAN.json
最后的回答(摘录)
点 13 的 expression_change 组 71.71(de_score skill 0.684、de_direction 0.750)是除已证不可修的 shape_scale(50.51,三项贴地板)外最弱组。当前方法只插值组成(抽哪些细胞),不插值表达:共有类型的 a 侧细胞携带 E_a 表达、b 侧携带 E_b 表达,型内表达呈双峰而非单峰中间态,伪批量估计被型内方差稀释,基因排序精度受限。节点 4 已证明类型特异表达位移可提 DE(65.47→de_score↑),但因全局无差别位移导致 mmd_u↓;本方案限定共有类型、按型均值方向、小步长,规避该折中。",
 "approach": "在父节点 13 管线(logit 组成混抽 + 同型 kNN 收缩 α=1.25)的抽样之后、收缩之前,插入表达插值步骤:\n1. 对每个共有类型 ty(两侧各 ≥10 个抽取细胞),计算该型在 a 侧的逐基因均值 μ_a、b 侧 μ_b,插值目标 μ_t=(1−t)μ_a+tμ_b。\n2. 对从 a 侧抽出的该型细胞:x_new = x + f·(μ_t − μ_a);b 侧同理 x_new = x + f·(μ_t − μ_b)。f 为全局阻尼系数。\n3. 只对 |μ_a−μ_b| > 0.1 的基因施加位移(避免噪声基因),其余基因不动。\n4. 位移后照常执行 kNN 收缩、jitter、scale_to_rms。\n\n参数:f 初值 0.3,扫描 {0.1, 0.2, 0.3, 0.5};基因阈值固定 0.1。\n单输入阶段退路:copy_last 分支在机制之前返回,机制不生效。\n快速筛选:先跑 f=0(对照)和 f=0.3 各一次 vec-score,看 de_score/de_direction raw 是否升、mmd_u raw 是否升(恶化);若 mmd_u raw 恶化 >5% 则降 f 或放弃。\n预期:de_score raw 从 0.521 提至 ~0.55-0.57,de_direction 从 0.663 提至 ~0.68-0.70,expression_change 组 +1~2 分;mmd_u raw 变化 <3%(型内双峰减少应略有利)。",
 "expected_groups": ["expression_change"],
 "risks": "1) mmd_u 恶化:若 f 过大,表达被拉向均值、型内多样性丧失,mmd_u raw 上升。Engineer 应在 f=0.3 时检查 mmd_u raw(当前 0.02337),若 >0.025 则降 f 至 0.1。2) variogram 受损:型内共变结构被均值位移破坏;监控 variogram raw(当前 0.0206),若 >0.022 则放弃。3) 收益 <噪声(~1 分):de_score 是排序指标,小幅位移可能不改变排序;需对比 raw 值而非仅看组分。4) 与 kNN 收缩交互:表达改变后邻域平均表达改变,可能影响 neighborhood_mmd;但收缩只动坐标,表达插值在其之前完成,影响应很小。",
 "family_id": "T2HI-01",
 "mechanism": "对共有类型,将每个抽取细胞的表达向该型的跨时间点插值均值 μ_t=(1−t)μ_a+tμ_b 移动 f 倍残差,使型内表达从双峰(a 峰+b 峰)向单峰中间态收敛,改善伪批量基因排序精度。",
 "vs_constant_shift": "位移是逐类型、逐基因、逐来源侧的:不同型有不同 μ_t−μ_a 向量;同型内 a 侧和 b 侧细胞位移方向相反(a→μ_t、b→μ_t);只作用于 |Δμ|>0.1 的基因。常数位移对所有细胞施加同一向量,本机制的位移在型间、侧间、基因间均不同。",
 "mechanism_evidence": "Engineer 应记录:(1) 被位移的基因数/细胞数(应 >0 且限于共有类型);(2) 位移后型内表达 std 的变化(应下降,双峰→单峰);(3) de_score raw 和 de_direction raw 是否上升;(4) mmd_u raw 和 variogram raw 是否保持稳定;(5) 四组分各自变化量。",
 "mechanism_off_control": "设 f=0(环境变量 T2HI_EXPR_INTERP=0),此时 x_new=x+0·(μ_t−μ_a)=x,输出与父节点逐位相同。预期差别:f=0 时所有指标 raw 值与父节点一致;f>0 时 de_score/de_direction raw 上升、型内表达 std 下降。",
 "sources": []}
原始记录位置/home/spark-longxinyang/vec/runs/formal/20261003-094241-search-t2-heart-interp-g24-D-s2/nodes/15/researcher.jsonl 5 KB
/home/spark-longxinyang/vec/runs/formal/20261003-094241-search-t2-heart-interp-g24-D-s2/nodes/15/researcher.stderr

审查员

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