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

总览 · ← 返回运行 20261002-204524-search-t2-embryo-interp-g24q

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

METHOD

运行?一次完整的自动搜索或 Agent 会话,有自己的锁定配置和证据包。20261002-204524-search-t2-embryo-interp-g24q
父节点n4
子节点—
操作?种子:人写的起点;改进:在父节点上改;草稿:从头写;修复:修父节点的报错。改进
状态已打分
分数搜索目标分 61.82(+0.0) · proxy 61.82(+0.0) · 3 次复测均分 61.49
审查通过 1 越界读取:未发现问题——run.py 只经 view_io 的 load_manifest/panel_genes/read_stage/interp_bracket 读取 args.data 下的清单与输入阶段(run.py:240-251),无绝对路径、'..'、/mnt、/home、data/raw、downloads、打分器或 src/common/evaluation 引用,无联网;未读取目标阶段文件(只 read_stage(a)/read_stage(b),t 由清单时间差给出,run.py:242-250)。; 2 硬编码目标统计量:未发现问题——全部数值常量都是标量超参…
用时?从运行开始到结束(或到现在)的挂钟时间。17 分
程序版本bb477154e13e4e0f0bd2942724688c5f8d0795c0 (programs.git)

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

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

METHOD

实现 PLAN 的 local_ot 表达位移(熵正则 Sinkhorn 逐细胞耦合,早端细胞向其晚端 barycentric 像移动);proxy 上 fwd/rev 两方向 cell_state 均单调劣化,机制被证伪,故 alpha=0 出厂(与 node 4 逐位相同)。

方法族与机制(如实报告:机制已实现但被证伪)

方法族 local_ot。在 node 4 管道(mix MIX_S=0.5 + 分组 RMS 校正 SHAPE_CORR=−0.8 + z 扩散插值 0.5)之后,只改表达、不动坐标地加一步逐细胞最优传输位移:

  1. 取两阶段各自 getnnz>0 的共享覆盖基因(proxy 上 465/498),做逐基因标准化(减均值除标准差,用被移动组与源组联合统计)。
  2. 被移动组 vs 源组算平方欧氏代价,按中位数归一,跑 balanced 熵正则 Sinkhorn(eps=0.1,≤100 次迭代,纯 numpy 矩阵-向量乘,独立 rng 流)。
  3. 每个被移动细胞的 barycentric 像 mu_i = Σ_j P_ij·X_src[j] / 行和(源细胞全基因面板原始值的凸组合,天然落在数据支撑上);位移 X_i ← clip(X_i + ALPHA·(mu_i − X_i), 0, None)。
  4. 坐标管道(procrustes3d 对齐、分组 RMS 校正、z 插值、整体 scale_to_rms、jitter)逐位保留;用独立 rng(default_rng(seed+104729))保证 alpha=0 与 alpha>0 的坐标完全一致。

两个方向(env T2_TRANSPORT_DIR):

  • fwd(PLAN 原意,T2EI-02):被抽中的早端细胞向晚端全体移动,晚端不动。源 = 晚端阶段(>2 万时按类型分层子采样到 2 万)。
  • rev(镜像假设):晚端细胞向早端全体移动(晚端是 cell_state 的负资产,把它拉回早端)。源 = 早端阶段。

单输入退路:无括号时只有一个输入阶段,被移动组或源组为空 → 位移为零、输出等于父行为;共享基因 <50(MIN_SHARED_GENES)同样自动关闭。ALPHA=0 提前返回,跳过全部传输计算。

机制对照(同一程序,env 开关,proxy A 半 seed 0)

  • 关闭对照:T2_TRANSPORT_ALPHA=0(出厂默认)输出与 node 4 逐位相同(X、坐标 max diff = 0),A 半 61.48 = 父 A 半。重构无回归。
  • 机制生效证据(位移确实逐细胞、非均匀):fwd alpha=0.2 时位移范数 mean=24.73、sd=1.67(连续谱,非常向量),tr_shared_genes=465、tr_n_src=20000;坐标组(shape_scale 75.41、d2_shape 0.01902、occupancy_dice 0.8517)在所有 alpha 下逐位不变,证实机制只动了表达,符合 PLAN 的免费一致性检查。
  • 机制方向被证伪:fwd 与 rev 的 board 分都从 alpha=0 的 61.48 单调下降,cell_state 首当其冲:
配置boardcell_stateexpression_changeshape_scalelocal_spatial
alpha=0(出厂,=node4)61.4853.8860.0874.25/75.4157.77
fwd alpha=0.0556.8736.1360.2275.4155.73
fwd alpha=0.154.7430.4560.2575.4152.83
fwd alpha=0.248.9821.7560.3168.46*45.39
rev alpha=0.259.9749.2160.1175.4155.16

(*fwd alpha=0.2 的 shape_scale 下降是 local_spatial 组联带,坐标本身未改;d2_shape 仍 0.01902。)

结论:为什么两方向都失败(生物学解释)

cell_state 在组成比上已近最优,任何把细胞表达态往某一端拉的都远离目标流形:

  • copy_last(100% 早端 E6.75)cell_state = 49.29;mix MIX_S=0.5(80% 早 / 20% 晚)= 53.88 —— 80/20 优于 100/0,说明少量晚端细胞有益,目标 E7.25 的转录态夹在中间、更靠近早端但非纯早端。
  • fwd 把早端细胞推向晚端 barycentric 像 → 有效组成右移 + 熵正则把早端平均成 off-manifold 的“平均晚端”谱 → cell_state 崩到 21.75。
  • rev 把晚端细胞拉向早端 → 有效组成左移、逼近 copy_last 的 49.29 → cell_state 49.21,仍低于 53.88。
  • 位移对 alpha 极敏感(fwd alpha=0.05 已掉到 36.13),因为 eps=0.1 的 barycentric 像是几十个远端晚端细胞的均值,非任何真实目标细胞;混入 5% 即破坏离散态。这与 node 3 的 T2EI-01(per-type 常向量位移)单调失败同源:目标表达态离早端比离“向晚端位移”更近,逐细胞版本同样成立。

