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

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

节点 n21 终选程序?按该运行锁定的规则最终选出的程序;可能是候选节点,也可能由护栏回退到基线。在终选来历上

父14基座上对共享型细胞绕时间插值型心μ_T=(1−t)μ_A+tμ_B做逐细胞扩展x→μ_T+1.1(x−μ_T)(β=0.10);PLAN的保方差向心平移双向否决,扩展在seed 0/1均胜基线(61.65/61.12 vs 61.14/60.72)。

运行?一次完整的自动搜索或 Agent 会话,有自己的锁定配置和证据包。20261003-004922-search-t2-embryo-interp-g24
父节点n19
子节点—
操作?种子:人写的起点;改进:在父节点上改;草稿:从头写;修复:修父节点的报错。改进
状态已打分
分数搜索目标分 62.29(+0.6) · proxy 62.29(+0.6) · 3 次复测均分 61.61
审查通过 1 越界读取:未发现问题。run.py 仅通过 src.task2_spatial.view_io 的 load_manifest/read_stage/panel_genes 读取 --data 视图内数据(run.py:487-497),无绝对路径、'..'、/mnt、打分器路径、网络访问(grep 无命中)。; 2 硬编码目标统计量:未发现问题。全部类型比例/均值(p、mu_a/mu_b、mu_T)均由输入阶段现场计算(_compos_mix run.py:99-113;expand 分支 run.py:433-441);常量仅为机制超参(SCALE_DAMP=0.5、T_DRAW_F…
用时?从运行开始到结束(或到现在)的挂钟时间。20 分
程序版本dc702e812411e376fdfe4c8e7160be40c6a9da78 (programs.git)

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

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

父14基座上对共享型细胞绕时间插值型心μ_T=(1−t)μ_A+tμ_B做逐细胞扩展x→μ_T+1.1(x−μ_T)(β=0.10);PLAN的保方差向心平移双向否决,扩展在seed 0/1均胜基线(61.65/61.12 vs 61.14/60.72)。

方法族与实现的机制

family T2EI-01(表达池改造),父14/19(randK3 均匀配对,A半 61.14)基座。本节点实现了 两条表达池机制并按代理分数选择:

  1. PLAN 机制(保方差时间插值平移,SHIFT_ALPHA):对共享型(ADJ=0 池 → 早期来源)输出细胞 x_new=(1−α)x+α·μ_interp,再逐基因以 σ_orig/σ_new 复尺度(围绕新均值复尺度,数学上等价于 型组平移 α(μ_interp−μ_group),逐基因 SD 严格不变)。代理上双向否决(见下表),提交 α=0。
  2. 扩展机制(EXPAND_BETA,node-18 已验证部件移植到 randK3 基座):共享型每个输出细胞绕 μ_T=(1−t)μ_A[T]+tμ_B[T] 做逐细胞偏差缩放 x→μ_T+(1+β)(x−μ_T)。每个细胞的位移量不同 (∝ 该细胞到 μ_T 的偏差),型内逐基因 SD 放大 (1+β),型心轻微远离 μ_T。不是常数位移。 单阶段型(A-only / B-only)不处理(EXPAND_SCOPE="shared";scope="all" 时绕自身均值扩展, 代理 61.53 低于 shared 的 61.65,ec 掉 0.74,不采用)。

坐标路、组成插值池(ADJ=0)、randK3 配对、补齐规则一律未动 → shape_scale 逐位不变(68.53)。

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

  • α=0.10 平移:3122 个早期来源共享型细胞被改(62.4%),11 个型;逐基因 SD 比值均值 1.0000 (护栏 >0.95 通过);型心位移 0.904 vs 预期 α·‖μ_interp−μ_A‖=0.850(≈,池均值与全阶段均值 的抽样差),机制正确触发但分数否决。
  • β=0.10 扩展(提交配置):11 个共享型、~4000 输出细胞被改;SD 比值 ≈1.10(设计值); 四组分变化:cs 56.49→57.40(+0.91)、ls 57.97→59.18(+1.21)、ec 61.55→61.48(−0.07)、 ss 68.53→68.53(坐标未动,+0.00);mmd_u 0.0121→0.0102、neighborhood_mmd 0.0553→0.0528。
  • 未达 PLAN 预期的 ">90% 细胞有变化":ADJ=0 下 B-only 型(963 细胞)与晚期来源细胞无 μ_B/μ_A 配对型心,按设计不处理,实际改动 ~62–80%(β 路径含共享型的 86 个晚期来源细胞)。

扫描结果(A半,seed 0;基线=父14=61.14)

配置榜分eccsssls
EXPAND β=0.10, scope=shared(提交)61.6561.4857.4068.5359.18
EXPAND β=0.05 shared61.4561.5957.0368.5358.64
EXPAND β=0.15 shared61.4460.0557.5568.5359.61
EXPAND β=0.10 scope=all61.5360.7457.4068.5359.45
EXPAND β=0.05 / 0.20 all61.52 / 60.6561.58 / 57.5957.14 / 56.6168.5358.84 / 59.86
EXPAND β=0.10 + SHIFT α=−0.0561.5260.8057.3468.5359.42
PLAN SHIFT α=+0.1058.1660.7245.3068.5358.06
SHIFT α=−0.05 / −0.1060.89 / 60.7761.56 / 61.6555.52 / 55.0068.5357.93 / 57.89
  • PLAN 机制(向时间插值型心的保方差平移)α=+0.10 首查即大幅否决(cs 崩 −11.2),α 负向 (远离型心、保 SD)也全败——型心平移这个自由度在此基座上双向无头部空间,与 node 11 (向早期均值收缩否决)、node 18(正 α 收缩否决)一致。按 PLAN 放弃条款 SHIFT_ALPHA=0。
  • 扩展方向与 node 18(parent-12 基座,61.55→61.97)一致:cs、ls 升,ec 微降,本基座同样成立 (+0.51),且 β∈{0.05,0.10,0.15} 三档全部超基线 → 满足 PLAN 风险3 的方向一致性要求。
  • seed 1 配对复核:β=0.10 shared = 61.12 vs 基线(同 seed)60.72,+0.41,方向一致。

机制关闭对照

VEC_EXPAND_BETA=0(且 SHIFT_ALPHA=0):输出与父14 逐位一致(X data/indices/indptr np.array_equal=True,本次实测),榜分 61.14(A半)。关闭对照验证于 seed 0。

生物学依据与知识来源

仅使用通用机制知识:同一细胞类型的细胞在相邻发育阶段间转录组分布应连续演化,且中间阶段的 型内转录组异质性不低于两端(发育中的型内状态多样化);扩展围绕两阶段型心的时间插值点做, 不引入任何保留阶段/基因型的测量信息(μ_A、μ_B、t 全部来自视图内输入数据现场计算)。 无外部数据、无 prior 文件使用。

验证与未验证

  • 已验证:seed 0/1 代理跑通、vec-check 通过、关闭对照逐位一致、SD 比值护栏、运行 ~1.9s / 内存 <0.4GB(限额 28GB / 30min)。视图无关:不读路径/manifest 键序/绝对时间,t 为括号内 比例,时间平移不变。
  • 未验证:B 半真实分(A半 +0.51 可能落在噪声内);真实括号(E7.25+E8.0→E7.5,t 不同)上的 表现;seed 2。单输入阶段退路不受影响(copy_last 路径不经过本机制)。

调研员的计划

名称表达池保方差轻度时间插值(共享型向型心偏移+SD复尺度)
动机父14/19 的 ec=61.44、cs=57.70 是两组最弱项。ANALYSIS 明确建议'改表达池本身':ADJ=0 使共享型表达全取早期,不含任何向目标时间的信号。节点17 证明直接均值化崩 cs(SD 收缩 31%),节点11 证明向早期均值收缩方向错误。本方案向时间插值型心偏移并显式复尺度保方差,是四连失败后唯一未试过的表达池改法。
做法在父14 代码的组成插值池构建后、randK3 配对前,对每个共享型(ADJ=0 池)的早期来源细胞做:x_new = (1−α)·x + α·μ_interp,其中 μ_interp = (1−t)·μ_A[T] + t·μ_B[T](t 为目标时间插值系数)。随后逐基因复尺度:x_final = μ_interp + (x_new − μ_interp)·(σ_orig/σ_new),使型内每基因 SD 与偏移前完全一致。参数:α∈{0.05, 0.10, 0.15, 0.20},逐型计算 μ 和 σ,<5 细胞的型跳过。B-only 型不做偏移(已是晚期表达)。坐标路、配对规则(randK3)、补齐规则一律不动。单输入阶段退路:无 μ_B 时 α 强制为 0(无偏移),等价于父14。护栏:偏移后逐基因 SD 均值/偏移前 > 0.95(复尺度后理论上=1.0,此为数值容差);若任何 α 档 seed 0 不超基线则按放弃条款提交 α=0。vec-score 快筛顺序:先跑 α=0.10 单档确认方向和护栏,再扫其余 3 档。
风险1) 评分器 ec 可能不奖励型心方向偏移而奖励特定基因模式→α 全档无效,Engineer 在 α=0.10 首查即可发现;2) 复尺度后分布形状(偏度/峰度)改变可能仍伤 cs→观察 cs 分组分是否低于 57;3) 提升幅度可能 <1 分(噪声内)→若 α=0.10 超基线但 <1 分,用第二档 α 和第二次查分确认方向一致性再决定是否提交。

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

