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

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

节点 n29 在终选来历上

侧别条件 z 轴 σ 匹配(a 侧全压缩、b 侧 λ_b 阻尼)已实现并查分证伪:λ_b≠1 的 5 个配置榜分全部低于均匀压缩(λ_b=1),提交态 = 父节点 25(默认 ANISO_B_LAMBDA=1.0,逐位一致)。

运行?一次完整的自动搜索或 Agent 会话,有自己的锁定配置和证据包。20261003-043412-search-t2-embryo-interp-g24-D-s1
父节点n25
子节点n30
操作?种子:人写的起点;改进:在父节点上改;草稿:从头写;修复:修父节点的报错。改进
状态已打分
分数搜索目标分 62.26(+0.0) · proxy 62.26(+0.0) · 3 次复测均分 62.20
审查通过 1 越界读取:未发现问题——run.py 仅通过 view_io 的 load_manifest/read_stage/panel_genes 读取 args.data 视图内数据(run.py:475-487),无绝对路径、..、/mnt、网络调用或目标阶段文件读取;src.task2_spatial.* 为框架模块而非评分器。; 2 硬编码统计量:未发现问题——σ_ref、RMS、配额、共有类型均从输入现场计算(run.py:493-503, _alloc, _zscore_pair);注释中的 122.8/102.4/70.1 仅为诊断记录,未进入代码;KAPPA=0.5、scale_…
用时?从运行开始到结束(或到现在)的挂钟时间。12 分
程序版本8ef85a6872f07e1e7eb1a6e02a618da021409290 (programs.git)

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

来自 programs.git 8ef85a6872:solution/METHOD.md

侧别条件 z 轴 σ 匹配(a 侧全压缩、b 侧 λ_b 阻尼)已实现并查分证伪:λ_b≠1 的 5 个配置榜分全部低于均匀压缩(λ_b=1),提交态 = 父节点 25(默认 ANISO_B_LAMBDA=1.0,逐位一致)。

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

父流程完整保留:interp_bracket → procrustes3d 对齐 → scale_damp=0.5 目标 RMS → κ=0.65 组成阻尼 → b 侧型内中间态偏好选胞(SEL_SIDE=b)→ jitter → 整云 z 轴 σ 匹配(ANISO_FULL=1, ANISO_AXES=z, λ=1)→ 恢复全局 RMS。

本节点改动(run.py 环境变量开关,PLAN T2EI-05):

  1. 侧别条件 z σ 匹配(ANISO_B_LAMBDA):z 轴匹配因子按侧别分开——a 侧(早端,rows < n_a,jitter 不打乱索引,掩码安全)用完全因子 fac_a = 1+λ·(σ_ref_z/σ_out_z−1),b 侧用阻尼因子 fac_b = 1+λ_b·(σ_ref_z/σ_out_z−1),绕全局 μ_z 缩放后恢复 RMS。动机:z 过扩展的根因是 a 侧主导混合(σ_z_a=122.8 vs σ_ref_z=102.4,b 侧本来就偏窄 σ_z_b=70.1),均匀压缩无差别压扁 b 侧邻域。
  2. ANISO_PRE_JITTER:z 匹配移到 jitter 前。实测与 post 输出逐位相同(jitter 只对重复坐标加 1e-4·RMS 噪声,本云坐标唯一),该开关为惰性,未消耗查分。
  3. 单输入退路不变(无括号 → early return,不触及新代码)。无新增 RNG,对 seed 确定;σ 全部现场从 view 数据计算,无硬编码统计量、无绝对时间/视图判断。

机制证据与对照(A 半,E6.75+E8.0→E7.25,t=0.4,seed 0,共 5 次查分)

机制确实运行:λ_b=0.5 时 fac_a=0.918、fac_b=0.959,a 侧 z σ 压缩 8.2%(122.8→112.7)、b 侧仅 4.1%(70.1→67.2),与 PLAN 预期一致;λ_b=0 时 b 侧完全不动。

off 对照 = ANISO_B_LAMBDA=1.0(默认),输出与父节点 25 预测 h5py 逐数组比对 diff=0.0(seed 0),未单独消耗查分(重查确认 61.504)。

λ_b榜分shapelocalcell_stateexprd2_shapeocc_dicenbhd_mmd
061.2573.3658.2852.8460.50.009840.77350.05478
0.561.3173.5158.4052.8460.50.009610.77450.05452
1.0(=父 25,提交)61.5074.2058.4752.8460.50.009450.78620.05436
1.2561.4473.8858.5552.8460.50.009400.77980.05420
1.561.4673.8958.6052.8460.50.009380.77980.05409

四组分变化:expression_change / cell_state 五档完全不动(表达未改);shape_scale 与 local_spatial 此消彼长——λ_b<1 时 b 侧欠压缩使整体 z σ 失配且 a/b 边界互穿,nbhd_mmd 反而恶化(0.05452/0.05478 > 0.05436)、occ_dice 掉 0.7~1.3pp;λ_b>1(PLAN 外的反向探索)确实按假设方向恢复 local(nbhd_mmd 单调回落向 off 值 0.05314),但 occ_dice 同样掉到 0.7798,shape −0.3,净榜分仍低于父。