因此 local_ot 表达位移族在本插值榜上无正增益区间,出厂取边界 alpha=0(逐位等于 node 4,非回归)。这不是把别的方法冒充 local_ot——机制已完整实现并双向扫描证伪。

验证过 / 没验证过

  • 验证过:默认 alpha=0 跑通 proxy(~1.4 s、内存 <0.4 GB、纯 CPU)、vec-check ok、关闭对照逐位等于 node 4(seed 0)、fwd 4 档 + rev 1 档的单调劣化、坐标组在所有 alpha 下逐位不变(机制只动表达)。
  • 没验证过:eps 细扫(0.05/0.2)——因 alpha 在 0.05 即大幅劣化、方向已判死,按 PLAN risk#1「alpha=0.1 即差≥1 分立即放弃不细扫」停止;rev 的 alpha=0.4 已生成但既然 rev alpha=0.2 已单调劣化未查分;final 视图(t=1/3,共享基因/细胞数不同,但 alpha=0 出厂使传输恒关闭,final 输出=node4 管道,迁移风险仅继承自 node 4);seed 1/2(alpha=0 对任意 seed 逐位等于 node 4,无需单独复核传输)。
  • 查分额度:用 4/20(fwd 0.1/0.2、rev 0.2、fwd 0.05),余 16。

下一步建议(供后续节点)

  1. 放弃 local_ot 表达位移:本节点已双向证伪,勿再投入。cell_state 的杠杆在组成比而非表达位移——试微调 MIX_S(如 0.45/0.55)或按类型的差异化混合权重,而非搬移已选细胞的表达。
  2. 沿 node 4 的坐标建议继续(同属坐标二阶矩族,非 local_ot):固定 SHAPE_CORR=−0.8 联合细扫 Z_INTERP∈{0.3,0.5,0.7},或做分组 xy 各向异性/主轴伸长率校正攻 shape_scale 的残余 d2_shape≈0.019。
  3. expression_change(60.08)几乎不随任何机制动(DE 方向对位移不敏感),非高杠杆组。

知识来源

  • 通用发育机制:胚胎发育中转录态随时间连续演进、目标阶段的细胞态夹在两括号阶段之间且更靠近时间较近的一端——不针对禁窗阶段的定性知识。
  • 熵正则 OT / Sinkhorn、barycentric 投影为凸组合故落在数据支撑上:最优传输通用算法知识。
  • 全部参数(eps、alpha、方向、共享基因阈值)与「机制无正增益」的结论由 proxy 视图现场扫描确定,未使用任何保留阶段/基因型的实测信息。

调研员的计划

名称早端细胞的表达空间 OT 前向位移(T2EI-02,局部保邻域)
动机node 4 四组分中最弱的是 cell_state 53.88(expression_change 60.08 次之),坐标类机制已近平台(shape_scale 74.25、d2_shape 0.019),继续修坐标对榜分边际小。关键证据:copy_last(node 1)cell_state 49.29 vs mix(node 2)37.49,说明晚端细胞离目标表达态很远,是混入 20% 晚端细胞拉低 cell_state 的主因;而 node 3 对'晚端表达位移'唯一一次尝试(T2EI-01 per-type 均值位移)单调失败(36.2→30.0→27.3),该方向尚未被'逐细胞、非均匀'版本检验过。本节点不动坐标(保住 +5.16 的 shape_scale),专攻表达组。
做法在 node 4 管道后只改表达、不动坐标:1) 对被抽中的早端细胞(ia 部分)与全部晚端细胞,在共享基因上做表达距离(标准化后欧氏/余弦)的 Sinkhorn 熵正则 OT(balanced,eps 初值 0.1、候选 {0.05,0.1,0.2},迭代 ≤100,用 numpy 即可,≤50 行);2) 每个早端细胞的 barycentric 像 mu_i = Σ_j P_ij·X_b[j]/行和,位移 X_i ← X_i + ALPHA·(mu_i − X_i),在全基因面板原始值上做(barycentric 像是凸组合,天然回到数据支撑上);3) 晚端细胞表达一律不动(证据:晚端细胞对 cell_state 是负资产,前移早端比后拉晚端安全);4) ALPHA 扫描 {0.1,0.2,0.4,0.7},env T2_TRANSPORT_ALPHA 默认 0;坐标管道(SHAPE_CORR=-0.8、Z_INTERP=0.5、scale_to_rms)逐位保留。单输入阶段退路:无括号时只有一个输入阶段,OT 两端同集合→位移为零、输出等于父行为,自然退化;若阶段间共享基因过少(<500)同样自动关闭。vec-score 筛选:先查 ALPHA=0 的 seed 0 确认逐位重现父 A 半 61.48(1 次);粗扫 4 个 ALPHA(seed 0);最优配置再用 seed 1 复核,两均值 >61.82+1 才提交。预算约 8/20 次,留余量给 eps 单点调整。
风险1) 目标可能离早端比 OT 前移更近(类似 T2EI-01 失败的根因):若 ALPHA=0.1 即比基线差 ≥1 分,说明方向错,立即放弃不细扫。2) 大 cost 矩阵内存/耗时:细胞数 >4 万时用每组 ≤2 万的随机子采样算 P,或退化为每早端细胞取余弦最近邻晚端细胞做位移;先小样本(5k 细胞)跑通再全量,运行 >60 s 即换近邻版。3) barycentric 平滑效应抹平表达离散度、反伤 cell_state:查分时同时看 cell_state 与 expression_change,若两者同降即停止。4) 输出管道故障曾浪费 4 次查分(node 4 教训):首次查分前先确认文件写出正常。

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

