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

总览 · ← 返回运行 20261003-004922-search-t2-embryo-interp-g24

节点 n17 在终选来历上

实现 PLAN 的 K 近邻供体均值配对:均值使型内 SD 收缩到父14 的 69%、cell_state 从 56 崩到 30,触发放弃条款,回退父14(MEAN_K=0,逐位一致)。

运行?一次完整的自动搜索或 Agent 会话,有自己的锁定配置和证据包。20261003-004922-search-t2-embryo-interp-g24
父节点n14
子节点n19
操作?种子:人写的起点;改进:在父节点上改;草稿:从头写;修复:修父节点的报错。改进
状态已打分
分数搜索目标分 61.73(+0.0) · proxy 61.73(+0.0) · 3 次复测均分 61.14
审查通过 1 越界读取:未发现问题——run.py 仅通过框架 view_io(load_manifest/read_stage/panel_genes,run.py:365-375)读取 --data 视图内数据,无绝对路径、..、/mnt、prior 或打分器路径,无联网。; 2 硬编码目标统计量:未发现问题——run.py 中常量仅为算法旋钮(T_DRAW_FRAC=0.5、MIX_K=3、scale_damp=0.5)和 rng 盐(20261003、31337),类型比例与配额全部由输入 labels 现场统计(_compos_mix, run.py:75-144)。; 3 钻评分器漏洞:未…
用时?从运行开始到结束(或到现在)的挂钟时间。14 分
程序版本1d420b6e547d4a97a7a0e425d9e666733a0fde06 (programs.git)

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

来自 programs.git 1d420b6e54:solution/METHOD.md

实现 PLAN 的 K 近邻供体均值配对:均值使型内 SD 收缩到父14 的 69%、cell_state 从 56 崩到 30,触发放弃条款,回退父14(MEAN_K=0,逐位一致)。

方法族与实现的机制

family T2EI-01(型内配对规则)。按 PLAN 在父14 代码里新增 mean_k 支路: 对每个坐标细胞,在对齐+缩放帧内取同型池的 MEAN_K 个最近供体,用它们表达向量的 算术均值作为该细胞的表达(不再从 K 近邻里随机抽一个供体)。MIX_R=1.0(全部 坐标细胞走此路径),MEAN_K 由 VEC_MEAN_K 控制,默认 0(=父14 随机路径)。 坐标路、组成插值池(ADJ=0)、补齐规则一律未动,故 shape_scale 逐位不变。

这不是常数位移:均值对每个坐标细胞独立计算(各自 K 近邻集合不同),表达修改是 空间异质、逐细胞不同的;验证见下(frac cells changed vs 父14 = 1.0,即全部细胞 表达都被改写,且逐型不同)。

机制生效证据(proxy,seed 0,A 半)

  • 供体集合大小 = MEAN_K:诊断 mean_k_avg 实测 3.0 / 5.0 / 7.0(未退化为 1), n_mean_cells=5000(全部细胞走均值路径)。
  • 型内表达 SD(过度平滑诊断):逐基因 SD 均值 p12(1nn)=0.7741、p14(randK3)=0.7710、 mean3=0.5340。mean3/p14 = 0.693(SD 收缩 −30.7%),超过 PLAN 风险#1 的 30% 过度平滑阈值 → 确认均值把型内所有细胞拉向型均值。
  • 逐位与父14 不同:frac cells changed mean3 vs p14 = 1.0,每型表达均值也被改写 (非退化到位移),符合"逐细胞空间异质修改"。

扫描结果(A 半,seed 0)——机制失败

配置榜分eccssslsmmd_u
父14(randK3,A半)61.1461.5556.4968.5357.970.055
MEAN_K=353.7061.5130.2568.5354.520.041
MEAN_K=551.5461.4423.4768.5352.740.055
MEAN_K=750.6561.7020.5868.5351.780.063

均值把 cell_state 从 56.5 砸到 20–30(收缩型内方差 → 单细胞分布塌向型均值, mmd_u 反而降低是因为分布变窄,但细胞"不像真实中间态细胞"),local_spatial 也更差 (54.5 < 57.97,均值破坏了表达-空间的局部耦合,neighborhood_mmd 从 0.055 升到 0.064)。 只有 expression_change 微动(±0.1,噪声内)。三档 MEAN_K 全部 ls 无改善、cs 崩塌 → 触发 PLAN 步骤4 放弃条款。

机制关闭对照

VEC_MEAN_K=1:均值退化为单个最近邻供体表达。已验证 seed 0 输出与父12(nn 配对、 MIX_R=0)逐位一致(X 与 spatial_3D np.array_equal=True)。VEC_MEAN_K=0(默认) 走父14 随机 K=3 支路,诊断 frac_donors_changed=0.6738、n_mix_total=5000、 mean_k_avg=0,与父14 完全一致。

