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

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

节点 n11 在终选来历上

父节点 mix+κ=0.65+side-b 中间态选胞不变;新增 b 侧坐标占据扩张:被选晚端细胞绕输出云质心做 xy 径向膨胀 γ=1.15(z 不动),补偿组成阻尼的空间占据损失。

运行?一次完整的自动搜索或 Agent 会话,有自己的锁定配置和证据包。20261003-043412-search-t2-embryo-interp-g24-D-s1
父节点n7
子节点n13
操作?种子:人写的起点;改进:在父节点上改;草稿:从头写;修复:修父节点的报错。改进
状态已打分
分数搜索目标分 62.15(+0.4) · proxy 62.15(+0.4) · 3 次复测均分 62.13
审查通过 1 越界读取:未发现问题——run.py 全部数据访问经 src.task2_spatial.view_io 的 load_manifest/panel_genes/read_stage(args.data, ...)(run.py:56,213-225),无绝对路径、'..'、/mnt、/home、data/raw、downloads,未 import src/common/evaluation 或打分器,无 requests/urllib/subprocess 等联网或外部进程调用;README.md:5 提到的 data/processed/t2/... 只是文档里的对照说明,代码中无…
用时?从运行开始到结束(或到现在)的挂钟时间。22 分
程序版本24da73d48b89e48cb7210ae22531a5e26e94bab3 (programs.git)

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

来自 programs.git 24da73d48b:solution/METHOD.md

父节点 mix+κ=0.65+side-b 中间态选胞不变;新增 b 侧坐标占据扩张:被选晚端细胞绕输出云质心做 xy 径向膨胀 γ=1.15(z 不动),补偿组成阻尼的空间占据损失。

方法(family T2EI-05,improve over node 7)

父流程完全保留:interp_bracket、procrustes3d 对齐、scale_damp=0.5 目标 RMS、 κ=0.65 组成阻尼、side-b 型内中间态偏好选胞(SEL_P=1.0,blend 质心)、 jitter + 终缩放。本节点只在其后加一步坐标占据扩张(PLAN T2EI-05):

  • 提交配置:SPREAD_MU=global, SPREAD_AXES=xy, SPREAD_CAP=1.15。 对被选入输出的全部 b 侧(晚端括号)细胞:x' = g + (x − g)·γ,g 为 a+b 堆叠云(扩张前)的质心,γ=1.15;只作用 xy 两列,z 是离散切片轴 (30–40 层、间距 10–15),离开切片栅格会直接砸 occupancy。
  • 扩张在 jitter 与终缩放(scale_to_rms 到 target_rms)之前执行,全局 RMS 仍精确等于 target(out_rms=149.228=target_rms),表达、细胞数、 组成、选胞结果均逐位不变——机制只改坐标。
  • PLAN 原型(绕各型质心 μ_c、f_c=min(1+α(n_c/k_c−1),cap)、k_c<3 跳过) 已实现保留(SPREAD_MU=type),但在代理上被证伪(见下)。
  • 单输入退路:无括号、无 b 侧,扩张自动跳过,与父节点一致。

机制证据(mechanism_evidence)

  • b 侧共有型 n_c/k_c ≈ 24.5 且几乎与型无关(n_b=1300 vs E8.0 31671 细胞, 比例分配):α∈{0.15,0.3,0.5} 全部饱和到 cap,α 搜索退化,唯一有效旋钮 是 cap 本身(f_c≡cap,11 个共有型全部被扩张,无 k_c<3 跳过;实测 k_c∈{5..227})。机制确实运行:b 侧细胞到质心平均距离比 = f = 1.15。
  • 四组分变化(A 半,seed 0,父 60.74 → 提交 61.14): shape_scale 71.27→72.18(d2_shape 0.0192→0.0123),local_spatial 58.36→59.03,expression_change 60.50→60.50、cell_state 52.84→52.84 (坐标机制按设计不碰这两组)。occupancy_dice 0.79→0.772 微降、被 d2_shape 改善抵消有余。seed 1:61.62(shape 72.28,local 60.00)。
  • 与常数位移的区别:绕质心的径向膨胀改变的是 b 侧云的离散度/占据范围, 不是型均值的平移;每细胞位移与其到质心的偏移成正比,方向各异。

机制对照(mechanism_off_control)

SPREAD_ALPHA=0 关闭扩张:输出与父节点 7 的预测逐位一致(本地 h5py 逐数组比对 True),代理 A 半即父分 60.74。打开(γ=1.15)61.14 / seed1 61.62。机制净贡献:榜分 +0.4(seed0,A 半噪声 ~1 内),shape_scale +0.91、local_spatial +0.67(方向一致、只落在坐标相关组,符合机制预期)。

代理查分全表(E6.75+E8.0→E7.25,t=0.4,seed 0,A 半)

配置榜分shapediced2_shapelocal
父 node 7(γ=1)60.7471.27~0.79~0.01958.36
type-wise xyz cap1.259.6166.550.7460.025158.54
type-wise xyz cap1.6(PLAN 默认)57.0156.170.6390.060058.51
type-wise xy cap1.360.2968.790.7550.019259.02
type-wise xy cap1.658.4761.450.6970.038559.06
global xyz γ1.160.3069.530.7560.017458.31
global xy γ1.0561.0571.810.7900.015759.06
global xy γ1.161.1572.180.7830.013859.07
global xy γ1.15(提交)61.1472.180.7720.012359.03
global xy γ1.261.1672.250.7660.011559.03
global xy γ1.3560.6270.200.7350.013458.93
global xy γ1.559.5265.880.6850.020958.87