对比:父节点版本 3c674dd783。改动的文件:solution/METHOD.md +45 −28、solution/run.py +87 −4

diff --git a/solution/METHOD.md b/solution/METHOD.mdindex 125fbd3..4074ecc 100644--- a/solution/METHOD.md+++ b/solution/METHOD.md@@ -1,45 +1,62 @@ # METHOD -在 mix(MIX_S=0.5) 上加两个纯坐标校正:按组成-几何差 (t−t_mix) 比例的分组 RMS 校正(proxy 最优为负系数 −0.8,即早端云放大、晚端云缩小)与两组 z 扩散向时间插值目标的混合(w=0.5),主要收回 MIX_S=0.5 损失的 shape_scale。+实现 PLAN 的 local_ot 表达位移(熵正则 Sinkhorn 逐细胞耦合,早端细胞向其晚端 barycentric 像移动);proxy 上 fwd/rev 两方向 cell_state 均单调劣化,机制被证伪,故 alpha=0 出厂(与 node 4 逐位相同)。 -## 方法+## 方法族与机制(如实报告:机制已实现但被证伪) -父节点(node 3):mix,align=procrustes3d,scale_damp=0.5,组成比 t_mix=0.5·t_geo,RMS 目标用 t_geo;表达式不改任何细胞。本节点新增两个机制(都只动坐标、都由时间差驱动、视图无关):+方法族 `local_ot`。在 node 4 管道(mix MIX_S=0.5 + 分组 RMS 校正 SHAPE_CORR=−0.8 + z 扩散插值 0.5)之后,**只改表达、不动坐标**地加一步逐细胞最优传输位移: -1. **分组 RMS 校正(PLAN T2EI-05,符号与 PLAN 假设相反)**:`corr = SHAPE_CORR·(t − t_mix)`,早端对齐云缩到 `target_rms·(1−corr)`、晚端缩到 `target_rms·(1+corr)`;混合后的整体 `scale_to_rms(target_rms)` 保留,故整体 RMS 不变,只改两组的相对尺度。**默认 SHAPE_CORR=−0.8**(env `T2_SHAPE_CORR`):PLAN 假设正系数(早端缩小),但 proxy 实测正系数全部劣于基线(0.1→59.67、0.2→59.52、0.3→59.43、0.5→58.85,基线 59.88),负系数单调改善(−0.15→60.30、−0.3→60.68、−0.5→61.26、−0.8→61.48、−1.0→61.50 平台)。解释:MIX_S=0.5 下 80% 细胞来自早端且两端都被缩到同一 target_rms,混合云的占据域相对目标收缩(occupancy_dice 0.80),把占多数的早端云放大反而恢复二阶形状矩与占据。-2. **z 扩散插值(w=0.5,env `T2_Z_INTERP`)**:每组 z 列的 RMS 按 w 向 `log_interp(z_rms_a, z_rms_b, t, damp)` 混合。procrustes3d 的三维旋转会拧斜离散切片轴,z 是形状失配的主要方向之一;单独 w=0.5(SHAPE_CORR=0)已把 d2_shape 0.028→0.021、board 59.88→60.03,与分组校正叠加有效。+1. 取两阶段各自 `getnnz>0` 的**共享覆盖基因**(proxy 上 465/498),做逐基因标准化(减均值除标准差,用被移动组与源组联合统计)。+2. 被移动组 vs 源组算平方欧氏代价,按中位数归一,跑 **balanced 熵正则 Sinkhorn**(eps=0.1,≤100 次迭代,纯 numpy 矩阵-向量乘,独立 rng 流)。+3. 每个被移动细胞的 barycentric 像 `mu_i = Σ_j P_ij·X_src[j] / 行和`(源细胞**全基因面板原始值**的凸组合,天然落在数据支撑上);位移 `X_i ← clip(X_i + ALPHA·(mu_i − X_i), 0, None)`。+4. 坐标管道(procrustes3d 对齐、分组 RMS 校正、z 插值、整体 scale_to_rms、jitter)**逐位保留**;用独立 rng(`default_rng(seed+104729)`)保证 alpha=0 与 alpha>0 的坐标完全一致。 -单输入退路不变(不混合、不校正)。类型内表达位移(T2_TYPE_ALPHA)保留但默认 0(父节点已证伪)。+两个方向(env `T2_TRANSPORT_DIR`):+- `fwd`(PLAN 原意,T2EI-02):被抽中的**早端**细胞向**晚端**全体移动,晚端不动。源 = 晚端阶段(>2 万时按类型分层子采样到 2 万)。+- `rev`(镜像假设):**晚端**细胞向**早端**全体移动(晚端是 cell_state 的负资产,把它拉回早端)。源 = 早端阶段。 -## 机制对照(同一程序,env 开关)+单输入退路:无括号时只有一个输入阶段,被移动组或源组为空 → 位移为零、输出等于父行为;共享基因 <50(`MIN_SHARED_GENES`)同样自动关闭。ALPHA=0 提前返回,跳过全部传输计算。 -- **关闭对照**:`T2_SHAPE_CORR=0 T2_Z_INTERP=0` 输出与 node 3 逐位相同(X、坐标 max diff = 0),A 半 59.88 = 父 A 半。重构无回归。-- **机制生效证据**:(a) d2_shape 0.0280 → 0.0190(−0.8),PLAN 预期方向达成(目标 ≤0.01 未完全达到,剩余失配推测为各向异性/xy 形状差);(b) 输出中两组 RMS 分离(−0.8 时早端 153.1、晚端 132.5,target 149.2;混合前目标差为 2·|corr|·target_rms≈47.7,整体重缩放后余 ≈20.6);(c) 四组分(A 半 seed 0):shape_scale 68.53→75.41(+6.9),occupancy_dice 0.802→0.852,cell_state 52.56 不变、expression_change 60.17 不变(表达式未动,±0 符合预期),local_spatial 58.27→57.77(−0.5,噪声内)。-- **与 PLAN 的差异如实报告**:PLAN 指定扫描正 SHAPE_CORR∈{0.1,0.2,0.3,0.5},全部劣化且 d2_shape 不动(0.0272–0.0291)——PLAN 假设的“早端偏小”方向错误;负方向为扫描发现的实证修正,机制形式(乘性、分组、∝(t−t_mix))与 PLAN 一致。z 插值是 PLAN 外的补充机制(同族:坐标二阶矩校正)。+## 机制对照(同一程序,env 开关,proxy A 半 seed 0) -## 查分记录(proxy A 半,seed 0,除注明外)+- **关闭对照**:`T2_TRANSPORT_ALPHA=0`(出厂默认)输出与 node 4 **逐位相同**(X、坐标 max diff = 0),A 半 61.48 = 父 A 半。重构无回归。+- **机制生效证据(位移确实逐细胞、非均匀)**:fwd alpha=0.2 时位移范数 mean=24.73、sd=1.67(连续谱,非常向量),tr_shared_genes=465、tr_n_src=20000;坐标组(shape_scale 75.41、d2_shape 0.01902、occupancy_dice 0.8517)在所有 alpha 下**逐位不变**,证实机制只动了表达,符合 PLAN 的免费一致性检查。+- **机制方向被证伪**:fwd 与 rev 的 board 分都从 alpha=0 的 61.48 **单调下降**,cell_state 首当其冲: -| 配置 | board | shape_scale | d2_shape | occupancy |-|---|---:|---:|---:|---:|-| 基线(node3 逐位) | 59.88 | 68.53 | 0.0280 | 0.802 |-| SHAPE_CORR=+0.1/+0.2/+0.3/+0.5 | 59.67/59.52/59.43/58.85 | 67.6/67.3/67.0/64.9 | ~0.027 | 0.78→0.73 |-| Z_INTERP=0.5(corr=0) | 60.03 | 69.84 | 0.0205 | 0.786 |-| Z=0.5, CORR=−0.15/−0.3 | 60.30/60.68 | 70.96/72.45 | 0.019/0.018 | 0.796/0.815 |-| Z=0.5, CORR=−0.5 | 61.26 | 74.55 | 0.0180 | 0.840 |-| **Z=0.5, CORR=−0.8(提交)** | **61.48** | **75.41** | 0.0190 | 0.852 |-| Z=0.5, CORR=−1.0 | 61.50 | 75.51 | 0.0203 | 0.856 |-| 提交配置 seed 1 | 60.67 | 73.72 | – | – |+| 配置 | board | cell_state | expression_change | shape_scale | local_spatial |+|---|---:|---:|---:|---:|---:|+| **alpha=0(出厂,=node4)** | **61.48** | **53.88** | 60.08 | 74.25/75.41 | 57.77 |+| fwd alpha=0.05 | 56.87 | 36.13 | 60.22 | 75.41 | 55.73 |+| fwd alpha=0.1 | 54.74 | 30.45 | 60.25 | 75.41 | 52.83 |+| fwd alpha=0.2 | 48.98 | 21.75 | 60.31 | 68.46* | 45.39 |+| rev alpha=0.2 | 59.97 | 49.21 | 60.11 | 75.41 | 55.16 | -seed 0/1 均值 61.08 vs 基线 59.88(+1.2);seed 间波动 ~0.8(大于父节点报告的 0.15,因坐标校正放大了抽样差异),增益主要来自 shape_scale +5~7,远超噪声。查分额度用尽(20/20,其中 4 次因输出管道故障对同一批文件重复查分),seed 2 未验证。+(*fwd alpha=0.2 的 shape_scale 下降是 local_spatial 组联带,坐标本身未改;d2_shape 仍 0.01902。)++## 结论:为什么两方向都失败(生物学解释)++cell_state 在**组成比**上已近最优,任何把细胞表达态往某一端拉的都远离目标流形:+- copy_last(100% 早端 E6.75)cell_state = 49.29;mix MIX_S=0.5(80% 早 / 20% 晚)= 53.88 —— **80/20 优于 100/0**,说明少量晚端细胞有益,目标 E7.25 的转录态夹在中间、更靠近早端但非纯早端。+- `fwd` 把早端细胞推向晚端 barycentric 像 → 有效组成右移 + 熵正则把早端平均成 off-manifold 的“平均晚端”谱 → cell_state 崩到 21.75。+- `rev` 把晚端细胞拉向早端 → 有效组成左移、逼近 copy_last 的 49.29 → cell_state 49.21,仍低于 53.88。+- 位移对 alpha 极敏感(fwd alpha=0.05 已掉到 36.13),因为 eps=0.1 的 barycentric 像是几十个远端晚端细胞的均值,非任何真实目标细胞;混入 5% 即破坏离散态。这与 node 3 的 T2EI-01(per-type 常向量位移)单调失败同源:**目标表达态离早端比离“向晚端位移”更近**,逐细胞版本同样成立。++因此 local_ot 表达位移族在本插值榜上无正增益区间,出厂取边界 alpha=0(逐位等于 node 4,非回归)。这不是把别的方法冒充 local_ot——机制已完整实现并双向扫描证伪。  ## 验证过 / 没验证过 -- 验证过:默认配置跑通 proxy(~2 s、内存 <0.5 GB)、vec-check ok、关闭对照逐位等于 node 3、默认输出逐位等于扫描时的 −0.8 配置、seed 1 可复现且增益保持。-- 没验证过:final 视图(t_geo=1/3,corr=−0.8·(1/3−1/6)=−0.133;校正随 t 差自然缩放,方向合理但未实测);seed 2;Z_INTERP 与 SHAPE_CORR 的联合细扫(z 固定 0.5 扫 corr);−0.8 与 −1.0 在 A 半并列,取 −0.8 为平台内侧更保守值。-- 风险:负系数在 proxy 上单调到平台,若 final 的括号几何不同(真实 E7.25↔E8.0 增长更快),−0.133 的组间尺度差可能偏大;但校正幅度 ∝ (t−t_mix),t 越小自动越弱。+- 验证过:默认 alpha=0 跑通 proxy(~1.4 s、内存 <0.4 GB、纯 CPU)、vec-check ok、关闭对照逐位等于 node 4(seed 0)、fwd 4 档 + rev 1 档的单调劣化、坐标组在所有 alpha 下逐位不变(机制只动表达)。+- 没验证过:eps 细扫(0.05/0.2)——因 alpha 在 0.05 即大幅劣化、方向已判死,按 PLAN risk#1「alpha=0.1 即差≥1 分立即放弃不细扫」停止;rev 的 alpha=0.4 已生成但既然 rev alpha=0.2 已单调劣化未查分;final 视图(t=1/3,共享基因/细胞数不同,但 alpha=0 出厂使传输恒关闭,final 输出=node4 管道,迁移风险仅继承自 node 4);seed 1/2(alpha=0 对任意 seed 逐位等于 node 4,无需单独复核传输)。+- 查分额度:用 4/20(fwd 0.1/0.2、rev 0.2、fwd 0.05),余 16。++## 下一步建议(供后续节点)++1. **放弃 local_ot 表达位移**:本节点已双向证伪,勿再投入。cell_state 的杠杆在**组成比**而非表达位移——试微调 MIX_S(如 0.45/0.55)或按类型的差异化混合权重,而非搬移已选细胞的表达。+2. 沿 node 4 的坐标建议继续(同属坐标二阶矩族,非 local_ot):固定 SHAPE_CORR=−0.8 联合细扫 Z_INTERP∈{0.3,0.5,0.7},或做分组 xy 各向异性/主轴伸长率校正攻 shape_scale 的残余 d2_shape≈0.019。+3. expression_change(60.08)几乎不随任何机制动(DE 方向对位移不敏感),非高杠杆组。  ## 知识来源 -- 胚胎发育中整体尺寸随时间单调增长、不同谱系空间占位随发育重排:通用发育生物学机制知识(不针对禁窗阶段的定量信息)。-- z 为离散切片轴、三维旋转会拧斜切片:任务方法卡(T2 方法卡“坐标系”节)。-- 其余全部参数由 proxy 视图现场扫描确定,未使用任何保留阶段/基因型信息。+- 通用发育机制:胚胎发育中转录态随时间连续演进、目标阶段的细胞态夹在两括号阶段之间且更靠近时间较近的一端——不针对禁窗阶段的定性知识。+- 熵正则 OT / Sinkhorn、barycentric 投影为凸组合故落在数据支撑上:最优传输通用算法知识。+- 全部参数(eps、alpha、方向、共享基因阈值)与「机制无正增益」的结论由 proxy 视图现场扫描确定,未使用任何保留阶段/基因型的实测信息。diff --git a/solution/run.py b/solution/run.pyindex b3682ee..d970542 100644--- a/solution/run.py+++ b/solution/run.py@@ -51,7 +51,7 @@ from src.task2_spatial.frame import align_pair, log_interp, rms_radius, scale_to from src.task2_spatial.methods import _jitter, _pack_expr from src.task2_spatial.sample import interp_count, mix_indices, take from src.task2_spatial.shift import type_means-from src.task2_spatial.transport import as_dense+from src.task2_spatial.transport import as_dense, stratified_choice, _sqdist from src.task2_spatial.view_io import board_params, interp_bracket, load_manifest, panel_genes, read_stage, write_t2  PARAMS = {"align": "procrustes3d", "scale_damp": float(os.environ.get("T2_SCALE_DAMP", "0.5"))}@@ -60,10 +60,89 @@ SHAPE_CORR = float(os.environ.get("T2_SHAPE_CORR", "-0.8")) ZI = float(os.environ.get("T2_Z_INTERP", "0.5")) ALPHA = float(os.environ.get("T2_TYPE_ALPHA", "0.0")) CENTER = bool(int(os.environ.get("T2_TYPE_CENTER", "0")))+TR_ALPHA = float(os.environ.get("T2_TRANSPORT_ALPHA", "0.0"))+TR_EPS = float(os.environ.get("T2_TRANSPORT_EPS", "0.1"))+TR_DIR = os.environ.get("T2_TRANSPORT_DIR", "rev")+TR_MAX_LATE = int(os.environ.get("T2_TRANSPORT_MAX_LATE", "20000"))+MIN_SHARED_GENES = 50 MIN_TYPE_CELLS = 5  -def mix_pipeline(stage_a, stage_b, t, params, mix_s, alpha, center, shape_corr=0.0, z_interp=0.0):+def ot_forward_shift(expr, stage_a, stage_b, n_from_a, alpha, eps, seed, direction="fwd"):+    """PLAN T2EI-02 family: per-cell entropic-OT displacement of expression.++    direction="fwd": the EARLY selected cells move toward their barycentric+    images in the late stage (proxy verdict: monotonically harmful, cell_state+    53.9 -> 30.5 -> 21.8 for alpha 0.1/0.2, same failure root as T2EI-01).+    direction="rev": the LATE selected cells move toward their barycentric+    images in the full early stage (late cells are the cell_state liability;+    pulling them back is the mirror hypothesis).++    Coupling: balanced Sinkhorn (entropy reg eps, <=100 iters) on squared+    Euclidean distance of per-gene standardized expression over genes covered+    in BOTH stages (median-normalized cost). The barycentric image is a convex+    combination of source cells' raw full-panel vectors, so displaced values+    stay on the data support. Auto-off when too few shared genes or the moved+    group is empty. Deterministic: its own rng stream, independent of the+    pipeline rng (alpha=0 reproduces the parent bitwise, coords untouched).+    """+    info = {"tr_shared_genes": None, "tr_n_src": None, "tr_disp_mean": None, "tr_disp_sd": None}+    if alpha == 0.0:+        return expr, info+    n = expr.shape[0]+    if direction == "fwd":+        if n_from_a <= 0:+            return expr, info+        moved = slice(0, n_from_a)+        src_stage, src_max = stage_b, TR_MAX_LATE+    else:+        if n - n_from_a <= 0:+            return expr, info+        moved = slice(n_from_a, n)+        src_stage, src_max = stage_a, TR_MAX_LATE+    cov_a = np.asarray(stage_a.X.getnnz(axis=0)).ravel() > 0+    cov_b = np.asarray(stage_b.X.getnnz(axis=0)).ravel() > 0+    shared = np.flatnonzero(cov_a & cov_b)+    info["tr_shared_genes"] = int(shared.size)+    if shared.size < MIN_SHARED_GENES:+        return expr, info+    rng_ot = np.random.default_rng(int(seed) + 104729)+    ns = src_stage.n+    if ns > src_max:+        idx_s = np.sort(stratified_choice(src_stage.labels, src_max, rng_ot))+    else:+        idx_s = np.arange(ns)+    info["tr_n_src"] = int(idx_s.size)++    A = expr[moved][:, shared].astype(np.float64)+    Sraw = as_dense(src_stage.X, idx_s).astype(np.float64)+    S = Sraw[:, shared]+    joint = np.vstack([A, S])+    mu = joint.mean(axis=0)+    sd = joint.std(axis=0) + 1e-8+    Az = (A - mu) / sd+    Sz = (S - mu) / sd+    cost = _sqdist(Az, Sz)+    cost /= np.median(cost) + 1e-8+    K = np.exp(-cost / max(float(eps), 1e-6))+    del cost, joint, Az, Sz+    u = np.ones(K.shape[0])+    v = np.ones(K.shape[1])+    for _ in range(100):+        u = 1.0 / (K @ v + 1e-300)+        v = 1.0 / (K.T @ u + 1e-300)+    P = u[:, None] * K * v[None, :]+    rows = P.sum(axis=1, keepdims=True) + 1e-300+    mu_img = (P @ Sraw) / rows+    disp = mu_img - expr[moved].astype(np.float64)+    info["tr_disp_mean"] = float(np.linalg.norm(disp, axis=1).mean())+    out = expr.copy()+    out[moved] = np.clip(expr[moved] + float(alpha) * disp, 0.0, None).astype(np.float32)+    info["tr_disp_sd"] = float(np.linalg.norm(disp, axis=1).std())+    return out.astype(np.float32), info+++def mix_pipeline(stage_a, stage_b, t, params, mix_s, alpha, center, shape_corr=0.0, z_interp=0.0, tr_alpha=0.0, tr_eps=0.1, tr_dir="rev"):     t = float(t)     t_mix = float(np.clip(t * mix_s, 0.0, 1.0))     damp = float(params.get("scale_damp", 1.0))@@ -110,10 +189,14 @@ def mix_pipeline(stage_a, stage_b, t, params, mix_s, alpha, center, shape_corr=0         )         expr = within_type_shift(expr, stage_a, stage_b, labels_sel, ia.size, t, alpha, center) +    expr, tr_info = ot_forward_shift(expr, stage_a, stage_b, int(ia.size), float(tr_alpha), float(tr_eps), int(params.get("seed", 0)), tr_dir)+    info.update(tr_info)+     coords = _jitter(np.vstack(coord_parts), rng)     coords = scale_to_rms(coords, target_rms)     info.update(         t=t, t_mix=t_mix, mix_s=mix_s, alpha=alpha, shape_corr=float(shape_corr), corr=corr, z_interp=float(z_interp),+        tr_alpha=float(tr_alpha), tr_eps=float(tr_eps), tr_dir=str(tr_dir),         n=int(expr.shape[0]),         rms_a=rms_a, rms_b=rms_b, target_rms=target_rms, out_rms=rms_radius(coords),         rms_out_a=rms_radius(coords[: ia.size]) if ia.size else None,@@ -166,8 +249,8 @@ def main() -> None:     stage_a = read_stage(args.data, a, genes)     stage_b = read_stage(args.data, b, genes)     params = board_params(manifest, "mix", PARAMS, args.seed)-    expr, coords, info = mix_pipeline(stage_a, stage_b, t, params, MIX_S, ALPHA, CENTER, SHAPE_CORR, ZI)-    keep = {k: info.get(k) for k in ("t", "t_mix", "shape_corr", "corr", "z_interp", "n", "rms_a", "rms_b", "target_rms", "out_rms", "rms_out_a", "rms_out_b", "n_shared_types", "z_dot", "z_flipped", "align", "n_from_a", "n_from_b")}+    expr, coords, info = mix_pipeline(stage_a, stage_b, t, params, MIX_S, ALPHA, CENTER, SHAPE_CORR, ZI, TR_ALPHA, TR_EPS, TR_DIR)+    keep = {k: info.get(k) for k in ("t", "t_mix", "shape_corr", "corr", "z_interp", "n", "rms_a", "rms_b", "target_rms", "out_rms", "rms_out_a", "rms_out_b", "n_shared_types", "z_dot", "z_flipped", "align", "n_from_a", "n_from_b", "tr_alpha", "tr_eps", "tr_dir", "tr_shared_genes", "tr_n_src", "tr_disp_mean", "tr_disp_sd")}     print(json.dumps({"bracket": [a["stage"], b["stage"]], **keep}, default=float), file=sys.stderr)     write_t2(args.out, expr, coords, 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
k024World-model evaluation dimensions for state-transition predictorsnotes/competition/07_biomedical_world_models.md

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