结论:机制证伪

  • PLAN 假设"local 损失来自 b 侧被无差别压扁"不成立:任何侧别差异化(无论 b 侧压得比 a 侧少还是多)都破坏 occupancy_dice 与 neighborhood 结构,榜分在 λ_b=1(均匀单因子)处是峰,两侧单调下降。父节点 local −0.5 的损失更可能来自 z 压缩本身(邻域在 z 方向变密),而非侧别无差别。
  • 按 PLAN 预案第 5 步:提交态 = 父节点 25(代码默认即此,逐位一致),vec-check ok(seed 0/7)。
  • 已验证:off 对照逐位一致、λ_b 五档单调性、PRE_JITTER 惰性。未验证:λ_b>1.5、按型(而非侧别)分别匹配 z、κ×λ 联合网格(父节点 next_suggestions,未在本 30 分钟预算内展开);B 半与真实括号迁移。
  • 生物学知识来源:无新增;纯数据驱动的坐标几何机制。

下一步建议

侧别/差异化 z 缩放方向已双向证伪,不要再扫。local_spatial 与 shape_scale 在 z 匹配族内是硬权衡(nbhd_mmd ↔ occ_dice),要突破需换轴:如 κ(组成阻尼)与 z 匹配联合小网格,或针对 neighborhood_mmd 的空间 kNN 感知 z 压缩(按局部密度而非全局单因子)。

调研员的计划

名称侧别加权 z 轴 σ 匹配:a 侧全压缩、b 侧衰减,恢复 local_spatial
动机节点 25 整云 z 匹配(fac≈0.92)使 shape_scale +1.03 但 local_spatial −0.59(neighborhood_mmd 0.05314→0.05436),净榜分仅 +0.11。z 过扩展的根因是 a 侧(早端)占混合的 ~52%,但当前机制对所有细胞施加同一压缩因子,无差别地压扁了 b 侧细胞的 z 邻域。ANALYSIS 建议'按型分别匹配 z 而非整云单因子';本方案按因果根源(侧别)而非型别做条件匹配,更直接、实现更简。
做法步骤:1) 在 run.py 的 ANISO_FULL 分支中,将当前整云单因子 z 匹配改为侧别加权:对 a 侧细胞施加完全匹配因子 fac_a = 1 + λ_a·(σ_ref_z/σ_out_z − 1)(λ_a=1 固定),对 b 侧细胞施加衰减因子 fac_b = 1 + λ_b·(σ_ref_z/σ_out_z − 1),λ_b 由环境变量 ANISO_B_LAMBDA 控制(初值 0.5,搜索 {0, 0.25, 0.5, 0.75, 1.0})。σ_ref_z 和 σ_out_z 仍从原始对齐云现场计算,缩放绕全局 μ_z。2) 快速变体:将 z 匹配移到 jitter 之前(env ANISO_PRE_JITTER=1),jitter 会在 z 方向随机回补部分方差,等效软化压缩;与 λ_b 组合测试。3) 用 vec-score 在 A 半 seed 0 上筛选:先跑 off 对照确认 = 父节点(1 次),再跑 λ_b∈{0, 0.5, 1.0}×PRE_JITTER∈{0,1} 共 6 配置(6 次),选 local_spatial 恢复最多且 shape_scale ≥ 73 的配置(约 2 次),最优配置换 seed 1 验证(1 次),共 ≤ 10 次。4) 单输入退路:无括号时 early return,不触及新代码,与父节点一致。5) 若 λ_b=0(b 侧完全不压缩)导致 d2_shape 恶化 > 10%,则回退到 λ_b=0.5;若所有 λ_b<1 的 shape_scale 均 < 72.5(低于父节点 23 的 72.48),则机制证伪,提交态 = 父节点 25。
风险1) b 侧不压缩可能使整体 z σ 匹配不足,d2_shape 回升,shape_scale 下降超过 local_spatial 恢复——Engineer 应在前 3 次查分内检查 d2_shape 是否 > 0.011(父节点 0.00945),若是则只试 λ_b=0.75。2) 侧别标签在 jitter 后可能丢失(若 jitter 打乱索引)——实现时在 jitter 前记录 a/b 侧掩码,jitter 后用掩码索引。3) 改善幅度可能 < 1 分(T2 噪声),需 seed 1 确认方向一致;若两 seed 均 < +0.5 则如实报告证伪。

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

对比:父节点版本 57e3463ae3。改动的文件:solution/METHOD.md +26 −30、solution/run.py +80 −17