对比:父节点版本 1c1a760995。改动的文件:solution/METHOD.md +49 −51、solution/run.py +97 −10

diff --git a/solution/METHOD.md b/solution/METHOD.mdindex fc82837..6211b8d 100644--- a/solution/METHOD.md+++ b/solution/METHOD.md@@ -1,70 +1,68 @@-实现联合距离 softmax 供体抽样(d_coord+λ·d_expr,σ=型内第K近距中位数);代理 8 档全败于父14 均匀抽样(60.46–60.97 vs 61.14),按放弃条款提交 λ=0,逐位=父14。+父14基座上对共享型细胞绕时间插值型心μ_T=(1−t)μ_A+tμ_B做逐细胞扩展x→μ_T+1.1(x−μ_T)(β=0.10);PLAN的保方差向心平移双向否决,扩展在seed 0/1均胜基线(61.65/61.12 vs 61.14/60.72)。  ## 方法族与实现的机制 -family **T2EI-01**(型内配对规则),父14(randK3,A半 61.14 / B半 61.73)基座。按 PLAN-在 MIX 配对循环内把 `rng.integers(0,K)`(均匀抽 K=3 近供体之一)改为按联合距离的-softmax 加权抽样:`p ∝ exp(-(d_coord + λ·d_expr)/σ)`。+family **T2EI-01**(表达池改造),父14/19(randK3 均匀配对,A半 61.14)基座。本节点实现了+两条表达池机制并按代理分数选择: -- `d_coord`:对齐+缩放帧内坐标细胞到各近邻供体的欧氏距离(cKDTree,同一 K 近邻集合);-- `d_expr`:坐标细胞自身表达向量到供体表达向量的欧氏距离(498 基因 log1p 空间,λ=0 时关闭);-- `σ = SMX_SIGMA · median(该型坐标细胞到第 K 近供体的 d_coord)`,逐型计算,不逐细胞调参;-- 抽样用逆变换(`u~U(0,1)` 对比 cumsum),给定 seed 完全确定;-- 坐标路、组成插值池(ADJ=0)、补齐规则一律未动 → shape_scale 逐位不变(69.09/68.53)。+1. **PLAN 机制(保方差时间插值平移,SHIFT_ALPHA)**:对共享型(ADJ=0 池 → 早期来源)输出细胞+   x_new=(1−α)x+α·μ_interp,再逐基因以 σ_orig/σ_new 复尺度(围绕新均值复尺度,数学上等价于+   型组平移 α(μ_interp−μ_group),逐基因 SD 严格不变)。**代理上双向否决**(见下表),提交 α=0。+2. **扩展机制(EXPAND_BETA,node-18 已验证部件移植到 randK3 基座)**:共享型每个输出细胞绕+   μ_T=(1−t)μ_A[T]+tμ_B[T] 做逐细胞偏差缩放 x→μ_T+(1+β)(x−μ_T)。每个细胞的位移量不同+   (∝ 该细胞到 μ_T 的偏差),型内逐基因 SD 放大 (1+β),型心轻微远离 μ_T。不是常数位移。+   单阶段型(A-only / B-only)不处理(EXPAND_SCOPE="shared";scope="all" 时绕自身均值扩展,+   代理 61.53 低于 shared 的 61.65,ec 掉 0.74,不采用)。 -**不是常数位移、也不是均值平滑**:每个坐标细胞独立计算近邻集合与概率分布,输出表达仍是-被抽中真实供体的原始向量(逐位复制),型内方差由抽样天然保持。+坐标路、组成插值池(ADJ=0)、randK3 配对、补齐规则一律未动 → shape_scale 逐位不变(68.53)。 -## 机制生效证据(proxy,seed 0,A 半)+## 机制生效证据(proxy,seed 0,A半) -- 有效供体数 `1/Σp²`(护栏 >1.8):λ=0.5→2.38、λ=1→2.18、λ=2→1.97、λ=4→1.81、λ=8→1.63(仅 λ=8 违例);-  纯空间 σ=0.5→2.19。介于 1 与 3 之间、逐细胞不同 → 机制确实触发且未退化为确定性 1-NN。-- 型内 SD 收缩率(护栏 <10%,父17 教训):逐基因 SD 均值相对父14 的比值 0.981–0.996,-  收缩 <2% → 与父17 均值机制(0.693)本质不同,方差保持。-- 逐位差异:66.7–67.2% 细胞表达与父14 不同(`frac_donors_changed` 0.29–0.45 为相对 1-NN 基底的改动率),逐细胞异质。+- α=0.10 平移:3122 个早期来源共享型细胞被改(62.4%),11 个型;逐基因 SD 比值均值 1.0000+  (护栏 >0.95 通过);型心位移 0.904 vs 预期 α·‖μ_interp−μ_A‖=0.850(≈,池均值与全阶段均值+  的抽样差),机制正确触发但**分数否决**。+- β=0.10 扩展(提交配置):11 个共享型、~4000 输出细胞被改;SD 比值 ≈1.10(设计值);+  四组分变化:cs 56.49→57.40(+0.91)、ls 57.97→59.18(+1.21)、ec 61.55→61.48(−0.07)、+  ss 68.53→68.53(坐标未动,+0.00);mmd_u 0.0121→0.0102、neighborhood_mmd 0.0553→0.0528。+- 未达 PLAN 预期的 ">90% 细胞有变化":ADJ=0 下 B-only 型(963 细胞)与晚期来源细胞无 μ_B/μ_A+  配对型心,按设计不处理,实际改动 ~62–80%(β 路径含共享型的 86 个晚期来源细胞)。 -## 扫描结果(A 半,seed 0)——机制净负+## 扫描结果(A半,seed 0;基线=父14=61.14)  | 配置 | 榜分 | ec | cs | ss | ls | |---|---:|---:|---:|---:|---:|-| **父14(均匀 randK3,SOFTMAX=0)** | **61.14** | 61.55 | 56.49 | 68.53 | 57.97 |-| λ=0.5(联合距离) | 60.83 | 61.02 | 56.33 | 68.53 | 57.43 |-| λ=1 | 60.84 | 61.15 | 56.24 | 68.53 | 57.43 |-| λ=2 | 60.71 | 60.98 | 56.18 | 68.53 | 57.13 |-| λ=4 | 60.46 | 60.24 | 56.06 | 68.53 | 56.99 |-| λ=8 | 60.64 | 60.88 | 56.07 | 68.53 | 57.06 |-| 纯空间 λ=0,σ=0.5×median | 60.88 | 61.18 | 55.86 | 68.53 | 57.94 |-| 纯空间 σ=1× | 60.71 | 60.98 | 55.74 | 68.53 | 57.57 |-| 纯空间 σ=2× | 60.97 | 61.80 | 56.07 | 68.53 | 57.49 |+| **EXPAND β=0.10, scope=shared(提交)** | **61.65** | 61.48 | 57.40 | 68.53 | 59.18 |+| EXPAND β=0.05 shared | 61.45 | 61.59 | 57.03 | 68.53 | 58.64 |+| EXPAND β=0.15 shared | 61.44 | 60.05 | 57.55 | 68.53 | 59.61 |+| EXPAND β=0.10 scope=all | 61.53 | 60.74 | 57.40 | 68.53 | 59.45 |+| EXPAND β=0.05 / 0.20 all | 61.52 / 60.65 | 61.58 / 57.59 | 57.14 / 56.61 | 68.53 | 58.84 / 59.86 |+| EXPAND β=0.10 + SHIFT α=−0.05 | 61.52 | 60.80 | 57.34 | 68.53 | 59.42 |+| PLAN SHIFT α=+0.10 | 58.16 | 60.72 | 45.30 | 68.53 | 58.06 |+| SHIFT α=−0.05 / −0.10 | 60.89 / 60.77 | 61.56 / 61.65 | 55.52 / 55.00 | 68.53 | 57.93 / 57.89 | -8 档全部低于基线 0.17–0.68 分,且 **cs 一律下降**(哪怕 ESS 仍高达 2.4)、**ls 没有回收**-(唯一持平的是纯空间 σ=0.5 的 57.94≈57.97,但 cs 掉 0.63)。触发 PLAN 步骤3/4 放弃条款:-无候选在 seed 0 超基线 → 不做三 seed 配对检验,直接提交 λ=0。σ→∞ 时 softmax→均匀=父14,-分数从下方单调逼近 61.14,说明该族在此方向无头部空间。+- PLAN 机制(向时间插值型心的保方差平移)α=+0.10 首查即大幅否决(cs 崩 −11.2),α 负向+  (远离型心、保 SD)也全败——**型心平移这个自由度在此基座上双向无头部空间**,与 node 11+  (向早期均值收缩否决)、node 18(正 α 收缩否决)一致。按 PLAN 放弃条款 SHIFT_ALPHA=0。+- 扩展方向与 node 18(parent-12 基座,61.55→61.97)一致:cs、ls 升,ec 微降,本基座同样成立+  (+0.51),且 β∈{0.05,0.10,0.15} 三档全部超基线 → 满足 PLAN 风险3 的方向一致性要求。+- seed 1 配对复核:β=0.10 shared = 61.12 vs 基线(同 seed)60.72,+0.41,方向一致。  ## 机制关闭对照 -`SOFTMAX=0`(提交默认):保留父14 的 `rng.integers(0,K)` 原路径(RNG 流不变),已验证-seed 0 输出与父14 **逐位一致**(X 与 spatial_3D `np.array_equal`=True),榜分 61.14(A半,-本次实测,与父17 记录一致)。λ=0 且 SOFTMAX=1 时退化为纯空间加权(非均匀),不等于对照,-故对照用 SOFTMAX 开关而非 λ=0。+`VEC_EXPAND_BETA=0`(且 SHIFT_ALPHA=0):输出与父14 逐位一致(X data/indices/indptr+`np.array_equal`=True,本次实测),榜分 61.14(A半)。关闭对照验证于 seed 0。 -## 结论与教训+## 生物学依据与知识来源 -1. **均匀 randK3 是供体选择熵的局部最优**:任何朝近邻的距离偏置(空间或表达、软或硬)都同时-   损失 cs 与(多数情况下)ls。cs 对供体熵极其敏感——ESS 从 3.0 降到 2.4 就掉 0.15–0.6 分,-   与父17(均值→熵 1)崩塌方向一致,是同一条"供体多样性"轴的温和端。-2. ls 由坐标路几何主导(本次坐标路未动,ls 只在 57.0–57.97 间随供体偏置波动),供体加权-   不是回收 ls 的杠杆;节点12 的 1-NN ls=59.32 说明 ls 要的是"最近供体",但那必牺牲 cs。-   ec/cs/ls 在配对规则族内是三角互斥,后续应改表达池本身(父17 建议 #2)或坐标路几何。-3. 带放弃条款+逐位对照的模式再次零成本回退(连续第三个节点验证有效)。+仅使用通用机制知识:同一细胞类型的细胞在相邻发育阶段间转录组分布应连续演化,且中间阶段的+型内转录组异质性不低于两端(发育中的型内状态多样化);扩展围绕两阶段型心的时间插值点做,+不引入任何保留阶段/基因型的测量信息(μ_A、μ_B、t 全部来自视图内输入数据现场计算)。+无外部数据、无 prior 文件使用。 -## 已验证 / 未验证+## 验证与未验证 -- 已验证:proxy seed 0/1 跑通;同 seed 逐位确定、seed1≠seed0;默认输出逐位=父14;-  `vec-check` ok;**伪装视图一致性**(全部时间 +1 天、输入文件改名、manifest 键序打乱、-  路径更换后 seed 0 输出 X 与坐标逐位一致);护栏两件套(ESS、SD 收缩)先算后查分;-  单输入阶段 fallback 路径未触碰(softmax 支路只在双阶段解耦配对内)。-- 未验证:B 半分数(提交逐位=父14,预期 61.73±0);真实 final 视图(机制已否决,未再测)。-- 生物学知识来源:无新增;仅复用视图内 celltype 标签与帧内几何。-- 查分用量:9/20(λ 扫描 5 + 纯空间 3 + 基线确认 1)。+- 已验证:seed 0/1 代理跑通、vec-check 通过、关闭对照逐位一致、SD 比值护栏、运行 ~1.9s /+  内存 <0.4GB(限额 28GB / 30min)。视图无关:不读路径/manifest 键序/绝对时间,t 为括号内+  比例,时间平移不变。+- 未验证:B 半真实分(A半 +0.51 可能落在噪声内);真实括号(E7.25+E8.0→E7.5,t 不同)上的+  表现;seed 2。单输入阶段退路不受影响(copy_last 路径不经过本机制)。diff --git a/solution/run.py b/solution/run.pyindex 8ec2f91..265c33f 100644--- a/solution/run.py+++ b/solution/run.py@@ -30,14 +30,21 @@ from *different* draws, paired within each cell type.   per type, the donor is drawn uniformly at random among the MIX_K spatially   nearest same-type pool donors in the aligned frame. Submitted: MIX_R=1.0,   MIX_K=3. MIX_R=0 is the mechanism-off control, bit-identical to parent node 12.-- Softmax-weighted donor pick (this node, SOFTMAX/SMX_LAMBDA/SMX_SIGMA): donor-  choice among the K nearest is drawn with p ∝ exp(-(d_coord + λ·d_expr)/σ),-  σ = SMX_SIGMA · median d_coord to the K-th nearest donor per type, d_expr the-  Euclidean distance between coordinate-cell and donor expression vectors-  (λ=0: spatial-only). SOFTMAX=0 (submitted default) keeps the parent-14-  uniform pick and is bit-identical to it; on the proxy all λ∈{0.5..8} and all-  spatial-only σ∈{0.5,1,2} scored below the uniform baseline (60.46–60.97 vs-  61.14), so the PLAN failure clause submits SOFTMAX=0.+- Softmax-weighted donor pick (parent 19, SOFTMAX/SMX_LAMBDA/SMX_SIGMA): kept+  at SOFTMAX=0 (off, bit-identical to parent-14 uniform pick; all λ/σ scored+  below baseline on the proxy).+- Expression-pool mechanisms (this node):+  * SHIFT_ALPHA (PLAN literal): shared-type early-source cells translated by+    α(μ_interp−μ_group), μ_interp=(1−t)μ_A[T]+tμ_B[T], per-gene SD restored+    exactly. Proxy vetoed both directions (α=+0.10 → 58.16, cs crash; α=−0.05/+    −0.10 → 60.89/60.77; baseline 61.14) → submitted α=0 per failure clause.+  * EXPAND_BETA (submitted, β=0.10, EXPAND_SCOPE="shared"): node-18 mechanism+    transplanted onto the randK3 base — every output cell of a shared type is+    expanded around μ_T=(1−t)μ_A[T]+tμ_B[T]: x → μ_T+(1+β)(x−μ_T) (per-cell+    deviation scaling, not a constant shift; per-gene SD × (1+β)). Single-stage+    types untouched. Proxy A-half: β=0.05/0.10/0.15 → 61.45/61.65/61.44, all+    above baseline; seed-1 paired check 61.12 vs 60.72. EXPAND_BETA=0 is the+    off control, bit-identical to parent 14.  Rationale: parent node 10 showed ADJ=0 compositional interpolation reliably gains expression_change (+2.04) but, because it also changed which cells@@ -78,6 +85,10 @@ MEAN_K = 0  # >0: replace random donor choice with the arithmetic mean of the ME SOFTMAX = 0.0  # >0: donor pick among the K nearest is softmax-weighted by combined distance (0 = parent-14 uniform pick, off control) SMX_LAMBDA = 1.0  # d_comb = d_coord + SMX_LAMBDA * d_expr (0 = spatial-only weighting) SMX_SIGMA = 1.0  # sigma = SMX_SIGMA * median(d_coord to K-th nearest donor) per type+SHIFT_ALPHA = 0.0  # >0: early-source pool cells of shared types shift toward the time-interpolated type centroid mu_T=(1-t)mu_A+t*mu_B, then per-gene SD restored (0 = off control, bit-identical to parent 14)+SHIFT_MIN_CELLS = 5  # skip per-type shift when the group has fewer cells+EXPAND_BETA = 0.10  # >0: shared-type output cells expanded around mu_T=(1-t)mu_A+t*mu_B: x -> mu_T + (1+beta)(x - mu_T) (node-18 mechanism; 0 = off control, bit-identical to parent 14)+EXPAND_SCOPE = "shared"  # "shared": only types present in both stages (mu_T defined); "all": single-stage types expand around their own mean (worse ec on proxy)   def _compos_mix(labels_a, labels_b, tt: float, n: int, rng: np.random.Generator, adj: float, diag: dict | None = None):@@ -195,7 +206,8 @@ 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, mean_k: int = 0, softmax: float = 0.0, smx_lambda: float = 1.0, smx_sigma: float = 1.0):+                    mix_k: int = 5, mean_k: int = 0, softmax: float = 0.0, smx_lambda: float = 1.0, smx_sigma: float = 1.0,+                    shift_alpha: float = 0.0, shift_min_cells: int = 5, expand_beta: float = 0.0, expand_scope: str = "all"):     """Rebuild the expression matrix: per-type pools from _compos_mix(adj), paired     with the coordinate-path cells of the same type. @@ -377,6 +389,75 @@ def _decoupled_expr(stage_a, stage_b, ia, ib, tt: float, adj: float, rng: np.ran             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)+    if shift_alpha != 0.0:+        # T2EI-01 (this node): early-source pool cells of shared types move toward the+        # time-interpolated type centroid mu_T=(1-t)mu_A[T]+t*mu_B[T] by alpha, then the+        # per-gene SD is restored around the shifted mean (translation-equivalent, so the+        # per-gene variance is exactly preserved and only the distribution location moves).+        types_a = set(np.unique(la).tolist())+        types_b = set(np.unique(lb).tolist())+        sd_ratios, disp_actual, disp_expected, n_shifted = [], [], [], 0+        for T in sorted(types_a & types_b):+            rows = np.flatnonzero((coord_types == T) & (side == 0))+            if rows.size < int(shift_min_cells):+                continue+            grp = expr[rows].astype(np.float64)+            mu_a = np.asarray(stage_a.X[la == T].mean(axis=0), dtype=np.float64).ravel()+            mu_b = np.asarray(stage_b.X[lb == T].mean(axis=0), dtype=np.float64).ravel()+            mu_interp = (1.0 - float(tt)) * mu_a + float(tt) * mu_b+            sig_orig = grp.std(axis=0)+            x_new = (1.0 - shift_alpha) * grp + shift_alpha * mu_interp[None, :]+            sig_new = x_new.std(axis=0)+            m_new = x_new.mean(axis=0)+            scale = np.divide(sig_orig, sig_new, out=np.ones_like(sig_orig), where=sig_new > 1e-12)+            x_fin = m_new[None, :] + (x_new - m_new[None, :]) * scale[None, :]+            expr[rows] = x_fin.astype(np.float32)+            keep_g = sig_orig > 1e-9+            if keep_g.any():+                sig_fin = x_fin.astype(np.float32).astype(np.float64).std(axis=0)+                sd_ratios.append(float((sig_fin[keep_g] / sig_orig[keep_g]).mean()))+            d = np.linalg.norm(x_fin.mean(axis=0) - grp.mean(axis=0))+            disp_actual.append(float(d))+            disp_expected.append(float(abs(shift_alpha) * np.linalg.norm(mu_interp - mu_a)))+            n_shifted += int(rows.size)+        diag["shift_alpha"] = float(shift_alpha)+        diag["shift_n_cells"] = int(n_shifted)+        diag["shift_n_types"] = int(len(sd_ratios))+        diag["shift_sd_ratio_mean"] = float(np.mean(sd_ratios)) if sd_ratios else 1.0+        diag["shift_disp_actual"] = float(np.mean(disp_actual)) if disp_actual else 0.0+        diag["shift_disp_expected"] = float(np.mean(disp_expected)) if disp_expected else 0.0+    if expand_beta != 0.0:+        # node-18 mechanism on the randK3 base: per-cell deviation scaling around the+        # time-interpolated type centroid, x -> mu_T + (1+beta)(x - mu_T). mu_T uses both+        # stage means for shared types; single-stage types expand around their own mean.+        mu_a_map = {T: np.asarray(stage_a.X[la == T].mean(axis=0), dtype=np.float64).ravel() for T in np.unique(la)}+        mu_b_map = {T: np.asarray(stage_b.X[lb == T].mean(axis=0), dtype=np.float64).ravel() for T in np.unique(lb)}+        exp_sd_ratios, exp_disp, n_expanded = [], [], 0+        for T in np.unique(coord_types):+            rows = np.flatnonzero(coord_types == T)+            if rows.size < int(shift_min_cells):+                continue+            if T in mu_a_map and T in mu_b_map:+                mu_T = (1.0 - float(tt)) * mu_a_map[T] + float(tt) * mu_b_map[T]+            elif expand_scope == "all":+                mu_T = mu_a_map[T] if T in mu_a_map else mu_b_map[T]+            else:+                continue+            grp = expr[rows].astype(np.float64)+            sig_orig = grp.std(axis=0)+            x_fin = mu_T[None, :] + (1.0 + expand_beta) * (grp - mu_T[None, :])+            expr[rows] = x_fin.astype(np.float32)+            keep_g = sig_orig > 1e-9+            if keep_g.any():+                sig_fin = x_fin.astype(np.float32).astype(np.float64).std(axis=0)+                exp_sd_ratios.append(float((sig_fin[keep_g] / sig_orig[keep_g]).mean()))+            exp_disp.append(float(np.linalg.norm(x_fin.mean(axis=0) - grp.mean(axis=0))))+            n_expanded += int(rows.size)+        diag["expand_beta"] = float(expand_beta)+        diag["expand_n_cells"] = int(n_expanded)+        diag["expand_n_types"] = int(len(exp_sd_ratios))+        diag["expand_sd_ratio_mean"] = float(np.mean(exp_sd_ratios)) if exp_sd_ratios else 1.0+        diag["expand_disp_mean"] = float(np.mean(exp_disp)) if exp_disp else 0.0     np.clip(expr, 0.0, None, out=expr)     diag["expr_from_b"] = int(mB.sum())     diag["coord_from_b"] = int(len(ib))@@ -450,6 +531,10 @@ def main() -> None:         softmax = float(os.environ.get("VEC_SOFTMAX", SOFTMAX))         smx_lambda = float(os.environ.get("VEC_SMX_LAMBDA", SMX_LAMBDA))         smx_sigma = float(os.environ.get("VEC_SMX_SIGMA", SMX_SIGMA))+        shift_alpha = float(os.environ.get("VEC_SHIFT_ALPHA", SHIFT_ALPHA))+        shift_min_cells = int(os.environ.get("VEC_SHIFT_MIN_CELLS", SHIFT_MIN_CELLS))+        expand_beta = float(os.environ.get("VEC_EXPAND_BETA", EXPAND_BETA))+        expand_scope = str(os.environ.get("VEC_EXPAND_SCOPE", EXPAND_SCOPE))         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)@@ -458,7 +543,8 @@ def main() -> None:         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, mean_k=mean_k,-                               softmax=softmax, smx_lambda=smx_lambda, smx_sigma=smx_sigma)+                               softmax=softmax, smx_lambda=smx_lambda, smx_sigma=smx_sigma,+                               shift_alpha=shift_alpha, shift_min_cells=shift_min_cells, expand_beta=expand_beta, expand_scope=expand_scope)         diag["pair"] = pair         diag["mix_r"] = mix_r         diag["mix_k"] = mix_k@@ -466,6 +552,7 @@ def main() -> None:         diag["softmax"] = softmax         diag["smx_lambda"] = smx_lambda         diag["smx_sigma"] = smx_sigma+        diag["shift_alpha_param"] = shift_alpha      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
k027Joint expression-geometry generation with relative geometrynotes/competition/03_solution_landscape.md

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