改了什么按 PLAN 实现了 local_ot 方法族:在 node 4 管道后只改表达、不动坐标的熵正则 Sinkhorn 逐细胞位移(共享覆盖基因 465、barycentric 凸组合落数据支撑、独立 rng),并加了镜像方向 rev;proxy 上双向证伪后出厂取 T2_TRANSPORT_ALPHA=0,故交付输出与 node 4 逐位相同(四组 delta 全 +0.00)。
各组分数的变化cell_state:噪声内/无变化:53.88 vs 53.88(+0.00);注:proxy 上机制开启时本组单调劣化(fwd α=0.1→30.45、α=0.2→21.75,rev α=0.2→49.21),故被关闭
expression_change:噪声内/无变化:60.08 vs 60.08(+0.00,出厂 alpha=0 机制关闭,逐位等于父)
local_spatial:噪声内/无变化:59.07 vs 59.07(+0.00)
shape_scale:噪声内/无变化:74.25 vs 74.25(+0.00,坐标管道逐位保留,机制只动表达)
family_idlocal_ot
假设是否成立否
经验
  1. 在 T2 插值榜上,对已选细胞做表达空间 OT 位移(无论早端推向晚端 fwd,还是晚端拉回早端 rev)都单调劣化 cell_state:proxy board 从 α=0 的 61.48 掉到 fwd α=0.05/0.1/0.2 的 56.87/54.74/48.98、rev α=0.2 的 59.97,与 node 3 的 per-type 常向量位移(T2EI-01)同源失败。
  2. cell_state 对位移幅度极敏感:fwd α=0.05(仅混入 5%)即把 cell_state 从 53.88 打到 36.13——因 eps=0.1 的 barycentric 像是几十个远端细胞的均值、是 off-manifold 的"平均谱",非任何真实目标态,少量混入即破坏离散细胞态。
  3. 80/20 组成比的 cell_state(53.88)已优于纯早端 copy_last(49.29),说明目标转录态夹在两括号之间、更靠近早端但非纯早端;任何把表达态整体往某一端搬的位移都远离目标流形——cell_state 的杠杆在组成比而非搬移已选细胞。
  4. 熵正则 OT 位移确实逐细胞非均匀(fwd α=0.2 位移范数 mean=24.73、sd=1.67,坐标组在所有 α 下逐位不变),即机制被正确实现并验证生效,但方向本身错误;干净负结果也应以 alpha=0 边界出厂保持逐位非回归。