diff --git a/solution/METHOD.md b/solution/METHOD.mdindex 32762f8..4edc854 100644--- a/solution/METHOD.md+++ b/solution/METHOD.md@@ -1,43 +1,39 @@-b 侧 xy 各向异性膨胀证伪(两轴比值差仅 2%);改为整云逐轴 σ 匹配:把输出云 z 轴匹配到括号插值 σ_ref_z(fac≈0.92)再恢复 RMS,膨胀关闭。3 种子 A 半 61.38→61.77,shape +1.6~2.7。+侧别条件 z 轴 σ 匹配(a 侧全压缩、b 侧 λ_b 阻尼)已实现并查分证伪:λ_b≠1 的 5 个配置榜分全部低于均匀压缩(λ_b=1),提交态 = 父节点 25(默认 ANISO_B_LAMBDA=1.0,逐位一致)。 -## 方法(family T2EI-05,improve over node 23;提交态 = ANISO_FULL=1, ANISO_AXES=z, ANISO_LAMBDA=1, SPREAD_ALPHA=0)+## 方法(family T2EI-05,improve over node 25)  父流程完整保留:interp_bracket → procrustes3d 对齐 → scale_damp=0.5 目标 RMS →-κ=0.65 组成阻尼 → b 侧型内中间态偏好选胞(SEL_SIDE=b)→ jitter。-本节点改动(run.py 环境变量开关):+κ=0.65 组成阻尼 → b 侧型内中间态偏好选胞(SEL_SIDE=b)→ jitter → 整云 z 轴 σ 匹配(ANISO_FULL=1, ANISO_AXES=z, λ=1)→ 恢复全局 RMS。 -1. **PLAN 机制(b 侧逐轴各向异性膨胀,ANISO_BETA)**:γ_axis=clip(1.15·(σ_ref_axis/σ_out_axis)^β, 1, ANISO_CAP),σ_ref 由对齐后的两括号全云逐轴 std 按 t 线性插值,绕输出云质心只作用于 b 侧被选细胞 xy。已实现并查分,**证伪**(见下)。-2. **提交机制(整云逐轴 σ 匹配,ANISO_FULL/ANISO_AXES/ANISO_LAMBDA)**:jitter 后对整个输出云逐轴 x'←μ+(x−μ)·[1+λ(σ_ref_axis/σ_out_axis−1)],随后 scale_to_rms 恢复全局 RMS(保持比例结构)。σ_ref 在任何膨胀修改 cb 之前从原始对齐云计算(s_ref_axes),λ=1 为完全匹配。提交只开 z 轴:诊断显示输出云 z 比参考宽 8.8%(早端主导混合、σ_a_z=123 vs σ_ref_z=102),收缩 z 是 shape 增益的主来源。-3. b 侧膨胀在提交态关闭(SPREAD_ALPHA=0):膨胀+z 匹配(61.38)< z 匹配单独(61.50),膨胀把 b 细胞 z 压到 μ_z 后匹配因子只能回扩(0.969),净 shape 增益变小。+本节点改动(run.py 环境变量开关,PLAN T2EI-05): -单输入退路不变(无括号 → 分层抽最后阶段,early return,不触及任何新代码)。-无 RNG 参与新机制,对 seed 确定;σ_ref/σ_out 全部现场从 view 数据计算,无硬编码统计量,无绝对时间/视图判断(只用 t 与坐标)。+1. **侧别条件 z σ 匹配(ANISO_B_LAMBDA)**:z 轴匹配因子按侧别分开——a 侧(早端,rows < n_a,jitter 不打乱索引,掩码安全)用完全因子 fac_a = 1+λ·(σ_ref_z/σ_out_z−1),b 侧用阻尼因子 fac_b = 1+λ_b·(σ_ref_z/σ_out_z−1),绕全局 μ_z 缩放后恢复 RMS。动机:z 过扩展的根因是 a 侧主导混合(σ_z_a=122.8 vs σ_ref_z=102.4,b 侧本来就偏窄 σ_z_b=70.1),均匀压缩无差别压扁 b 侧邻域。+2. **ANISO_PRE_JITTER**:z 匹配移到 jitter 前。实测与 post 输出**逐位相同**(jitter 只对重复坐标加 1e-4·RMS 噪声,本云坐标唯一),该开关为惰性,未消耗查分。+3. 单输入退路不变(无括号 → early return,不触及新代码)。无新增 RNG,对 seed 确定;σ 全部现场从 view 数据计算,无硬编码统计量、无绝对时间/视图判断。 -## 机制证据(mechanism_evidence,A 半,E6.75+E8.0→E7.25,t=0.4,seed 0)+## 机制证据与对照(A 半,E6.75+E8.0→E7.25,t=0.4,seed 0,共 5 次查分) -- 诊断比值:σ_ref/σ_out = x 1.0265、y 1.0469、z 0.9179;**xy 两轴比值相对差 2.0% < 5%** → 触发 PLAN 自带的"机制无实际差异"提前终止判据。γ_x/γ_y(β=0.5)= 1.1651/1.1767,膨胀前后 b 云逐轴 spread 仅变化 ~1.5%。-- 提交机制实际改变:全部 5000 个细胞的 z 坐标乘 fac_z=0.918(绕 μ_z),xy 不变;shape_scale 72.18→74.20(d2_shape 0.01234→0.00945,occupancy_dice 0.7716→0.7862),local_spatial 59.03→58.47(neighborhood_mmd 0.05314→0.05436),expression/cell_state 两组不变(表达未动)。+机制确实运行:λ_b=0.5 时 fac_a=0.918、fac_b=0.959,a 侧 z σ 压缩 8.2%(122.8→112.7)、b 侧仅 4.1%(70.1→67.2),与 PLAN 预期一致;λ_b=0 时 b 侧完全不动。 -## 机制对照(mechanism_off_control)与查分全表+off 对照 = ANISO_B_LAMBDA=1.0(默认),输出与父节点 25 预测 h5py 逐数组比对 **diff=0.0**(seed 0),未单独消耗查分(重查确认 61.504)。 -off 对照 = `ANISO_FULL=0 SPREAD_ALPHA=0.3`(父配置),输出与父节点 h5py 逐数组比对 **True**(seed 0)。全部 A 半查分(10 次,余 6):+| λ_b | 榜分 | shape | local | cell_state | expr | d2_shape | occ_dice | nbhd_mmd |+|---:|---:|---:|---:|---:|---:|---:|---:|---:|+| 0 | 61.25 | 73.36 | 58.28 | 52.84 | 60.5 | 0.00984 | 0.7735 | 0.05478 |+| 0.5 | 61.31 | 73.51 | 58.40 | 52.84 | 60.5 | 0.00961 | 0.7745 | 0.05452 |+| **1.0(=父 25,提交)** | **61.50** | **74.20** | 58.47 | 52.84 | 60.5 | **0.00945** | **0.7862** | 0.05436 |+| 1.25 | 61.44 | 73.88 | 58.55 | 52.84 | 60.5 | 0.00940 | 0.7798 | 0.05420 |+| 1.5 | 61.46 | 73.89 | 58.60 | 52.84 | 60.5 | 0.00938 | 0.7798 | 0.05409 | -| 配置(seed 0) | 榜分 | shape | local | occ_dice | d2_shape | nbhd_mmd |-|---|---:|---:|---:|---:|---:|---:|-| off 对照(=父) | 61.14 | 72.18 | 59.03 | 0.7716 | 0.01234 | 0.05314 |-| PLAN β=0.5, cap1.25 | 61.20 | 72.44 | 59.01 | 0.7735 | 0.01195 | 0.05319 |-| b 侧保 z(SPREAD_ZPRES) | ~59.9 | 70.32 | 58.48 | 0.7578 | 0.01541 | 0.05435 |-| 整云匹配 xyz λ1(无膨胀) | 61.49 | 74.10 | 58.52 | 0.7710 | 0.00798 | 0.05426 |-| 整云匹配 xy λ1 | 61.11 | 72.69 | 58.42 | 0.7945 | 0.01412 | 0.05448 |-| 整云匹配 z λ0.5 / λ0.75 | 61.14 / 61.26 | 72.81/73.26 | 58.40/58.42 | 0.7917/0.7834 | — | — |-| 膨胀+z 匹配 λ1 | 61.38 | 73.15 | 59.04 | 0.7750 | 0.01047 | 0.05313 |-| **z 匹配 λ1(提交)** | **61.50** | **74.20** | 58.47 | 0.7862 | 0.00945 | 0.05436 |+四组分变化:expression_change / cell_state 五档完全不动(表达未改);shape_scale 与 local_spatial 此消彼长——λ_b<1 时 b 侧欠压缩使整体 z σ 失配且 a/b 边界互穿,nbhd_mmd 反而恶化(0.05452/0.05478 > 0.05436)、occ_dice 掉 0.7~1.3pp;λ_b>1(PLAN 外的反向探索)确实按假设方向恢复 local(nbhd_mmd 单调回落向 off 值 0.05314),但 occ_dice 同样掉到 0.7798,shape −0.3,净榜分仍低于父。 -多种子(A 半):z 匹配 61.50/61.78/62.02(seed 0/1/2,均值 **61.77**);膨胀+z 匹配 61.38/61.78/61.89(均值 61.68);off 对照 61.14/61.62(seed 0/1,均值 61.38)。提交态默认运行 = z 匹配 seed 0 逐位一致,vec-check ok。+## 结论:机制证伪 -## 结论与已验证/未验证+- PLAN 假设"local 损失来自 b 侧被无差别压扁"不成立:**任何侧别差异化**(无论 b 侧压得比 a 侧少还是多)都破坏 occupancy_dice 与 neighborhood 结构,榜分在 λ_b=1(均匀单因子)处是峰,两侧单调下降。父节点 local −0.5 的损失更可能来自 z 压缩本身(邻域在 z 方向变密),而非侧别无差别。+- 按 PLAN 预案第 5 步:提交态 = 父节点 25(代码默认即此,逐位一致),vec-check ok(seed 0/7)。+- 已验证:off 对照逐位一致、λ_b 五档单调性、PRE_JITTER 惰性。未验证:λ_b>1.5、按型(而非侧别)分别匹配 z、κ×λ 联合网格(父节点 next_suggestions,未在本 30 分钟预算内展开);B 半与真实括号迁移。+- 生物学知识来源:无新增;纯数据驱动的坐标几何机制。 -- PLAN 的 b 侧 xy 各向异性膨胀被其自带判据证伪(各向异性缺损仅 2%,β 扫描在噪声内)。同族推广到整云逐轴匹配后,**z 轴 8.8% 的过扩展才是真实缺损**,收缩 z 一致提升 shape(3 种子 shape +1.6~+2.7,d2_shape −18~−23%),代价是 local −0.5(seed 0)~+0.1(seed 1/2)。-- 证伪并记录:xy-only 匹配(occ_dice 最高 0.7945 但 d2_shape 恶化、净负)、λ 阻尼(λ=0.5/0.75 反而 local 不恢复、shape 增益缩水,非单调,不再扫)、b 侧保 z(shape −1.9,父节点的 z 压平实际有益)、膨胀+z 匹配(净低于 z 匹配单独)。-- 未验证:真实括号(E7.25→E8.0 快增长段)的 σ_ref_z/σ_out_z 比值方向——若真实输出云 z 偏窄,fac_z>1 会扩张 z,机制仍按数据驱动执行,但收益方向未在代理上检验;B 半与正式分的迁移(A 半 +0.26~+0.39 属小幅,树内 seed 间 A 半波动 ~0.5);心脏榜(本节点只针对 embryo interp)。-- 生物学知识来源:无新增外部知识;z 为离散切片轴的注意事项来自方法卡,σ 匹配纯数据驱动。+## 下一步建议++侧别/差异化 z 缩放方向已双向证伪,不要再扫。local_spatial 与 shape_scale 在 z 匹配族内是硬权衡(nbhd_mmd ↔ occ_dice),要突破需换轴:如 κ(组成阻尼)与 z 匹配联合小网格,或针对 neighborhood_mmd 的空间 kNN 感知 z 压缩(按局部密度而非全局单因子)。diff --git a/solution/run.py b/solution/run.pyindex 593b46e..2131264 100644--- a/solution/run.py+++ b/solution/run.py@@ -81,6 +81,24 @@ destroys shape (70.3). The submitted config turns the node-11 b-side xy dilation OFF (SPREAD_ALPHA=0): dilation+z-matching nets lower than z-matching alone (61.38 vs 61.50, A half, seed 0). Mechanism-off control: ANISO_FULL=0 SPREAD_ALPHA=0.3 reproduces the parent bit-for-bit (verified).++Change (PLAN T2EI-05, node 29): side-conditional z sigma matching+(env ANISO_B_LAMBDA, ANISO_PRE_JITTER). The a side (early bracket, rows+< n_a; jitter does not permute indices so the mask survives) keeps the full+matching factor, the b side gets the factor damped by ANISO_B_LAMBDA, both+around the global mu_z, then the global RMS is restored. Motivation: the z+over-extension comes from the a-dominated mix (sigma_z_a=122.8 vs+sigma_ref_z=102.4 while the b side is already narrow, 70.1), so uniform+compression needlessly flattens b-side neighbourhoods. FALSIFIED on the+proxy (A half, seed 0, 5 queries): lambda_b=0 -> 61.25, 0.5 -> 61.31,+1.0 (=node 25) -> 61.50, 1.25 -> 61.44, 1.5 -> 61.46. ANY side-differential+scaling hurts occupancy_dice (0.786 -> 0.774/0.780) and thus shape_scale,+even when lambda_b>1 restores local_spatial/nbhd_mmd as hypothesised in+reverse. The board score peaks at the uniform factor. ANISO_PRE_JITTER is+inert: jitter only noises duplicate coordinates (1e-4*RMS) and this cloud is+unique, so pre/post outputs are bit-identical. Submitted state = node 25+(defaults ANISO_B_LAMBDA=1.0, ANISO_PRE_JITTER=0), verified bit-identical+to the parent prediction (h5py max diff 0.0, seeds 0/7 vec-check ok). """  from __future__ import annotations@@ -124,8 +142,55 @@ ANISO_BETA = float(os.environ.get("ANISO_BETA", "0.0"))   # 0 = isotropic (paren ANISO_CAP = float(os.environ.get("ANISO_CAP", "1.30")) SPREAD_ZPRES = int(os.environ.get("SPREAD_ZPRES", "0"))   # 1 = keep b-cell z instead of flattening to mu_z ANISO_FULL = int(os.environ.get("ANISO_FULL", "1"))       # submitted: whole-cloud per-axis sigma matching ON-ANISO_LAMBDA = float(os.environ.get("ANISO_LAMBDA", "1.0"))  # damping of the per-axis matching toward sigma_ref+ANISO_LAMBDA = float(os.environ.get("ANISO_LAMBDA", "1.0"))  # damping of the per-axis matching toward sigma_ref (a side) ANISO_AXES = os.environ.get("ANISO_AXES", "z").strip().lower()  # submitted: match z only (xy falsified, see METHOD)+# PLAN T2EI-05 (node 29): side-conditional matching. a side keeps the full+# factor (lambda_a = ANISO_LAMBDA), b side is damped by ANISO_B_LAMBDA so its+# own z neighbourhood structure survives; 1.0 degenerates to node 25.+ANISO_B_LAMBDA = float(os.environ.get("ANISO_B_LAMBDA", "1.0"))+ANISO_PRE_JITTER = int(os.environ.get("ANISO_PRE_JITTER", "0"))+++def _side_sigma_match(coords: np.ndarray, off_a: int, s_ref_axes: np.ndarray):+    """Side-conditional per-axis sigma matching around the global mean.++    Per matched axis: r = sigma_ref / sigma_out; the a-side rows (first off_a)+    get factor 1 + ANISO_LAMBDA*(r-1), the b-side rows get the damped factor+    1 + ANISO_B_LAMBDA*ANISO_LAMBDA*(r-1). ANISO_B_LAMBDA=1 reproduces the+    node-25 whole-cloud factor exactly (same float path). Returns the edited+    cloud and diagnostics including per-side z sigma before/after.+    """+    mu0 = coords.mean(axis=0)+    out = coords - mu0+    fac = np.ones((coords.shape[0], 3))+    diag = {"aniso_full": 1, "aniso_lambda": ANISO_LAMBDA, "aniso_axes": ANISO_AXES,+            "aniso_b_lambda": ANISO_B_LAMBDA, "aniso_pre_jitter": ANISO_PRE_JITTER}+    has_a = 0 < off_a < coords.shape[0]+    for ax in range(3):+        if "xyz"[ax] not in ANISO_AXES:+            continue+        s_ref = float(s_ref_axes[ax])+        s_out = float(coords[:, ax].std())+        r = s_ref / max(s_out, 1e-9)+        fac_a = 1.0 + ANISO_LAMBDA * (r - 1.0)+        fac_b = 1.0 + ANISO_B_LAMBDA * ANISO_LAMBDA * (r - 1.0)+        if has_a:+            fac[:off_a, ax] = fac_a+            fac[off_a:, ax] = fac_b+        else:+            fac[:, ax] = fac_a if off_a > 0 else fac_b+        diag[f"full_fac_{'xyz'[ax]}"] = float(fac_a)+        diag[f"full_fac_{'xyz'[ax]}_b"] = float(fac_b)+        if "xyz"[ax] == "z":+            za_before = float(out[:off_a, ax].std()) if off_a else 0.0+            zb_before = float(out[off_a:, ax].std()) if off_a < coords.shape[0] else 0.0+            after = out * fac+            za_after = float(after[:off_a, ax].std()) if off_a else 0.0+            zb_after = float(after[off_a:, ax].std()) if off_a < coords.shape[0] else 0.0+            diag.update({"sigma_z_a": (za_before, za_after), "sigma_z_b": (zb_before, zb_after),+                         "sigma_ref_z": s_ref, "sigma_out_z": s_out})+    coords = mu0 + out * fac+    return coords, diag   def _spread_apply(X: np.ndarray, rows: np.ndarray, mu: np.ndarray, f: float) -> None:@@ -533,7 +598,13 @@ def main() -> None:         parts.append(np.clip(Xb[ib], 0.0, None).astype(np.float32))         coord_parts.append(cb[ib])     expr = np.vstack(parts) if len(parts) > 1 else parts[0]-    coords = _jitter(np.vstack(coord_parts), rng)+    stacked = np.vstack(coord_parts)+    off_a = int(ia.size)+    aniso_pre = False+    if ANISO_FULL and ANISO_PRE_JITTER and not (spread_plan and SPREAD_WHEN == "post"):+        stacked, aniso_diag = _side_sigma_match(stacked, off_a, s_ref_axes)+        aniso_pre = True+    coords = _jitter(stacked, rng)     if spread_plan and SPREAD_WHEN == "post":         mu0 = coords.mean(axis=0)         centered = coords - mu0@@ -549,22 +620,14 @@ def main() -> None:             coords[rows] = mu_f + (coords[rows] - mu_f) * f             spread_diag.append({"type": tname, "n_c": n_c, "k_c": k_c, "f": f})     elif ANISO_FULL:-        # Whole-cloud per-axis sigma matching (extension of the PLAN family):-        # match each axis of the output cloud to the bracket-interpolated-        # per-axis spread of the aligned inputs, then restore the global RMS.-        mu0 = coords.mean(axis=0)-        fac = np.ones(3)-        for ax in range(3):-            if "xyz"[ax] not in ANISO_AXES:-                continue-            s_ref = float(s_ref_axes[ax])-            s_out = float(coords[:, ax].std())-            fac[ax] = 1.0 + ANISO_LAMBDA * (s_ref / max(s_out, 1e-9) - 1.0)-        coords = mu0 + (coords - mu0) * fac+        # Side-conditional per-axis sigma matching (PLAN T2EI-05, node 29):+        # match the output cloud's per-axis spread to the bracket-interpolated+        # reference, a side with the full factor and b side damped by+        # ANISO_B_LAMBDA (=1 => node-25 whole-cloud behaviour), then restore+        # the global RMS.+        if not aniso_pre:+            coords, aniso_diag = _side_sigma_match(coords, off_a, s_ref_axes)         coords = scale_to_rms(coords, target_rms)-        aniso_diag = {"aniso_full": 1, "aniso_lambda": ANISO_LAMBDA, "aniso_axes": ANISO_AXES,-                      "full_fac_x": float(fac[0]),-                      "full_fac_y": float(fac[1]), "full_fac_z": float(fac[2])}     else:         coords = scale_to_rms(coords, target_rms) 

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