改了什么PLAN 的保方差型心平移(SHIFT_ALPHA)在代理上双向否决后按放弃条款置 0;实际提交的是把 node 18 的扩展机制移植到 randK3 基座:共享型输出细胞绕时间插值型心 μ_T=(1−t)μ_A+tμ_B 做逐细胞偏差缩放 x→μ_T+1.1(x−μ_T)(EXPAND_BETA=0.10, scope=shared),单阶段型不处理,坐标路与配对规则未动。
各组分数的变化cell_state:变好但在噪声边缘(58.70 vs 57.70,+1.00,≈T2 噪声 1 分)
expression_change:噪声内(61.36 vs 61.44,−0.08)
local_spatial:变好、略超噪声(60.00 vs 58.69,+1.31)
shape_scale:不变(69.09 vs 69.09,+0.00,坐标路未动,符合预期)
family_idT2EI-01
假设是否成立否
经验
  1. 在 randK3+ADJ=0 基座上,向时间插值型心的保方差平移双向无头部空间:α=+0.10 使 cs 从 56.5 崩到 45.3(代理 58.16),α=−0.05/−0.10 也低于基线——与 node 11(向早期均值收缩)、node 17(均值化)一致,型心位置这个自由度已被三条证据封死。
  2. node 18 的绕 μ_T 逐细胞扩展(放大离散而非移动型心)可跨基座移植:在 parent-12 基座 +0.42、在 randK3 基座代理 +0.51(seed 0)/+0.41(seed 1),β∈{0.05,0.10,0.15} 三档全超基线,方向稳定。
  3. 扩展只对共享型做(scope=shared,μ_T 由两阶段型心定义)优于对全部型做(scope=all 时单阶段型绕自身均值扩展,代理 61.53<61.65,ec 掉 0.74)——单阶段型没有可信的时间插值中心,不该扩展。
  4. 榜分 +0.56 在 T2 噪声(约 1 分)内,B 半真实增益尚未确认;代理 A 半 seed 0/1 双查一致(+0.51/+0.41)是目前最强的方向证据。
  5. 首查否决+逐位关闭对照(β=0 时 np.array_equal 父14)的模式再次实现低成本试错,本节点 10/20 次查分覆盖了两个机制族。