mechanism_active否
下一步建议
  1. 放弃 local_ot 表达位移(本节点已双向证伪,勿再投入);针对 cell_state 组改试组成比杠杆:微调 MIX_S∈{0.45,0.55} 或按类型的差异化混合权重,而非搬移已选细胞的表达。
  2. 针对 shape_scale 组沿 node 4 坐标二阶矩族继续:固定 SHAPE_CORR=−0.8 联合细扫 Z_INTERP∈{0.3,0.5,0.7},或做分组 xy 各向异性/主轴伸长率校正攻残余 d2_shape≈0.019。
  3. expression_change(60.08)几乎不随任何机制变动、对位移不敏感,非高杠杆组,不建议再单独投入。

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

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

分析员

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

工程师

角色工程师 alibaba-token-plan-cn/qwen3.8-max
调用次数1 次
轮数35
工具调用共 40 次:bash 26、edit 10、read 3、write 1
用时13 分
token 数输入 72,929 · 输出 14,481 · 思考 10,796
任务(第一行)按计划修改程序:早端细胞的表达空间 OT 前向位移(T2EI-02,局部保邻域)
最后的回答(摘录)
Done. Final summary:

**做了什么**:按 PLAN 实现 `local_ot` 方法族——node 4 管道后只改表达、不动坐标的熵正则 Sinkhorn 逐细胞位移(共享覆盖基因 465 个、barycentric 凸组合落数据支撑、独立 rng、eps=0.1、≤100 迭代),并加了镜像方向 `rev`(晚端拉回早端)。关闭对照 `T2_TRANSPORT_ALPHA=0` 与 node 4 **逐位相同**(X/坐标 max diff=0)。