结论:PLAN 的型内扩张(绕型质心)单调有害——把细胞撒进参考不占据的体素, dice 崩;γ 全局膨胀在 1.05–1.2 有平台,取中值 1.15。z 向扩张有害 (xyz vs xy 同 γ 差 ~0.9 分),与方法卡"z 是离散切片"的警告一致。

验证过 / 没验证

  • 验证:默认输出 = 查分 61.14 的文件逐位一致;seed 0 重跑确定性; seed 1 通过 vec-check 且 61.62;SPREAD_ALPHA=0 与父逐位一致; vec-check seed 0/1 均 ok;运行 ~2s、内存远低于 28GB。
  • 未验证:final 真实括号(E7.25+E8.0→E7.5,t=1/3)上 γ=1.15 的迁移性—— γ 是常数而非随 n_c/k_c 自适应(κ 固定 0.65,t 变化只改 n_b 总量, b/a 占据失衡的方向相同);B 半与 A 半有 ~1 分噪声。榜分增幅 +0.4 在噪声内,但改动只影响坐标两组且方向一致(shape +0.9 / local +0.7), 期望 B 半 rank3 为正。
  • 生物学依据(通用知识,不涉禁窗测量):z 为离散切片栅格(方法卡), 插值目标的空间占据应介于两括号之间;组成阻尼减少晚端细胞后其占据 区域欠采样,径向膨胀恢复覆盖而不改变细胞身份。

下一步建议

γ 与 κ 联调(κ=0.75 side-b 代理 60.54、shape 72.08,配 γ≈1.1 可能更高); occupancy_dice 仍是 shape 短板(0.77 vs node2 的 ~0.84),可试按体素占据 缺失方向的非各向同性补偿,或对被丢弃 b 细胞做"占据幽灵"仅参与坐标侧。

调研员的计划

名称κ=0.65 选胞不变 + b 侧型内坐标占据扩张补偿 shape_scale
动机父节点 7 的 shape_scale 71.62 比 node 2 的 74.43 低 2.81,ANALYSIS 明确归因于 κ=0.65 使晚端占比 0.40→0.26、occupancy_dice 降至 0.80。cell_state 54.35 是最大收益组不能动,但 shape_scale 是唯一可回收的失分组。node 8 已证伪 FPS 覆盖采样和 z 切片,node 6 的 damp 调整只解决全局 RMS 不解决局部占据。需要一种不改变表达/组成、只修正 b 侧坐标覆盖的机制。
做法在父节点 7 完整流程(κ=0.65、side-b midstate 选胞)之后,增加一步 b 侧型内坐标占据扩张:

1. 对每个 b 侧共有型 c,记该型在 b 括号中的总细胞数 n_c、被选入的细胞数 k_c。
2. 计算该型全部 n_c 个细胞的空间质心 μ_c(用对齐后的坐标)。
3. 对被选中的 k_c 个 b 侧细胞,坐标更新为 x_i' = μ_c + (x_i − μ_c) × (1 + α·(n_c/k_c − 1)),α 为扩张阻尼。
4. α 初值 0.3,搜索 {0.15, 0.3, 0.5};上限 cap:扩张因子不超过 1.6。
5. 仅作用于 b 侧共有型(与选胞范围一致);a 侧和独有型坐标不动。
6. 扩张后执行已有的终缩放(RMS rescale),保持全局尺度不变。

vec-score 快速筛选:先在代理视图(E6.75+E8.0→E7.25)上跑 α∈{0.15,0.3,0.5},看 shape_scale 是否回升且 cell_state 不掉;最优配置再查 2 次确认(T2 噪声 ~1 分)。若 α=0.3 时 shape_scale 未超父节点 +1.5,则尝试 α=0.5 或将 cap 放宽到 1.8。

单输入退路:只有一个输入阶段时无括号、无 b 侧,扩张步骤自动跳过(与父节点一致)。

κ 不再重调(保持 0.65),避免与坐标修正混淆。
风险1) 扩张可能破坏 local_spatial(型边界处邻域关系被拉伸)——Engineer 应同时监控 local_spatial,若下降 >1.5 则降 α 或仅对池 ≥10 细胞的型做扩张。2) 型内细胞数极少时(k_c=1 或 2),扩张无意义或过度——对 k_c<3 的型跳过。3) 终缩放可能部分抵消扩张效果——若出现,可在终缩放前做扩张、或在终缩放后按残余比例补一次微调。4) 代理视图与 final 的 t 不同(0.4 vs ~0.33),n_c/k_c 比值会变化,但机制本身自适应(比值越大扩张越强),不需要硬编码。

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

对比:父节点版本 d040eb4831。改动的文件:solution/METHOD.md +65 −50、solution/run.py +104 −8