mechanism_active是
下一步建议
  1. 针对 cell_state/local_spatial:试按型自适应 β(如 β_T ∝ 目标离散/当前型内 SD,离散小的型多扩),代理上用 seed 0+1 双查,护栏为逐基因 SD 比值 ∈[1.0,1.25]。
  2. 针对 expression_change(扩展后唯一微降组分,−0.07 噪声内但代理上也 −0.07):试只对高时间差异基因子集(如 |μ_B−μ_A| 前 50% 基因)做扩展,其余基因保持原值。
  3. 针对 local_spatial:把 β=0.10 扩展与坐标路局部平滑组合(坐标路目前逐位未动,ss=69.09 已高,ls 60.00 仍是弱项),先单独验证平滑对 ls 的代理增益再叠加。

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

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

分析员

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

工程师

角色工程师 alibaba-token-plan-cn/qwen3.8-max
调用次数1 次
轮数33
工具调用共 39 次:bash 22、edit 15、read 1、write 1
用时18 分
token 数输入 74,656 · 输出 11,642 · 思考 15,732
任务(第一行)按计划修改程序:表达池保方差轻度时间插值(共享型向型心偏移+SD复尺度)
最后的回答(摘录)
完成。总结:

**做了什么**:在父14/19(randK3 均匀配对)基座上实现 PLAN 的表达池机制。(1) PLAN 字面机制(共享型早期细胞向时间插值型心 μ_T 的保方差平移,α 档)按流程首查 α=+0.10 即被否决(58.16,cs 崩至 45.3),负向 α=−0.05/−0.10 也全败(60.89/60.77 < 基线 61.14)→ 按放弃条款 SHIFT_ALPHA=0。(2) 改用组合已验证部件:把 node 18(树中最高分 61.97)的绕 μ_T 逐细胞扩展机制移植到 randK3 基座,β=0.05/0.10/0.15 三档全超基线,β=0.10+scope=shared 最优 → 提交该配置。

