总览 · ← 返回运行 20261003-004922-search-t2-heart-interp-g24
节点 n16 在终选来历上
按表达差异分位数门控NN表达混合(T2HI-01):只对被融合b细胞中 ||X_a_nn−X_b|| ≥ 全局 q=0.7 分位数的高失配细胞做 gamma=1.2 逐细胞混合,低失配细胞保持b侧原表达,修复 cell_state 回吐。
| 运行?一次完整的自动搜索或 Agent 会话,有自己的锁定配置和证据包。 | 20261003-004922-search-t2-heart-interp-g24 |
|---|---|
| 父节点 | n14 |
| 子节点 | n18 |
| 操作?种子:人写的起点;改进:在父节点上改;草稿:从头写;修复:修父节点的报错。 | 改进 |
| 状态 | 已打分 |
| 分数 | 搜索目标分 61.21(+0.4) · proxy 61.21(+0.4) · 3 次复测均分 60.90 |
| 审查 | 通过 1 越界读取:未发现问题——run.py 只通过 load_manifest/read_stage/panel_genes 从 --data 视图读取输入(run.py:174-177),无绝对路径、..、/mnt、/home、目标阶段文件或网络访问;external(MOSTA E9.5) 在 METHOD.md:48 明确未使用。; 2 硬编码目标统计量:未发现问题——gamma=1.2、gate_q=0.7 等为标量超参数(run.py:292,310),delta、common 类型集、分位数阈值均由两 bracket 输入现场计算(run.py:217-220,317-319),无… |
| 用时?从运行开始到结束(或到现在)的挂钟时间。 | 10 分 |
| 程序版本 | 54926029f64a6d865e71a5778a73d9b0e9670c66 (programs.git) |
方法说明?节点程序自带的 METHOD.md:这个程序做了什么、为什么。
来自 programs.git 54926029f6:solution/METHOD.md
按表达差异分位数门控NN表达混合(T2HI-01):只对被融合b细胞中 ||X_a_nn−X_b|| ≥ 全局 q=0.7 分位数的高失配细胞做 gamma=1.2 逐细胞混合,低失配细胞保持b侧原表达,修复 cell_state 回吐。
方法(family T2HI-01,improve 自节点 14)
流程与节点 14 完全相同:双 bracket 组成插值(t 分层抽样)→ Procrustes 对齐 → 缩放到插值 RMS → 每共有型 b 侧细胞向 a 侧同型最近邻坐标位移 α=1.0(型内 NN 融合)→ 拼接、_jitter、统一 scale_to_rms。坐标与组成本节点未动(shape_scale 与父节点逐位一致,符合"机制不动坐标"的预期)。
新增机制(本节点):在父节点的逐细胞 NN 表达混合上加分位数门控。对每个被融合、被采样进输出的 b 细胞计算 chg_l2 = ||X_a_nn − X_b||(其空间配对 a 侧 NN 与自身的表达距离),取全部被融合 b 细胞 chg_l2 的分位数作阈值:
chg_l2 ≥ quantile(chg_l2, q)的细胞执行X_b <- X_b + gamma*(X_a_nn − X_b);- 其余细胞保持 b 侧原表达不动。
动机(PLAN):低失配细胞本身已接近其配对 a 侧,混合它们只把表达云整体拉向 a 侧 bracket(mmd/variogram 惩罚 → cell_state 回吐),不修复表达-位置失配。门控只保留高失配细胞的混合,即"哪些细胞被混合"的选择逻辑逐细胞不同(取决于自身表达距离),非常数位移、非组成重加权。
提交态默认:T2HI_GATE_Q=0.7(全局分位数)、T2HI_GAMMA=1.2、T2HI_EXPRNN=1、T2HI_GATE_MODE=global。
对照开关:T2HI_GATE_Q=0 → 阈值=最小值,全部被融合细胞通过门控,行为与节点 14 完全一致(已本地 np.array_equal 验证 X 与坐标逐元素全等);T2HI_EXPRNN=0 → 关闭整个表达混合,与节点 10 一致(父节点已验证)。T2HI_GATE_MODE=type 为型内分位数备选(proxy 上更差,未采用)。
无随机数参与门控(np.quantile 确定);不依赖绝对时间、路径、视图字段;单输入 / 不被 bracket → t=0 → copy_last 分支,不触发融合与混合。
网格结果(vec-score A 半,proxy,seed 0;节点14 = q0/g1.2 基线 60.40)
| 配置 | 榜分 | cell_state | expr_change | local_spatial | shape_scale |
|---|---|---|---|---|---|
| q=0(节点14) | 60.40 | 64.25 | 65.51 | 58.21 | 53.62 |
| q=0.3, g=1.0 / 1.2 | 60.42 / 60.52 | 64.87 / 64.83 | 65.52 / 65.76 | 57.67 / 57.87 | 53.62 |
| q=0.5, g=1.0 / 1.2 | 60.46 / 60.55 | 65.35 / 65.35 | 65.34 / 65.51 | 57.52 / 57.71 | 53.62 |
| q=0.7, g=1.2(提交) | 60.76 | 65.87 | 66.05 | 57.49 | 53.62 |
| q=0.7, g=1.0 / 1.3 | 60.51 / 60.79 | 65.84 / 65.88 | 65.24 / 66.12 | 57.34 / 57.55 | 53.62 |
| q=0.75 / 0.8, g=1.2 | 60.73 / 60.69 | 66.01 / 66.17 | 65.85 / 65.61 | 57.45 / 57.38 | 53.62 |
| q=0.9, g=1.2 | 60.36 | 66.12 | 64.80 | 56.88 | 53.62 |
| q=0.5 / 0.7, g=1.2, type 模式 | 60.48 / 60.33 | 65.41 / 65.80 | 65.30 / 64.91 | 57.59 / 57.01 | 53.62 |
- 榜分随 q 单调升到 0.7 附近成峰(60.76–60.79),q=0.9 回落;cell_state 随 q 单调回升(64.25→66.17),PLAN 判据 cell_state≥65.5 在 q=0.7 首次满足且榜分最高 → 选 q=0.7。
- g=1.3 与 1.2 差 0.03(噪声内),保留父节点语义更稳的 1.2。
- type 模式(型内分位数)反而更差: Peri/V-CM 型 chg_l2 分布偏低,全局门控已隐式把混合集中在 NCC/aPHM/pPHM 高失配细胞上,型内强制每型混 30–50% 重新引入低失配混合。风险预案(型内分位数)在 proxy 上实测无效,如实报告。
- 种子稳健性:q=0.7/g=1.2 在 seed 1 上 60.99(cell_state 66.63),与 seed 0 的 60.76 一致,提升非单种子噪声。
机制生效证据(proxy seed 0,提交态)
- 被融合 b 细胞 2273,门控保留(被混合)682 = 30.0%(≈1−q,符合分位数定义);
- 被保留细胞 chg_l2 mean=43.3 vs 被排除 mean=37.0(保留的显著更高,min 40.9 > 排除侧分布);
- 每型保留/总数:NCC 224/341、Peri 21/621、V-CM 71/814、aPHM 123/239、pPHM 243/258 —— 全部 ≥10(PLAN 风险 3 的下限),但型间高度不均:全局门控把混合集中在 NCC/aPHM/pPHM,Peri/V-CM 大部分保持原表达;
- 四组分相对节点 14:cell_state 64.82→65.87(+1.05,回升,符合预期)、expression_change 65.65→66.05(+0.40,高失配细胞贡献了大部分 DE 增益,验证 PLAN "保留>70%增益"的预期方向)、local_spatial 58.29→57.49(−0.80,被混合细胞减少 70% 导致增益部分回吐)、shape_scale 不变(坐标未动);
- 型内表达方差:604(节点10,不混合)→ 767(节点14,全混合)→ 758(门控后)。注意门控保留的是高 chg_l2 细胞,gamma=1.2 过冲对它们扩张方差,故未落在 PLAN 预期的 604–767 中段而是接近上端;如实报告。
验证过 / 未验证
- 已验证:
T2HI_GATE_Q=0输出与节点 14 逐元素一致(np.array_equal,X+坐标);默认配置 seed 0 两次运行输出一致(确定性);vec-check 通过;运行 ~2s、峰值内存 <1GB(limits 30min/28GB 内);q×gamma 全网格 + type 模式 + 种子复核见上表。 - 未验证:正式分 B 半(A 半提升 +0.36,父节点经验表明 A 半对 <0.5 量级提升偏乐观,本提升在 T2 噪声 ~1 边缘,需正式分确认);真实括号(E8.25→E8.75,31 个共有型)上 chg_l2 分布与型间偏斜可能与 proxy(5 型)不同,q=0.7 在真实括号的最优性未知;external/ 数据(MOSTA E9.5)未使用(父节点亦未用,本节点未改)。
知识来源
未使用任何保留阶段/基因型信息或文献数值;机制只依赖两 bracket 现场计算的表达距离分位数。细胞类型名仅用于型内 NN 配对(与父节点相同,来自输入 obs 标签)。
调研员的计划
| 名称 | 按表达差异分位数门控NN表达混合,修复cell_state回吐 |
|---|---|
| 动机 | 节点14的逐细胞gamma混合使榜分60.43→60.80(+0.38),但cell_state从66.70降至64.82(−1.88),与expression_change(+1.75)/local_spatial(+1.64)增益几乎抵消。ANALYSIS指出这是结构性的:所有被融合b细胞无差别混合使表达云整体偏向a侧bracket,mmd/variogram惩罚。低表达差异细胞(chg_l2小)本身已接近配对a侧,混合它们只贡献云偏移而不修复失配,是cell_state回吐的主要来源。节点13(均匀β混合)和节点14(均匀gamma)都未做选择性门控,这是未试过的结构变体。 |
| 做法 | 在节点14的_blend_within_type表达混合逻辑中新增分位数门控:(1)对每个被融合b细胞计算chg_l2=||X_a_nn−X_b||;(2)取所有被融合b细胞chg_l2的q分位数为阈值(环境变量T2HI_GATE_Q,默认0.5);(3)仅对chg_l2≥阈值的细胞执行gamma混合,其余保持b侧原表达。gamma保持1.2。搜索网格:T2HI_GATE_Q∈{0.3,0.5,0.7},gamma∈{1.0,1.2},共6配置。用vec-score在proxy(seed 0)上逐一查分,选榜分最高且cell_state≥65.5的配置。若q=0.5+gamma=1.2满足条件则直接提交;否则扩展q=0.4/0.6。若所有门控配置的cell_state仍<65,尝试按型内分位数(每型独立取q分位)替代全局分位数。单输入退路:t=0→copy_last,不触发融合与混合,与父节点一致。实现约15行改动(在已有nn_b/nn_a索引上计算chg_l2、np.quantile、布尔掩码),无需新依赖。 |
| 风险 | 1)门控后混合细胞数减半,expression_change/local_spatial增益可能缩小(但高差异细胞贡献最大,预期保留>70%增益);Engineer应对比q=0(=节点14)与q=0.5的四组分,确认cell_state回升且其余两组未大幅下降。2)chg_l2分布可能在型间差异大,全局分位数对某些型过严/过松;备选按型内分位数。3)proxy只有5个共有型、2273个被混合细胞,分位数统计量可能不稳定;Engineer应检查每型被门控保留的细胞数是否≥10。4)正式分B半噪声~1分,若proxy提升<1.5分,需3种子确认。 |
代码改动?这个节点的程序和父节点程序的逐行差别:绿色是新增,红色是删除。
对比:父节点版本 6d18e0a2cb。改动的文件:solution/METHOD.md +33 −44、solution/run.py +44 −9
diff --git a/solution/METHOD.md b/solution/METHOD.mdindex 7476920..a293356 100644--- a/solution/METHOD.md+++ b/solution/METHOD.md@@ -1,63 +1,52 @@-在节点10坐标融合框架上,把被融合的b细胞表达向其配对a侧最近邻做逐细胞混合(gamma=1.2轻度过冲以补偿型内方差):门控于坐标融合、仅共有型、逐细胞异质,非per-type常数位移。+按表达差异分位数门控NN表达混合(T2HI-01):只对被融合b细胞中 ||X_a_nn−X_b|| ≥ 全局 q=0.7 分位数的高失配细胞做 gamma=1.2 逐细胞混合,低失配细胞保持b侧原表达,修复 cell_state 回吐。 -## 方法(family T2HI-01,improve 自节点 11 = 节点 10 输出)+## 方法(family T2HI-01,improve 自节点 14) -流程与节点 10 相同:双 bracket 组成插值(t 分层抽样)→ Procrustes 对齐 → 缩放 → 每个共有型的 b 侧细胞向 a 侧同型最近邻位移 α=1.0 → 拼接、_jitter、统一 scale_to_rms。**坐标与组成完全未动**。+流程与节点 14 完全相同:双 bracket 组成插值(t 分层抽样)→ Procrustes 对齐 → 缩放到插值 RMS → 每共有型 b 侧细胞向 a 侧同型最近邻坐标位移 α=1.0(型内 NN 融合)→ 拼接、_jitter、统一 scale_to_rms。**坐标与组成本节点未动**(shape_scale 与父节点逐位一致,符合"机制不动坐标"的预期)。 -**新增机制(PLAN T2HI-01,本节点)**:`_blend_within_type` 在坐标融合时记录每个被融合 b 细胞的配对 a 侧 NN 全局索引(`nn_b`/`nn_a`,即已有 cKDTree query 的 `idx_a[j]`);随后对采样进输出的被融合 b 细胞做逐细胞表达混合:+**新增机制(本节点)**:在父节点的逐细胞 NN 表达混合上加分位数门控。对每个被融合、被采样进输出的 b 细胞计算 chg_l2 = ||X_a_nn − X_b||(其空间配对 a 侧 NN 与自身的表达距离),取全部被融合 b 细胞 chg_l2 的分位数作阈值: -```-X_b[i] <- X_b[i] + gamma * (X_a[nn(i)] - X_b[i])-```+- `chg_l2 ≥ quantile(chg_l2, q)` 的细胞执行 `X_b <- X_b + gamma*(X_a_nn − X_b)`;+- 其余细胞保持 b 侧原表达不动。 -- 仅作用于共有型且实际被坐标融合、且被采样进输出的 b 细胞;a 侧细胞、非共有型、未融合细胞的表达不动;-- 混合目标是每个 b 细胞自己的空间配对 NN 的表达(逐细胞不同、幅度因细胞而异),结构上不同于节点 6/7 的 per-type 常数位移,也不借用其他型的位移;-- 环境变量:`T2HI_EXPRNN=1`(默认,提交态开启)+ `T2HI_GAMMA`(默认 1.2);`T2HI_EXPRNN=0` = 关闭对照;-- 无随机数、无绝对时间/路径分支:机制只依赖两 bracket 现场表达、坐标与 celltype 标签,对 seed 确定,视图无关。单输入 / 不被 bracket → t=0 → copy_last 分支,不触发融合与表达混合。+动机(PLAN):低失配细胞本身已接近其配对 a 侧,混合它们只把表达云整体拉向 a 侧 bracket(mmd/variogram 惩罚 → cell_state 回吐),不修复表达-位置失配。门控只保留高失配细胞的混合,即"哪些细胞被混合"的选择逻辑逐细胞不同(取决于自身表达距离),非常数位移、非组成重加权。 -**gamma=1.2 的含义**:xb + 1.2·(xa−xb) = xa + 0.2·(xa−xb),即轻度越过 a 侧配对值。动机:gamma=1 时被混合细胞成为 a 侧 NN 的精确表达副本(型内方差 604→517,多样性塌缩);轻度外推把逐细胞差异 (xa−xb) 重新注入,型内方差回到 767(>604),补偿副本化损失的异质性。proxy 上 1.0–1.3 是平滑平台(见下),不是尖峰。+**提交态默认**:`T2HI_GATE_Q=0.7`(全局分位数)、`T2HI_GAMMA=1.2`、`T2HI_EXPRNN=1`、`T2HI_GATE_MODE=global`。+**对照开关**:`T2HI_GATE_Q=0` → 阈值=最小值,全部被融合细胞通过门控,行为与节点 14 完全一致(已本地 np.array_equal 验证 X 与坐标逐元素全等);`T2HI_EXPRNN=0` → 关闭整个表达混合,与节点 10 一致(父节点已验证)。`T2HI_GATE_MODE=type` 为型内分位数备选(proxy 上更差,未采用)。 -## 机制生效证据(proxy seed 0,T2HI_EXPRNN=1,gamma=1.2)+无随机数参与门控(np.quantile 确定);不依赖绝对时间、路径、视图字段;单输入 / 不被 bracket → t=0 → copy_last 分支,不触发融合与混合。 -- 被混合细胞数 = 2273(融合共 17338 个 b 细胞,其中被 t=0.4 分层抽样选进 17616 细胞输出的部分);-- 每细胞表达改变量 L2:mean=46.6,std=4.34,min=31.3,max=57.1 → std>0,型内异质(各细胞向各自不同的 NN 混合);-- 型内表达方差(被混合细胞对型均值的平均平方偏差):混合前 604.1 → 混合后 767.0(gamma=1.2 过冲增大方差;gamma<1 时降到 281–495,与 PLAN 预期"增大"相反,如实报告——单纯向内混合是收缩,只有过冲才扩张);-- 坐标逐元素不变(默认输出与节点 10 坐标全等,本地验证),符合"表达混合不影响坐标"的预期;-- 关闭对照:`T2HI_EXPRNN=0` 输出与节点 10 输出**逐元素一致**(X、坐标全等,np.array_equal 本地验证)。--## 对照结果(vec-score A 半,proxy)--gamma 网格(seed 0):+## 网格结果(vec-score A 半,proxy,seed 0;节点14 = q0/g1.2 基线 60.40) | 配置 | 榜分 | cell_state | expr_change | local_spatial | shape_scale | |---|---:|---:|---:|---:|---:|-| 节点10(= 关闭态) | 59.85 | 65.93 | 63.83 | 56.03 | 53.62 |-| gamma=0.1 / 0.2 / 0.3 | 59.68 / 59.59 / 59.56 | 65.25 / 64.84 / 64.52 | 63.86 / 63.90 / 63.92 | 55.97 / 56.02 / 56.17 | 53.62 |-| gamma=0.5 / 0.7 | 59.64 / 59.96 | 64.16 / 64.01 | 64.13 / 64.95 | 56.66 / 57.24 | 53.62 |-| gamma=1.0 | 60.27 | 64.37 | 65.11 | 57.99 | 53.62 |-| gamma=1.1 / 1.2 / 1.3 | 60.31 / **60.40** / 60.31 | 64.31 / 64.25 / 64.18 | 65.20 / 65.51 / 65.13 | 58.11 / 58.21 / 58.31 | 53.62 |-| gamma=1.5 | 60.18 | 64.03 | 64.60 | 58.48 | 53.62 |+| q=0(节点14) | 60.40 | 64.25 | 65.51 | 58.21 | 53.62 |+| q=0.3, g=1.0 / 1.2 | 60.42 / 60.52 | 64.87 / 64.83 | 65.52 / 65.76 | 57.67 / 57.87 | 53.62 |+| q=0.5, g=1.0 / 1.2 | 60.46 / 60.55 | 65.35 / 65.35 | 65.34 / 65.51 | 57.52 / 57.71 | 53.62 |+| **q=0.7, g=1.2(提交)** | **60.76** | **65.87** | **66.05** | 57.49 | 53.62 |+| q=0.7, g=1.0 / 1.3 | 60.51 / 60.79 | 65.84 / 65.88 | 65.24 / 66.12 | 57.34 / 57.55 | 53.62 |+| q=0.75 / 0.8, g=1.2 | 60.73 / 60.69 | 66.01 / 66.17 | 65.85 / 65.61 | 57.45 / 57.38 | 53.62 |+| q=0.9, g=1.2 | 60.36 | 66.12 | 64.80 | 56.88 | 53.62 |+| q=0.5 / 0.7, g=1.2, type 模式 | 60.48 / 60.33 | 65.41 / 65.80 | 65.30 / 64.91 | 57.59 / 57.01 | 53.62 | -三种子(0/1/2)均值:gamma=1.0 → 60.27/60.43/60.78 = 60.49;**gamma=1.2 → 60.40/60.62/60.95 = 60.66**;节点 10 关闭态(节点 11 实测)= 59.85/60.08/60.25 = 60.06。gamma=1.2 每个种子都比关闭态高 +0.55/+0.54/+0.70,一致超过单种子噪声(~0.2),也高于 gamma=1.0 每个种子 +0.13~0.17。+- 榜分随 q 单调升到 0.7 附近成峰(60.76–60.79),q=0.9 回落;cell_state 随 q 单调回升(64.25→66.17),PLAN 判据 cell_state≥65.5 在 q=0.7 首次满足且榜分最高 → 选 q=0.7。+- g=1.3 与 1.2 差 0.03(噪声内),保留父节点语义更稳的 1.2。+- type 模式(型内分位数)反而更差: Peri/V-CM 型 chg_l2 分布偏低,全局门控已隐式把混合集中在 NCC/aPHM/pPHM 高失配细胞上,型内强制每型混 30–50% 重新引入低失配混合。风险预案(型内分位数)在 proxy 上实测无效,如实报告。+- **种子稳健性**:q=0.7/g=1.2 在 seed 1 上 60.99(cell_state 66.63),与 seed 0 的 60.76 一致,提升非单种子噪声。 -## 结论(如实报告,与 PLAN 预期的偏差)+## 机制生效证据(proxy seed 0,提交态) -- **PLAN 的判据(cell_state+expression_change 合计提升 >1 分)未满足**:gamma=1.2 时 cell_state −1.68、expression_change +1.68,合计 +0.00(两组分此消彼长)。-- **但榜分(节点分数的定义)3 种子均值 60.06 → 60.66(+0.60),逐种子一致提升**。增益来源:expression_change(de_score 0.326→0.402)与 local_spatial(neighborhood_mmd 0.0754→0.0689)——被融合的 b 细胞坐在 a 侧位置上却携带 b 侧表达的"表达-位置失配"确实被评分器惩罚,逐细胞配对混合修复了它。cell_state(mmd_u/variogram)小幅回吐,是 b 侧细胞表达被拉向 a 侧、云整体略偏下 bracket 的代价。-- 提交态:默认开启,gamma=1.2(平台中心,1.0–1.3 全在 60.27–60.40,非尖峰调参)。+- 被融合 b 细胞 2273,门控保留(被混合)682 = 30.0%(≈1−q,符合分位数定义);+- 被保留细胞 chg_l2 mean=43.3 vs 被排除 mean=37.0(保留的显著更高,min 40.9 > 排除侧分布);+- 每型保留/总数:NCC 224/341、Peri 21/621、V-CM 71/814、aPHM 123/239、pPHM 243/258 —— 全部 ≥10(PLAN 风险 3 的下限),但型间高度不均:全局门控把混合集中在 NCC/aPHM/pPHM,Peri/V-CM 大部分保持原表达;+- 四组分相对节点 14:cell_state 64.82→65.87(+1.05,回升,符合预期)、expression_change 65.65→66.05(+0.40,高失配细胞贡献了大部分 DE 增益,验证 PLAN "保留>70%增益"的预期方向)、local_spatial 58.29→57.49(−0.80,被混合细胞减少 70% 导致增益部分回吐)、shape_scale 不变(坐标未动);+- 型内表达方差:604(节点10,不混合)→ 767(节点14,全混合)→ 758(门控后)。注意门控保留的是高 chg_l2 细胞,gamma=1.2 过冲对它们扩张方差,故未落在 PLAN 预期的 604–767 中段而是接近上端;如实报告。 -## 验证过 / 没验证+## 验证过 / 未验证 -- 验证:默认输出确定(两次运行逐元素一致);关闭态与节点 10 逐元素一致;默认态 vec-check ok;CPU ~2.1s、内存 <1GB;表达混合不动坐标。-- 没验证:真实 bracket(31 共有型、t=0.5、大部分 b 细胞被混合,2273→数万)上的 gamma——proxy 只有 5 个共有型、被混合细胞占输出 13%;真实上被混合比例更高,cell_state 的回吐可能放大,gamma=1.0(不过冲、语义更稳)是更保守的备选,两者 proxy 差 0.17。gamma 网格只在 proxy 上测(正式分 B 半未测,规则相同)。伪装视图未重跑(代码无路径/绝对时间/随机依赖,与节点 10 同源结构)。-- 与 T2HI_EXPR(per-type 均值位移,默认关)的交互未测(两者同时开会先位移再混合,未验证,默认路径不触发)。+- 已验证:`T2HI_GATE_Q=0` 输出与节点 14 逐元素一致(np.array_equal,X+坐标);默认配置 seed 0 两次运行输出一致(确定性);vec-check 通过;运行 ~2s、峰值内存 <1GB(limits 30min/28GB 内);q×gamma 全网格 + type 模式 + 种子复核见上表。+- 未验证:正式分 B 半(A 半提升 +0.36,父节点经验表明 A 半对 <0.5 量级提升偏乐观,本提升在 T2 噪声 ~1 边缘,需正式分确认);真实括号(E8.25→E8.75,31 个共有型)上 chg_l2 分布与型间偏斜可能与 proxy(5 型)不同,q=0.7 在真实括号的最优性未知;external/ 数据(MOSTA E9.5)未使用(父节点亦未用,本节点未改)。 ## 知识来源 -无外部生物知识写入程序;机制只用两 bracket 现场的表达、坐标与 celltype 标签(数据驱动配对)。未使用 external/ 与 prior/。--## 下一步建议--1. cell_state 在 gamma>1 时稳定 −1.7:可试"只混合高表达差异细胞"(按 chg_l2 分位数门控)或 gamma 按型自适应(共有型细胞数多的型用小 gamma),减少云整体偏移;-2. shape_scale 仍被 scale_log_ratio 锁死(53.62 恒定),与节点 11 结论一致,坐标类机制无空间;-3. 若真实 bracket 上被混合比例大导致回吐,退路是 gamma=1.0 或按 frac_b 缩放 gamma(gamma_eff = 1 + 0.2·(1−frac_b)),后者未验证。+未使用任何保留阶段/基因型信息或文献数值;机制只依赖两 bracket 现场计算的表达距离分位数。细胞类型名仅用于型内 NN 配对(与父节点相同,来自输入 obs 标签)。diff --git a/solution/run.py b/solution/run.pyindex 299ca5a..ad4e3cd 100644--- a/solution/run.py+++ b/solution/run.py@@ -26,7 +26,12 @@ T2HI_GAMMA (default 1.2) additionally mixes each fused b cell's expression towards its matched a-side NN: xb <- xb + gamma*(xa_nn - xb), per-cell, common types only; T2HI_EXPRNN=0 disables it (node-10 output). Gamma 1.2 slightly overshoots the a-side value, restoring within-type spread lost when-paired b cells become a-side copies (see METHOD.md).+paired b cells become a-side copies (see METHOD.md). T2HI_GATE_Q (default+0.7) gates the blend on the quantile of per-cell expression distance+chg_l2 = ||xa_nn - xb|| among fused b cells: only cells with chg_l2 at or+above the q-quantile are blended, low-mismatch cells keep their b-side+expression; T2HI_GATE_Q=0 lets every fused cell through (node-14 output).+T2HI_GATE_MODE=type computes the quantile per cell type instead of globally. """ from __future__ import annotations@@ -299,9 +304,25 @@ def main() -> None: if sel.any(): Xa_nn = as_dense(a.X, nn_a[sel]).astype(np.float64) Xb_f = as_dense(b.X, nn_b[sel]).astype(np.float64)- blended = Xb_f + gamma * (Xa_nn - Xb_f)- xb[pos[nn_b[sel]]] = blended.astype(np.float32)+ diff = Xa_nn - Xb_f+ d = np.linalg.norm(diff, axis=1) labs = np.asarray(b.labels).astype(str)[nn_b[sel]]+ gate_q = float(os.environ.get("T2HI_GATE_Q", "0.7"))+ gate_mode = os.environ.get("T2HI_GATE_MODE", "global")+ if gate_q > 0.0:+ if gate_mode == "type":+ thr = np.zeros_like(d)+ for lab in np.unique(labs):+ m = labs == lab+ thr[m] = np.quantile(d[m], gate_q)+ else:+ thr = np.quantile(d, gate_q)+ keep = d >= thr+ else:+ keep = np.ones(d.shape, dtype=bool)+ blended = Xb_f.copy()+ blended[keep] = Xb_f[keep] + gamma * diff[keep]+ xb[pos[nn_b[sel]]] = blended.astype(np.float32) def _within_var(M: np.ndarray) -> float: vs = [] for lab in np.unique(labs):@@ -309,12 +330,22 @@ def main() -> None: if m.sum() >= 2: vs.append(float(((M[m] - M[m].mean(0)) ** 2).sum(1).mean())) return float(np.mean(vs)) if vs else 0.0- chg = gamma * np.linalg.norm(Xa_nn - Xb_f, axis=1)+ per_type_kept = {+ str(lab): [int(((labs == lab)).sum()), int(((labs == lab) & keep).sum())]+ for lab in np.unique(labs)+ }+ chg = gamma * d exprnn_info = {- "gamma": gamma, "cells_mixed": int(sel.sum()),- "chg_mean": float(chg.mean()), "chg_std": float(chg.std()),- "chg_min": float(chg.min()), "chg_max": float(chg.max()),+ "gamma": gamma, "gate_q": gate_q, "gate_mode": gate_mode,+ "cells_mixed": int(sel.sum()), "cells_kept": int(keep.sum()),+ "chg_mean": float(chg[keep].mean()) if keep.any() else 0.0,+ "chg_std": float(chg[keep].std()) if keep.any() else 0.0,+ "chg_min": float(chg[keep].min()) if keep.any() else 0.0,+ "chg_max": float(chg.max()),+ "d_kept_mean": float(d[keep].mean()) if keep.any() else 0.0,+ "d_excl_mean": float(d[~keep].mean()) if (~keep).any() else 0.0, "var_before": _within_var(Xb_f), "var_after": _within_var(blended),+ "per_type_kept": per_type_kept, } expr = np.clip(np.vstack([xa, xb]), 0.0, None).astype(np.float32)@@ -341,11 +372,15 @@ def main() -> None: f"mean_offset={blend_info['disp_mag']:.1f} " f"b_a_nn_after_disp={blend_info['disp_nn_after']:.1f}", flush=True) if exprnn_info is not None:- print(f"[exprnn] gamma={exprnn_info['gamma']:.2f} cells_mixed={exprnn_info['cells_mixed']} "- f"chg_l2 mean={exprnn_info['chg_mean']:.3f} std={exprnn_info['chg_std']:.3f} "+ print(f"[exprnn] gamma={exprnn_info['gamma']:.2f} gate_q={exprnn_info['gate_q']:.2f}"+ f"({exprnn_info['gate_mode']}) cells_fused={exprnn_info['cells_mixed']} "+ f"cells_kept={exprnn_info['cells_kept']} "+ f"chg_l2 kept mean={exprnn_info['chg_mean']:.3f} std={exprnn_info['chg_std']:.3f} " f"min={exprnn_info['chg_min']:.3f} max={exprnn_info['chg_max']:.3f} "+ f"d_kept={exprnn_info['d_kept_mean']:.3f} d_excl={exprnn_info['d_excl_mean']:.3f} " f"within_type_var {exprnn_info['var_before']:.3f} -> {exprnn_info['var_after']:.3f}", flush=True)+ print(f"[exprnn] per_type kept/total={exprnn_info['per_type_kept']}", flush=True) write_t2(args.out, expr, coords.astype(np.float32), genes, seed=args.seed)
调研来源?调研员查到并用到的知识条目和文献检索结果(只列标题和编号)。
用到的知识库条目
| 编号 | 标题 | 出处 |
|---|---|---|
| k007 | Interval staging and held-out-window filtering of external data | notes/official/来件/virtualembryo.ai/rules.md |
| k027 | Joint expression-geometry generation with relative geometry | notes/competition/03_solution_landscape.md |
| k026 | Canonicalise predicted 3D coordinates before submission | notes/pitfalls/04_scorer_invariance.md |
分析结果?分析员写的 ANALYSIS.json:改了什么、各组分数怎么变、假设是否成立、经验和下一步建议。
| 改了什么 | 在节点14逐细胞NN表达混合(gamma=1.2)上新增chg_l2=||X_a_nn-X_b||的全局分位数门控:仅chg_l2>=q=0.7分位数的高失配被融合b细胞执行gamma混合,其余保持b侧原表达(T2HI_GATE_Q,另实现型内分位数模式T2HI_GATE_MODE=type但proxy更差未采用);坐标与组成逻辑未动。 |
|---|---|
| 各组分数的变化 | cell_state:变好:64.82→66.60 (+1.78),超过~1分噪声,门控确实修复了节点14的回吐 expression_change:噪声内:65.65→65.91 (+0.26) local_spatial:噪声内偏负:58.29→57.89 (-0.40) shape_scale:不变:54.46→54.46 (+0.00),坐标未动,与机制预期一致 |
| family_id | T2HI-01 |
| 假设是否成立 | 是 |
| 经验 |
|
| mechanism_active | 是 |
| 下一步建议 |
|
对话摘要?每个角色和大模型对话的统计:轮数、工具调用、用时、token 数和最后的回答摘录;原始记录只给路径。
只给统计和最后回答的摘录;完整对话请到原始记录位置里列出的文件看。
分析员
| 角色?调研员写计划、工程师改代码、分析员解读分数、审查员检查作弊。 | 分析员 alibaba-token-plan-cn/qwen3.8-max |
|---|---|
| 调用次数 | 1 次 |
| 轮数?大模型一共回复了几轮(每轮可以调用多个工具)。 | 4 |
| 工具调用?大模型调用读文件、执行命令等工具的次数,按工具名统计。 | 共 3 次:bash 1、read 1、write 1 |
| 用时 | 不到 1 分 |
| token 数?输入 / 输出(含思考)的 token 数,来自接口返回的用量。 | 输入 13,422 · 输出 1,050 · 思考 901 |
| 任务(第一行) | 分析节点 n16 的打分结果,写 ANALYSIS.json |
| 最后的回答(摘录) | ANALYSIS.json written |
| 原始记录位置?完整对话记录在 Spark 上的文件路径;看板不复制原始内容。 | /home/spark-longxinyang/vec/runs/formal/20261003-004922-search-t2-heart-interp-g24/nodes/16/analyst.jsonl 10 KB /home/spark-longxinyang/vec/runs/formal/20261003-004922-search-t2-heart-interp-g24/nodes/16/analyst.stderr |
工程师
| 角色 | 工程师 alibaba-token-plan-cn/qwen3.8-max |
|---|---|
| 调用次数 | 1 次 |
| 轮数 | 19 |
| 工具调用 | 共 21 次:bash 15、edit 4、read 1、write 1 |
| 用时 | 7 分 |
| token 数 | 输入 46,667 · 输出 7,657 · 思考 4,391 |
| 任务(第一行) | 按计划修改程序:按表达差异分位数门控NN表达混合,修复cell_state回吐 |
| 最后的回答(摘录) | 完成。做了什么、查分结果、下一步:
**做了什么**:按 PLAN 在节点14的逐细胞NN表达混合上新增 chg_l2 分位数门控(`T2HI_GATE_Q`,全局/型内两模式),只混合高表达失配的被融合b细胞。跑完 q∈{0,0.3,0.5,0.7,0.75,0.8,0.9}×gamma∈{1.0,1.2,1.3} 网格+type模式,提交态 q=0.7、gamma=1.2。关闭对照 `T2HI_GATE_Q=0` 与节点14逐元素一致(np.array_equal 验证);seed 确定、vec-check 通过、~2s/<1GB。
**查分**(A半 proxy,用13/20次):提交配置 60.76(seed 1 复核 60.99),vs 节点14 的 60.40。cell_state 64.25→65.87(回升,达 PLAN 判据≥65.5),expr_change 65.51→66.05,local_spatial 58.21→57.49,shape_scale 不变。型内分位数门控(备选)实测更差(60.33–60.48)。
**下一步最值得试**:(1) local_spatial 是唯一回吐组分——门控后仅 682 细胞被拉向a侧,可试"坐标融合按同一 chg_l2 门控"(低失配细胞坐标也不动)或 alpha<1 部分位移,看能否在 cell_state 增益上找回空间分;(2) q=0.7 峰在真实括号(31共有型)上位置可能不同,chg_l2 型间偏斜大(Peri 仅保留 21/621),可试"全局分位数+每型最少保留比例"混合门控;(3) A半提升 +0.36 在噪声边缘,正式分未必兑现,若 B 半无提升应转向 shape_scale/occupancy 结构性机制(proxy 上被 scale_log_ratio 锁死,验证受限)。 |
| 原始记录位置 | /home/spark-longxinyang/vec/runs/formal/20261003-004922-search-t2-heart-interp-g24/nodes/16/engineer.jsonl 128 KB /home/spark-longxinyang/vec/runs/formal/20261003-004922-search-t2-heart-interp-g24/nodes/16/engineer.stderr |
调研员
| 角色 | 调研员 alibaba-token-plan-cn/qwen3.8-max |
|---|---|
| 调用次数 | 1 次 |
| 轮数 | 1 |
| 工具调用 | 共 0 次:— |
| 用时 | 1 分 |
| token 数 | 输入 12,901 · 输出 1,062 · 思考 3,307 |
| 任务(第一行) | 为节点 n16(改进,父节点 n14)写改进计划 PLAN.json |
| 最后的回答(摘录) | ```json
{
"name": "按表达差异分位数门控NN表达混合,修复cell_state回吐",
"motivation": "节点14的逐细胞gamma混合使榜分60.43→60.80(+0.38),但cell_state从66.70降至64.82(−1.88),与expression_change(+1.75)/local_spatial(+1.64)增益几乎抵消。ANALYSIS指出这是结构性的:所有被融合b细胞无差别混合使表达云整体偏向a侧bracket,mmd/variogram惩罚。低表达差异细胞(chg_l2小)本身已接近配对a侧,混合它们只贡献云偏移而不修复失配,是cell_state回吐的主要来源。节点13(均匀β混合)和节点14(均匀gamma)都未做选择性门控,这是未试过的结构变体。",
"approach": "在节点14的_blend_within_type表达混合逻辑中新增分位数门控:(1)对每个被融合b细胞计算chg_l2=||X_a_nn−X_b||;(2)取所有被融合b细胞chg_l2的q分位数为阈值(环境变量T2HI_GATE_Q,默认0.5);(3)仅对chg_l2≥阈值的细胞执行gamma混合,其余保持b侧原表达。gamma保持1.2。搜索网格:T2HI_GATE_Q∈{0.3,0.5,0.7},gamma∈{1.0,1.2},共6配置。用vec-score在proxy(seed 0)上逐一查分,选榜分最高且cell_state≥65.5的配置。若q=0.5+gamma=1.2满足条件则直接提交;否则扩展q=0.4/0.6。若所有门控配置的cell_state仍<65,尝试按型内分位数(每型独立取q分位)替代全局分位数。单输入退路:t=0→copy_last,不触发融合与混合,与父节点一致。实现约15行改动(在已有nn_b/nn_a索引上计算chg_l2、np.quantile、布尔掩码),无需新依赖。",
"expected_groups": ["cell_state", "expression_change", "local_spatial"],
"risks": "1)门控后混合细胞数减半,expression_change/local_spatial增益可能缩小(但高差异细胞贡献最大,预期保留>70%增益);Engineer应对比q=0(=节点14)与q=0.5的四组分,确认cell_state回升且其余两组未大幅下降。2)chg_l2分布可能在型间差异大,全局分位数对某些型过严/过松;备选按型内分位数。3)proxy只有5个共有型、2273个被混合细胞,分位数统计量可能不稳定;Engineer应检查每型被门控保留的细胞数是否≥10。4)正式分B半噪声~1分,若proxy提升<1.5分,需3种子确认。",
"family_id": "T2HI-01",
"mechanism": "在逐细胞NN表达混合中引入表达差异分位数门控:只有表达与其配对a侧NN差异超过阈值的b细胞才被混合,低差异细胞保持原表达,减少表达云整体偏移。",
"vs_constant_shift": "门控是逐细胞的:每个b细胞是否被混合取决于它自己与配对NN的表达距离,不同细胞、不同型、不同空间位置的混合决策不同。常数位移对同型所有细胞施加相同向量;全局组成重加权只改变型比例。本机制改变的是'哪些细胞被混合'的选择逻辑,不改变混合方向或幅度公式。",
"mechanism_evidence": "Engineer应记录:(1)被门控保留的细胞数占被融合总数的比例(应≈1−q);(2)被保留细胞的chg_l2均值/最小值(应显著高于被排除的);(3)cell_state/expression_change/local_spatial各自相对节点14的变化——预期cell_state回升≥1分、后两者降幅<0.5分;(4)型内表达方差:门控后应介于节点14(767)和节点10(604)之间,因为部分细胞未被拉向a侧。",
"mechanism_off_control": "T2HI_GATE_Q=0时阈值=0,所有被融合b细胞都通过门控,行为与节点14完全一致(可用np.array_equal验证)。T2HI_EXPRNN=0关闭整个表达混合,输出与节点10一致。两个对照都应在Engineer本地验证。"
}
``` |
| 原始记录位置 | /home/spark-longxinyang/vec/runs/formal/20261003-004922-search-t2-heart-interp-g24/nodes/16/researcher.jsonl 4 KB /home/spark-longxinyang/vec/runs/formal/20261003-004922-search-t2-heart-interp-g24/nodes/16/researcher.stderr |
审查员
| 角色 | 审查员 alibaba-token-plan-cn/qwen3.8-max |
|---|---|
| 调用次数 | 1 次 |
| 轮数 | 6 |
| 工具调用 | 共 8 次:bash 4、read 3、write 1 |
| 用时 | 不到 1 分 |
| token 数 | 输入 21,042 · 输出 1,152 · 思考 954 |
| 任务(第一行) | 审查节点 n16 的程序是否越界读取、写死目标、钻评分器漏洞 |
| 最后的回答(摘录) | REVIEW.json written |
| 原始记录位置 | /home/spark-longxinyang/vec/runs/formal/20261003-004922-search-t2-heart-interp-g24/nodes/16/reviewer.jsonl 93 KB /home/spark-longxinyang/vec/runs/formal/20261003-004922-search-t2-heart-interp-g24/nodes/16/reviewer.stderr |