用到的知识库条目

编号标题出处
k007Interval staging and held-out-window filtering of external datanotes/official/来件/virtualembryo.ai/rules.md
k027Joint expression-geometry generation with relative geometrynotes/competition/03_solution_landscape.md
k026Canonicalise predicted 3D coordinates before submissionnotes/pitfalls/04_scorer_invariance.md

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

改了什么在 run.py 中把整云单因子 z σ 匹配改为侧别条件匹配(a 侧全因子 fac_a,b 侧阻尼因子由 ANISO_B_LAMBDA 控制),另加 ANISO_PRE_JITTER 开关(实测惰性);查分证伪后提交态默认 λ_b=1.0,逐位等于父节点 25,故榜分与四组分全部 +0.00。
各组分数的变化cell_state:噪声内(54.35 → 54.35,+0.00)
expression_change:噪声内(61.08 → 61.08,+0.00,表达未改动)
local_spatial:噪声内(60.10 → 60.10,+0.00,提交态与父逐位一致)
shape_scale:噪声内(73.51 → 73.51,+0.00,提交态与父逐位一致)
family_idT2EI-05
假设是否成立否
经验
  1. 在 embryo interp 的 z σ 匹配族内,任何侧别差异化缩放(A 半 seed 0,λ_b∈{0, 0.5, 1.25, 1.5} 得分 61.25/61.31/61.44/61.46 均低于 λ_b=1 的 61.50)都掉 occupancy_dice(0.786→0.774~0.780),榜分在均匀单因子处是峰,两侧单调下降——不要再扫侧别/差异化 z 缩放。
  2. λ_b>1 确实按反向假设恢复 local_spatial(nbhd_mmd 0.05436→0.05409),说明父节点 local −0.5 的损失来自 z 压缩本身(z 邻域变密),而非'b 侧被无差别压扁';local↔shape 在该族内是 nbhd_mmd↔occ_dice 的硬权衡。
  3. PRE_JITTER 开关惰性:jitter 只对重复坐标加 1e-4·RMS 噪声,坐标唯一的云 pre/post 输出逐位相同;加此类时序开关前应先确认 jitter 是否实际改动坐标,可省查分。
  4. off 对照(λ_b=1)与父节点预测 h5py 逐数组 diff=0.0,提交态回退到父实现零风险且 vec-check 通过(seed 0/7)——证伪后按 PLAN 预案回退是正确操作,节点无净损失。