**查分结果**(proxy A 半,用 4/20 次):机制**双向证伪**,board 从 alpha=0 的 61.48 单调下降——fwd α=0.05/0.1/0.2 → 56.87/54.74/48.98(cell_state 36.1/30.5/21.8),rev α=0.2 → 59.97(cell_state 49.2)。坐标组(shape_scale 75.41、d2_shape 0.019)在所有 alpha 下逐位不变,证实机制只动表达。根因:80/20 组成比的 cell_state(53.88)已优于纯早端 copy_last(49.29),任何把表达态往某一端搬的位移都远离目标流形,与 node 3 T2EI-01 同源。**出厂取 alpha=0**(非回归、逐位等于 node 4,rank3≈61.49),如实报告为 local_ot 族的干净负结果,未冒充成其它方法。vec-check 在 seed 0/1 均 ok,纯 CPU。

**下一步最值得试**:(1) 放弃 local_ot 表达位移;cell_state 的杠杆在**组成比**而非搬移已选细胞——微调 MIX_S(0.45/0.55)或按类型差异化混合权重。(2) 沿 node 4 坐标族继续:固定 SHAPE_CORR=−0.8 联合细扫 Z_INTERP∈{0.3,0.5,0.7},或分组 xy 各向异性校正攻 shape_scale 残余 d2_shape≈0.019。
原始记录位置/home/spark-longxinyang/vec/runs/formal/20261002-204524-search-t2-embryo-interp-g24q/nodes/5/engineer.jsonl 234 KB
/home/spark-longxinyang/vec/runs/formal/20261002-204524-search-t2-embryo-interp-g24q/nodes/5/engineer.stderr