附带验证(父14 next_suggestion #2)

同时扫描坐标路 T_DRAW_FRAC(唯一未动、有独立头部空间的旋钮,决定 ss/ls 几何项), 机制固定为父14(randK3):0.35→59.62、0.55→60.51、0.6→61.02、0.65→60.98,全部 ≤ 父14 的 61.14。确认 T_DRAW_FRAC=0.5 已是最优,坐标路无头部空间。

最终提交:回退父14(MEAN_K=0)

PLAN 机制与其备选建议均不胜出,按 PLAN 步骤4 回退。提交配置默认值即父14: PARAMS={"align":"procrustes3d","scale_damp":0.5}、DECOUPLE=True、COMPOS_ADJ=0.0、 T_DRAW_FRAC=0.5、VEC_PAIR=nn、MIX_R=1.0、MIX_K=3、MEAN_K=0。 默认输出与父14 逐位一致,预期正式分 ≈ 父14(61.73 B 半 / 61.14 A 半)。代码保留 mean_k 支路(默认关闭)供后续节点复用。

已验证 / 未验证

  • 已验证:proxy seed 0/1 跑通、同 seed 逐位确定、seed1≠seed0、vec-check ok、 MEAN_K=1 逐位=父12(关闭对照)、默认逐位=父14;诊断三件套(mean_k_avg、型内SD、 frac_changed)合起来把榜分崩塌归因到"均值过度平滑"这一所声称的机制。
  • 未验证:真实 final 视图(E8.5→E9.5,类型更多、n 更大);B 半分数。均值机制在 proxy 上已确认净负,未在 final 上再测(预期同样过度平滑)。
  • 生物学知识来源:无新增外部知识;仅复用视图内谱系类型标签。

调研员的计划

名称K近邻供体均值替代随机置换,回收ls/cs
动机父14(61.73)的最弱组为cell_state 57.70和local_spatial 58.69。ANALYSIS第1条建议:将MIX_K=3随机置换换成K近邻供体表达取均值,期望ls损失比随机更小(均值保持空间连续性)、ec增益更稳。父14的ls比父12降0.63,cs虽升但仍在最低组;随机选择的67%供体改变率引入的空间噪声是ls损失的直接来源。配对规则路的ec头部空间已近枯竭(+1.4中已回收约0.76),但ls仍有回收空间。
做法步骤:
1. 在父14代码基础上,将MIX_K随机抽取逻辑替换为均值逻辑:对每个坐标细胞,找同型池内对齐帧中K个最近供体,取其表达向量的算术均值作为该坐标细胞的表达(不再随机选一个)。新增参数MEAN_K(替代MIX_K的随机语义),初始扫描MEAN_K∈{3,5,7}。MIX_R保持1.0(全部坐标细胞走此路径)。
2. 小样本快筛:seed 0,MEAN_K=3/5/7,vec-score查A半,记录四组分。重点看ls是否比父14的58.69回升、ec是否≥61。若MEAN_K=3的ls>59且ec>60.5,进入多seed验证。
3. 多seed配对验证(ANALYSIS第3条):对最优MEAN_K,跑seed 0/1/2,每个seed同时跑MIX_R=0(=父12)和候选,计算配对差值。提交条件:|均值差|>0.3且三种子同号。
4. 若MEAN_K=3/5/7全部ls无改善或ec降>1,则放弃,回退提交父14输出。
单阶段退路:目标无括号时行为与父12完全一致(无池可配对,直接输出坐标路)。
时间预算:实现~10min,扫描3配置×1.2s+多seed 3×2×1.2s,远低于30min限制。
风险1. 均值过度平滑:若MEAN_K过大,型内所有细胞表达趋同于型均值,退化为常数位移,ec和cs同时下降。Engineer应检查输出表达的型内CV是否显著低于父14(若CV降幅>30%则过度平滑)。2. ec可能比父14略降:均值操作比随机选择更保守,ec增益可能减少0.3~0.5。若ec降>1且ls升<0.5则净负。3. 与父14差异在噪声内(<1分):需三种子配对差值确认方向,单次查分不可靠。

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

对比:父节点版本 7961bc6229。改动的文件:solution/METHOD.md +51 −58、solution/run.py +50 −3

diff --git a/solution/METHOD.md b/solution/METHOD.mdindex 897e1ef..3f6a86e 100644--- a/solution/METHOD.md+++ b/solution/METHOD.md@@ -1,75 +1,68 @@-父12解耦基座上的型内混合配对:全部坐标细胞的表达供体改从同型池内空间最近 3 个供体(K=3)中随机抽取,回收 ec 同时保住 ls。+实现 PLAN 的 K 近邻供体均值配对:均值使型内 SD 收缩到父14 的 69%、cell_state 从 56 崩到 30,触发放弃条款,回退父14(MEAN_K=0,逐位一致)。 -## 方法+## 方法族与实现的机制 -基座 = 父12(mix, procrustes3d, scale_damp=0.5, n=5000):坐标走 tau=0/frac=0.5-均匀分层抽取,表达供体池走组成插值(ADJ=0),池组成、坐标路、补齐规则-(fill_late/fill_early)一律未动。+family **T2EI-01**(型内配对规则)。按 PLAN 在父14 代码里新增 `mean_k` 支路:+对每个坐标细胞,在对齐+缩放帧内取同型池的 `MEAN_K` 个最近供体,用它们表达向量的+**算术均值**作为该细胞的表达(不再从 K 近邻里随机抽一个供体)。`MIX_R=1.0`(全部+坐标细胞走此路径),`MEAN_K` 由 `VEC_MEAN_K` 控制,默认 0(=父14 随机路径)。+坐标路、组成插值池(ADJ=0)、补齐规则一律未动,故 shape_scale 逐位不变。 -**机制(family T2EI-01,配对规则)**:父12 用同型 1-nn 把每个坐标细胞配到空间-最近的池供体。本节点新增 MIX_R/MIX_K:对每型,round(MIX_R·c_T) 个坐标细胞-(rng 由 seed 确定)的供体改从该坐标细胞在对齐+缩放帧内的 K 个最近同型池供体中-均匀随机抽取(K=1 时即 PLAN 原文的全池随机供体)。提交配置 MIX_R=1.0、MIX_K=3。+这不是常数位移:均值对每个坐标细胞独立计算(各自 K 近邻集合不同),表达修改是+空间异质、逐细胞不同的;验证见下(frac cells changed vs 父14 = 1.0,即全部细胞+表达都被改写,且逐型不同)。 -单阶段退路(目标无括号):不变,行为与父12 完全一致。代码不读任何绝对时间/路径,-时间平移不变。+## 机制生效证据(proxy,seed 0,A 半) -## 与 PLAN 的偏离(如实报告)+- **供体集合大小 = MEAN_K**:诊断 `mean_k_avg` 实测 3.0 / 5.0 / 7.0(未退化为 1),+  `n_mean_cells=5000`(全部细胞走均值路径)。+- **型内表达 SD(过度平滑诊断)**:逐基因 SD 均值 p12(1nn)=0.7741、p14(randK3)=0.7710、+  **mean3=0.5340**。mean3/p14 = **0.693**(SD 收缩 −30.7%),超过 PLAN 风险#1 的+  30% 过度平滑阈值 → 确认均值把型内所有细胞拉向型均值。+- **逐位与父14 不同**:`frac cells changed mean3 vs p14 = 1.0`,每型表达均值也被改写+  (非退化到位移),符合"逐细胞空间异质修改"。 -PLAN 原文是全池随机供体(等价于 MIX_K=1),扫描结果触发其风险条款:+## 扫描结果(A 半,seed 0)——机制失败 -| 配置 | A半榜分 | ec | cs | ss | ls |-|---|---:|---:|---:|---:|---:|-| 父12(nn 配对,=MIX_R 0) | 60.88 | 60.83 | 55.87 | 68.53 | 58.30 |-| PLAN 原文 K=1, r=0.25 | 59.94 | 61.15 | 55.71 | 68.53 | 54.37 |-| PLAN 原文 K=1, r=0.5 | 59.43 | 61.78 | 56.91 | 68.53 | 50.50 |-| K=2, r=1.0 | 60.49* | 60.49 | 55.82 | 68.53 | 57.91 |-| **K=3, r=1.0(提交)** | **61.14** | **61.55** | **56.49** | 68.53 | 57.97 |-| K=3, r=0.5 | — | 61.18 | 56.44 | 68.53 | 57.94 |-| K=4 / K=5 / K=6, r=1.0 | 60.77 / 60.55 / 60.61 | 60.96 / 60.04 / 61.51 | 56.37 / 56.57 / 56.13 | 68.53 | 57.22 / 57.07 / 56.26 |+| 配置 | 榜分 | ec | cs | ss | ls | mmd_u |+|---|---:|---:|---:|---:|---:|---:|+| 父14(randK3,A半) | 61.14 | 61.55 | 56.49 | 68.53 | 57.97 | 0.055 |+| **MEAN_K=3** | 53.70 | 61.51 | **30.25** | 68.53 | 54.52 | 0.041 |+| MEAN_K=5 | 51.54 | 61.44 | 23.47 | 68.53 | 52.74 | 0.055 |+| MEAN_K=7 | 50.65 | 61.70 | 20.58 | 68.53 | 51.78 | 0.063 | -全池随机供体的 ls 悬崖太陡(r=0.25 已 −3.9,超 PLAN 否决线 ls 损失>1;r=0.5 的-ls=50.5<56,触发"直接放弃"条款),ec 增益换不回。改为**局部随机**(K 近邻内随机):-K=3 时 neighborhood_mmd 仅 0.0550→0.0555,ls 损失 0.33(<1,过护栏),ec +0.72、-cs +0.62。这是父12 ANALYSIS next_suggestions 第 2、3 条(混合配对 / k-nn 供体)的-组合,仍在同一机制家族内(改的只是型内配对规则)。+均值把 **cell_state 从 56.5 砸到 20–30**(收缩型内方差 → 单细胞分布塌向型均值,+mmd_u 反而降低是因为分布变窄,但细胞"不像真实中间态细胞"),**local_spatial 也更差**+(54.5 < 57.97,均值破坏了表达-空间的局部耦合,neighborhood_mmd 从 0.055 升到 0.064)。+只有 expression_change 微动(±0.1,噪声内)。三档 MEAN_K 全部 ls 无改善、cs 崩塌 →+**触发 PLAN 步骤4 放弃条款**。 -## 机制生效证据(proxy,A 半)+## 机制关闭对照 -- 机制实际改写细胞:MIX_R=1.0、K=3 时 n_mix_total=5000(全部细胞走随机支路),-  frac_donors_changed=0.674(67% 细胞的供体 ≠ 1-nn 供体;其余随机抽中第 0 列)。-- 逐型池供体集合与 r=0 完全相同(池由同一 rng_e 序列在配对前抽好),每型表达-  均值逐位不变——不是型均值位移,是型内"哪个供体配哪个坐标"的逐细胞置换。-- 四组分(vs r=0 同 seed):ec 60.83→61.55(+0.72)、cs 55.87→56.49(+0.62)、-  ss 68.53→68.53(0,坐标路未动,d2_shape/occupancy/scale_log_ratio 逐位相同)、-  ls 58.30→57.97(−0.33,护栏内)。-- neighborhood_mmd 0.05504→0.05548(+0.0004),与 ec 回升同档,无崩塌。+`VEC_MEAN_K=1`:均值退化为单个最近邻供体表达。已验证 seed 0 输出与父12(nn 配对、+MIX_R=0)**逐位一致**(X 与 spatial_3D `np.array_equal`=True)。`VEC_MEAN_K=0`(默认)+走父14 随机 K=3 支路,诊断 `frac_donors_changed=0.6738`、`n_mix_total=5000`、+`mean_k_avg=0`,与父14 完全一致。 -## 配对 A 半对比(决策依据)+## 附带验证(父14 next_suggestion #2) -K=3,r=1.0 vs MIX_R=0(同 seed 同视图):seed0 61.14 vs 60.88(+0.26)、-seed1 60.72 vs 60.40(+0.32)、seed2 60.31 vs 60.30(+0.01)。三种子方向一致-非负,按 PLAN 决策规则提交。增益小于噪声(~1),B 半可能不重现,属低风险的-小幅正期望改动。+同时扫描坐标路 `T_DRAW_FRAC`(唯一未动、有独立头部空间的旋钮,决定 ss/ls 几何项),+机制固定为父14(randK3):0.35→59.62、0.55→60.51、0.6→61.02、0.65→60.98,**全部+≤ 父14 的 61.14**。确认 T_DRAW_FRAC=0.5 已是最优,坐标路无头部空间。 -## 机制关闭对照+## 最终提交:回退父14(MEAN_K=0) -`MIX_R=0`:随机支路为空、K 查询退回 k=1,代码路径与父12 逐行相同;已验证-seed 0 输出与父12 逐位一致(X 与坐标 np.array_equal),A 半 60.88 = 父12 的-60.88。`VEC_DECOUPLE=0` 仍复现父8 均匀抽取对照。+PLAN 机制与其备选建议均不胜出,按 PLAN 步骤4 回退。提交配置默认值即父14:+`PARAMS={"align":"procrustes3d","scale_damp":0.5}`、`DECOUPLE=True`、`COMPOS_ADJ=0.0`、+`T_DRAW_FRAC=0.5`、`VEC_PAIR=nn`、`MIX_R=1.0`、`MIX_K=3`、**`MEAN_K=0`**。+默认输出与父14 逐位一致,预期正式分 ≈ 父14(61.73 B 半 / 61.14 A 半)。代码保留+mean_k 支路(默认关闭)供后续节点复用。  ## 已验证 / 未验证 -- 已验证:proxy 视图 seed 0/1/2 跑通(1.2–1.9 s,峰值内存远低于限制)、vec-check-  通过、同 seed 逐位确定、MIX_R=0 逐位等于父12;rng_mix 仅由 (seed, MIX_R) 派生,-  与视图路径/绝对时间无关。-- 未验证:真实 final 视图(E8.5→E9.5,类型更多、n 更大;K=3 在池很小时的型自动-  收缩 K=min(3,池),不会崩);B 半分数;K 在 {2,4,5,6} 非单调(K=3 最优可能含-  A 半噪声成分)。-- 生物学知识来源:无新增外部知识;仅复用视图内提供的谱系类型标签。--## 参数--`PARAMS={"align":"procrustes3d","scale_damp":0.5}`;`DECOUPLE=True`、-`COMPOS_ADJ=0.0`、`T_DRAW_FRAC=0.5`、`VEC_PAIR=nn`、**`MIX_R=1.0`、`MIX_K=3`**-(环境变量仅本地测试用,默认值即提交配置)。+- 已验证:proxy seed 0/1 跑通、同 seed 逐位确定、seed1≠seed0、vec-check ok、+  MEAN_K=1 逐位=父12(关闭对照)、默认逐位=父14;诊断三件套(mean_k_avg、型内SD、+  frac_changed)合起来把榜分崩塌归因到"均值过度平滑"这一所声称的机制。+- 未验证:真实 final 视图(E8.5→E9.5,类型更多、n 更大);B 半分数。均值机制在+  proxy 上已确认净负,未在 final 上再测(预期同样过度平滑)。+- 生物学知识来源:无新增外部知识;仅复用视图内谱系类型标签。diff --git a/solution/run.py b/solution/run.pyindex ecda1a8..ff69051 100644--- a/solution/run.py+++ b/solution/run.py@@ -67,8 +67,9 @@ PARAMS = {"align": "procrustes3d", "scale_damp": 0.5} DECOUPLE = True COMPOS_ADJ = 0.0  # later-stage share of a shared type's expression quota: t * COMPOS_ADJ T_DRAW_FRAC = 0.5  # coordinate-path later-stage fraction-MIX_R = 1.0  # fraction of coordinate cells per type re-paired to a random pool donor (0 = off control, bit-identical to parent 12)+MIX_R = 1.0  # fraction of coordinate cells per type re-paired (0 = off control, bit-identical to parent 12) MIX_K = 3  # 1: donor uniform over the whole type pool (PLAN literal); K>1: donor uniform over the K nearest pool donors+MEAN_K = 0  # >0: replace random donor choice with the arithmetic mean of the MEAN_K nearest same-type pool donors (0 = parent-14 random path)   def _compos_mix(labels_a, labels_b, tt: float, n: int, rng: np.random.Generator, adj: float, diag: dict | None = None):@@ -186,7 +187,7 @@ def _uniform_mix(labels_a, labels_b, tt, n: int, frac: float, rng: np.random.Gen  def _decoupled_expr(stage_a, stage_b, ia, ib, tt: float, adj: float, rng: np.random.Generator, diag: dict,                     ca=None, cb=None, pair: str = "order", mix_r: float = 0.0, rng_mix: np.random.Generator | None = None,-                    mix_k: int = 5):+                    mix_k: int = 5, mean_k: int = 0):     """Rebuild the expression matrix: per-type pools from _compos_mix(adj), paired     with the coordinate-path cells of the same type. @@ -194,6 +195,10 @@ def _decoupled_expr(stage_a, stage_b, ia, ib, tt: float, adj: float, rng: np.ran     pair="nn": each coordinate cell takes the spatially nearest same-type pool     donor in the aligned frame (ca/cb), preserving local expression-spatial     structure while keeping the compositional pool per type.+    mean_k>0 (this node): the donor expression of each coordinate cell is the+    arithmetic mean of its mean_k nearest same-type pool donors in the aligned+    frame (deterministic spatial smoothing; mean_k=1 is bit-identical to the+    strict 1-nn pairing of parent node 12). Overrides the random mix path.     """     la = np.asarray(stage_a.labels).astype(str)     lb = np.asarray(stage_b.labels).astype(str)@@ -208,6 +213,9 @@ def _decoupled_expr(stage_a, stage_b, ia, ib, tt: float, adj: float, rng: np.ran     idx = np.zeros(n_out, dtype=np.int64)     fill_late = fill_early = overlap_num = overlap_den = 0     n_mixed_changed = n_mix_total = 0+    mean_records: list = []+    n_mean_cells = 0+    n_mean_k_sum = 0     for T in np.unique(coord_types):         pos = np.flatnonzero(coord_types == T)         poolA = ia_e[la_e == T]@@ -240,6 +248,22 @@ def _decoupled_expr(stage_a, stage_b, ia, ib, tt: float, adj: float, rng: np.ran         don_idx = np.array(list(seq_a) + list(seq_b), dtype=np.int64)         coordA = ia[la[ia] == T]         coordB = ib[lb[ib] == T]+        if mean_k > 0 and pair == "nn" and ca is not None and cb is not None and don_idx.size:+            from scipy.spatial import cKDTree++            pts_coord = np.vstack([ca[coordA], cb[coordB]]) if (len(coordA) + len(coordB)) else np.zeros((0, ca.shape[1]))+            pts_don = np.vstack(+                [p[k] for p, k in ((ca, don_idx[don_side == 0]), (cb, don_idx[don_side == 1])) if k.size]+            )+            tree = cKDTree(pts_don)+            kq = int(max(1, min(int(mean_k), don_idx.size)))+            _, sel = tree.query(pts_coord, k=kq)+            sel = np.asarray(sel, dtype=np.int64).reshape(len(pts_coord), kq)+            mean_records.append((pos[: len(sel)], sel, don_side, don_idx))+            n_mean_cells += int(len(sel))+            n_mean_k_sum += int(kq * len(sel))+            overlap_den += need+            continue         if pair == "nn" and ca is not None and cb is not None and don_idx.size and don_idx.size != need:             sel = np.arange(min(need, don_idx.size))         elif pair == "nn" and ca is not None and cb is not None and don_idx.size:@@ -294,6 +318,25 @@ def _decoupled_expr(stage_a, stage_b, ia, ib, tt: float, adj: float, rng: np.ran         expr[mA] = as_dense(stage_a.X, idx[mA]).astype(np.float32)     if mB.any():         expr[mB] = as_dense(stage_b.X, idx[mB]).astype(np.float32)+    for m_pos, sel2d, don_side, don_idx in mean_records:+        sides = don_side[sel2d]+        idxs = don_idx[sel2d]+        need_, kq_ = sel2d.shape+        acc = np.zeros((need_, n_genes), dtype=np.float64)+        allA = (sides == 0).all(axis=1)+        allB = (sides == 1).all(axis=1)+        rowsA = np.flatnonzero(allA)+        rowsB = np.flatnonzero(allB)+        if rowsA.size:+            acc[rowsA] = as_dense(stage_a.X, idxs[rowsA].ravel()).reshape(rowsA.size, kq_, n_genes).mean(axis=1)+        if rowsB.size:+            acc[rowsB] = as_dense(stage_b.X, idxs[rowsB].ravel()).reshape(rowsB.size, kq_, n_genes).mean(axis=1)+        rowsM = np.flatnonzero(~(allA | allB))+        for r in rowsM:+            va = as_dense(stage_a.X, idxs[r][sides[r] == 0])+            vb = as_dense(stage_b.X, idxs[r][sides[r] == 1])+            acc[r] = (va.sum(axis=0) + vb.sum(axis=0)) / kq_+        expr[m_pos] = acc.astype(np.float32)     np.clip(expr, 0.0, None, out=expr)     diag["expr_from_b"] = int(mB.sum())     diag["coord_from_b"] = int(len(ib))@@ -302,6 +345,8 @@ def _decoupled_expr(stage_a, stage_b, ia, ib, tt: float, adj: float, rng: np.ran     diag["donor_overlap_frac"] = float(overlap_num / max(overlap_den, 1))     diag["n_mix_total"] = int(n_mix_total)     diag["frac_donors_changed"] = float(n_mixed_changed / max(n_out, 1))+    diag["n_mean_cells"] = int(n_mean_cells)+    diag["mean_k_avg"] = float(n_mean_k_sum / max(n_mean_cells, 1))     return expr  @@ -360,6 +405,7 @@ def main() -> None:         pair = str(os.environ.get("VEC_PAIR", "nn"))         mix_r = float(os.environ.get("VEC_MIX_R", MIX_R))         mix_k = int(os.environ.get("VEC_MIX_K", MIX_K))+        mean_k = int(os.environ.get("VEC_MEAN_K", MEAN_K))         aligned_a, aligned_b, _ = align_pair(stage_a.coords, stage_b.coords, stage_a.labels, stage_b.labels, str(params.get("align", "procrustes")))         target_rms = log_interp(rms_radius(stage_a.coords), rms_radius(stage_b.coords), t, float(params.get("scale_damp", 1.0)))         ca = scale_to_rms(aligned_a, target_rms)@@ -367,10 +413,11 @@ def main() -> None:         rng_e = np.random.default_rng([int(args.seed), 20261003])         rng_mix = np.random.default_rng([int(args.seed), 31337, int(round(mix_r * 10000))])         expr = _decoupled_expr(stage_a, stage_b, holder["ia"], holder["ib"], t, adj, rng_e, diag, ca=ca, cb=cb, pair=pair,-                               mix_r=mix_r, rng_mix=rng_mix, mix_k=mix_k)+                               mix_r=mix_r, rng_mix=rng_mix, mix_k=mix_k, mean_k=mean_k)         diag["pair"] = pair         diag["mix_r"] = mix_r         diag["mix_k"] = mix_k+        diag["mean_k"] = mean_k      keep = {k: info.get(k) for k in ("t", "n", "rms_a", "rms_b", "out_rms", "n_shared_types", "z_dot", "z_flipped", "align")}     print(json.dumps({"bracket": [a["stage"], b["stage"]], **keep, **diag}, default=float), file=sys.stderr)

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

用到的知识库条目

编号标题出处
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
k024World-model evaluation dimensions for state-transition predictorsnotes/competition/07_biomedical_world_models.md

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

改了什么实现了 PLAN 的 K 近邻供体表达均值配对(MEAN_K 支路,含 MEAN_K=1 逐位=父12 的关闭对照),但 A 半扫描显示 MEAN_K=3/5/7 使 cell_state 从 56.5 崩到 30/23/21(型内 SD 收缩 -30.7%,过度平滑)、ls 也降,触发 PLAN 步骤4 放弃条款;实际提交回退为父14 配置(MEAN_K=0),输出与父14 逐位一致。
各组分数的变化cell_state:不变 +0.00(57.70=父14);被放弃的均值机制在 A 半曾使其崩至 20-30
expression_change:不变 +0.00(61.44=父14),提交即父14 输出
local_spatial:不变 +0.00(58.69=父14);均值机制在 A 半 ls 54.5<57.97,也不回收 ls
shape_scale:不变 +0.00(69.09=父14),坐标路未动
family_idT2EI-01
假设是否成立否
经验
  1. 在型内配对中把供体表达取 K 近邻算术均值(K=3/5/7)会收缩型内方差(SD -30.7%),cell_state 从 56.5 崩到 20-30、local_spatial 同降,K 越大崩得越狠——cell_state 对单细胞分布方差收缩极其敏感,任何确定性平滑类操作都应在查榜分前先测型内 SD 收缩率(>30% 即否决)。
  2. mmd 类指标可能因分布变窄而下降(均值路 mmd_u 0.041<父14 0.055)但榜分反而崩——分布宽度指标不能单独作为机制有效的证据,需配合逐组分数。
  3. 坐标路 T_DRAW_FRAC 在 0.35/0.55/0.6/0.65 全部 ≤ 0.5 的 61.14(A 半),确认 0.5 已是局部最优,该旋钮无头部空间,后续不必再扫。
  4. 带明确放弃条款+关闭对照(MEAN_K=1 逐位=父12、默认逐位=父14)的 PLAN 能让失败机制零成本回退,本节点榜分与父14 完全相同、未浪费提交,这一模式值得沿用。
mechanism_active否
下一步建议
  1. 针对 cell_state/local_spatial:试保方差的局部供体扰动——在父14 randK3 基础上改为距离加权随机抽供体(权重 ∝ exp(-d/σ),σ 取型内近邻距离中位数),或抽两个近邻后随机取其一,避免均值收缩方差;提交前先用型内 SD 收缩率 <10% 做护栏。
  2. 针对 expression_change:跳出配对规则族,改表达池本身——池构成插值时对共享型做轻度中间态化(如向 A/B 表达均值方向移动 α=0.1-0.2,逐细胞而非逐型),配对仍用父14 randK3 保方差。
  3. 任何候选先在 A 半 seed 0/1/2 做同 seed 配对差值(|均值差|>0.3 且三 seed 同号)再提交,本节点父14 增益(+0.26/+0.32/+0.01)在 B 半确实缩为 +0.00,说明单次 A 半查分不可靠。

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

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

分析员

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

工程师

角色工程师 alibaba-token-plan-cn/qwen3.8-max
调用次数1 次
轮数28
工具调用共 30 次:bash 16、edit 9、read 4、write 1
用时12 分
token 数输入 66,783 · 输出 9,307 · 思考 13,392
任务(第一行)按计划修改程序:K近邻供体均值替代随机置换,回收ls/cs
最后的回答(摘录)
**做了什么**:按 PLAN 实现 K 近邻供体表达均值配对(`MEAN_K`,替代父14 的随机供体),关闭对照 MEAN_K=1 逐位等于父12 验证通过;同时补测父建议 #2 的坐标路 T_DRAW_FRAC 扫描。

**查分结果**(9 次查询,A 半 seed 0):MEAN_K=3/5/7 榜分 53.70/51.54/50.65,cell_state 崩塌 56.5→30/23/21(型内 SD 收缩 −30.7%,过度平滑),ls 不升反降;T_DRAW_FRAC 0.35/0.55/0.6/0.65 全部 ≤ 父14 的 61.14。按 PLAN 步骤4 放弃,提交父14 配置(默认输出逐位=父14,vec-check ok,seed 确定)。

**下一步最值得试**:均值证明 cs 对方差收缩极敏感——反方向(在 nn 配对基础上做保方差的局部供体交换,或距离加权随机而非均匀随机)可能小幅回收 ls 而不伤 cs;但配对规则家族头部空间已基本榨干,更大的增益可能需要跳出配对规则(如表达池本身的中间态化)。
原始记录位置/home/spark-longxinyang/vec/runs/formal/20261003-004922-search-t2-embryo-interp-g24/nodes/17/engineer.jsonl 172 KB
/home/spark-longxinyang/vec/runs/formal/20261003-004922-search-t2-embryo-interp-g24/nodes/17/engineer.stderr

调研员

角色调研员 alibaba-token-plan-cn/qwen3.8-max
调用次数1 次
轮数1
工具调用共 0 次:—
用时1 分
token 数输入 13,117 · 输出 1,129 · 思考 1,493
任务(第一行)为节点 n17(改进,父节点 n14)写改进计划 PLAN.json
最后的回答(摘录)
{
  "name": "K近邻供体均值替代随机置换,回收ls/cs",
  "motivation": "父14(61.73)的最弱组为cell_state 57.70和local_spatial 58.69。ANALYSIS第1条建议:将MIX_K=3随机置换换成K近邻供体表达取均值,期望ls损失比随机更小(均值保持空间连续性)、ec增益更稳。父14的ls比父12降0.63,cs虽升但仍在最低组;随机选择的67%供体改变率引入的空间噪声是ls损失的直接来源。配对规则路的ec头部空间已近枯竭(+1.4中已回收约0.76),但ls仍有回收空间。",
  "approach": "步骤:\n1. 在父14代码基础上,将MIX_K随机抽取逻辑替换为均值逻辑:对每个坐标细胞,找同型池内对齐帧中K个最近供体,取其表达向量的算术均值作为该坐标细胞的表达(不再随机选一个)。新增参数MEAN_K(替代MIX_K的随机语义),初始扫描MEAN_K∈{3,5,7}。MIX_R保持1.0(全部坐标细胞走此路径)。\n2. 小样本快筛:seed 0,MEAN_K=3/5/7,vec-score查A半,记录四组分。重点看ls是否比父14的58.69回升、ec是否≥61。若MEAN_K=3的ls>59且ec>60.5,进入多seed验证。\n3. 多seed配对验证(ANALYSIS第3条):对最优MEAN_K,跑seed 0/1/2,每个seed同时跑MIX_R=0(=父12)和候选,计算配对差值。提交条件:|均值差|>0.3且三种子同号。\n4. 若MEAN_K=3/5/7全部ls无改善或ec降>1,则放弃,回退提交父14输出。\n单阶段退路:目标无括号时行为与父12完全一致(无池可配对,直接输出坐标路)。\n时间预算:实现~10min,扫描3配置×1.2s+多seed 3×2×1.2s,远低于30min限制。",
  "expected_groups": ["local_spatial", "cell_state"],
  "risks": "1. 均值过度平滑:若MEAN_K过大,型内所有细胞表达趋同于型均值,退化为常数位移,ec和cs同时下降。Engineer应检查输出表达的型内CV是否显著低于父14(若CV降幅>30%则过度平滑)。2. ec可能比父14略降:均值操作比随机选择更保守,ec增益可能减少0.3~0.5。若ec降>1且ls升<0.5则净负。3. 与父14差异在噪声内(<1分):需三种子配对差值确认方向,单次查分不可靠。",
  "family_id": "T2EI-01",
  "mechanism": "将型内配对从'K近邻中随机选一个供体'改为'K近邻供体表达取均值':确定性空间平滑替代随机置换,每个坐标细胞的表达由其空间邻域内同型供体的局部加权中心决定。",
  "vs_constant_shift": "均值是对每个坐标细胞独立计算的——不同位置的细胞有不同的K近邻集合,因此表达修改是空间异质的、逐细胞不同的。常数位移对整个型加同一向量;本机制中即使同型内相邻两个细胞,因各自K近邻不同,获得的表达也不同。验证方式:输出型内表达残差(x−μ_type)的标准差应>0且空间自相关显著。",
  "mechanism_evidence": "Engineer应记录:(1) 每细胞均值供体集合大小=MEAN_K(非退化为1);(2) 型内表达CV(对比父12的1-nn和父14的随机):预期父14>本节点>型均值(即本节点介于两者之间);(3) 逐型表达均值与父12逐位比较:应不完全相同(若相同则退化为型均值位移);(4) 四组分配对差值(同seed):预期ls正向、ec持平或微降、ss不变。",
  "mechanism_off_control": "MEAN_K=1:均值退化为最近邻单个供体表达,等价于父12的1-nn配对(nn pairing),代码路径应产生与父12逐位一致的输出(np.array_equal验证)。或设MIX_R=0:完全跳过均值路径,也退回父12。预期差别:MEAN_K=1时ls应比MEAN_K=3低(无平滑),ec应比MEAN_K=3略高(无稀释)。"
}
原始记录位置/home/spark-longxinyang/vec/runs/formal/20261003-004922-search-t2-embryo-interp-g24/nodes/17/researcher.jsonl 5 KB
/home/spark-longxinyang/vec/runs/formal/20261003-004922-search-t2-embryo-interp-g24/nodes/17/researcher.stderr

审查员

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