mechanism_active否
下一步建议
  1. 针对 local_spatial:用空间局部感知的 z 压缩替代全局单因子——按每个细胞的局部 kNN 密度调制压缩因子(密集区少压、稀疏区多压),在保持 occ_dice ≥0.786 的前提下把 nbhd_mmd 从 0.05436 拉回 ≤0.0535。
  2. 针对 shape_scale/expression 联合:κ(组成阻尼)× z 匹配小网格,κ∈{0.55, 0.65, 0.75},λ 固定 1.0,A 半 seed 0 先筛,≤4 次查分。
  3. 针对 shape_scale:试按型(而非侧别)分别匹配 z σ——侧别轴已双向证伪,但型别条件的假设未被检验;每型因子先做诊断打印确认型间 σ_ref/σ_out 比值差异 >5% 再查分,否则按'机制无实际差异'判据提前终止。

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

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

分析员

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

工程师

角色工程师 alibaba-token-plan-cn/qwen3.8-max
调用次数1 次
轮数22
工具调用共 24 次:bash 17、edit 4、read 2、write 1
用时9 分
token 数输入 62,327 · 输出 8,225 · 思考 9,084
任务(第一行)按计划修改程序:侧别加权 z 轴 σ 匹配:a 侧全压缩、b 侧衰减,恢复 local_spatial
最后的回答(摘录)
**节点 29 完成。**