diff --git a/solution/METHOD.md b/solution/METHOD.mdindex d2f0373..986b055 100644--- a/solution/METHOD.md+++ b/solution/METHOD.md@@ -1,65 +1,80 @@-mix + 型内中间态偏好选胞(b 侧)+ 组成阻尼 κ=0.65:共有型内按到 (1−t)μ_a+tμ_b 混合质心的距离取最近细胞,仅作用于晚端括号。+父节点 mix+κ=0.65+side-b 中间态选胞不变;新增 b 侧坐标占据扩张:被选晚端细胞绕输出云质心做 xy 径向膨胀 γ=1.15(z 不动),补偿组成阻尼的空间占据损失。 -## 方法(family T2EI-09,improve over node 2)+## 方法(family T2EI-05,improve over node 7) -父节点 mix 流程不变:interp_bracket 取目标两侧最近输入,procrustes3d 对齐,-scale_damp=0.5 的 log 线性目标 RMS,细胞数 log 线性后夹 [min_cells, max_cells],-表达与坐标同行搬运,jitter + 终缩放同 `methods.interpolate`。+父流程完全保留:interp_bracket、procrustes3d 对齐、scale_damp=0.5 目标 RMS、+κ=0.65 组成阻尼、side-b 型内中间态偏好选胞(SEL_P=1.0,blend 质心)、+jitter + 终缩放。本节点只在其后加一步**坐标占据扩张**(PLAN T2EI-05): -三处改动(全部从 view 数据现场计算,无硬编码统计量):+- 提交配置:`SPREAD_MU=global, SPREAD_AXES=xy, SPREAD_CAP=1.15`。+  对被选入输出的全部 b 侧(晚端括号)细胞:x' = g + (x − g)·γ,g 为+  a+b 堆叠云(扩张前)的质心,γ=1.15;只作用 xy 两列,z 是离散切片轴+  (30–40 层、间距 10–15),离开切片栅格会直接砸 occupancy。+- 扩张在 jitter 与终缩放(scale_to_rms 到 target_rms)**之前**执行,全局+  RMS 仍精确等于 target(out_rms=149.228=target_rms),表达、细胞数、+  组成、选胞结果均逐位不变——机制只改坐标。+- PLAN 原型(绕各型质心 μ_c、f_c=min(1+α(n_c/k_c−1),cap)、k_c<3 跳过)+  已实现保留(`SPREAD_MU=type`),但在代理上被证伪(见下)。+- 单输入退路:无括号、无 b 侧,扩张自动跳过,与父节点一致。 -1. **型内中间态偏好选胞(PLAN 机制)**:对两括号共有的每个细胞型 c,在按基因-   z-score(两阶段合并估计 μ/σ)的面板空间里计算混合质心-   m_c = (1−t)·μ_a(c) + t·μ_b(c)(t 为括号内目标时间位置,来自 manifest)。-   `SEL_SIDE=b`:只对晚端(b 侧)细胞按 ‖z_i − m_c‖ 升序取该型配额-   (SEL_P=1.0 全确定性;SEL_C=0 无软化);a 侧与独有型、池 <5 细胞的型保持-   分层均匀随机。配额分配与 `stratified_choice` 完全一致(同比例、同余数规则)。-2. **组成阻尼 κ=0.65**(PLAN 风险 4 允许的组合,机制确认有效后加入):-   n_b = round(κ·t·n),晚端细胞占比从 0.40 降到 0.26。-3. 开关:`SELECTION=uniform` 关闭机制 1(机制对照),κ、side、target 模式均为-   环境变量,提交默认 = 最优配置(机制打开)。+## 机制证据(mechanism_evidence) -生物学依据(通用机制知识,不针对禁窗):插值目标的细胞应处于两端之间的转录-状态;同一型内靠近对侧/混合质心的细胞代表已沿该谱系轨迹前进的个体(连续发育-而非离散类型),优先抽它们使输出群体向中间态集中;晚端细胞在组成上过量-(node 5 已证明组成阻尼有效),故阻尼与"晚端细胞向中间态收"组合。+- b 侧共有型 n_c/k_c ≈ 24.5 且几乎与型无关(n_b=1300 vs E8.0 31671 细胞,+  比例分配):α∈{0.15,0.3,0.5} 全部饱和到 cap,α 搜索退化,唯一有效旋钮+  是 cap 本身(f_c≡cap,11 个共有型全部被扩张,无 k_c<3 跳过;实测+  k_c∈{5..227})。机制确实运行:b 侧细胞到质心平均距离比 = f = 1.15。+- 四组分变化(A 半,seed 0,父 60.74 → 提交 61.14):+  shape_scale 71.27→72.18(d2_shape 0.0192→0.0123),local_spatial+  58.36→59.03,expression_change 60.50→60.50、cell_state 52.84→52.84+  (坐标机制按设计不碰这两组)。occupancy_dice 0.79→0.772 微降、被+  d2_shape 改善抵消有余。seed 1:61.62(shape 72.28,local 60.00)。+- 与常数位移的区别:绕质心的径向膨胀改变的是 b 侧云的离散度/占据范围,+  不是型均值的平移;每细胞位移与其到质心的偏移成正比,方向各异。 -## 代理查分(E6.75+E8.0→E7.25,t=0.4,seed 0,A 半)+## 机制对照(mechanism_off_control) -| 配置 | 榜分 | expr | cell_state | shape | local |-|---|---:|---:|---:|---:|---:|-| 父 node 2(mix uniform κ=1) | 57.23 | 59.72 | 37.49 | 74.43 | 57.27 |-| opposite 质心 p=0.8 κ=1 | 58.91 | 61.04 | 43.21 | 73.93 | 57.45 |-| opposite p=1.0 κ=1 | 58.99 | 60.28 | 44.44 | 73.81 | 57.43 |-| blend p=1.0 κ=1 | 59.11 | 60.23 | 44.20 | 74.97 | 57.02 |-| blend κ=0.5 双侧 | 59.54 | 59.85 | 55.44 | 67.34 | 55.52 |-| blend κ=0.75 双侧 | 60.25 | 59.73 | 51.00 | 71.73 | 58.55 |-| blend κ=0.65 双侧 | 60.31 | 61.09 | 53.53 | 69.14 | 57.49 |-| blend κ=0.5 side-b | 60.28 | 60.45 | 55.57 | 67.83 | 57.26 |-| blend κ=0.75 side-b | 60.54 | 60.62 | 49.94 | 72.08 | 59.51 |-| **blend κ=0.65 side-b(提交)** | **60.74** | 60.50 | 52.84 | 71.27 | 58.36 |+`SPREAD_ALPHA=0` 关闭扩张:输出与父节点 7 的预测**逐位一致**(本地+h5py 逐数组比对 True),代理 A 半即父分 60.74。打开(γ=1.15)61.14 /+seed1 61.62。机制净贡献:榜分 +0.4(seed0,A 半噪声 ~1 内),shape_scale++0.91、local_spatial +0.67(方向一致、只落在坐标相关组,符合机制预期)。 -## 机制对照(mechanism_off_control)+## 代理查分全表(E6.75+E8.0→E7.25,t=0.4,seed 0,A 半)++| 配置 | 榜分 | shape | dice | d2_shape | local |+|---|---:|---:|---:|---:|---:|+| 父 node 7(γ=1) | 60.74 | 71.27 | ~0.79 | ~0.019 | 58.36 |+| type-wise xyz cap1.2 | 59.61 | 66.55 | 0.746 | 0.0251 | 58.54 |+| type-wise xyz cap1.6(PLAN 默认) | 57.01 | 56.17 | 0.639 | 0.0600 | 58.51 |+| type-wise xy cap1.3 | 60.29 | 68.79 | 0.755 | 0.0192 | 59.02 |+| type-wise xy cap1.6 | 58.47 | 61.45 | 0.697 | 0.0385 | 59.06 |+| global xyz γ1.1 | 60.30 | 69.53 | 0.756 | 0.0174 | 58.31 |+| global xy γ1.05 | 61.05 | 71.81 | 0.790 | 0.0157 | 59.06 |+| global xy γ1.1 | 61.15 | 72.18 | 0.783 | 0.0138 | 59.07 |+| **global xy γ1.15(提交)** | **61.14** | **72.18** | 0.772 | 0.0123 | 59.03 |+| global xy γ1.2 | 61.16 | 72.25 | 0.766 | 0.0115 | 59.03 |+| global xy γ1.35 | 60.62 | 70.20 | 0.735 | 0.0134 | 58.93 |+| global xy γ1.5 | 59.52 | 65.88 | 0.685 | 0.0209 | 58.87 | -同配置(κ=0.65)下 `SELECTION=uniform`:**59.39**(expr 59.91 / cell_state-48.17 / shape 70.79 / local 58.67)vs 机制打开 **60.74**(cell_state 52.84)。-选胞机制净贡献 +1.35,主要落在 cell_state(+4.7),其余三组基本持平;-κ=1 时机制单独贡献 +1.9(57.23→59.11,cell_state 37.49→44.20)。机制确实-改变了被选细胞:b 侧共有型的配额全部改由距离排序决定(p=1.0),输出中这些-型内细胞到 m_c 的平均距离显著小于均匀抽样(排序 top-k vs 随机)。+结论:PLAN 的型内扩张(绕型质心)单调有害——把细胞撒进参考不占据的体素,+dice 崩;γ 全局膨胀在 1.05–1.2 有平台,取中值 1.15。z 向扩张有害+(xyz vs xy 同 γ 差 ~0.9 分),与方法卡"z 是离散切片"的警告一致。  ## 验证过 / 没验证 -- 验证:代理视图 seed 0/1 通过 vec-check;seed 0 重跑逐位相同(确定性);-  默认配置输出与查分 60.74 的文件逐位相同;单输入退路代码路径保留(未触发)。-- 未验证:final 真实括号(E7.25+E8.0→E7.5,t=1/3)上 κ=0.65 的迁移性——-  κ 是在代理 t=0.4 上调的,final 上 t_eff=0.217;node 5 的 κ=0.5 在 final-  侧未测。B 半分数与 A 半可能有 ~1–2 分噪声差。-- 软化选择(SEL_C=1.0,Plackett-Luce)在 κ=0.75 双侧上比硬 top-k 差-  (59.76 vs 60.25),未采用。+- 验证:默认输出 = 查分 61.14 的文件逐位一致;seed 0 重跑确定性;+  seed 1 通过 vec-check 且 61.62;SPREAD_ALPHA=0 与父逐位一致;+  vec-check seed 0/1 均 ok;运行 ~2s、内存远低于 28GB。+- 未验证:final 真实括号(E7.25+E8.0→E7.5,t=1/3)上 γ=1.15 的迁移性——+  γ 是常数而非随 n_c/k_c 自适应(κ 固定 0.65,t 变化只改 n_b 总量,+  b/a 占据失衡的方向相同);B 半与 A 半有 ~1 分噪声。榜分增幅 +0.4+  在噪声内,但改动只影响坐标两组且方向一致(shape +0.9 / local +0.7),+  期望 B 半 rank3 为正。+- 生物学依据(通用知识,不涉禁窗测量):z 为离散切片栅格(方法卡),+  插值目标的空间占据应介于两括号之间;组成阻尼减少晚端细胞后其占据+  区域欠采样,径向膨胀恢复覆盖而不改变细胞身份。  ## 下一步建议 -κ 与 side-b 选择联调(κ∈{0.6,0.7});a 侧用更弱的偏好(p≈0.5)看 local-是否回升;shape_scale 仍是最大失分组(71.3),occupancy_dice 0.80 提示-阻尼后晚端空间占据不足,可试坐标侧不受组成影响的占据修正。+γ 与 κ 联调(κ=0.75 side-b 代理 60.54、shape 72.08,配 γ≈1.1 可能更高);+occupancy_dice 仍是 shape 短板(0.77 vs node2 的 ~0.84),可试按体素占据+缺失方向的非各向同性补偿,或对被丢弃 b 细胞做"占据幽灵"仅参与坐标侧。diff --git a/solution/run.py b/solution/run.pyindex 1f79e42..759095e 100644--- a/solution/run.py+++ b/solution/run.py@@ -18,9 +18,26 @@ the pool and types seen in only one stage stay uniform. Total counts, type composition (kappa=1), geometry and expression values are untouched: only WHICH real cells are drawn changes. -Mechanism-off control: env SELECTION=uniform disables the ranking and-restores the parent's purely stratified random draw.-Single-input fallback: identical to the parent (uniform take of the anchor).+Change (PLAN T2EI-05, node 11): b-side coordinate occupancy dilation. The+kappa composition damping leaves the late bracket under-represented in space;+the selected b-side cells are dilated radially around a centroid, in xy only+(z is a discrete slice axis and must stay on-grid), before jitter + final RMS+rescale, so global scale is preserved and expression/composition/selection+are untouched. Submitted config: SPREAD_MU=global (centroid of the stacked+output cloud) with factor SPREAD_CAP=1.15.++PLAN's per-type variant (SPREAD_MU=type, x' = mu_c + (x-mu_c)*f_c with+f_c = min(1+alpha*(n_c/k_c-1), cap), skip k_c < MIN_K) is implemented but was+falsified on the proxy: n_c/k_c ~ 24.5 for every type so any alpha >= 0.03+saturates at the cap, and cap >= 1.2 monotonically destroys occupancy_dice+(0.80 -> 0.75 @1.2/xy, 0.64 @1.6/xyz) because per-type blur scatters cells+into empty voxels. Global xy dilation gamma=1.05..1.2 was the surviving form+(shape_scale 71.3 -> 72.2, local_spatial 58.4 -> 59.0).++Mechanism-off control: env SELECTION=uniform disables the midstate ranking;+env SPREAD_ALPHA=0 disables the dilation and reproduces the parent+bit-for-bit. Single-input fallback: identical to the parent (no bracket,+no b side, dilation skipped). """  from __future__ import annotations@@ -46,6 +63,49 @@ KAPPA = float(os.environ.get("KAPPA", "0.65")) SEL_C = float(os.environ.get("SEL_C", "0.0")) SEL_SIDE = os.environ.get("SEL_SIDE", "b").strip().lower() MIN_RANK_POOL = 5+SPREAD_ALPHA = float(os.environ.get("SPREAD_ALPHA", "0.3"))+SPREAD_CAP = float(os.environ.get("SPREAD_CAP", "1.15"))+SPREAD_MIN_K = int(os.environ.get("SPREAD_MIN_K", "3"))+SPREAD_WHEN = os.environ.get("SPREAD_WHEN", "pre").strip().lower()+SPREAD_SCOPE = os.environ.get("SPREAD_SCOPE", "shared").strip().lower()+SPREAD_AXES = os.environ.get("SPREAD_AXES", "xy").strip().lower()+SPREAD_MU = os.environ.get("SPREAD_MU", "global").strip().lower()  # type|global|bcloud+++def _spread_apply(X: np.ndarray, rows: np.ndarray, mu: np.ndarray, f: float) -> None:+    """X[rows] = mu + (X[rows]-mu)*f, in-place, on SPREAD_AXES columns only."""+    dev = X[rows] - mu+    if SPREAD_AXES == "xy":+        dev[:, 2] = 0.0+    X[rows] = mu + dev * f+++def _spread_plan(labels_b: np.ndarray, ib: np.ndarray, shared: set, cb: np.ndarray):+    """Per-type expansion factors and row groups for the selected b cells.++    Returns list of (tname, rows_all_idx, rows_sel_idx, f) with f > 1, plus+    diagnostics (n_c, k_c, distance ratio before/after expansion).+    """+    lab_b = labels_b.astype(str)+    lab_sel = lab_b[ib]+    if SPREAD_SCOPE == "all":+        names = sorted(set(lab_sel.tolist()))+    else:+        names = sorted(shared & set(lab_sel.tolist()))+    plan = []+    for tname in names:+        rows_all = np.flatnonzero(lab_b == tname)+        rows_sel = ib[lab_sel == tname]+        k_c = int(rows_sel.size)+        n_c = int(rows_all.size)+        if k_c < SPREAD_MIN_K or k_c >= n_c:+            continue+        f = 1.0 + SPREAD_ALPHA * (n_c / k_c - 1.0)+        f = float(min(f, SPREAD_CAP))+        if f <= 1.0 + 1e-9:+            continue+        plan.append((tname, rows_all, rows_sel, f, n_c, k_c))+    return plan   def _alloc(labels: np.ndarray, n: int):@@ -181,12 +241,11 @@ def main() -> None:     Xa = as_dense(stage_a.X)     Xb = as_dense(stage_b.X)     da = db = None-    shared: set = set()+    la = stage_a.labels.astype(str)+    lb = stage_b.labels.astype(str)+    shared: set = set(np.unique(la)).intersection(np.unique(lb))     if SELECTION == "midstate":         Za, Zb = _zscore_pair(Xa, Xb)-        la = stage_a.labels.astype(str)-        lb = stage_b.labels.astype(str)-        shared = set(np.unique(la)).intersection(np.unique(lb))         if SEL_SIDE in ("both", "a"):             da = _type_dists(Za, la, Zb, lb, shared, 1.0 - t, SEL_TARGET)         if SEL_SIDE in ("both", "b"):@@ -195,6 +254,24 @@ def main() -> None:     ia = _select_side(stage_a.labels, n_a, rng, da)     ib = _select_side(stage_b.labels, n_b, rng, db) +    spread_plan = []+    spread_diag = []+    if ib.size and SPREAD_ALPHA > 0.0:+        if SPREAD_MU == "global":+            g = (np.vstack([ca[ia], cb[ib]]) if ia.size else cb[ib]).mean(axis=0)+            spread_plan = [("__global__", None, ib, SPREAD_CAP, int(stage_b.n), int(ib.size))]+        elif SPREAD_MU == "bcloud":+            g = cb[ib].mean(axis=0)+            spread_plan = [("__bcloud__", None, ib, SPREAD_CAP, int(stage_b.n), int(ib.size))]+        else:+            spread_plan = _spread_plan(stage_b.labels, ib, shared, cb)+        if spread_plan and SPREAD_WHEN == "pre":+            cb = cb.copy()+            for tname, rows_all, rows_sel, f, n_c, k_c in spread_plan:+                mu = g if rows_all is None else cb[rows_all].mean(axis=0)+                _spread_apply(cb, rows_sel, mu, f)+                spread_diag.append({"type": tname, "n_c": n_c, "k_c": k_c, "f": f})+     parts = []     coord_parts = []     if ia.size:@@ -205,7 +282,22 @@ def main() -> None:         coord_parts.append(cb[ib])     expr = np.vstack(parts) if len(parts) > 1 else parts[0]     coords = _jitter(np.vstack(coord_parts), rng)-    coords = scale_to_rms(coords, target_rms)+    if spread_plan and SPREAD_WHEN == "post":+        mu0 = coords.mean(axis=0)+        centered = coords - mu0+        rr = float(np.sqrt((centered * centered).sum(axis=1).mean()))+        sf = float(target_rms) / rr if rr >= 1e-8 and target_rms > 0 else 1.0+        coords = centered * sf+        off = int(ia.size)+        lab_sel = lb[ib]+        for tname, rows_all, rows_sel, f, n_c, k_c in spread_plan:+            mu_pre = g if rows_all is None else cb[rows_all].mean(axis=0)+            mu_f = (mu_pre - mu0) * sf+            rows = off + np.flatnonzero(lab_sel == tname)+            coords[rows] = mu_f + (coords[rows] - mu_f) * f+            spread_diag.append({"type": tname, "n_c": n_c, "k_c": k_c, "f": f})+    else:+        coords = scale_to_rms(coords, target_rms)      keep = {k: info.get(k) for k in ("n_shared_types", "z_dot", "z_flipped", "align")}     print(json.dumps({@@ -213,6 +305,10 @@ def main() -> None:         "rms_a": rms_a, "rms_b": rms_b, "out_rms": rms_radius(coords),         "target_rms": target_rms, "selection": SELECTION, "sel_p": SEL_P,         "n_shared": len(shared), **keep,+        "spread_alpha": SPREAD_ALPHA, "spread_cap": SPREAD_CAP,+        "spread_when": SPREAD_WHEN if SPREAD_ALPHA > 0 else "off",+        "spread_scope": SPREAD_SCOPE, "n_spread_types": len(spread_diag),+        "spread": spread_diag,     }, default=float), file=sys.stderr)     write_t2(args.out, expr, coords.astype(np.float32), genes, seed=args.seed) 

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

