总览 · ← 返回运行 20261003-094241-search-t2-heart-interp-g24-D-s2
节点 n21
逐类型差异收缩:共有型 α=1.25、单侧型 α_single 扫 0–1.75;减收缩 shape raw 略升但 nbd raw 恶化更多,加收缩平坦,均不超父,按 PLAN 回退默认 1.25(逐位同父)。
| 运行?一次完整的自动搜索或 Agent 会话,有自己的锁定配置和证据包。 | 20261003-094241-search-t2-heart-interp-g24-D-s2 |
|---|---|
| 父节点 | n15 |
| 子节点 | — |
| 操作?种子:人写的起点;改进:在父节点上改;草稿:从头写;修复:修父节点的报错。 | 改进 |
| 状态 | 已打分 |
| 分数 | 搜索目标分 66.21(+0.0) · proxy 66.21(+0.0) |
| 审查 | 未审查 |
| 用时?从运行开始到结束(或到现在)的挂钟时间。 | 17 分 |
| 程序版本 | 05b208f56897d6322b9c9012a9b421aa7ec2672b (programs.git) |
方法说明?节点程序自带的 METHOD.md:这个程序做了什么、为什么。
来自 programs.git 05b208f568:solution/METHOD.md
逐类型差异收缩:共有型 α=1.25、单侧型 α_single 扫 0–1.75;减收缩 shape raw 略升但 nbd raw 恶化更多,加收缩平坦,均不超父,按 PLAN 回退默认 1.25(逐位同父)。
方法族与机制
T2HI-05(差异收缩解耦 shape↔neighborhood)。在父节点管线(logit 组成插值配额混抽 → procrustes 对齐 → log-linear RMS → 同型 kNN 收缩 k=10/α=1.25 → jitter → scale_to_rms)的收缩步中,把统一 α 改为逐类型 α:
- 共有型(该类型配额在括号两侧各抽到 ≥1 个细胞,
per_type中 k_a>0 且 k_b>0):α_shared=1.25,不变。其混抽产生人为的 a/b 双子簇,收缩才能合并亚簇、改善表达-位置配对。 - 单侧型(只从一侧抽到):α_single=env
T2HI_CONTRACT_SINGLE,默认 1.25(=关闭,逐位等于父)。假设是其表达-位置配对本身正确,减收缩可保留自然空间分布、减轻 d2_shape/occupancy_dice 的致密化损害。
这不是常数位移也不是组成重加权:每个细胞的位移方向/距离由其同型 kNN 局部邻域决定,α 由该类型的跨阶段抽取组成决定(同云内不同类型 α 不同)。
关闭机制对照(PLAN mechanism_off_control)
T2HI_CONTRACT_SINGLE=1.25 时输出与父节点 15 的预测逐位相同(.X 与 obsm["spatial_3D"] 均 np.array_equal 验证通过)。提交默认即此状态。
机制生效证据(α_single=0.3 与 0.0 时)
- 收缩日志:5 个共有型、7922/17616 个细胞为共有型细胞;统一 α=1.25 下 mean_disp 共有型 17.88、单侧型 37.81(单侧型位移是共有型 2 倍多,确为压缩主力)。
- α_single=0.3 时单侧型 mean_disp 37.81→9.07,收缩后 pre-scale RMS 325.1→328.5;α_single=0.0 时单侧型位移 0、RMS 330.3(均增大,符合"保留自然分布"预期)。
- 四组分变化(今日同一评分状态下的 A 半查询;父文件今日重查 = 66.05,expression 72.08 / cell_state 71.56 / shape 50.75 / local 69.80,nbd raw 0.04176):
| α_single | 榜分 | shape_scale | local_spatial | nbd raw | d2 raw | occ raw |
|---|---|---|---|---|---|---|
| 0.0 | 65.52 | 51.18 | 67.24 | 0.04694 | 0.04421 | 0.8200 |
| 0.3 | ~65.7 | ~51.3 | 67.99 | 0.04538 | 0.04400 | 0.8208 |
| 0.5 | 65.78 | 50.95 | 68.55 | 0.04424 | 0.04416 | 0.8159 |
| 1.25(=父,对照) | 66.05(正式记录 66.21) | 50.75 | 69.80 | 0.04176 | 0.04529 | 0.8163 |
| 1.5 | 66.00 | 50.37 | 70.00 | 0.04136 | 0.04571 | 0.8110 |
| 1.75 | 66.09 | 50.83 | 69.87 | 0.04162 | 0.04632 | 0.8210 |
expression_change / cell_state 四列在所有查询中恒定(只动坐标),不参与比较。
结论:机制假设被否证
- PLAN 预期的 shape 改善方向正确但量级不足:d2 raw 0.0453→0.0442、occ raw 0.816→0.820(PLAN 预期 d2<0.042 未达到),shape_scale 组 +0.4~0.5,仍贴地板。
- nbd 代价远超 shape 收益:nbd raw 0.0418→0.0469(α_single=0),超 PLAN 风险条款 2 的放弃线 0.044;local_spatial 组 −2.6。α_single=0.3 的 nbd raw 0.04538 > 0.042,触发 PLAN 提交判据的否分支。
- 单侧型的收缩正是 nbd 收益的主要来源(单侧型占 55% 细胞、位移更大),PLAN 风险条款 2 预言的情形成立:减收缩直接损害邻域一致性。
- 反方向(α_single>α_shared)平坦:nbd raw 在 1.5 处最优 0.04136 但仅比 1.25 好 0.0004(+0.03 分),shape 无系统改善,均在 ±0.2 噪声内。
- 由此判断:shape_scale 贴地板不是收缩致密化造成的——完全不收缩单侧型(α_single=0)shape 也只到 51.18。收缩强度这条轴(k、α、逐类型 α)已在平台顶点,与父 ANALYSIS 的 k/α 网格结论一致。shape 需要另一类机制(如节点 17 的收缩后方差恢复,已证 +1.35)。
验证过的
- 默认两次运行逐位相同;默认输出与父节点 15 基线预测逐位相同(X、坐标 array_equal);
vec-check通过;纯 CPU ~3.5 s、内存 <1 GB;np.random.default_rng(seed),无全局随机态。 - 视图无关:只用时间差 t、标签、坐标、manifest 上下限;不读 board/mode/路径/阶段名;单输入走 copy_last 分支,在收缩之前返回,不受本改动影响。
- 查分 6 次(0.3 / 1.5 / 0.5 / 1.75 / 0.0 / 对照同日重查)。
没验证的 / 风险
- 共有型更多的括号(final E8.25+E8.75,31 个共有型)上单侧型占比更低,差异收缩的净效应可能不同(未测;但本代理上 nbd 对 α_single 的敏感度是结构性的,预期同向)。
- 今日查询与父正式记录的 expression/cell_state 组有 ~0.5-0.9 的组间漂移(同文件同日重查稳定),跨日绝对分不可直接比;本节点所有比较用同日查询。
- 本节点无净改进:如实报告机制被否证 + 按 PLAN 回退条款保住父输出。
- 知识来源:仅通用统计/几何做法(kNN 质心收缩、按跨阶段组成分组),未使用任何保留阶段/基因型的测量信息。
调研员的计划
| 名称 | 差异收缩:共有型全收缩、单侧型减收缩以解耦 shape↔neighborhood |
|---|---|
| 动机 | 父节点 15 的 shape_scale 50.51 是最弱组(三项 skill 0.499/0.504/0.512 全贴地板)。ANALYSIS 明确记录 kNN 收缩存在 neighborhood↔shape 此消彼长(k=20 使 nbd raw 更好但 shape_scale 50.51→49.78)。根本原因:单侧类型(仅从一个阶段抽取)本身表达-位置配对正确,对其做 α=1.25 收缩只是无谓压缩空间分布,损害 d2_shape 和 occupancy_dice;而共有类型(两侧混抽)存在人为双峰,收缩才有邻域收益。节点 17 用收缩后方差恢复部分解耦(shape +1.35),但那是事后补救;本方案从收缩本身入手,按类型来源差异化强度,是不同机制。 |
| 做法 | 在父节点 15 的 contract() 函数中引入逐类型 α:(1) 主流程已有 per-type 配额抽样,记录哪些类型是共有型(两侧均抽到 ≥1 个细胞);(2) 将 shared_types: set 传入 contract();(3) 收缩循环中,共有型用 α_shared=1.25(不变),单侧型用 α_single(环境变量 T2HI_CONTRACT_SINGLE,默认 0.3);(4) 其余流程(procrustes 对齐、log-linear RMS target、scale_to_rms、jitter)不变。参数扫描:α_single ∈ {0.0, 0.25, 0.5, 1.25(=对照)},每个只跑一次 vec-score(A 半),比较 shape_scale 三项 raw 与 nbd raw;若 α_single=0.3 的榜分 >66.21 且 nbd raw ≤0.042 则提交,否则退回 α_single=1.25(逐位等于父)。单输入退路:copy_last 分支在收缩之前返回,不受影响。预期 3 次查分可完成筛选(对照 + 2 个候选),留余量复测最佳点。 |
| 风险 | 1) 单侧型占细胞多数,减收缩后全云 RMS 增大,scale_to_rms 会额外压缩,可能部分抵消形状收益——但 d2_shape 和 occupancy_dice 都是尺度不变的(除以/缩放至各自 RMS),所以形状指标不受影响。2) 若共有型数量极少(此 proxy 仅 5 个),单侧型占绝大多数细胞,nbd 收益可能主要来自单侧型的邻域一致性而非共有型合并,减收缩可能小幅损害 nbd——Engineer 应在第一次查分时检查 nbd raw 是否 >0.044(超此值则放弃)。3) α_single=0 时单侧型完全不收缩,若这些型内有抽样导致的空间离群点,nbd 可能略差——α_single=0.25 是保底。 |
代码改动?这个节点的程序和父节点程序的逐行差别:绿色是新增,红色是删除。
对比:父节点版本 4a7df4abc3。改动的文件:solution/METHOD.md +39 −20、solution/run.py +52 −7
diff --git a/solution/METHOD.md b/solution/METHOD.mdindex 7625429..55bc426 100644--- a/solution/METHOD.md+++ b/solution/METHOD.md@@ -1,33 +1,52 @@-实现 PLAN T2HI-01 表达插值机制(共有类型细胞向插值型均值位移 f 倍,阈值 |Δμ|>0.1):代理上 f=0.1/0.2/0.3 全部劣于父节点(variogram raw 0.0206→≥0.0265,超 PLAN 放弃阈值 0.022),按 PLAN 风险条款 2 放弃,默认 f=0,输出与父节点 13 逐位相同;另复测收缩 k/α 网格,均不超父配置(k=10, α=1.25)。+逐类型差异收缩:共有型 α=1.25、单侧型 α_single 扫 0–1.75;减收缩 shape raw 略升但 nbd raw 恶化更多,加收缩平坦,均不超父,按 PLAN 回退默认 1.25(逐位同父)。 -## 做了什么+## 方法族与机制 -1. **PLAN 机制(T2HI_EXPR_INTERP,实现完整、实测有害、默认 0)**:抽样后、同型 kNN 收缩之前,对每个两侧各 ≥10 个抽取细胞的共有类型,计算 a/b 侧逐基因均值 μ_a、μ_b,μ_t=(1−t)μ_a+tμ_b;a 侧细胞 x+=f·(μ_t−μ_a),b 侧 x+=f·(μ_t−μ_b),只作用于 |μ_a−μ_b|>0.1(T2HI_EXPR_THRESH)的基因,位移后 clip≥0。逐类型、逐基因、逐侧不同,不是常数位移。f=0 提前返回,输出与父节点逐位相同(anndata 比对通过)。-2. **对照与扫描(proxy:E8.25+E9.5→E8.75,t=0.4,n=17616,seed 0,均 vec-score A 半)**:+T2HI-05(差异收缩解耦 shape↔neighborhood)。在父节点管线(logit 组成插值配额混抽 → procrustes 对齐 → log-linear RMS → 同型 kNN 收缩 k=10/α=1.25 → jitter → scale_to_rms)的收缩步中,把统一 α 改为逐类型 α: -| 配置 | 榜分 | de_score raw | mmd_u raw | variogram raw | nbd_mmd raw |-|---|---:|---:|---:|---:|---:|-| f=0(=父 13,对照) | 66.21(父实测) | 0.5213 | 0.02337 | 0.0206 | 0.04178 |-| f=0.1, th=0.1 | 65.48 | 0.5326 | 0.02431 | 0.0265 | 0.04207 |-| f=0.2, th=0.5 | 65.28 | 0.5217 | 0.02472 | 0.0270 | 0.04239 |-| f=0.3, th=0.1 | 64.79 | 0.5109 | 0.02530 | 0.0299 | 0.04298 |+- **共有型**(该类型配额在括号两侧各抽到 ≥1 个细胞,`per_type` 中 k_a>0 且 k_b>0):α_shared=1.25,不变。其混抽产生人为的 a/b 双子簇,收缩才能合并亚簇、改善表达-位置配对。+- **单侧型**(只从一侧抽到):α_single=env `T2HI_CONTRACT_SINGLE`,默认 **1.25(=关闭,逐位等于父)**。假设是其表达-位置配对本身正确,减收缩可保留自然空间分布、减轻 d2_shape/occupancy_dice 的致密化损害。 -机制生效证据:f=0.3 时 5 个共有类型、1267 型×基因次被位移(约 253 基因/型),全基因平均 std −0.0136(双峰→单峰方向正确);f=0.1 时 std −0.0048。de_direction raw 三档全部不动(0.6623–0.6626 vs 父 0.6625)。+这不是常数位移也不是组成重加权:每个细胞的位移方向/距离由其同型 kNN 局部邻域决定,α 由该类型的跨阶段抽取组成决定(同云内不同类型 α 不同)。 -3. **放弃理由(PLAN 自带的放弃分支)**:所有 f 下 variogram raw ≥0.0265,远超 PLAN 风险条款 2 的放弃阈值 0.022;mmd_u 在 f=0.3 恶化 +8.3%(>5% 条款);de_score 的收益不稳定(f=0.1 升、f=0.3 反降,且父节点 METHOD 记录同文件 de_score raw 查询漂移可达 0.52→0.54,单项差异淹没在评分噪声里),而 cell_state 组的损失单调、一致。型均值方向的小步加性位移把细胞拉向"两端均值的混合",破坏了真值 E8.75 的基因间共变结构——与节点 4(全局位移 DE↑mmd↓)同一折中,限定共有类型+小步长只是减轻、没有消除。-4. **收缩参数复测(父节点 next_suggestions)**:k=20/α=1.25 → 66.09(nbd raw 0.0395 更好,但 d2/occupancy 致密化代价使 shape_scale 50.51→49.78);k=15 → 65.97;k=20/α=1.0 → 65.95;α=1.5 → 65.96。均不超父配置,保留 k=10、α=1.25 默认。neighborhood 与 shape 之间存在一致的此消彼长(收缩越狠 nbd 越好、d2/occupancy 越差),k=10/α=1.25 恰在总分平台顶点附近。+## 关闭机制对照(PLAN mechanism_off_control) -## 提交状态+`T2HI_CONTRACT_SINGLE=1.25` 时输出与父节点 15 的预测**逐位相同**(`.X` 与 `obsm["spatial_3D"]` 均 `np.array_equal` 验证通过)。提交默认即此状态。 -默认 T2HI_EXPR_INTERP=0,输出与父节点 13 完全一致(预期正式分 ≈ 父 66.2 的 B 半水平);机制代码保留、可用环境变量开启,供后续节点在别的括号(如 final E8.25+E8.75,31 个共有类型)上复测——本 proxy 括号只有 5 个共有类型,型内均值估计噪声大,共有类型多时结论可能不同(未验证)。+## 机制生效证据(α_single=0.3 与 0.0 时)++- 收缩日志:5 个共有型、7922/17616 个细胞为共有型细胞;统一 α=1.25 下 mean_disp 共有型 17.88、单侧型 37.81(单侧型位移是共有型 2 倍多,确为压缩主力)。+- α_single=0.3 时单侧型 mean_disp 37.81→9.07,收缩后 pre-scale RMS 325.1→328.5;α_single=0.0 时单侧型位移 0、RMS 330.3(均增大,符合"保留自然分布"预期)。+- 四组分变化(今日同一评分状态下的 A 半查询;父文件今日重查 = 66.05,expression 72.08 / cell_state 71.56 / shape 50.75 / local 69.80,nbd raw 0.04176):++| α_single | 榜分 | shape_scale | local_spatial | nbd raw | d2 raw | occ raw |+|---|---:|---:|---:|---:|---:|---:|+| 0.0 | 65.52 | 51.18 | 67.24 | 0.04694 | 0.04421 | 0.8200 |+| 0.3 | ~65.7 | ~51.3 | 67.99 | 0.04538 | 0.04400 | 0.8208 |+| 0.5 | 65.78 | 50.95 | 68.55 | 0.04424 | 0.04416 | 0.8159 |+| **1.25(=父,对照)** | **66.05**(正式记录 66.21) | 50.75 | 69.80 | 0.04176 | 0.04529 | 0.8163 |+| 1.5 | 66.00 | 50.37 | 70.00 | 0.04136 | 0.04571 | 0.8110 |+| 1.75 | 66.09 | 50.83 | 69.87 | 0.04162 | 0.04632 | 0.8210 |++expression_change / cell_state 四列在所有查询中恒定(只动坐标),不参与比较。++## 结论:机制假设被否证++1. **PLAN 预期的 shape 改善方向正确但量级不足**:d2 raw 0.0453→0.0442、occ raw 0.816→0.820(PLAN 预期 d2<0.042 未达到),shape_scale 组 +0.4~0.5,仍贴地板。+2. **nbd 代价远超 shape 收益**:nbd raw 0.0418→0.0469(α_single=0),超 PLAN 风险条款 2 的放弃线 0.044;local_spatial 组 −2.6。α_single=0.3 的 nbd raw 0.04538 > 0.042,触发 PLAN 提交判据的否分支。+3. **单侧型的收缩正是 nbd 收益的主要来源**(单侧型占 55% 细胞、位移更大),PLAN 风险条款 2 预言的情形成立:减收缩直接损害邻域一致性。+4. **反方向(α_single>α_shared)平坦**:nbd raw 在 1.5 处最优 0.04136 但仅比 1.25 好 0.0004(+0.03 分),shape 无系统改善,均在 ±0.2 噪声内。+5. 由此判断:**shape_scale 贴地板不是收缩致密化造成的**——完全不收缩单侧型(α_single=0)shape 也只到 51.18。收缩强度这条轴(k、α、逐类型 α)已在平台顶点,与父 ANALYSIS 的 k/α 网格结论一致。shape 需要另一类机制(如节点 17 的收缩后方差恢复,已证 +1.35)。 ## 验证过的 -- 默认(f=0)两次运行输出逐位相同(X 与坐标 array_equal);`vec-check` 通过;纯 CPU ~4 s、内存 <1 GB;`np.random.default_rng(seed)`,无全局随机态。-- 视图无关:只用时间差 t、标签、坐标、manifest 上下限;不读 board/mode/路径/阶段名;单输入/不被括号走 copy_last 分支,在机制之前返回。+- 默认两次运行逐位相同;默认输出与父节点 15 基线预测逐位相同(X、坐标 array_equal);`vec-check` 通过;纯 CPU ~3.5 s、内存 <1 GB;`np.random.default_rng(seed)`,无全局随机态。+- 视图无关:只用时间差 t、标签、坐标、manifest 上下限;不读 board/mode/路径/阶段名;单输入走 copy_last 分支,在收缩之前返回,不受本改动影响。+- 查分 6 次(0.3 / 1.5 / 0.5 / 1.75 / 0.0 / 对照同日重查)。 ## 没验证的 / 风险 -- f>0 的全部结论只在 proxy(5 个共有类型)上;final(31 个共有类型)未测,机制可能在类型更多、均值估计更稳时表现不同,但 variogram 损失是结构性的(型均值方向位移必然压缩共变),预期同样为负。-- 本节点无净改进:如实报告负结果 + 保住父分数。评分 A/B 半与 ±1 分噪声下,66.2 与 66.0–66.1 的收缩变体不可区分,未替换父配置。-- 知识来源:仅通用统计做法(型均值插值、kNN 收缩),未使用任何保留阶段/基因型的测量信息。+- 共有型更多的括号(final E8.25+E8.75,31 个共有型)上单侧型占比更低,差异收缩的净效应可能不同(未测;但本代理上 nbd 对 α_single 的敏感度是结构性的,预期同向)。+- 今日查询与父正式记录的 expression/cell_state 组有 ~0.5-0.9 的组间漂移(同文件同日重查稳定),跨日绝对分不可直接比;本节点所有比较用同日查询。+- 本节点无净改进:如实报告机制被否证 + 按 PLAN 回退条款保住父输出。+- 知识来源:仅通用统计/几何做法(kNN 质心收缩、按跨阶段组成分组),未使用任何保留阶段/基因型的测量信息。diff --git a/solution/run.py b/solution/run.pyindex 2a3e29b..4b1a41e 100644--- a/solution/run.py+++ b/solution/run.py@@ -22,6 +22,14 @@ Additions in this node: types from the inside, improving expression-location pairing (neighborhood_mmd). Coordinates only; expression is never touched; the cloud is rescaled to target_rms afterwards as in the parent.+- env T2HI_CONTRACT_SINGLE (default 1.25 == T2HI_CONTRACT_A, i.e. uniform+ contraction, bit-for-bit parent behaviour): per-type differential+ contraction. Types drawn from BOTH bracket sides (shared, with artificial+ side-a/side-b sub-clusters) contract with alpha; types drawn from one side+ only contract with alpha_single. Measured on proxy: alpha_single < alpha+ improves shape raws slightly (d2 0.0453->0.0442, occupancy 0.816->0.820 at+ alpha_single=0) but degrades neighborhood_mmd much more (0.0418->0.0469),+ net negative; alpha_single > alpha is flat. Kept at 1.25 (see METHOD.md). - env T2HI_EXPR_INTERP (default 0.0, measured harmful on proxy): type-conditional expression interpolation. For each shared type with >= T2HI_EXPR_MIN drawn cells per side, side-a cells get x += f*(mu_t - mu_a) and side-b cells@@ -99,14 +107,29 @@ def colocalize(ca, la_sel, cb, lb_sel, t: float, gamma: float, min_count: int): return ca, cb, report -def contract(coords: np.ndarray, labels_sel: np.ndarray, mode: str, alpha: float, k: int) -> np.ndarray:+def contract(+ coords: np.ndarray,+ labels_sel: np.ndarray,+ mode: str,+ alpha: float,+ k: int,+ shared_types: set | None = None,+ alpha_single: float | None = None,+): """Move each cell alpha-fraction toward the centroid of its k nearest neighbours. mode "global": neighbours searched in the whole drawn cloud.- mode "type": neighbours searched within the same cell type only.- mode "none" or alpha==0: identity (parent behaviour).+ mode "type": neighbours searched within the same cell type only. With+ shared_types/alpha_single given, types drawn from BOTH bracket sides use+ alpha, types drawn from one side only use alpha_single (their+ expression-location pairing is already correct, so contraction there only+ compresses the natural spatial spread). alpha_single == alpha reproduces+ the uniform-contraction behaviour bit-for-bit.+ mode "none", or alpha==0 and no distinct alpha_single: identity. """- if mode == "none" or alpha == 0.0 or coords.shape[0] < k + 2:+ if mode == "none" or coords.shape[0] < k + 2:+ return coords+ if alpha == 0.0 and (alpha_single is None or alpha_single == 0.0): return coords from sklearn.neighbors import NearestNeighbors @@ -116,12 +139,17 @@ def contract(coords: np.ndarray, labels_sel: np.ndarray, mode: str, alpha: float idx = np.flatnonzero(labels_sel == ty) if idx.size < 3: continue+ a = alpha+ if alpha_single is not None and shared_types is not None and str(ty) not in shared_types:+ a = alpha_single+ if a == 0.0:+ continue kk = int(min(k, idx.size - 1)) sub = coords[idx] nn = NearestNeighbors(n_neighbors=kk + 1).fit(sub) _, ind = nn.kneighbors(sub) cent = sub[ind[:, 1:]].mean(axis=1)- out[idx] = sub + alpha * (cent - sub)+ out[idx] = sub + a * (cent - sub) return out kk = int(min(k, coords.shape[0] - 1)) nn = NearestNeighbors(n_neighbors=kk + 1).fit(coords)@@ -352,10 +380,27 @@ def run(view: str, out: str, seed: int) -> None: cmode = os.environ.get("T2HI_CONTRACT", "type").strip().lower() calpha = float(os.environ.get("T2HI_CONTRACT_A", "1.25")) ck = int(os.environ.get("T2HI_CONTRACT_K", "10"))+ calpha_single = float(os.environ.get("T2HI_CONTRACT_SINGLE", "1.25"))+ shared_types = {ty for ty, k_a, k_b in per_type if k_a > 0 and k_b > 0} if cmode != "none": before = rms_radius(coords)- coords = contract(coords, lab_sel, cmode, calpha, ck)- print(f"[contract] mode={cmode} alpha={calpha} k={ck} rms {before:.1f}->{rms_radius(coords):.1f}", flush=True)+ prev = coords.copy()+ coords = contract(+ coords, lab_sel, cmode, calpha, ck,+ shared_types=shared_types if cmode == "type" else None,+ alpha_single=calpha_single if cmode == "type" else None,+ )+ disp = np.linalg.norm(coords - prev, axis=1)+ is_shared = np.array([str(ty) in shared_types for ty in lab_sel])+ d_sh = float(disp[is_shared].mean()) if is_shared.any() else 0.0+ d_si = float(disp[~is_shared].mean()) if (~is_shared).any() else 0.0+ print(+ f"[contract] mode={cmode} alpha={calpha} alpha_single={calpha_single} k={ck} "+ f"rms {before:.1f}->{rms_radius(coords):.1f} "+ f"shared_types={len(shared_types)} mean_disp shared={d_sh:.2f} single={d_si:.2f} "+ f"n_shared_cells={int(is_shared.sum())}/{len(disp)}",+ flush=True,+ ) coords = _jitter(coords, rng) coords = scale_to_rms(coords, target_rms) print(f"[out] n={expr.shape[0]} out_rms={rms_radius(coords):.1f}", flush=True)
调研来源?调研员查到并用到的知识条目和文献检索结果(只列标题和编号)。
用到的知识库条目
| 编号 | 标题 | 出处 |
|---|---|---|
| k007 | Interval staging and held-out-window filtering of external data | notes/official/来件/virtualembryo.ai/rules.md |
| k024 | World-model evaluation dimensions for state-transition predictors | notes/competition/07_biomedical_world_models.md |
| k026 | Canonicalise predicted 3D coordinates before submission | notes/pitfalls/04_scorer_invariance.md |
分析结果?分析员写的 ANALYSIS.json:改了什么、各组分数怎么变、假设是否成立、经验和下一步建议。
| 改了什么 | 在同型 kNN 收缩中实现逐类型 α(共有型 α=1.25、单侧型 α_single 由环境变量 T2HI_CONTRACT_SINGLE 控制),扫描 α_single∈{0.0,0.3,0.5,1.5,1.75} 后按 PLAN 回退条款默认 α_single=1.25,提交输出与父节点 15 逐位相同(Engineer 称 array_equal 验证,变化量表所有指标 ±0.00 与之一致)。 |
|---|---|
| 各组分数的变化 | cell_state:噪声内(实际为零):72.43→72.43,mmd_u 0.02337、variogram 0.0206 均与父完全相同 expression_change:噪声内(实际为零):71.71→71.71,de_score/de_direction raw 与 skill 均不变——提交输出与父逐位相同 local_spatial:噪声内(实际为零):70.19→70.19,neighborhood_mmd raw 0.04178 不变;扫描期间 α_single=0.0 使 nbd raw 恶化至 0.04694、组分 −2.6,超过 PLAN 放弃线 0.044,是回退的直接原因 shape_scale:噪声内(实际为零):50.51→50.51,d2_shape 0.04598 / occupancy 0.8132 / scale_log_ratio 0.4688 三项不变;扫描期间(非提交配置)α_single 减小曾使 d2 raw 0.0453→0.0442、occ 0.816→0.820,组分约 +0.4~0.5,仍贴地板 |
| family_id | T2HI-05 |
| 假设是否成立 | 否 |
| 经验 |
|
| mechanism_active | 否 |
| 下一步建议 |
|
对话摘要?每个角色和大模型对话的统计:轮数、工具调用、用时、token 数和最后的回答摘录;原始记录只给路径。
只给统计和最后回答的摘录;完整对话请到原始记录位置里列出的文件看。
分析员
| 角色?调研员写计划、工程师改代码、分析员解读分数、审查员检查作弊。 | 分析员 alibaba-token-plan-cn/qwen3.8-max |
|---|---|
| 调用次数 | 1 次 |
| 轮数?大模型一共回复了几轮(每轮可以调用多个工具)。 | 3 |
| 工具调用?大模型调用读文件、执行命令等工具的次数,按工具名统计。 | 共 3 次:bash 2、write 1 |
| 用时 | 不到 1 分 |
| token 数?输入 / 输出(含思考)的 token 数,来自接口返回的用量。 | 输入 15,394 · 输出 1,309 · 思考 585 |
| 任务(第一行) | 分析节点 n21 的打分结果,写 ANALYSIS.json |
| 最后的回答(摘录) | ANALYSIS.json written |
| 原始记录位置?完整对话记录在 Spark 上的文件路径;看板不复制原始内容。 | /home/spark-longxinyang/vec/runs/formal/20261003-094241-search-t2-heart-interp-g24-D-s2/nodes/21/analyst.jsonl 9 KB /home/spark-longxinyang/vec/runs/formal/20261003-094241-search-t2-heart-interp-g24-D-s2/nodes/21/analyst.stderr |
工程师
| 角色 | 工程师 alibaba-token-plan-cn/qwen3.8-max |
|---|---|
| 调用次数 | 1 次 |
| 轮数 | 24 |
| 工具调用 | 共 24 次:bash 16、edit 6、read 1、write 1 |
| 用时 | 13 分 |
| token 数 | 输入 61,083 · 输出 7,550 · 思考 12,805 |
| 任务(第一行) | 按计划修改程序:差异收缩:共有型全收缩、单侧型减收缩以解耦 shape↔neighborhood |
| 最后的回答(摘录) | **做了什么**:按 PLAN(T2HI-05)在父节点 15 的同型 kNN 收缩里实现逐类型 α——共有型(两侧均抽到)保持 α=1.25,单侧型用 `T2HI_CONTRACT_SINGLE`;对照(α_single=1.25)与父输出逐位相同(array_equal 验证)。 **查分结果**(6 次,同日对照重查父文件=66.05):α_single=0.0/0.3/0.5 → 65.52/~65.7/65.78;1.5/1.75 → 66.00/66.09。减收缩确使 shape raw 按机制预期改善(d2 0.0453→0.0442、occ 0.816→0.820),但 nbd raw 0.0418→0.0469 远超 PLAN 放弃线 0.044,净负;加收缩平坦在噪声内。**机制假设被否证**:shape 贴地板不是收缩致密化造成的(单侧型完全不收缩 shape 也只到 51.2)。按 PLAN 回退条款默认 α_single=1.25,提交输出与父逐位相同,METHOD.md 完整记录负结果与曲线。 **下一步最值得试**:收缩强度轴(k、α、逐类型 α)已证平台顶点;shape_scale 需要非收缩类机制——节点 17 的收缩后方差恢复(66.58)是该方向唯一有效解,建议在其基础上继续(如各向异性恢复 β 扫描或与 α_single=1.5 的 nbd 微增益组合)。 |
| 原始记录位置 | /home/spark-longxinyang/vec/runs/formal/20261003-094241-search-t2-heart-interp-g24-D-s2/nodes/21/engineer.jsonl 135 KB /home/spark-longxinyang/vec/runs/formal/20261003-094241-search-t2-heart-interp-g24-D-s2/nodes/21/engineer.stderr |
调研员
| 角色 | 调研员 alibaba-token-plan-cn/qwen3.8-max |
|---|---|
| 调用次数 | 1 次 |
| 轮数 | 1 |
| 工具调用 | 共 0 次:— |
| 用时 | 3 分 |
| token 数 | 输入 18,304 · 输出 1,170 · 思考 7,330 |
| 任务(第一行) | 为节点 n21(改进,父节点 n15)写改进计划 PLAN.json |
| 最后的回答(摘录) | /0.512 全贴地板)。ANALYSIS 明确记录 kNN 收缩存在 neighborhood↔shape 此消彼长(k=20 使 nbd raw 更好但 shape_scale 50.51→49.78)。根本原因:单侧类型(仅从一个阶段抽取)本身表达-位置配对正确,对其做 α=1.25 收缩只是无谓压缩空间分布,损害 d2_shape 和 occupancy_dice;而共有类型(两侧混抽)存在人为双峰,收缩才有邻域收益。节点 17 用收缩后方差恢复部分解耦(shape +1.35),但那是事后补救;本方案从收缩本身入手,按类型来源差异化强度,是不同机制。",
"approach": "在父节点 15 的 contract() 函数中引入逐类型 α:(1) 主流程已有 per-type 配额抽样,记录哪些类型是共有型(两侧均抽到 ≥1 个细胞);(2) 将 shared_types: set 传入 contract();(3) 收缩循环中,共有型用 α_shared=1.25(不变),单侧型用 α_single(环境变量 T2HI_CONTRACT_SINGLE,默认 0.3);(4) 其余流程(procrustes 对齐、log-linear RMS target、scale_to_rms、jitter)不变。参数扫描:α_single ∈ {0.0, 0.25, 0.5, 1.25(=对照)},每个只跑一次 vec-score(A 半),比较 shape_scale 三项 raw 与 nbd raw;若 α_single=0.3 的榜分 >66.21 且 nbd raw ≤0.042 则提交,否则退回 α_single=1.25(逐位等于父)。单输入退路:copy_last 分支在收缩之前返回,不受影响。预期 3 次查分可完成筛选(对照 + 2 个候选),留余量复测最佳点。",
"expected_groups": ["shape_scale"],
"risks": "1) 单侧型占细胞多数,减收缩后全云 RMS 增大,scale_to_rms 会额外压缩,可能部分抵消形状收益——但 d2_shape 和 occupancy_dice 都是尺度不变的(除以/缩放至各自 RMS),所以形状指标不受影响。2) 若共有型数量极少(此 proxy 仅 5 个),单侧型占绝大多数细胞,nbd 收益可能主要来自单侧型的邻域一致性而非共有型合并,减收缩可能小幅损害 nbd——Engineer 应在第一次查分时检查 nbd raw 是否 >0.044(超此值则放弃)。3) α_single=0 时单侧型完全不收缩,若这些型内有抽样导致的空间离群点,nbd 可能略差——α_single=0.25 是保底。",
"family_id": "T2HI-05",
"mechanism": "按类型来源差异化收缩强度:共有型(两侧混抽、存在人为空间双峰)保持全收缩 α=1.25 以合并亚簇;单侧型(表达-位置配对本身正确)降低收缩至 α_single≤0.5,保留其自然空间分布,减少不必要的致密化对 d2_shape/occupancy_dice 的损害。",
"vs_constant_shift": "这不是对每个类型施加统一位移向量,也不是全局组成重加权。它改变的是每个细胞向同型 kNN 质心移动的比例(α),且该比例由类型的跨阶段组成决定:同一云内不同类型的 α 不同,同一类型内每个细胞的位移方向和距离取决于其局部邻域,不是常数。",
"mechanism_evidence": "Engineer 应记录并对比:(1) d2_shape raw(预期从 0.046 降至 <0.042);(2) occupancy_dice raw(预期从 0.813 升至 >0.82);(3) nbd_mmd raw(预期 ≤0.042,不明显恶化);(4) 收缩前后全云 RMS 变化(单侧型减收缩后 pre-scale RMS 应更大);(5) 逐类型收缩位移范数的分布:单侧型位移应显著小于共有型。若 d2_shape 和 occupancy 无改善,说明形状贴地板不是收缩致密化造成的,机制假设不成立。",
"mechanism_off_control": "设 T2HI_CONTRACT_SINGLE=1.25(等于 α_shared),所有类型统一收缩,输出应与父节点 15 逐位相同(array_equal 验证)。预期差别:关闭后输出完全一致、分数相同(66.21);开启后(α_single<1.25)shape_scale 三项 raw 改善而 nbd raw 不显著恶化。",
"sources": []
} |
| 原始记录位置 | /home/spark-longxinyang/vec/runs/formal/20261003-094241-search-t2-heart-interp-g24-D-s2/nodes/21/researcher.jsonl 5 KB /home/spark-longxinyang/vec/runs/formal/20261003-094241-search-t2-heart-interp-g24-D-s2/nodes/21/researcher.stderr |