- **做了什么**:按 PLAN T2EI-05 实现侧别条件 z 轴 σ 匹配(a 侧全压缩 fac_a=0.918、b 侧 λ_b 阻尼,绕全局 μ_z),另实现 ANISO_PRE_JITTER(实测惰性,pre/post 输出逐位相同,未耗查分)。off 对照(λ_b=1.0)与父节点 25 预测 h5py 逐数组 diff=0.0。
- **查分结果**(5 次,A 半 seed 0):λ_b = 0 → 61.25,0.5 → 61.31,**1.0(父)→ 61.50**,1.25 → 61.44,1.5 → 61.46。机制证伪:任何侧别差异化都掉 occupancy_dice(0.786→0.774/0.780)伤 shape,λ_b>1 虽按反向假设恢复了 local_spatial(nbhd_mmd 0.05436→0.05409),净分仍低于均匀压缩。**提交态 = 父节点 25**(代码默认逐位一致),vec-check ok(seed 0/7)。
- **下一步最值得试**:侧别/差异化 z 缩放已双向证伪,勿再扫;local↔shape 在 z 匹配族内是 nbhd_mmd↔occ_dice 硬权衡。建议换轴:κ(组成阻尼 0.55–0.75)× z 匹配联合小网格,或空间局部感知的 z 压缩(按局部密度调制因子而非全局单因子)。
原始记录位置/home/spark-longxinyang/vec/runs/formal/20261003-043412-search-t2-embryo-interp-g24-D-s1/nodes/29/engineer.jsonl 171 KB
/home/spark-longxinyang/vec/runs/formal/20261003-043412-search-t2-embryo-interp-g24-D-s1/nodes/29/engineer.stderr