用到的知识库条目

编号标题出处
k007Interval staging and held-out-window filtering of external datanotes/official/来件/virtualembryo.ai/rules.md
k024World-model evaluation dimensions for state-transition predictorsnotes/competition/07_biomedical_world_models.md
k026Canonicalise predicted 3D coordinates before submissionnotes/pitfalls/04_scorer_invariance.md

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

改了什么在父节点7(mix+κ=0.65+side-b中间态选胞)之后新增一步坐标占据扩张:对被选入的b侧细胞绕输出云质心做xy径向膨胀γ=1.15(z不动),在jitter与终缩放之前执行,全局RMS仍等于target。PLAN的型内扩张(绕各型质心μ_c、f=min(1+α(n_c/k_c-1),cap))已实现但在代理上被证伪(n_c/k_c≈24.5使α全饱和到cap,cap≥1.2单调砸occupancy_dice),提交的实际是全局xy膨胀这一存活形式。
各组分数的变化cell_state:噪声内/未变 +0.00 (54.35→54.35,坐标机制按设计不碰组成)
expression_change:噪声内/未变 +0.00 (61.08→61.08,坐标机制按设计不碰表达)
local_spatial:变好 +0.69 (60.00→60.69),落在坐标组、方向一致
shape_scale:变好 +0.86 (71.62→72.48),方向符合预期但低于PLAN目标+1.5~3
榜分:变好 +0.39 (61.76→62.15),在T2噪声(~1)内
family_idT2EI-05
假设是否成立unclear
经验
  1. 条件:κ组成阻尼减少b侧细胞导致空间占据不足时,做绕输出云质心的xy径向膨胀(γ=1.05~1.2有平台)可回收shape_scale(+0.9)与local(+0.7)且不碰expr/cell_state;结果:机制净贡献落在坐标两组、方向一致,但榜分+0.39在噪声内。
  2. 条件:z是离散切片栅格(30~40层)时,任何含z的坐标扩张都有害;结果:同γ下xyz比xy低约0.9分,cap=1.6/xyz使occupancy_dice从0.79崩到0.64。
  3. 条件:PLAN设计按n_c/k_c比值自适应的扩张因子,但当比例分配使n_c/k_c对所有型≈常数(24.5)时;结果:α搜索退化为唯一旋钮cap,型内扩张把细胞撒进参考不占据的体素、单调有害,应改用全局膨胀。
  4. 验证机制只改坐标的判据:expr/cell_state逐位不变(+0.00)且SPREAD_ALPHA=0对照与父输出逐位一致,才能确认变化来自坐标机制而非全局重加权。
