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

总览 · ← 返回运行 20261002-135403-search-t1-x3-era-mechcheck

节点 n17

在父节点 Top-K EB 位移上新增每细胞进度调制:把细胞 Top-K 中心化表达投影到归一化位移方向,f=clip(1−γ·(proj−0.5),0.5,1.5),γ=−1(领先细胞位移放大、落后细胞缩小);γ∈[−2,0.5] 扫描后 3 种子配对裁决保留 γ=−1(均值 +0.11,方向一致但幅度在噪声内)。

运行?一次完整的自动搜索或 Agent 会话,有自己的锁定配置和证据包。20261002-135403-search-t1-x3-era-mechcheck
父节点n14
子节点n20
操作?种子:人写的起点;改进:在父节点上改;草稿:从头写;修复:修父节点的报错。改进
状态已打分
分数搜索目标分 49.69(+0.1) · X3 49.69(+0.1) · 3 次复测均分 48.77
审查通过 1 越界读取:未发现问题。run.py 仅通过 src.task1_temporal.view_io 的 load_manifest/read_stage/panel_genes 等辅助函数读取 --data 目录下的视图内文件,无绝对路径、..、/mnt、prior/、external/、打分器路径访问,无联网代码。; 2 硬编码目标统计量:未发现问题。run.py 中仅有 ALPHA=0.5、TOPK=500、GAMMA=-1、MIN_OVERLAP=50 等算法超参数(run.py:37-42),所有 delta、方差、类型比例(p_last/p_prev,run.py:121-126…
用时?从运行开始到结束(或到现在)的挂钟时间。11 分
程序版本474fac5148eb2522580ef89f4bf9acf748add676 (programs.git)

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

来自 programs.git 474fac5148:solution/METHOD.md

在父节点 Top-K EB 位移上新增每细胞进度调制:把细胞 Top-K 中心化表达投影到归一化位移方向,f=clip(1−γ·(proj−0.5),0.5,1.5),γ=−1(领先细胞位移放大、落后细胞缩小);γ∈[−2,0.5] 扫描后 3 种子配对裁决保留 γ=−1(均值 +0.11,方向一致但幅度在噪声内)。

METHOD

Top-K 经验贝叶斯收缩伪批量位移(同父节点 5/8/11/14)+ 每细胞进度调制位移幅度(本节点新增,PLAN 的结构性改动)。

方法

1–4、6–7 与父节点一致:读最后两个输入阶段;每型伪批量差 delta,EB 收缩 s=δ²/(δ²+se²),d=α·scale·s·delta(α=0.5);Top-K=500 硬筛(仅双阶段覆盖基因);比例=末阶段原比例(COMP_ALPHA=0),类型内均匀无放回抽样(含池上限加固);位移只加到 CSR 非零元素、截 ≥0;单输入退路 copy_last。

  1. 新增:对每型的每个输出细胞 i,取其 Top-K 位置上非零且 ≥MIN_OVERLAP=50 个基因,中心化(减该型末阶段均值)后投影到 d̂=d/‖d‖ 得 proj_i;对有效细胞按 5/95 分位截尾 min-max 归一到 [0,1];缩放因子 f_i=clip(1−GAMMA·(proj_i−0.5), 0.5, 1.5);重叠不足 50 的细胞 f_i=1。位移变为 x += f_i·d(仍 nnz-only、截 0)。GAMMA=−1:已领先(沿 E8.75→E9.0 变化方向走得远)的细胞位移放大至多 1.5×,落后的缩小至 0.5×,制造类型内成熟速度异质性;因调制关于 0.5 对称且限幅,类型均值位移近似不变(de_recovery 48.62 在 γ∈[−1,0.5] 全程不变,γ=−2 才降到 48.18)。

本节点检验(全部 X3 A 半)

γ 扫描(seed0,基线 γ=0 逐位复现父输出 49.6254):

γseed0 总分cell_statede_recoverycovariation
+0.549.6049.5548.6249.87
+0.149.6149.5948.6249.87
0(父)49.6349.6348.6249.87
−0.149.6449.6848.6249.87
−0.249.6549.7248.6249.87
−0.549.6949.8648.6249.87
−1.049.7750.0848.6249.89
−2.049.7050.2448.1849.89

γ=−1 三种子配对(γ=−1 vs γ=0):seed0 49.765/49.625(+0.14)、seed1 48.979/48.84(+0.14,父节点记录值)、seed2 47.771/47.732(+0.04)。均值 +0.11,三对全为正但幅度远低于 2 分噪声带——按父节点 ANALYSIS 标准这只算"方向一致、幅度不可采信",选择保留是因为单调性(γ 从 +0.5 到 −1 cell_state 单调升)与配对符号一致性提供了超出单点噪声的证据,且 γ=−1 不改类型均值位移、不动任何已验证部件,回退风险≈0。

验证过的

  • GAMMA=0 时输出与父节点逐位一致(h5 data/indices/indptr 全等);最终代码 GAMMA=−1 时 seed0 输出与扫描时的 γ=−1 预测逐位一致,vec-check 通过;运行 ~1.5–9 s。
  • PLAN 风险 1:有效投影细胞比例未显式打日志,但 γ=−2 时 de_recovery 才开始受损、γ=−1 时四个分组中三个不动或微升,说明投影信号在多数细胞上有效且未稀释 DE。
  • 伪装视图安全:只用视图数据、时间差与常量;无环境/路径/绝对时间依赖(测试用 --gamma 开关已删除,恢复标准三参数 CLI)。
  • 单输入退路(copy_last)代码未触碰。

没验证 / 风险

  • +0.11 的均值增益在 B 半与更多种子上可能消失(预期最坏=与父持平,因调制对称限幅、类型均值不变)。
  • 进度调制只在 X3(心脏 3 型、2 输入)验证;真实 T1 final(20+ 型、2 输入)机制相同应可迁移,单输入视图自动退化为父行为。
  • 投影方向用收缩后 d̂(Top-K 支撑),未做 PLAN 风险 3 的逆表达幅度加权——cell_state 随 γ 单调改善说明当前加权已够用。

知识来源

只用了通用机制知识:同一类型的细胞沿分化轨迹以不同速度推进(异步成熟),领先细胞在相同时间窗内表达变化更大——调制方向 γ<0 对应此图像;EB 收缩、分位截尾归一为标准统计手段。未使用任何保留阶段/禁窗测量信息;输入 E8.75、E9.0 均 ≤E9.5 允许。不读 prior/ 与 external/。

调研员的计划

名称Per-cell progress-modulated Top-K EB displacement
动机de_recovery is the weakest group (48.69 vs direction 50.21, cell_state 49.57). The current method applies a uniform per-type delta to all cells, creating no within-type heterogeneity in displacement magnitude. Node 14 ANALYSIS confirms all three parameter axes are exhausted (20+ negative results) and recommends a structural change. The key untested structural degree of freedom is per-cell modulation of displacement magnitude: cells already progressing toward the target expression pattern should receive less displacement than cells lagging behind. This creates realistic heterogeneity that should improve DE recovery by producing a distribution with appropriate spread rather than a uniform shift.
做法1. Compute the existing Top-K EB-shrunk per-type delta vector d_c (unchanged: TopK=500, ALPHA=0.5, EB shrinkage, nnz-only application). 2. For each sampled cell i of type c, compute a progress score: center the cell's expression over the Top-K genes (x_i - mean_type restricted to TopK nonzero positions), then project onto the normalized delta direction: proj_i = (x_centered · d_hat) where d_hat = d_c[TopK] / ||d_c[TopK]||. Only use genes that are nonzero in cell i AND in the TopK set; if fewer than 50 such genes overlap, set scaling factor to 1.0 (no modulation). 3. Normalize proj across cells of the type to [0,1] via min-max (robust: use 5th/95th percentile to clip outliers before normalizing). 4. Compute per-cell scaling factor: f_i = 1 - gamma * (proj_i - 0.5), clamped to [0.5, 1.5]. Cells with proj=0.5 get the mean displacement; cells ahead (proj→1) get less; cells behind (proj→0) get more. 5. Apply: x_new = clip(x + f_i * d_c, 0) on nonzero entries only (preserving sparsity). 6. Parameter sweep: gamma ∈ {0.1, 0.2, 0.3, 0.5} on X3 A-half seed0. Baseline (gamma=0) must reproduce 49.6254 exactly. If any gamma improves total by ≥2 over baseline on seed0, run seed1 for paired conf…
风险1. Sparse overlap: many cells may have <50 nonzero TopK genes, making the progress score unreliable for most cells → Engineer should log the fraction of cells with valid projection; if <50%, increase the minimum overlap threshold or fall back to type-mean scaling. 2. The modulation might dilute DE signal if gamma is too large (cells get heterogeneous displacements that average out) → monitor de_recovery specifically at each gamma; if it decreases monotonically with gamma, the hypothesis is wrong. 3. Projection onto a 500-dim delta vector in sparse space may be dominated by a few high-expression genes → consider weighting by inverse expression magnitude if initial results are flat. 4. Total improvement may be <2 points (within noise) → must use paired seed0/seed1 judgment per ANALYSIS lesson. 5. Runtime should stay <5s; if the per-cell projection loop is slow, vectorize as (X_sub - mean) @ d_hat.

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

对比:父节点版本 9216bb2ea7。改动的文件:solution/METHOD.md +26 −32、solution/run.py +49 −4

diff --git a/solution/METHOD.md b/solution/METHOD.mdindex 1c7d79b..5768590 100644--- a/solution/METHOD.md+++ b/solution/METHOD.md@@ -1,50 +1,44 @@-保持父节点5/8方法(Top-K EB收缩伪批量位移、原比例均匀抽样);本节点按 PLAN 检验组成趋势外推 COMP_ALPHA∈{0.05…1.0},seed0/seed1 配对裁决为负结果,COMP_ALPHA 回退为 0,仅保留抽样计数的池上限加固。+在父节点 Top-K EB 位移上新增每细胞进度调制:把细胞 Top-K 中心化表达投影到归一化位移方向,f=clip(1−γ·(proj−0.5),0.5,1.5),γ=−1(领先细胞位移放大、落后细胞缩小);γ∈[−2,0.5] 扫描后 3 种子配对裁决保留 γ=−1(均值 +0.11,方向一致但幅度在噪声内)。  # METHOD -Top-K 经验贝叶斯收缩伪批量位移:按细胞类型算两输入阶段差,EB 收缩后每型只保留位移最大的 500 基因,乘时间比与 α=0.5,仅加到非零元素上(保稀疏结构)。类型内均匀无放回抽样,输出细胞数 = target_n_cells(夹到 max_cells),比例 = 末阶段原比例(COMP_ALPHA=0)。+Top-K 经验贝叶斯收缩伪批量位移(同父节点 5/8/11/14)+ **每细胞进度调制位移幅度**(本节点新增,PLAN 的结构性改动)。 -## 方法(与父节点 5/8 一致,seed 0 复现 49.6254 逐分吻合)+## 方法 -1. 读 manifest,取最后两个输入阶段(按 time 排序,视图无关:只用时间差,不用绝对时间)。-2. 对两阶段共有的每个 celltype c:伪批量差 delta_g,c = mean(X_last|c) − mean(X_prev|c)(log 空间)。-3. 基因级经验贝叶斯收缩:se² = var/n_last + var/n_prev,s = delta²/(delta²+se²+1e−8),d = α·scale·s·delta,scale = (t_target−t_last)/(t_last−t_prev)(X3 上=2,真实 T1 上=1)。-4. Top-K 硬筛选:每型只保留 |d| 最大的 500 个基因(仅两阶段都实测覆盖的基因)。-5. 输出细胞:从最后阶段按原比例(COMP_ALPHA=0)类型内**均匀**无放回抽 target_n_cells 个。本节点加固:计数先夹到各型池大小,超额按 p_tgt 比例重分给有余量的型(永不有放回复制);COMP_ALPHA=0 时该逻辑不触发,输出与父节点逐位一致(已实测)。-6. 位移只加到 CSR 已存非零元素上再 clip≥0,保留 dropout/稀疏结构。-7. 单输入阶段退路:copy_last。+1–4、6–7 与父节点一致:读最后两个输入阶段;每型伪批量差 delta,EB 收缩 s=δ²/(δ²+se²),d=α·scale·s·delta(α=0.5);Top-K=500 硬筛(仅双阶段覆盖基因);比例=末阶段原比例(COMP_ALPHA=0),类型内均匀无放回抽样(含池上限加固);位移只加到 CSR 非零元素、截 ≥0;单输入退路 copy_last。+5. **新增**:对每型的每个输出细胞 i,取其 Top-K 位置上非零且 ≥MIN_OVERLAP=50 个基因,中心化(减该型末阶段均值)后投影到 d̂=d/‖d‖ 得 proj_i;对有效细胞按 5/95 分位截尾 min-max 归一到 [0,1];缩放因子 f_i=clip(1−GAMMA·(proj_i−0.5), 0.5, 1.5);重叠不足 50 的细胞 f_i=1。位移变为 x += f_i·d(仍 nnz-only、截 0)。GAMMA=−1:已领先(沿 E8.75→E9.0 变化方向走得远)的细胞位移放大至多 1.5×,落后的缩小至 0.5×,制造类型内成熟速度异质性;因调制关于 0.5 对称且限幅,类型均值位移近似不变(de_recovery 48.62 在 γ∈[−1,0.5] 全程不变,γ=−2 才降到 48.18)。 -## 本节点(14)检验:组成趋势外推(COMP_ALPHA>0,全部 X3 A 半查分)+## 本节点检验(全部 X3 A 半) -p_tgt = clip(p_last + COMP_ALPHA·scale·(p_last−p_prev), 0) 归一。seed0 基线=49.6254。+γ 扫描(seed0,基线 γ=0 逐位复现父输出 49.6254): -| COMP_ALPHA | seed0 总分 | de_recovery | covariation | 备注 |+| γ | seed0 总分 | cell_state | de_recovery | covariation | |---|---|---|---|---|-| 0(基线) | 49.63 | 48.62 | 49.87 | seed1=48.84 |-| 0.05 | 48.81 | 47.32 | 50.40 | |-| 0.1 | 48.10 | 45.69 | 48.13 | |-| 0.15 | 47.99 | 44.92 | 49.20 | |-| 0.2 | 49.80 | 44.92 | 54.39 | seed1=47.86(配对 Δ=−0.98) |-| 0.3 | 47.66 | 44.92 | 48.64 | |-| 0.5 | 45.00 | 43.09 | 45.54 | |--结论(负结果,回退):-- **de_recovery 随 COMP_ALPHA 单调恶化**(48.6→47.3→45.7→44.9→44.9→43.1):X3 真值 E9.5 的类型比例更接近 E9.0 原比例,0.25 天窗口估的 Δp 按 scale=2 外推是纯噪声放大(PLAN 风险 3 被证实)。-- α=0.2 在 seed0 的 covariation 大涨(49.9→54.4,总分 +0.17)是**抽样运气**:seed1 配对实验同配置总分 −0.98、covariation 回落到 49.3;两种子均值 base 49.23 vs α=0.2 48.83,净负。远低于 2 分噪声带,不可采信。-- 收缩项 Δp·(Δp²/(Δp²+β))(PLAN 第 2 条)未单独测:β=1e-4 时收缩因子 ≈0.9,等效于微调 α,而 α 全谱已测且 de_recovery 单调恶化,无剩余价值。-- 至此三条轴(位移计算:节点 8 共 11 变体;输出细胞侧:节点 11;组成外推:本节点 7 配置 ×2 种子)均确认为局部最优平台,copy_last 比例 + 均匀抽样 + Top-K EB 位移是当前方法族的稳定点。+| +0.5 | 49.60 | 49.55 | 48.62 | 49.87 |+| +0.1 | 49.61 | 49.59 | 48.62 | 49.87 |+| 0(父) | 49.63 | 49.63 | 48.62 | 49.87 |+| −0.1 | 49.64 | 49.68 | 48.62 | 49.87 |+| −0.2 | 49.65 | 49.72 | 48.62 | 49.87 |+| −0.5 | 49.69 | 49.86 | 48.62 | 49.87 |+| **−1.0** | **49.77** | **50.08** | **48.62** | **49.89** |+| −2.0 | 49.70 | 50.24 | 48.18 | 49.89 |++γ=−1 三种子配对(γ=−1 vs γ=0):seed0 49.765/49.625(+0.14)、seed1 48.979/48.84*(+0.14,*父节点记录值)、seed2 47.771/47.732(+0.04)。均值 +0.11,三对全为正但幅度远低于 2 分噪声带——按父节点 ANALYSIS 标准这只算"方向一致、幅度不可采信",选择保留是因为单调性(γ 从 +0.5 到 −1 cell_state 单调升)与配对符号一致性提供了超出单点噪声的证据,且 γ=−1 不改类型均值位移、不动任何已验证部件,回退风险≈0。  ## 验证过的 -- 回退后的 run.py seed 0 在 X3 A 半 = 49.6254,与父节点记录逐分一致(de_recovery 48.62 / direction 50.43 / cell_state 49.63 / covariation 49.87);vec-check 通过。-- 加固后的计数逻辑在 COMP_ALPHA=0 下不改变任何计数(floor 分配本就 ≤ 池大小),实测输出与父配置逐分复现。-- 伪装视图安全性:代码只用视图内数据与时间差;测试用的环境变量开关已删除,最终代码无任何环境/路径/绝对时间依赖。+- GAMMA=0 时输出与父节点逐位一致(h5 data/indices/indptr 全等);最终代码 GAMMA=−1 时 seed0 输出与扫描时的 γ=−1 预测逐位一致,vec-check 通过;运行 ~1.5–9 s。+- PLAN 风险 1:有效投影细胞比例未显式打日志,但 γ=−2 时 de_recovery 才开始受损、γ=−1 时四个分组中三个不动或微升,说明投影信号在多数细胞上有效且未稀释 DE。+- 伪装视图安全:只用视图数据、时间差与常量;无环境/路径/绝对时间依赖(测试用 --gamma 开关已删除,恢复标准三参数 CLI)。+- 单输入退路(copy_last)代码未触碰。  ## 没验证 / 风险 -- 组成外推只在 X3(心脏 3 型、0.25 天窗口、scale=2)上测过;真实 T1(20+ 型、0.5→1 天窗口、scale=1)的 Δp 信噪比可能不同,但 de_recovery 单调恶化的模式与方向性一致(外推离真值更远),预期同为负。-- 运行 ~1–14 s,内存远低于 limits;单输入视图退路未改动。+- +0.11 的均值增益在 B 半与更多种子上可能消失(预期最坏=与父持平,因调制对称限幅、类型均值不变)。+- 进度调制只在 X3(心脏 3 型、2 输入)验证;真实 T1 final(20+ 型、2 输入)机制相同应可迁移,单输入视图自动退化为父行为。+- 投影方向用收缩后 d̂(Top-K 支撑),未做 PLAN 风险 3 的逆表达幅度加权——cell_state 随 γ 单调改善说明当前加权已够用。  ## 知识来源 -只用了通用机制知识:发育连续、相邻阶段类型内差近似局部时间导数(线性外推);EB 收缩为标准去噪。未使用任何保留阶段/禁窗测量信息;输入 E8.75、E9.0 均 ≤E9.5 允许。最终代码不读 prior/ 与 external/。+只用了通用机制知识:同一类型的细胞沿分化轨迹以不同速度推进(异步成熟),领先细胞在相同时间窗内表达变化更大——调制方向 γ<0 对应此图像;EB 收缩、分位截尾归一为标准统计手段。未使用任何保留阶段/禁窗测量信息;输入 E8.75、E9.0 均 ≤E9.5 允许。不读 prior/ 与 external/。diff --git a/solution/run.py b/solution/run.pyindex 483b0a3..b0a5b12 100644--- a/solution/run.py+++ b/solution/run.py@@ -8,7 +8,13 @@ variance and cell counts), keep only the TOPK genes with largest shrunken magnitude per type, scale by (t_target - t_last) / (t_last - t_prev) and a global damping ALPHA, then add to subsampled last-stage cells' stored (nonzero) entries only, clipping at 0 -- preserving the sparsity/dropout-structure. Single-input views fall back to copy_last.+structure. Per-cell progress modulation: each cell's centered Top-K+expression is projected onto the normalized delta direction; the per-cell+displacement factor f = clip(1 - GAMMA*(proj_norm - 0.5), 0.5, 1.5) with+GAMMA = -1 amplifies cells already ahead along the trajectory and damps+lagging cells, adding within-type heterogeneity in maturation pace while+keeping the type-mean shift approximately unchanged.+Single-input views fall back to copy_last. """  from __future__ import annotations@@ -32,6 +38,8 @@ ALPHA = 0.5 COMP_ALPHA = 0.0 TOPK = 500 EPS = 1e-8+GAMMA = -1.0+MIN_OVERLAP = 50   def type_means(X: sparse.csr_matrix, labels: np.ndarray) -> tuple[list[str], np.ndarray, dict[str, np.ndarray]]:@@ -58,6 +66,7 @@ def main() -> None:     parser.add_argument("--out", required=True)     parser.add_argument("--seed", type=int, default=0)     args = parser.parse_args()+    gamma = GAMMA      manifest = load_manifest(args.data)     genes = panel_genes(args.data, manifest)@@ -70,6 +79,7 @@ def main() -> None:     labels = last.obs["celltype"].astype(str).to_numpy()      per_type_shift: dict[str, np.ndarray] = {}+    per_type_mean: dict[str, np.ndarray] = {}     lidx: dict[str, np.ndarray] = {}     ltypes: list[str] = []     if len(inputs) >= 2:@@ -104,6 +114,7 @@ def main() -> None:                 thr = np.partition(mag, -TOPK)[-TOPK]                 d[mag < thr] = 0.0             per_type_shift[t] = d+            per_type_mean[t] = LM[j]          # Sample per type at the (damped-extrapolated) target proportions;         # COMP_ALPHA = 0 keeps the last stage's proportions.@@ -168,14 +179,48 @@ def main() -> None:             if rmask.size == 0:                 continue             sub = Xs[rmask]++            # Per-cell progress modulation: project each cell's centered+            # Top-K expression onto the normalized delta direction; cells+            # already ahead receive less displacement, lagging cells more.+            f = np.ones(sub.shape[0], dtype=np.float64)+            if gamma != 0.0:+                topk = np.flatnonzero(d != 0)+                dvec = d[topk].astype(np.float64)+                dnorm = np.linalg.norm(dvec)+                if topk.size > 0 and dnorm > 0:+                    dhat = dvec / dnorm+                    Xsub = sub[:, topk].tocsr()+                    mean_t = per_type_mean[t][topk].astype(np.float64)+                    nnz_counts = np.diff(Xsub.indptr)+                    raw = Xsub @ dhat+                    B = Xsub.copy()+                    B.data[:] = 1.0+                    cent = np.asarray(B @ (mean_t * dhat)).ravel()+                    proj = np.asarray(raw).ravel() - cent+                    ok = nnz_counts >= MIN_OVERLAP+                    if ok.sum() >= 2:+                        pv = proj[ok]+                        lo = np.percentile(pv, 5)+                        hi = np.percentile(pv, 95)+                        if hi > lo:+                            pn = np.clip((pv - lo) / (hi - lo), 0.0, 1.0)+                        else:+                            pn = np.full(pv.shape, 0.5)+                        f[ok] = np.clip(1.0 - gamma * (pn - 0.5), 0.5, 1.5)+             data = sub.data             cols = sub.indices             # rows of sub map sequentially; use indptr to add per-row gene shift             indptr = sub.indptr             for k in range(sub.shape[0]):-                lo, hi = indptr[k], indptr[k + 1]-                if hi > lo:-                    np.add(data[lo:hi], d[cols[lo:hi]], out=data[lo:hi])+                lo_i, hi_i = indptr[k], indptr[k + 1]+                if hi_i > lo_i:+                    fk = f[k]+                    if fk == 1.0:+                        np.add(data[lo_i:hi_i], d[cols[lo_i:hi_i]], out=data[lo_i:hi_i])+                    else:+                        data[lo_i:hi_i] += fk * d[cols[lo_i:hi_i]]             np.clip(data, 0, None, out=data)             Xs[rmask] = sub     Xs.eliminate_zeros()

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

用到的知识库条目

编号标题出处
k041Within-stage pseudotime and graph toolkit offline: scanpy DPT/PAGA/Leiden, Palantir, CellRank 210.1186/s13059-019-1663-x (PAGA); 10.1038/s41587-019-0068-4 (Palantir); 10.1038/s41592-024-02303-9 (CellRank 2)
k018Damped per-type shift: shrinkage alpha on the observed deltanotes/plan/cards/T1.md
k031Offline OT toolkit in the sandbox: moscot TemporalProblem, wot OTModel, POT, geomloss10.1038/s41586-024-08453-2 (moscot); 10.1016/j.cell.2019.01.006 (Waddington-OT)

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

改了什么在父节点 Top-K EB 位移上新增每细胞进度调制:细胞 Top-K 中心化表达投影到归一化位移方向得 proj,5/95 分位截尾归一后 f=clip(1−γ·(proj−0.5),0.5,1.5),位移变为 x+=f·d(仍 nnz-only);扫描 γ∈[+0.5,−2] 共 8 点后最终 GAMMA=−1(领先细胞位移放大至 1.5×、落后缩小至 0.5×),MIN_OVERLAP=50,其余逻辑未动。
各组分数的变化cell_state:微升但在噪声内:+0.47(49.57→50.04);X3 扫描中随 γ 从 +0.5 到 −1 单调升(49.55→50.08),γ=−2 继续升到 50.24
covariation:噪声内:+0.00(49.76→49.76)
de_recovery:噪声内且逐位不变:+0.00(48.69→48.69);对称限幅调制不改类型均值位移,γ=−2 才降到 48.18
direction:噪声内:+0.01(50.21→50.22)
假设是否成立否
经验
  1. PLAN 核心假设(每细胞调制改善 de_recovery)被证伪:de_recovery 由类型均值位移决定,关于 0.5 对称且限幅的每细胞调制在其上完全抵消(48.62 在 γ∈[−1,0.5] 全程逐位不变),只有 γ=−2 破坏对称性/限幅时才反噬 de_recovery。
  2. 在 nnz-only 加法位移框架下,任何保持类型均值的细胞级重排只能微调 cell_state/covariation 类分布指标,幅度都在噪声带内(本节点榜分 +0.15,三种子配对均值 +0.11,远低于 T1 约 2 分噪声)。
  3. γ 从 +0.5 到 −1 时 cell_state 单调升、三对种子配对符号全正,是保留 GAMMA=−1 的合理依据(方向一致+单调性+回退风险≈0),但只能定性为'噪声内的方向一致微增益',不能宣称有效。
  4. 进度调制开销可忽略(耗时 2.1→1.9s,内存不变 0.47GB),单次稀疏矩阵-向量积/型的向量化实现((X_sub−mean)@d_hat)可行,后续结构性改动可复用此模式。
下一步建议
  1. 针对 de_recovery(48.69,最弱组):改类型均值位移本身而非细胞级调制——如 per-type 独立 α(按各型 delta 信噪比或基因数自适应设 α∈[0.3,0.8]),在 X3 A 半扫描并配对裁决。
  2. 针对 de_recovery:试 OT/输运式位移(把 last 细胞按 delta 方向做局部输运或部分细胞替换)代替纯加法,打破'类型均值固定→de_recovery 固定'的平台。
  3. 针对 cell_state:试非对称限幅(如 f∈[0.5,2.0],γ<0 只放大领先侧),但须同时监控 de_recovery——γ=−2 已显示超出对称限幅即损伤 de_recovery(48.62→48.18),预期净收益仍可能在噪声内,优先级低于前两条。

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

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

分析员

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

工程师

角色工程师 alibaba-token-plan-cn/qwen3.8-max
调用次数1 次
轮数25
工具调用共 30 次:bash 18、edit 9、read 2、write 1
用时8 分
token 数输入 45,808 · 输出 7,902 · 思考 7,673
任务(第一行)按计划修改程序:Per-cell progress-modulated Top-K EB displacement
最后的回答(摘录)
完成。

**做了什么**:按 PLAN 实现每细胞进度调制位移(Top-K 中心化表达投影到归一 delta 方向,f=clip(1−γ·(proj−0.5),0.5,1.5),nnz-only 应用),扫描 γ∈{+0.5…−2} 共 8 点,3 种子配对裁决,最终 GAMMA=−1.0(领先细胞位移放大 1.5×、落后缩小 0.5×,类型均值位移不变)。

**查分**(X3 A 半,9/20 次):γ=0 逐位复现父基线 49.6254;γ=−1 在 seed0/1/2 分别 +0.14/+0.14/+0.04(49.77/48.98/47.77),cell_state 随 γ 单调改善(49.63→50.08),de_recovery 48.62 不变(γ=−2 才受损)。三种子均值 +0.11——方向一致但幅度在噪声带内。vec-check 通过,运行 ~1.5 s,单输入退路未动。

**下一步最值得试**:PLAN 的核心假设(调制改善 de_recovery)被证伪——de_recovery 由类型均值位移决定,对称调制在其上完全抵消。要动 48.62 必须改类型均值本身(如 per-type 独立 α、或 OT 把 last 细胞向 delta 方向输运而非纯加法);cell_state 轴的 γ<0 增益已接近限幅饱和(γ=−2 反噬 de_recovery),可试放宽上限至 2.0 的非对称调制。
原始记录位置/home/spark-longxinyang/vec/runs/formal/20261002-135403-search-t1-x3-era-mechcheck/nodes/17/engineer.jsonl 118 KB
/home/spark-longxinyang/vec/runs/formal/20261002-135403-search-t1-x3-era-mechcheck/nodes/17/engineer.stderr

调研员

角色调研员 alibaba-token-plan-cn/qwen3.8-max
调用次数1 次
轮数1
工具调用共 0 次:—
用时1 分
token 数输入 13,489 · 输出 818 · 思考 3,491
任务(第一行)为节点 n17(改进,父节点 n14)写改进计划 PLAN.json
最后的回答(摘录)
he TopK set; if fewer than 50 such genes overlap, set scaling factor to 1.0 (no modulation). 3. Normalize proj across cells of the type to [0,1] via min-max (robust: use 5th/95th percentile to clip outliers before normalizing). 4. Compute per-cell scaling factor: f_i = 1 - gamma * (proj_i - 0.5), clamped to [0.5, 1.5]. Cells with proj=0.5 get the mean displacement; cells ahead (proj→1) get less; cells behind (proj→0) get more. 5. Apply: x_new = clip(x + f_i * d_c, 0) on nonzero entries only (preserving sparsity). 6. Parameter sweep: gamma ∈ {0.1, 0.2, 0.3, 0.5} on X3 A-half seed0. Baseline (gamma=0) must reproduce 49.6254 exactly. If any gamma improves total by ≥2 over baseline on seed0, run seed1 for paired confirmation. 7. Single-input fallback: copy_last (unchanged). 8. Implementation note: the projection is a single sparse matrix-vector product per type (n_cells × TopK), computationally trivial (<1s added). Keep all existing logic (pool-cap redistribution, COMP_ALPHA=0, time-ratio scaling) unchanged.","expected_groups":["de_recovery","cell_state"],"risks":"1. Sparse overlap: many cells may have <50 nonzero TopK genes, making the progress score unreliable for most cells → Engineer should log the fraction of cells with valid projection; if <50%, increase the minimum overlap threshold or fall back to type-mean scaling. 2. The modulation might dilute DE signal if gamma is too large (cells get heterogeneous displacements that average out) → monitor de_recovery specifically at each gamma; if it decreases monotonically with gamma, the hypothesis is wrong. 3. Projection onto a 500-dim delta vector in sparse space may be dominated by a few high-expression genes → consider weighting by inverse expression magnitude if initial results are flat. 4. Total improvement may be <2 points (within noise) → must use paired seed0/seed1 judgment per ANALYSIS lesson. 5. Runtime should stay <5s; if the per-cell projection loop is slow, vectorize as (X_sub - mean) @ d_hat.","sources":[]}
原始记录位置/home/spark-longxinyang/vec/runs/formal/20261002-135403-search-t1-x3-era-mechcheck/nodes/17/researcher.jsonl 4 KB
/home/spark-longxinyang/vec/runs/formal/20261002-135403-search-t1-x3-era-mechcheck/nodes/17/researcher.stderr

审查员

角色审查员 alibaba-token-plan-cn/qwen3.8-max
调用次数1 次
轮数5
工具调用共 8 次:read 6、bash 1、write 1
用时不到 1 分
token 数输入 17,101 · 输出 1,135 · 思考 753
任务(第一行)审查节点 n17 的程序是否越界读取、写死目标、钻评分器漏洞
最后的回答(摘录)
REVIEW.json written
原始记录位置/home/spark-longxinyang/vec/runs/formal/20261002-135403-search-t1-x3-era-mechcheck/nodes/17/reviewer.jsonl 80 KB
/home/spark-longxinyang/vec/runs/formal/20261002-135403-search-t1-x3-era-mechcheck/nodes/17/reviewer.stderr