调研员

角色调研员 alibaba-token-plan-cn/qwen3.8-max
调用次数1 次
轮数1
工具调用共 0 次:—
用时2 分
token 数输入 14,376 · 输出 1,479 · 思考 5,214
任务(第一行)为节点 n29(改进,父节点 n25)写改进计划 PLAN.json
最后的回答(摘录)
点 25 整云 z 匹配(fac≈0.92)使 shape_scale +1.03 但 local_spatial −0.59(neighborhood_mmd 0.05314→0.05436),净榜分仅 +0.11。z 过扩展的根因是 a 侧(早端)占混合的 ~52%,但当前机制对所有细胞施加同一压缩因子,无差别地压扁了 b 侧细胞的 z 邻域。ANALYSIS 建议'按型分别匹配 z 而非整云单因子';本方案按因果根源(侧别)而非型别做条件匹配,更直接、实现更简。",
  "approach": "步骤:1) 在 run.py 的 ANISO_FULL 分支中,将当前整云单因子 z 匹配改为侧别加权:对 a 侧细胞施加完全匹配因子 fac_a = 1 + λ_a·(σ_ref_z/σ_out_z − 1)(λ_a=1 固定),对 b 侧细胞施加衰减因子 fac_b = 1 + λ_b·(σ_ref_z/σ_out_z − 1),λ_b 由环境变量 ANISO_B_LAMBDA 控制(初值 0.5,搜索 {0, 0.25, 0.5, 0.75, 1.0})。σ_ref_z 和 σ_out_z 仍从原始对齐云现场计算,缩放绕全局 μ_z。2) 快速变体:将 z 匹配移到 jitter 之前(env ANISO_PRE_JITTER=1),jitter 会在 z 方向随机回补部分方差,等效软化压缩;与 λ_b 组合测试。3) 用 vec-score 在 A 半 seed 0 上筛选:先跑 off 对照确认 = 父节点(1 次),再跑 λ_b∈{0, 0.5, 1.0}×PRE_JITTER∈{0,1} 共 6 配置(6 次),选 local_spatial 恢复最多且 shape_scale ≥ 73 的配置(约 2 次),最优配置换 seed 1 验证(1 次),共 ≤ 10 次。4) 单输入退路:无括号时 early return,不触及新代码,与父节点一致。5) 若 λ_b=0(b 侧完全不压缩)导致 d2_shape 恶化 > 10%,则回退到 λ_b=0.5;若所有 λ_b<1 的 shape_scale 均 < 72.5(低于父节点 23 的 72.48),则机制证伪,提交态 = 父节点 25。",
  "expected_groups": ["local_spatial", "shape_scale"],
  "risks": "1) b 侧不压缩可能使整体 z σ 匹配不足,d2_shape 回升,shape_scale 下降超过 local_spatial 恢复——Engineer 应在前 3 次查分内检查 d2_shape 是否 > 0.011(父节点 0.00945),若是则只试 λ_b=0.75。2) 侧别标签在 jitter 后可能丢失(若 jitter 打乱索引)——实现时在 jitter 前记录 a/b 侧掩码,jitter 后用掩码索引。3) 改善幅度可能 < 1 分(T2 噪声),需 seed 1 确认方向一致;若两 seed 均 < +0.5 则如实报告证伪。",
  "family_id": "T2EI-05",
  "mechanism": "侧别条件 z 轴 σ 匹配:a 侧细胞用完全因子压缩 z 以修正早端主导混合造成的 z 过扩展,b 侧细胞用衰减因子(ANISO_B_LAMBDA < 1)保留其 z 邻域结构,绕全局 μ_z 缩放后恢复 RMS。",
  "vs_constant_shift": "常数 z 位移对所有细胞加同一偏移,不改变 z 离散度。本机制按侧别施加不同的乘性 z 缩放(绕质心),改变 a 侧和 b 侧各自的 z 展布,且缩放因子由括号插值 σ_ref_z 数据驱动,不是固定常数。",
  "mechanism_evidence": "Engineer 应打印:(1) a 侧和 b 侧各自的 z σ 在匹配前后的变化(预期 a 侧压缩 ~8%,b 侧压缩 < 4% @ λ_b=0.5);(2) neighborhood_mmd 相对整云匹配(0.05436)是否回落到 ≤ 0.0535;(3) d2_shape 是否保持 ≤ 0.010;(4) 四组分各自的变化,尤其 local_spatial 是否回到 ≥ 60.5。",
  "mechanism_off_control": "ANISO_B_LAMBDA=1.0 且 ANISO_PRE_JITTER=0 时,a/b 侧因子相同,退化为整云单因子 z 匹配,输出应与父节点 25 逐数组一致(h5py 逐数组 allclose 验证)。若不一致说明实现有 bug。",
  "sources": []
}
```
原始记录位置/home/spark-longxinyang/vec/runs/formal/20261003-043412-search-t2-embryo-interp-g24-D-s1/nodes/29/researcher.jsonl 5 KB
/home/spark-longxinyang/vec/runs/formal/20261003-043412-search-t2-embryo-interp-g24-D-s1/nodes/29/researcher.stderr

审查员

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