调研员

角色调研员 alibaba-token-plan-cn/qwen3.8-max
调用次数1 次
轮数1
工具调用共 0 次:—
用时2 分
token 数输入 10,620 · 输出 1,314 · 思考 2,998
任务(第一行)为节点 n5(改进,父节点 n4)写改进计划 PLAN.json
最后的回答(摘录)
37.49,说明晚端细胞离目标表达态很远,是混入 20% 晚端细胞拉低 cell_state 的主因;而 node 3 对'晚端表达位移'唯一一次尝试(T2EI-01 per-type 均值位移)单调失败(36.2→30.0→27.3),该方向尚未被'逐细胞、非均匀'版本检验过。本节点不动坐标(保住 +5.16 的 shape_scale),专攻表达组。",
 "approach": "在 node 4 管道后只改表达、不动坐标:1) 对被抽中的早端细胞(ia 部分)与全部晚端细胞,在共享基因上做表达距离(标准化后欧氏/余弦)的 Sinkhorn 熵正则 OT(balanced,eps 初值 0.1、候选 {0.05,0.1,0.2},迭代 ≤100,用 numpy 即可,≤50 行);2) 每个早端细胞的 barycentric 像 mu_i = Σ_j P_ij·X_b[j]/行和,位移 X_i ← X_i + ALPHA·(mu_i − X_i),在全基因面板原始值上做(barycentric 像是凸组合,天然回到数据支撑上);3) 晚端细胞表达一律不动(证据:晚端细胞对 cell_state 是负资产,前移早端比后拉晚端安全);4) ALPHA 扫描 {0.1,0.2,0.4,0.7},env T2_TRANSPORT_ALPHA 默认 0;坐标管道(SHAPE_CORR=-0.8、Z_INTERP=0.5、scale_to_rms)逐位保留。单输入阶段退路:无括号时只有一个输入阶段,OT 两端同集合→位移为零、输出等于父行为,自然退化;若阶段间共享基因过少(<500)同样自动关闭。vec-score 筛选:先查 ALPHA=0 的 seed 0 确认逐位重现父 A 半 61.48(1 次);粗扫 4 个 ALPHA(seed 0);最优配置再用 seed 1 复核,两均值 >61.82+1 才提交。预算约 8/20 次,留余量给 eps 单点调整。",
 "expected_groups": ["cell_state", "expression_change"],
 "risks": "1) 目标可能离早端比 OT 前移更近(类似 T2EI-01 失败的根因):若 ALPHA=0.1 即比基线差 ≥1 分,说明方向错,立即放弃不细扫。2) 大 cost 矩阵内存/耗时:细胞数 >4 万时用每组 ≤2 万的随机子采样算 P,或退化为每早端细胞取余弦最近邻晚端细胞做位移;先小样本(5k 细胞)跑通再全量,运行 >60 s 即换近邻版。3) barycentric 平滑效应抹平表达离散度、反伤 cell_state:查分时同时看 cell_state 与 expression_change,若两者同降即停止。4) 输出管道故障曾浪费 4 次查分(node 4 教训):首次查分前先确认文件写出正常。",
 "family_id": "local_ot",
 "mechanism": "以表达空间熵正则 OT 在早端选中细胞与晚端细胞间建立逐细胞耦合,每个早端细胞沿其 barycentric 像方向移动 ALPHA 倍的位移,晚端细胞不动;位移场由数据耦合结构决定且逐细胞异质。",
 "vs_constant_shift": "node 3 失败的是 per-type 常向量(每型均值差、型内所有细胞同一位移);本方案每细胞位移向量互不相同,由表达相似性耦合给出,型内位移有连续谱;且只前移早端、不动晚端,不是组成重加权也不是全局平移。若对照发现位移型内方差≈0,则说明退化为常数位移、机制未成立。",
 "mechanism_evidence": "a) ALPHA=0 时输出与 node 4 逐位相同(坐标与晚端表达 max diff=0,A 半 61.48);b) 位移范数的型内标准差显著 >0 且与 per-type 均值位移的型内残差大(证明非均匀);c) cell_state 较 53.88 提升 >1(超 T2 噪声)且 seed 0/1 均保持,expression_change 不降;d) 免费一致性检查:shape_scale 74.25、local_spatial 59.07 应基本不变(只动表达),若明显变化说明坐标管道被意外改动。",
 "mechanism_off_control": "T2_TRANSPORT_ALPHA=0 跳过位移步骤,同一程序输出应与 node 4 逐位相同(表达与坐标 max diff=0,A 半 61.48);预期差别仅在 ALPHA>0 时:cell_state 上升、型内位移出现离散谱,其余三组不动。若 ALPHA=0 与父输出有任何非零差异,先修回归再继续。"}
```
原始记录位置/home/spark-longxinyang/vec/runs/formal/20261002-204524-search-t2-embryo-interp-g24q/nodes/5/researcher.jsonl 5 KB
/home/spark-longxinyang/vec/runs/formal/20261002-204524-search-t2-embryo-interp-g24q/nodes/5/researcher.stderr

审查员

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