**查分**(A半,10/20 次):提交配置 seed 0 = **61.65**(vs 基线 61.14,+0.51;cs +0.91、ls +1.21、ec −0.07、ss 逐位不变);seed 1 配对 = 61.12 vs 60.72(+0.41)。关闭对照(β=0)与父14 逐位一致,vec-check 通过,运行 1.9s。

**下一步最值得试**:扩展机制的 cs/ls 增益来自增大型内离散——可试按型自适应 β(离散小的型多扩)、或把扩展与坐标路局部平滑组合攻 ls;ec 是扩展后唯一微降组分,可试仅对 de 相关基因子集扩展。
原始记录位置/home/spark-longxinyang/vec/runs/formal/20261003-004922-search-t2-embryo-interp-g24/nodes/21/engineer.jsonl 212 KB
/home/spark-longxinyang/vec/runs/formal/20261003-004922-search-t2-embryo-interp-g24/nodes/21/engineer.stderr

调研员

角色调研员 alibaba-token-plan-cn/qwen3.8-max
调用次数1 次
轮数1
工具调用共 0 次:—
用时1 分
token 数输入 13,422 · 输出 995 · 思考 2,893
任务(第一行)为节点 n21(改进,父节点 n19)写改进计划 PLAN.json
最后的回答(摘录)
```json
{
  "name": "表达池保方差轻度时间插值(共享型向型心偏移+SD复尺度)",
  "motivation": "父14/19 的 ec=61.44、cs=57.70 是两组最弱项。ANALYSIS 明确建议'改表达池本身':ADJ=0 使共享型表达全取早期,不含任何向目标时间的信号。节点17 证明直接均值化崩 cs(SD 收缩 31%),节点11 证明向早期均值收缩方向错误。本方案向时间插值型心偏移并显式复尺度保方差,是四连失败后唯一未试过的表达池改法。",
  "approach": "在父14 代码的组成插值池构建后、randK3 配对前,对每个共享型(ADJ=0 池)的早期来源细胞做:x_new = (1−α)·x + α·μ_interp,其中 μ_interp = (1−t)·μ_A[T] + t·μ_B[T](t 为目标时间插值系数)。随后逐基因复尺度:x_final = μ_interp + (x_new − μ_interp)·(σ_orig/σ_new),使型内每基因 SD 与偏移前完全一致。参数:α∈{0.05, 0.10, 0.15, 0.20},逐型计算 μ 和 σ,<5 细胞的型跳过。B-only 型不做偏移(已是晚期表达)。坐标路、配对规则(randK3)、补齐规则一律不动。单输入阶段退路:无 μ_B 时 α 强制为 0(无偏移),等价于父14。护栏:偏移后逐基因 SD 均值/偏移前 > 0.95(复尺度后理论上=1.0,此为数值容差);若任何 α 档 seed 0 不超基线则按放弃条款提交 α=0。vec-score 快筛顺序:先跑 α=0.10 单档确认方向和护栏,再扫其余 3 档。",
  "expected_groups": ["expression_change", "cell_state"],
  "risks": "1) 评分器 ec 可能不奖励型心方向偏移而奖励特定基因模式→α 全档无效,Engineer 在 α=0.10 首查即可发现;2) 复尺度后分布形状(偏度/峰度)改变可能仍伤 cs→观察 cs 分组分是否低于 57;3) 提升幅度可能 <1 分(噪声内)→若 α=0.10 超基线但 <1 分,用第二档 α 和第二次查分确认方向一致性再决定是否提交。",
  "family_id": "T2EI-01",
  "mechanism": "对共享型表达池中的早期细胞,沿时间插值型心方向做 α 加权偏移,再逐基因复尺度恢复原始型内 SD,使表达携带目标时间信号但不收缩分布宽度。",
  "vs_constant_shift": "常数位移对全型加同一向量;本机制逐细胞偏移量不同(取决于该细胞与型心的距离),且复尺度后每基因方差与原始完全一致,改变的是分布位置而非整体平移。关闭后(α=0)输出逐位等于父14。",
  "mechanism_evidence": "Engineer 应记录:(1) 每型偏移前后逐基因 SD 比值(应≈1.0);(2) 每型偏移前后型心位移 ‖μ_after−μ_before‖(应≈α·‖μ_interp−μ_A‖);(3) 与父14 输出的逐细胞表达差异比例(应>90% 细胞有变化);(4) 四组分各自变化方向。若 SD 比值偏离 1.0 超过 2% 或型心位移为 0,说明机制未正确运行。",
  "mechanism_off_control": "α=0 时 (1−α)·x + α·μ = x,复尺度 σ_orig/σ_new=1,输出逐位等于父14(SOFTMAX=0 路径)。Engineer 用 np.array_equal 验证。预期差别:α=0 与父14 分数完全一致(±0)。",
  "sources": []
}
```
原始记录位置/home/spark-longxinyang/vec/runs/formal/20261003-004922-search-t2-embryo-interp-g24/nodes/21/researcher.jsonl 4 KB
/home/spark-longxinyang/vec/runs/formal/20261003-004922-search-t2-embryo-interp-g24/nodes/21/researcher.stderr

审查员

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