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

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

节点 n13 在终选来历上

按 PLAN T2EI-09 实现 a 侧(早端括号)中间态选胞(含保空间分层的变体 SEL_A_MODE=spatial);机制确实运行且 cell_state/expression_change 上升,但 local_spatial 一致下降 ~1.5,两种子均值净负(61.10 vs 父 61.38),故提交态默认关闭(SEL_SIDE=b,输出与父节点 11 逐位一致)。

运行?一次完整的自动搜索或 Agent 会话,有自己的锁定配置和证据包。20261003-043412-search-t2-embryo-interp-g24-D-s1
父节点n11
子节点n19、n23
操作?种子:人写的起点;改进:在父节点上改;草稿:从头写;修复:修父节点的报错。改进
状态已打分
分数搜索目标分 62.15(+0.0) · proxy 62.15(+0.0)
审查通过 检查1 越界读取:未发现问题——run.py 只通过 --data/--out 与 src.task2_spatial 的 load_manifest/read_stage/write_t2 读写视图内数据(run.py:294-311),无绝对路径、'..'、/mnt、/home、data/raw、downloads、打分器或 src/common/evaluation 的引用,无网络访问。; 检查2 硬编码目标统计量:未发现问题——所有统计量(型质心、RMS、细胞数 n、配额)均从 manifest 与输入现场计算(run.py:301-330),文件中的数值常量只是调参超参(KAPPA…
用时?从运行开始到结束(或到现在)的挂钟时间。15 分
程序版本05cbb15c5728f371cf4fc3e0104c0eb97a7e769f (programs.git)

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

来自 programs.git 05cbb15c57:solution/METHOD.md

按 PLAN T2EI-09 实现 a 侧(早端括号)中间态选胞(含保空间分层的变体 SEL_A_MODE=spatial);机制确实运行且 cell_state/expression_change 上升,但 local_spatial 一致下降 ~1.5,两种子均值净负(61.10 vs 父 61.38),故提交态默认关闭(SEL_SIDE=b,输出与父节点 11 逐位一致)。

方法(family T2EI-09,improve over node 11)

父流程完整保留:interp_bracket → procrustes3d 对齐 → scale_damp=0.5 目标 RMS → κ=0.65 组成阻尼 → b 侧型内中间态偏好选胞(blend 质心 (1−t)μ_a+tμ_b,SEL_P=1.0) → b 侧全局 xy 径向膨胀 γ=1.15 → jitter + 终缩放。

本节点新增(SEL_SIDE=both,默认 b):

  1. a 侧中间态选胞(PLAN 原型,SEL_A_MODE=plain):与 b 侧完全对称——每个共有型内 按 z-scored 表达空间到混合质心 (1−t)μ_a+tμ_b 的欧氏距离升序取配额内最近的细胞。
  2. 保空间分层变体(SEL_A_MODE=spatial,本节点新设计):先做父节点的无偏均匀抽取 作为"空间模板",按 (型, 对齐坐标的分位箱 nbins^3) 分组,每组配额用该组内距混合质心 最近的细胞重填。构造上保持逐型逐区域的占据数与无偏抽样完全相同,只改细胞身份, 目的是拿到表达收益而不付 occupancy/shape 代价。
  3. RNG 隔离:a 侧改用 default_rng([seed,7])(spatial 模式完全确定性), 主 rng 仍先执行一次与父节点相同的无偏抽取以消费同样的随机流,因此 SEL_SIDE=b 时 b 侧选胞、膨胀、jitter 与父节点逐位一致(h5py 递归逐数组比对 True)。
  4. 单输入退路不变:无括号、无选胞、无膨胀。

机制证据(mechanism_evidence,A 半,E6.75+E8.0→E7.25,t=0.4)

机制确实运行、确实改变了细胞身份:a 侧被选细胞到混合质心的平均距离 13.56 → 10.69(spatial nbins=2,34% 的 a 细胞被替换)/ 13.32 → 10.40(plain,48.5% 被替换); 11 个共有型中 7 个(Allantois、Caudal Epiblast、EXE-Endoderm、ExEM-1/2、HEM-Endoth、 LPM、Primitive Streak、SOM、Unknown、pSE 中距离有限者)参与排序,非共有型(Anterior Epiblast、EXE-Ectoderm、Gut Endoderm、CP、Blood Progenitor、PHM/PAM、aSE)保持模板不变。

四组分变化(seed 0,父 61.14 → spatial nbins=2 → 61.33): cell_state 52.84→54.01(+1.17)、expression_change 60.50→61.32(+0.82)——正是 PLAN 预期的两组, 方向一致;shape_scale 72.18→72.02(−0.16)、local_spatial 59.03→57.97(−1.06)。 de_score 0.25→0.2857、de_direction 0.3645→0.3699、variogram 0.01094→0.00993 改善, 但 neighborhood_mmd 0.05314→0.05548 恶化(local_spatial 的损失全部来自它)。

机制对照(mechanism_off_control)与查分全表

SEL_SIDE=b(关闭 a 侧选胞)输出与父节点 11 逐位一致,A 半 61.14(seed0)/ 61.62(seed1), 与父节点记录的 61.14 / 61.62 相同。打开后(两种子):

配置seed0seed1均值cell_stateexpr_changeshapelocal
父 SEL_SIDE=b(提交)61.1461.6261.3852.84/53.2760.50/60.9372.18/72.2859.03/60.00
both, plain(PLAN 原型)60.97––53.5361.0971.2058.08
both, plain(RNG 隔离)60.95––53.7959.7072.3158.00
both, spatial nbins=261.3360.8761.1054.01/53.4061.32/60.6272.02/71.6557.97/57.83
both, spatial nbins=361.00––52.8461.2171.8058.16
both, spatial nbins=460.84––53.0860.4171.7458.12

结论:PLAN 的机制在代理上被证伪。cell_state 收益(+0.9~+1.2)稳定存在且方向符合预期, 但 local_spatial 一致损失 1.0~2.2(neighborhood_mmd 0.0531→0.0551~0.0558), 两种子均值净 −0.28,落在 T2 噪声(~1)内偏负。分层箱数 2→3→4 单调变差, 说明损失不是"粗箱内远距离换位"造成的(occupancy_dice 反而持平/略升 0.7716→0.7766), 而是把 a 侧细胞的身份换成"更偏晚端"的细胞后,其表达与其空间邻域在参考 E7.25 中的 局部耦合被破坏。这与节点 12 的教训同型(cell_state +1.2 / local −2.0,净负): 在本代理上 local_spatial 对"细胞身份—位置耦合"极敏感,任何以牺牲真实配对换取 中间态表达的做法都得不偿失。对照 b 侧:同样的中间态排序在 b 侧(1300/31671,4% 抽样) 是净收益(node 7:cell_state +4.7 且 local 57.27→60.00),因为 b 侧抽样率低、 选入的是目标时刻的代表性细胞;a 侧抽样率 52%,筛选只能改变既有位置的细胞身份。

验证过 / 没验证

  • 验证:SEL_SIDE=b 与父输出逐位一致(seed 0/1);seed 0/1 确定性重跑一致; vec-check seed 0/1 ok;运行 ~2s、峰值内存 <1GB(限制 28GB / 30min); 不读绝对时间、不读视图路径/board 字段,只用时间差与 seed(伪装视图无关)。
  • 验证:SEL_SIDE=both/a 三种模式(plain、spatial nbins=1..4)全部跑通并查分(8 次查询)。
  • 未验证:a 侧选胞在真实括号(E7.25+E8.0→E7.5,t=1/3,a 侧抽样率更高)上的表现—— 代理上已净负,未冒险提交;B 半与 A 半有 ~1 分噪声,但两种子方向一致(seed0 +0.19、 seed1 −0.75),不足以支持提交。
  • 生物学依据(通用知识,不涉禁窗测量):中间态偏好 = 假设目标时刻的细胞群更接近 两括号型均值的线性混合(谱系连续、无突然出现的新程序);z 为离散切片栅格(方法卡), 故所有坐标扰动仍只在 xy。

下一步建议

  1. local_spatial 是 a 侧任何"换身份"操作的硬约束:若还想提 cell_state,必须同时生成 新坐标(例如把 a 侧被替换细胞的坐标也按邻域重排/插值到新位置),保持身份—位置耦合, 而不是把中间态表达钉在早期位置上。
  2. 反向利用本节点的发现:b 侧低抽样率下中间态排序有效、a 侧高抽样率下无效 → 可试降低 a 侧抽样率、提高 b 侧(κ 上调到 0.75~0.85)并把选胞只留在 b 侧, 同时用 γ 补占据;父节点已提示 κ=0.75 的 shape 更高(72.08)。
  3. shape_scale 72.2 / occupancy_dice 0.77 仍是最大余量所在(node 2 的 dice ~0.84): 各向同性 γ 已到平台,建议按体素占据缺失方向做非各向同性补偿。

调研员的计划

名称双侧中间态选胞:a侧也按到混合质心距离择优
动机cell_state 54.35 是四组最弱。节点7消融显示中间态选胞在κ=0.65基础上额外贡献+4.7(48.17→52.84),但目前选胞只作用于b侧(SEL_SIDE=b),a侧细胞仍均匀抽取,包含大量远离中间态的早期细胞。目标时刻介于两括号之间,a侧也应优先选已在向中间过渡的细胞。expression_change 61.08 也可能因此受益(选入细胞表达更接近中间态)。
做法在父节点11的run.py上扩展SEL_SIDE:新增'both'选项。对a侧(早端括号)每个共有型,同样在z-scored表达空间计算到混合质心(1−t)μ_a+tμ_b的欧氏距离,按距离升序取配额内最近的细胞(与b侧逻辑完全对称)。步骤:(1) 在现有b侧选胞代码旁加a侧分支,SEL_SIDE=both时两侧都执行,SEL_SIDE=b时与父节点逐位一致;(2) a侧SEL_P初始=1.0(确定性),若cell_state不升反降,试0.8(保留20%随机);(3) 其余参数不变(κ=0.65, γ=1.15, SEL_TARGET=blend, scale_damp=0.5);(4) 用vec-score查A半分,先跑seed 0,若cell_state提升≥1再跑seed 1确认;(5) 单输入退路:无括号、无选胞,与父节点一致。
风险a侧过度筛选可能降低型内多样性,反而损害cell_state(若评分器重视分布覆盖而非均值接近);改善可能落在T2噪声(~1分)内。Engineer应在第一次vec-score后比较cell_state和expression_change是否同向变化;若cell_state下降,立即试SEL_P=0.8或回退SEL_SIDE=b。shape_scale和local_spatial因坐标随细胞走可能微变,需监控不降超1分。

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

对比:父节点版本 24da73d48b。改动的文件:solution/METHOD.md +67 −64、solution/run.py +109 −7

diff --git a/solution/METHOD.md b/solution/METHOD.mdindex 986b055..8fd0c18 100644--- a/solution/METHOD.md+++ b/solution/METHOD.md@@ -1,80 +1,83 @@-父节点 mix+κ=0.65+side-b 中间态选胞不变;新增 b 侧坐标占据扩张:被选晚端细胞绕输出云质心做 xy 径向膨胀 γ=1.15(z 不动),补偿组成阻尼的空间占据损失。+按 PLAN T2EI-09 实现 a 侧(早端括号)中间态选胞(含保空间分层的变体 SEL_A_MODE=spatial);机制确实运行且 cell_state/expression_change 上升,但 local_spatial 一致下降 ~1.5,两种子均值净负(61.10 vs 父 61.38),故提交态默认关闭(SEL_SIDE=b,输出与父节点 11 逐位一致)。 -## 方法(family T2EI-05,improve over node 7)+## 方法(family T2EI-09,improve over node 11) -父流程完全保留:interp_bracket、procrustes3d 对齐、scale_damp=0.5 目标 RMS、-κ=0.65 组成阻尼、side-b 型内中间态偏好选胞(SEL_P=1.0,blend 质心)、-jitter + 终缩放。本节点只在其后加一步**坐标占据扩张**(PLAN T2EI-05):+父流程完整保留:interp_bracket → procrustes3d 对齐 → scale_damp=0.5 目标 RMS →+κ=0.65 组成阻尼 → **b 侧**型内中间态偏好选胞(blend 质心 (1−t)μ_a+tμ_b,SEL_P=1.0)+→ b 侧全局 xy 径向膨胀 γ=1.15 → jitter + 终缩放。 -- 提交配置:`SPREAD_MU=global, SPREAD_AXES=xy, SPREAD_CAP=1.15`。-  对被选入输出的全部 b 侧(晚端括号)细胞:x' = g + (x − g)·γ,g 为-  a+b 堆叠云(扩张前)的质心,γ=1.15;只作用 xy 两列,z 是离散切片轴-  (30–40 层、间距 10–15),离开切片栅格会直接砸 occupancy。-- 扩张在 jitter 与终缩放(scale_to_rms 到 target_rms)**之前**执行,全局-  RMS 仍精确等于 target(out_rms=149.228=target_rms),表达、细胞数、-  组成、选胞结果均逐位不变——机制只改坐标。-- PLAN 原型(绕各型质心 μ_c、f_c=min(1+α(n_c/k_c−1),cap)、k_c<3 跳过)-  已实现保留(`SPREAD_MU=type`),但在代理上被证伪(见下)。-- 单输入退路:无括号、无 b 侧,扩张自动跳过,与父节点一致。+本节点新增(`SEL_SIDE=both`,默认 `b`): -## 机制证据(mechanism_evidence)+1. **a 侧中间态选胞(PLAN 原型,`SEL_A_MODE=plain`)**:与 b 侧完全对称——每个共有型内+   按 z-scored 表达空间到混合质心 (1−t)μ_a+tμ_b 的欧氏距离升序取配额内最近的细胞。+2. **保空间分层变体(`SEL_A_MODE=spatial`,本节点新设计)**:先做父节点的无偏均匀抽取+   作为"空间模板",按 (型, 对齐坐标的分位箱 nbins^3) 分组,每组配额用该组内**距混合质心+   最近**的细胞重填。构造上保持逐型逐区域的占据数与无偏抽样完全相同,只改细胞身份,+   目的是拿到表达收益而不付 occupancy/shape 代价。+3. **RNG 隔离**:a 侧改用 `default_rng([seed,7])`(spatial 模式完全确定性),+   主 rng 仍先执行一次与父节点相同的无偏抽取以消费同样的随机流,因此+   `SEL_SIDE=b` 时 b 侧选胞、膨胀、jitter 与父节点**逐位一致**(h5py 递归逐数组比对 True)。+4. 单输入退路不变:无括号、无选胞、无膨胀。 -- b 侧共有型 n_c/k_c ≈ 24.5 且几乎与型无关(n_b=1300 vs E8.0 31671 细胞,-  比例分配):α∈{0.15,0.3,0.5} 全部饱和到 cap,α 搜索退化,唯一有效旋钮-  是 cap 本身(f_c≡cap,11 个共有型全部被扩张,无 k_c<3 跳过;实测-  k_c∈{5..227})。机制确实运行:b 侧细胞到质心平均距离比 = f = 1.15。-- 四组分变化(A 半,seed 0,父 60.74 → 提交 61.14):-  shape_scale 71.27→72.18(d2_shape 0.0192→0.0123),local_spatial-  58.36→59.03,expression_change 60.50→60.50、cell_state 52.84→52.84-  (坐标机制按设计不碰这两组)。occupancy_dice 0.79→0.772 微降、被-  d2_shape 改善抵消有余。seed 1:61.62(shape 72.28,local 60.00)。-- 与常数位移的区别:绕质心的径向膨胀改变的是 b 侧云的离散度/占据范围,-  不是型均值的平移;每细胞位移与其到质心的偏移成正比,方向各异。+## 机制证据(mechanism_evidence,A 半,E6.75+E8.0→E7.25,t=0.4) -## 机制对照(mechanism_off_control)+机制确实运行、确实改变了细胞身份:a 侧被选细胞到混合质心的平均距离+13.56 → 10.69(spatial nbins=2,34% 的 a 细胞被替换)/ 13.32 → 10.40(plain,48.5% 被替换);+11 个共有型中 7 个(Allantois、Caudal Epiblast、EXE-Endoderm、ExEM-1/2、HEM-Endoth、+LPM、Primitive Streak、SOM、Unknown、pSE 中距离有限者)参与排序,非共有型(Anterior+Epiblast、EXE-Ectoderm、Gut Endoderm、CP、Blood Progenitor、PHM/PAM、aSE)保持模板不变。 -`SPREAD_ALPHA=0` 关闭扩张:输出与父节点 7 的预测**逐位一致**(本地-h5py 逐数组比对 True),代理 A 半即父分 60.74。打开(γ=1.15)61.14 /-seed1 61.62。机制净贡献:榜分 +0.4(seed0,A 半噪声 ~1 内),shape_scale-+0.91、local_spatial +0.67(方向一致、只落在坐标相关组,符合机制预期)。+四组分变化(seed 0,父 61.14 → spatial nbins=2 → 61.33):+cell_state 52.84→54.01(+1.17)、expression_change 60.50→61.32(+0.82)——正是 PLAN 预期的两组,+方向一致;shape_scale 72.18→72.02(−0.16)、local_spatial 59.03→57.97(−1.06)。+de_score 0.25→0.2857、de_direction 0.3645→0.3699、variogram 0.01094→0.00993 改善,+但 neighborhood_mmd 0.05314→0.05548 恶化(local_spatial 的损失全部来自它)。 -## 代理查分全表(E6.75+E8.0→E7.25,t=0.4,seed 0,A 半)+## 机制对照(mechanism_off_control)与查分全表 -| 配置 | 榜分 | shape | dice | d2_shape | local |-|---|---:|---:|---:|---:|---:|-| 父 node 7(γ=1) | 60.74 | 71.27 | ~0.79 | ~0.019 | 58.36 |-| type-wise xyz cap1.2 | 59.61 | 66.55 | 0.746 | 0.0251 | 58.54 |-| type-wise xyz cap1.6(PLAN 默认) | 57.01 | 56.17 | 0.639 | 0.0600 | 58.51 |-| type-wise xy cap1.3 | 60.29 | 68.79 | 0.755 | 0.0192 | 59.02 |-| type-wise xy cap1.6 | 58.47 | 61.45 | 0.697 | 0.0385 | 59.06 |-| global xyz γ1.1 | 60.30 | 69.53 | 0.756 | 0.0174 | 58.31 |-| global xy γ1.05 | 61.05 | 71.81 | 0.790 | 0.0157 | 59.06 |-| global xy γ1.1 | 61.15 | 72.18 | 0.783 | 0.0138 | 59.07 |-| **global xy γ1.15(提交)** | **61.14** | **72.18** | 0.772 | 0.0123 | 59.03 |-| global xy γ1.2 | 61.16 | 72.25 | 0.766 | 0.0115 | 59.03 |-| global xy γ1.35 | 60.62 | 70.20 | 0.735 | 0.0134 | 58.93 |-| global xy γ1.5 | 59.52 | 65.88 | 0.685 | 0.0209 | 58.87 |+`SEL_SIDE=b`(关闭 a 侧选胞)输出与父节点 11 **逐位一致**,A 半 61.14(seed0)/ 61.62(seed1),+与父节点记录的 61.14 / 61.62 相同。打开后(两种子): -结论:PLAN 的型内扩张(绕型质心)单调有害——把细胞撒进参考不占据的体素,-dice 崩;γ 全局膨胀在 1.05–1.2 有平台,取中值 1.15。z 向扩张有害-(xyz vs xy 同 γ 差 ~0.9 分),与方法卡"z 是离散切片"的警告一致。+| 配置 | seed0 | seed1 | 均值 | cell_state | expr_change | shape | local |+|---|---:|---:|---:|---:|---:|---:|---:|+| 父 SEL_SIDE=b(**提交**) | **61.14** | **61.62** | **61.38** | 52.84/53.27 | 60.50/60.93 | 72.18/72.28 | 59.03/60.00 |+| both, plain(PLAN 原型) | 60.97 | – | – | 53.53 | 61.09 | 71.20 | 58.08 |+| both, plain(RNG 隔离) | 60.95 | – | – | 53.79 | 59.70 | 72.31 | 58.00 |+| both, spatial nbins=2 | 61.33 | 60.87 | 61.10 | 54.01/53.40 | 61.32/60.62 | 72.02/71.65 | 57.97/57.83 |+| both, spatial nbins=3 | 61.00 | – | – | 52.84 | 61.21 | 71.80 | 58.16 |+| both, spatial nbins=4 | 60.84 | – | – | 53.08 | 60.41 | 71.74 | 58.12 |++结论:**PLAN 的机制在代理上被证伪**。cell_state 收益(+0.9~+1.2)稳定存在且方向符合预期,+但 local_spatial 一致损失 1.0~2.2(neighborhood_mmd 0.0531→0.0551~0.0558),+两种子均值净 −0.28,落在 T2 噪声(~1)内偏负。分层箱数 2→3→4 单调变差,+说明损失不是"粗箱内远距离换位"造成的(occupancy_dice 反而持平/略升 0.7716→0.7766),+而是把 a 侧细胞的身份换成"更偏晚端"的细胞后,其表达与其空间邻域在参考 E7.25 中的+局部耦合被破坏。这与节点 12 的教训同型(cell_state +1.2 / local −2.0,净负):+在本代理上 **local_spatial 对"细胞身份—位置耦合"极敏感,任何以牺牲真实配对换取+中间态表达的做法都得不偿失**。对照 b 侧:同样的中间态排序在 b 侧(1300/31671,4% 抽样)+是净收益(node 7:cell_state +4.7 且 local 57.27→60.00),因为 b 侧抽样率低、+选入的是目标时刻的代表性细胞;a 侧抽样率 52%,筛选只能改变既有位置的细胞身份。  ## 验证过 / 没验证 -- 验证:默认输出 = 查分 61.14 的文件逐位一致;seed 0 重跑确定性;-  seed 1 通过 vec-check 且 61.62;SPREAD_ALPHA=0 与父逐位一致;-  vec-check seed 0/1 均 ok;运行 ~2s、内存远低于 28GB。-- 未验证:final 真实括号(E7.25+E8.0→E7.5,t=1/3)上 γ=1.15 的迁移性——-  γ 是常数而非随 n_c/k_c 自适应(κ 固定 0.65,t 变化只改 n_b 总量,-  b/a 占据失衡的方向相同);B 半与 A 半有 ~1 分噪声。榜分增幅 +0.4-  在噪声内,但改动只影响坐标两组且方向一致(shape +0.9 / local +0.7),-  期望 B 半 rank3 为正。-- 生物学依据(通用知识,不涉禁窗测量):z 为离散切片栅格(方法卡),-  插值目标的空间占据应介于两括号之间;组成阻尼减少晚端细胞后其占据-  区域欠采样,径向膨胀恢复覆盖而不改变细胞身份。+- 验证:`SEL_SIDE=b` 与父输出逐位一致(seed 0/1);seed 0/1 确定性重跑一致;+  vec-check seed 0/1 ok;运行 ~2s、峰值内存 <1GB(限制 28GB / 30min);+  不读绝对时间、不读视图路径/board 字段,只用时间差与 seed(伪装视图无关)。+- 验证:`SEL_SIDE=both/a` 三种模式(plain、spatial nbins=1..4)全部跑通并查分(8 次查询)。+- 未验证:a 侧选胞在真实括号(E7.25+E8.0→E7.5,t=1/3,a 侧抽样率更高)上的表现——+  代理上已净负,未冒险提交;B 半与 A 半有 ~1 分噪声,但两种子方向一致(seed0 +0.19、+  seed1 −0.75),不足以支持提交。+- 生物学依据(通用知识,不涉禁窗测量):中间态偏好 = 假设目标时刻的细胞群更接近+  两括号型均值的线性混合(谱系连续、无突然出现的新程序);z 为离散切片栅格(方法卡),+  故所有坐标扰动仍只在 xy。  ## 下一步建议 -γ 与 κ 联调(κ=0.75 side-b 代理 60.54、shape 72.08,配 γ≈1.1 可能更高);-occupancy_dice 仍是 shape 短板(0.77 vs node2 的 ~0.84),可试按体素占据-缺失方向的非各向同性补偿,或对被丢弃 b 细胞做"占据幽灵"仅参与坐标侧。+1. local_spatial 是 a 侧任何"换身份"操作的硬约束:若还想提 cell_state,必须**同时生成+   新坐标**(例如把 a 侧被替换细胞的坐标也按邻域重排/插值到新位置),保持身份—位置耦合,+   而不是把中间态表达钉在早期位置上。+2. 反向利用本节点的发现:b 侧低抽样率下中间态排序有效、a 侧高抽样率下无效 →+   可试**降低 a 侧抽样率、提高 b 侧**(κ 上调到 0.75~0.85)并把选胞只留在 b 侧,+   同时用 γ 补占据;父节点已提示 κ=0.75 的 shape 更高(72.08)。+3. shape_scale 72.2 / occupancy_dice 0.77 仍是最大余量所在(node 2 的 dice ~0.84):+   各向同性 γ 已到平台,建议按体素占据缺失方向做非各向同性补偿。diff --git a/solution/run.py b/solution/run.pyindex 759095e..896635c 100644--- a/solution/run.py+++ b/solution/run.py@@ -38,6 +38,20 @@ Mechanism-off control: env SELECTION=uniform disables the midstate ranking; env SPREAD_ALPHA=0 disables the dilation and reproduces the parent bit-for-bit. Single-input fallback: identical to the parent (no bracket, no b side, dilation skipped).++Change (PLAN T2EI-09, node 13): a-side (early bracket) midstate selection,+SEL_SIDE=both. Symmetric to the b side: within each shared type, cells are+ranked by their distance to the blended centroid (1-t)*mu_a + t*mu_b and the+quota is refilled from the closest end. SEL_A_MODE=spatial additionally+preserves the spatial profile of an unbiased draw: the quota of every+(type, quantile-box) group of the uniform template is refilled with the+closest cells of the SAME group, so per-type per-region occupancy is exactly+the unbiased one. FALSIFIED on the proxy (2 seeds, A half): cell_state++0.9..+1.2 and expression_change +0.8 as predicted, but local_spatial+-1.0..-2.2 (neighborhood_mmd 0.0531 -> 0.0551..0.0558) because the a side is+52% sampled, so selection swaps cell identities at fixed positions and breaks+the identity/location coupling the reference has; net -0.28. Submitted+default is therefore SEL_SIDE=b, bit-identical to node 11. """  from __future__ import annotations@@ -61,7 +75,10 @@ SEL_P = float(os.environ.get("SEL_P", "1.0")) SEL_TARGET = os.environ.get("SEL_TARGET", "blend").strip().lower() KAPPA = float(os.environ.get("KAPPA", "0.65")) SEL_C = float(os.environ.get("SEL_C", "0.0"))-SEL_SIDE = os.environ.get("SEL_SIDE", "b").strip().lower()+SEL_SIDE = os.environ.get("SEL_SIDE", "b").strip().lower()  # b|a|both  (both = PLAN T2EI-09, falsified on proxy)+SEL_A_MODE = os.environ.get("SEL_A_MODE", "spatial").strip().lower()  # plain|spatial+SEL_A_BINS = int(os.environ.get("SEL_A_BINS", "2"))+SEL_C_A = float(os.environ.get("SEL_C_A", "0.0")) MIN_RANK_POOL = 5 SPREAD_ALPHA = float(os.environ.get("SPREAD_ALPHA", "0.3")) SPREAD_CAP = float(os.environ.get("SPREAD_CAP", "1.15"))@@ -164,7 +181,10 @@ def _type_dists(Z: np.ndarray, labels: np.ndarray, Z_other: np.ndarray, labels_o     return d  -def _select_side(labels: np.ndarray, k: int, rng: np.random.Generator, d: np.ndarray | None) -> np.ndarray:+def _select_side(labels: np.ndarray, k: int, rng: np.random.Generator, d: np.ndarray | None,+                 sel_p: float | None = None, sel_c: float | None = None) -> np.ndarray:+    sel_p = SEL_P if sel_p is None else float(sel_p)+    sel_c = SEL_C if sel_c is None else float(sel_c)     if k <= 0:         return np.array([], dtype=int)     if k >= len(labels):@@ -181,12 +201,12 @@ def _select_side(labels: np.ndarray, k: int, rng: np.random.Generator, d: np.nda             and idx.size >= MIN_RANK_POOL             and kt < idx.size             and np.isfinite(d[idx]).all()-            and rng.random() < SEL_P+            and rng.random() < sel_p         )         if use_rank:             dd = d[idx]-            if SEL_C > 0.0:-                sigma = SEL_C * float(dd.std()) + 1e-12+            if sel_c > 0.0:+                sigma = sel_c * float(dd.std()) + 1e-12                 key = dd / sigma + rng.gumbel(0.0, 1.0, size=dd.shape[0])             else:                 key = dd@@ -203,6 +223,72 @@ def _select_side(labels: np.ndarray, k: int, rng: np.random.Generator, d: np.nda     return out  +def _select_spatial(labels: np.ndarray, template: np.ndarray, d: np.ndarray,+                    coords: np.ndarray, nbins: int, sel_c: float = 0.0) -> np.ndarray:+    """Midstate-preference selection that preserves the template's spatial profile.++    ``template`` is a uniform (unbiased) draw of the same size, e.g. the parent's+    a-side picks. Cells of the template are grouped by (type, spatial bin), where+    bins are quantile boxes of the aligned cloud over ``nbins`` per axis. Each+    group's quota is then refilled with the cells of the same (type, bin) that are+    closest to the mid-state centroid, so the per-type per-region occupancy of the+    output equals the unbiased draw while the expression profile shifts toward the+    intermediate stage. Groups without a finite distance ranking keep the template.+    """+    lab = labels.astype(str)+    tmpl_lab = lab[template]+    C = np.asarray(coords, dtype=np.float64)+    out = []+    nb = int(max(nbins, 1))+    for tname in np.unique(tmpl_lab):+        rows_t = template[tmpl_lab == tname]+        all_t = np.flatnonzero(lab == tname)+        if nb <= 1 or all_t.size < 2 * MIN_RANK_POOL:+            out.append(_refill(rows_t, all_t, d, None, sel_c))+            continue+        edges = []+        for ax in range(C.shape[1]):+            qs = np.quantile(C[all_t, ax], np.linspace(0.0, 1.0, nb + 1)[1:-1])+            qs = np.unique(qs)+            edges.append(qs)+        bt = _binof(C[rows_t], edges)+        ba = _binof(C[all_t], edges)+        for bv in np.unique(np.concatenate([bt, ba])):+            q_rows = rows_t[bt == bv]+            if q_rows.size == 0:+                continue+            cand = all_t[ba == bv]+            out.append(_refill(q_rows, cand, d, None, sel_c))+    res = np.concatenate(out) if out else np.array([], dtype=int)+    return np.unique(res)+++def _binof(P: np.ndarray, edges) -> np.ndarray:+    code = np.zeros(P.shape[0], dtype=np.int64)+    for ax, e in enumerate(edges):+        code = code * (len(e) + 1) + np.searchsorted(e, P[:, ax], side="right")+    return code+++def _refill(quota_rows: np.ndarray, cand: np.ndarray, d: np.ndarray,+            _unused, sel_c: float) -> np.ndarray:+    """Take len(quota_rows) cells from cand with the smallest mid-state distance."""+    kt = int(quota_rows.size)+    if cand.size <= kt:+        return np.sort(quota_rows)+    dd = d[cand]+    if not np.isfinite(dd).all():+        keep = np.flatnonzero(np.isfinite(dd))+        if keep.size <= kt:+            return np.sort(quota_rows)+        cand, dd = cand[keep], dd[keep]+    if sel_c > 0.0:+        sigma = sel_c * float(dd.std()) + 1e-12+        rs = np.random.RandomState(12345)+        dd = dd / sigma + rs.gumbel(0.0, 1.0, size=dd.shape[0])+    return cand[np.argsort(dd, kind="stable")[:kt]]++ def main() -> None:     parser = argparse.ArgumentParser()     parser.add_argument("--data", required=True)@@ -251,7 +337,23 @@ def main() -> None:         if SEL_SIDE in ("both", "b"):             db = _type_dists(Zb, lb, Za, la, shared, t, SEL_TARGET) -    ia = _select_side(stage_a.labels, n_a, rng, da)+    ia = _select_side(stage_a.labels, n_a, rng, None)  # unbiased draw, same rng stream as parent+    a_diag = {}+    if da is not None and ia.size and n_a < stage_a.n:+        if SEL_A_MODE == "spatial":+            ia_sel = _select_spatial(stage_a.labels, ia, da, ca, SEL_A_BINS, SEL_C_A)+        else:+            rng_a = np.random.default_rng([args.seed, 7])+            ia_sel = _select_side(stage_a.labels, n_a, rng_a, da, SEL_P, SEL_C_A)+        fin = np.isfinite(da[ia]) & np.isfinite(da[ia_sel]) if ia_sel.size == ia.size else np.array([])+        if ia_sel.size == ia.size:+            a_diag = {+                "a_mode": SEL_A_MODE, "a_bins": SEL_A_BINS,+                "a_d_unif": float(np.mean(da[ia][fin])) if fin.size else None,+                "a_d_sel": float(np.mean(da[ia_sel][fin])) if fin.size else None,+                "a_changed_frac": float(np.mean(~np.isin(ia_sel, ia))),+            }+            ia = ia_sel     ib = _select_side(stage_b.labels, n_b, rng, db)      spread_plan = []@@ -308,7 +410,7 @@ def main() -> None:         "spread_alpha": SPREAD_ALPHA, "spread_cap": SPREAD_CAP,         "spread_when": SPREAD_WHEN if SPREAD_ALPHA > 0 else "off",         "spread_scope": SPREAD_SCOPE, "n_spread_types": len(spread_diag),-        "spread": spread_diag,+        "spread": spread_diag, "sel_side": SEL_SIDE, **a_diag,     }, default=float), file=sys.stderr)     write_t2(args.out, expr, coords.astype(np.float32), genes, seed=args.seed) 

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

用到的知识库条目

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

改了什么实现 a 侧中间态选胞(SEL_SIDE=both,含 plain 与新的 spatial 保占据分层两种模式)并加 RNG 隔离;Engineer 在 A 半代理上用 8 次查询测得机制净负(cell_state +0.9~+1.2 但 local_spatial −1.0~−2.2,两种子均值 61.10 vs 父 61.38),故提交态默认关闭(SEL_SIDE=b),提交输出与父节点 11 逐位一致。
各组分数的变化cell_state:噪声内(0.00,54.35→54.35)
expression_change:噪声内(0.00,61.08→61.08,提交配置与父逐位一致)
local_spatial:噪声内(0.00,60.69→60.69)
shape_scale:噪声内(0.00,72.48→72.48)
family_idT2EI-09
假设是否成立否
经验
  1. 在 a 侧抽样率高(52%)时做型内中间态偏好选胞(按到混合质心距离择优),只换细胞身份不换坐标,代理上 cell_state +0.9~+1.2、expression_change +0.8,但 neighborhood_mmd 0.0531→0.0551~0.0558 使 local_spatial −1.0~−2.2,两种子均值净 −0.28,机制被证伪。
  2. 同样的中间态排序在 b 侧(抽样率 4%,1300/31671)是净收益(node 7 cell_state +4.7 且 local 57.27→60.00):选胞收益随抽样率反向变化——低抽样率可选入真正代表目标时刻的细胞,高抽样率只能改写既有位置的细胞身份。
  3. spatial 分层重填(按 型×分位箱 保占据)不能挽救该损失,且箱数 2→3→4 单调变差(61.33→61.00→60.84)、occupancy_dice 反而略升,说明 local_spatial 的损失来自身份—位置局部耦合被破坏,与占据无关;与节点 12 教训同型。
  4. 代理验证后主动回退到与父节点逐位一致的默认配置(SEL_SIDE=b + RNG 隔离),避免把证伪的机制提交上榜浪费一次评分——这个模式值得沿用。
mechanism_active否
下一步建议
  1. 针对 cell_state/shape_scale:调 κ 到 0.75~0.85 降低 a 侧占比、提高 b 侧占比,选胞只保留在 b 侧(低抽样率下已证有效),配 γ≈1.1 的 xy 全局膨胀补占据;先 A 半两种子验证再提交。
  2. 针对 shape_scale(72.2 / occupancy_dice 0.77 vs node 2 的 ~0.84):各向同性 γ 已到平台(1.05–1.2),改为按体素占据缺失方向做非各向异性补偿,或让被丢弃的 b 细胞作为仅坐标侧的占据幽灵。
  3. 若仍想提 cell_state 的 a 侧表达:必须同时重排/插值被替换细胞的坐标以保持身份—位置耦合,任何只改表达身份的 a 侧操作在 local_spatial 上都会付出 ≥1 分代价。

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

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

分析员

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

工程师

角色工程师 alibaba-token-plan-cn/qwen3.8-max
调用次数1 次
轮数27
工具调用共 33 次:bash 23、edit 7、read 2、write 1
用时13 分
token 数输入 63,884 · 输出 11,944 · 思考 13,218
任务(第一行)按计划修改程序:双侧中间态选胞:a侧也按到混合质心距离择优
最后的回答(摘录)
提交完成。父配置(SEL_SIDE=b)作为默认,与节点 11 逐位一致、vec-check ok、确定性通过。

**做了什么**:按 PLAN T2EI-09 实现 a 侧中间态选胞,含两个变体——`plain`(与 b 侧对称的型内到混合质心排序)和新设计的 `spatial`(先做无偏均匀抽取当空间模板,按 (型, 分位箱) 分组、组内用距混合质心最近的细胞重填配额,构造上保持逐型逐区域占据不变)。加了 RNG 隔离,`SEL_SIDE=b` 时与父输出逐位一致。

**查分结果(A 半,8 次查询)**:机制确实运行——a 侧被选细胞到混合质心平均距离 13.56→10.69(spatial)/13.32→10.40(plain),cell_state +0.9~+1.2、expression_change +0.8(PLAN 预期两组、方向一致)。但 local_spatial 一致下降 1.0~2.2(neighborhood_mmd 0.0531→0.0551~0.0558)。两种子均值:父 61.38 vs spatial 61.10(seed0 +0.19、seed1 −0.75),**净负、机制被证伪**,故默认关闭。分层箱数 2→3→4 单调变差,说明损失不是粗箱换位,而是 a 侧 52% 高抽样率下"换身份不换位置"破坏了身份—位置耦合(与节点 12 同型教训)。

**下一步最值得试**:(1) 降 a 侧抽样率、升 b 侧(κ→0.75~0.85)并把选胞只留 b 侧,配 γ 补占据——b 侧低抽样率下中间态选胞是净收益(node 7 cell_state +4.7),a 侧高抽样率下无效;(2) shape_scale 72.2 / occupancy_dice 0.77 是最大余量(node 2 dice~0.84),各向同性 γ 已到平台,改按体素占据缺失方向做非各向同性补偿。
原始记录位置/home/spark-longxinyang/vec/runs/formal/20261003-043412-search-t2-embryo-interp-g24-D-s1/nodes/13/engineer.jsonl 171 KB
/home/spark-longxinyang/vec/runs/formal/20261003-043412-search-t2-embryo-interp-g24-D-s1/nodes/13/engineer.stderr

调研员

角色调研员 alibaba-token-plan-cn/qwen3.8-max
调用次数1 次
轮数1
工具调用共 0 次:—
用时1 分
token 数输入 12,381 · 输出 846 · 思考 3,607
任务(第一行)为节点 n13(改进,父节点 n11)写改进计划 PLAN.json
最后的回答(摘录)
```json
{
  "name": "双侧中间态选胞:a侧也按到混合质心距离择优",
  "motivation": "cell_state 54.35 是四组最弱。节点7消融显示中间态选胞在κ=0.65基础上额外贡献+4.7(48.17→52.84),但目前选胞只作用于b侧(SEL_SIDE=b),a侧细胞仍均匀抽取,包含大量远离中间态的早期细胞。目标时刻介于两括号之间,a侧也应优先选已在向中间过渡的细胞。expression_change 61.08 也可能因此受益(选入细胞表达更接近中间态)。",
  "approach": "在父节点11的run.py上扩展SEL_SIDE:新增'both'选项。对a侧(早端括号)每个共有型,同样在z-scored表达空间计算到混合质心(1−t)μ_a+tμ_b的欧氏距离,按距离升序取配额内最近的细胞(与b侧逻辑完全对称)。步骤:(1) 在现有b侧选胞代码旁加a侧分支,SEL_SIDE=both时两侧都执行,SEL_SIDE=b时与父节点逐位一致;(2) a侧SEL_P初始=1.0(确定性),若cell_state不升反降,试0.8(保留20%随机);(3) 其余参数不变(κ=0.65, γ=1.15, SEL_TARGET=blend, scale_damp=0.5);(4) 用vec-score查A半分,先跑seed 0,若cell_state提升≥1再跑seed 1确认;(5) 单输入退路:无括号、无选胞,与父节点一致。",
  "expected_groups": ["cell_state", "expression_change"],
  "risks": "a侧过度筛选可能降低型内多样性,反而损害cell_state(若评分器重视分布覆盖而非均值接近);改善可能落在T2噪声(~1分)内。Engineer应在第一次vec-score后比较cell_state和expression_change是否同向变化;若cell_state下降,立即试SEL_P=0.8或回退SEL_SIDE=b。shape_scale和local_spatial因坐标随细胞走可能微变,需监控不降超1分。",
  "family_id": "T2EI-09",
  "mechanism": "将中间态偏好选胞从仅b侧扩展到双括号:a侧细胞也按到(1−t)μ_a+tμ_b混合质心的z-score距离排序,优先选已在向中间态过渡的细胞,使两侧输出都更代表目标时刻。",
  "vs_constant_shift": "不是对型均值加常数位移或全局重加权;是在每个型内改变被抽中的具体细胞(选择函数),不同细胞因到质心距离不同而被选中或排除,改变的是细胞组成而非坐标或表达的平移。",
  "mechanism_evidence": "Engineer应对比SEL_SIDE=b(父)与SEL_SIDE=both:(1) 统计a侧被选细胞到混合质心的平均距离是否显著低于均匀抽样基线(t检验或排列检验);(2) 四组分变化应集中在cell_state和expression_change,坐标组(shape_scale, local_spatial)变化应远小于前两组;(3) 若cell_state和expression_change同时提升且方向一致,机制生效。",
  "mechanism_off_control": "env SEL_SIDE=b 关闭a侧选胞,输出应与父节点11逐位一致(本地h5py逐数组比对)。打开(SEL_SIDE=both)后cell_state和expression_change应有变化;若四组分全部不变,说明a侧选胞未实际运行。",
  "sources": []
}
```
原始记录位置/home/spark-longxinyang/vec/runs/formal/20261003-043412-search-t2-embryo-interp-g24-D-s1/nodes/13/researcher.jsonl 4 KB
/home/spark-longxinyang/vec/runs/formal/20261003-043412-search-t2-embryo-interp-g24-D-s1/nodes/13/researcher.stderr

审查员

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