mechanism_active是
下一步建议
  1. 针对shape_scale:κ与γ联调,试κ=0.75 side-b配γ≈1.1(代理上κ=0.75 shape=72.08更高),看能否把shape_scale推过72.5同时保住cell_state。
  2. 针对shape_scale:occupancy_dice仍是短板(0.77 vs node2约0.84),试按体素占据缺失方向做非各向同性补偿,而非各向同性γ。
  3. 针对local_spatial/shape_scale:对被丢弃的b细胞做仅参与坐标侧的'占据幽灵'点,恢复占据而不改表达与组成,验证dice能否回升。

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

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

分析员

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

工程师

角色工程师 alibaba-token-plan-cn/qwen3.8-max
调用次数1 次
轮数33
工具调用共 36 次:bash 19、edit 13、read 3、write 1
用时15 分
token 数输入 75,218 · 输出 14,775 · 思考 19,783
任务(第一行)按计划修改程序:κ=0.65 选胞不变 + b 侧型内坐标占据扩张补偿 shape_scale
最后的回答(摘录)
**完成。** 在父节点 7(mix+κ=0.65+side-b 中间态选胞)上实现 PLAN T2EI-05 的 b 侧坐标占据扩张。

- **做了什么**:PLAN 的型内扩张原型(绕型质心、f=min(1+α(n_c/k_c−1),cap))被代理证伪——n_c/k_c≈24.5 使 α∈{0.15,0.3,0.5} 全部饱和到 cap,且 cap≥1.2 单调砸 occupancy_dice(0.79→0.64@1.6/xyz)。存活的机制形式是**绕输出云质心的 b 侧 xy 径向膨胀 γ=1.15**(z 为离散切片不动),在终缩放前执行,全局 RMS 保持 target,表达/组成/选胞逐位不变。`SPREAD_ALPHA=0` 对照与父输出逐位一致。
- **查分**(A 半,用 8/20 次):γ=1.15 → **61.14**(seed 1:61.62),vs 父 60.74;shape_scale 71.27→72.18、local 58.36→59.03,expr/cell_state 不变。榜分增幅 +0.4 在噪声内,但两个坐标组方向一致。vec-check、确定性、逐位对照均通过。
- **下一步最值得试**:κ=0.75+γ≈1.1 联调(代理上 κ=0.75 shape 更高);occupancy_dice(0.77 vs node2 ~0.84)仍是 shape 短板,可按占据缺失方向做非各向同性补偿。
原始记录位置/home/spark-longxinyang/vec/runs/formal/20261003-043412-search-t2-embryo-interp-g24-D-s1/nodes/11/engineer.jsonl 202 KB
/home/spark-longxinyang/vec/runs/formal/20261003-043412-search-t2-embryo-interp-g24-D-s1/nodes/11/engineer.stderr

调研员

角色调研员 alibaba-token-plan-cn/qwen3.8-max
调用次数2 次
轮数2
工具调用共 0 次:—
用时5 分
token 数输入 11,594 · 输出 2,380 · 思考 10,992
任务(第一行)为节点 n11(改进,父节点 n7)写改进计划 PLAN.json
最后的回答(摘录)
{
  "name": "κ=0.65 选胞不变 + b 侧型内坐标占据扩张补偿 shape_scale",
  "motivation": "父节点 7 的 shape_scale 71.62 比 node 2 的 74.43 低 2.81,ANALYSIS 明确归因于 κ=0.65 使晚端占比 0.40→0.26、occupancy_dice 降至 0.80。cell_state 54.35 是最大收益组不能动,但 shape_scale 是唯一可回收的失分组。node 8 已证伪 FPS 覆盖采样和 z 切片,node 6 的 damp 调整只解决全局 RMS 不解决局部占据。需要一种不改变表达/组成、只修正 b 侧坐标覆盖的机制。",
  "approach": "在父节点 7 完整流程(κ=0.65、side-b midstate 选胞)之后,增加一步 b 侧型内坐标占据扩张:\n\n1. 对每个 b 侧共有型 c,记该型在 b 括号中的总细胞数 n_c、被选入的细胞数 k_c。\n2. 计算该型全部 n_c 个细胞的空间质心 μ_c(用对齐后的坐标)。\n3. 对被选中的 k_c 个 b 侧细胞,坐标更新为 x_i' = μ_c + (x_i − μ_c) × (1 + α·(n_c/k_c − 1)),α 为扩张阻尼。\n4. α 初值 0.3,搜索 {0.15, 0.3, 0.5};上限 cap:扩张因子不超过 1.6。\n5. 仅作用于 b 侧共有型(与选胞范围一致);a 侧和独有型坐标不动。\n6. 扩张后执行已有的终缩放(RMS rescale),保持全局尺度不变。\n\nvec-score 快速筛选:先在代理视图(E6.75+E8.0→E7.25)上跑 α∈{0.15,0.3,0.5},看 shape_scale 是否回升且 cell_state 不掉;最优配置再查 2 次确认(T2 噪声 ~1 分)。若 α=0.3 时 shape_scale 未超父节点 +1.5,则尝试 α=0.5 或将 cap 放宽到 1.8。\n\n单输入退路:只有一个输入阶段时无括号、无 b 侧,扩张步骤自动跳过(与父节点一致)。\n\nκ 不再重调(保持 0.65),避免与坐标修正混淆。",
  "expected_groups": ["shape_scale"],
  "risks": "1) 扩张可能破坏 local_spatial(型边界处邻域关系被拉伸)——Engineer 应同时监控 local_spatial,若下降 >1.5 则降 α 或仅对池 ≥10 细胞的型做扩张。2) 型内细胞数极少时(k_c=1 或 2),扩张无意义或过度——对 k_c<3 的型跳过。3) 终缩放可能部分抵消扩张效果——若出现,可在终缩放前做扩张、或在终缩放后按残余比例补一次微调。4) 代理视图与 final 的 t 不同(0.4 vs ~0.33),n_c/k_c 比值会变化,但机制本身自适应(比值越大扩张越强),不需要硬编码。",
  "family_id": "T2EI-05",
  "mechanism": "组成阻尼减少了 b 侧细胞数,导致空间占据不足;对被选中的 b 侧细胞按型内缺失比例做径向坐标扩张,恢复空间覆盖而不改变表达或组成。",
  "vs_constant_shift": "常数位移对每个型加相同矢量,不改变型内离散度;本机制按型内实际缺失比例(n_c/k_c)做径向缩放,每型幅度不同、方向从型质心向外,改变的是型内坐标离散度而非型均值位置。",
  "mechanism_evidence": "Engineer 应输出:(1) 每个 b 侧共有型的 n_c、k_c、实际扩张因子;(2) 扩张前后所有 b 侧细胞到型质心的平均距离比;(3) 四组分各自变化(预期 shape_scale +1.5~3,cell_state 不变 ±0.5,local_spatial 变化 <1)。若扩张因子全部为 1(即 k_c=n_c),说明 κ 未实际减少细胞、机制未运行。",
  "mechanism_off_control": "环境变量 SPREAD_ALPHA=0 关闭扩张,输出应与父节点 7 逐位一致。对比 α=0 与 α=0.3 的四组分差异即为机制净贡献。"
}
原始记录位置/home/spark-longxinyang/vec/runs/formal/20261003-043412-search-t2-embryo-interp-g24-D-s1/nodes/11/researcher.jsonl 6 KB
/home/spark-longxinyang/vec/runs/formal/20261003-043412-search-t2-embryo-interp-g24-D-s1/nodes/11/researcher.1.jsonl 4 KB
/home/spark-longxinyang/vec/runs/formal/20261003-043412-search-t2-embryo-interp-g24-D-s1/nodes/11/researcher.stderr

审查员

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