总览 · ← 返回运行 20261002-202907-search-t1-scr-A
节点 n13
在父节点(ISO β=3)之上加 PC 空间型内协方差校正块(COVAR_FIX2):对 5 个 shaped 类型用 last 阶段型内协方差做白化-再着色,默认提交配置为相关结构校正(MODE=1, W=1.0,保各 PC 方差);实测 covariation 组对该机制不敏感,如实报告阴性结果。
| 运行?一次完整的自动搜索或 Agent 会话,有自己的锁定配置和证据包。 | 20261002-202907-search-t1-scr-A |
|---|---|
| 父节点 | n11 |
| 子节点 | — |
| 操作?种子:人写的起点;改进:在父节点上改;草稿:从头写;修复:修父节点的报错。 | 改进 |
| 状态 | 已打分 |
| 分数 | 搜索目标分 59.01(+0.0) · X3 59.01(+0.0) · 3 次复测均分 59.62 |
| 审查 | 未审查 |
| 用时?从运行开始到结束(或到现在)的挂钟时间。 | 19 分 |
| 程序版本 | 222d9189574d6569fd2fc8c422910a730ed5d417 (programs.git) |
方法说明?节点程序自带的 METHOD.md:这个程序做了什么、为什么。
来自 programs.git 222d918957:solution/METHOD.md
在父节点(ISO β=3)之上加 PC 空间型内协方差校正块(COVAR_FIX2):对 5 个 shaped 类型用 last 阶段型内协方差做白化-再着色,默认提交配置为相关结构校正(MODE=1, W=1.0,保各 PC 方差);实测 covariation 组对该机制不敏感,如实报告阴性结果。
方法
父节点流水线(分型 PCA 均值外推 + ISO β=3 各向同性形状扩张 + 非零掩码加性解码)完全不变。在解码后、clip≥0 前插入协方差校正块(env 开关 COVAR_FIX2_W,W=0 即逐元素回到父节点):
- 仅对 shaped types(两阶段各 ≥10 细胞的配对类型,本视图 5 个:AVC-CM、IFT-CM、OFT/RV-CM、SV-CM、Unknown,共 486/652 细胞;LOWRANK_FALLBACK=none 下未配对类型不动)。
- 把预测细胞在 hvg 上的表达逆投影回 25 维 PC 空间,去型内质心得 R_pred;Σ_pred = cov(R_pred)+εI(ε=1e-6)。同型 last 阶段细胞得 Σ_last。
- T = Σ_last^{1/2}·Σ_pred^{-1/2}(eigh,负特征值 clip 到 ε),T_blend = (1−W)I + W·T,r_new = T_blend·r(保均值与细胞数)。
- 三种模式:MODE=0 原始 PLAN 版;NORM=1 时 T 除以 (det T)^{1/k}(体积保持,只修方向);MODE=1(提交默认)相关结构版:把 Σ 各自标准化成相关矩阵后算 T,作用后再乘回 Σ_pred 的逐 PC 标准差——精确保各 PC 方差不变,只把型内相关结构向 Σ_last 旋转。
- 解码与父一致:Δ = (r_new − r_old) 逆投影到基因空间,只加到原非零位置,clip≥0。
- Σ_pred 特征值非正或条件数 >1000 的类型跳过(实测无类型触发)。
机制生效证据(COVAR_FIX2_DEBUG=1)
- W=0 对照与父节点输出逐元素 maxdiff = 0.0(机制关闭 = 父节点)。
- W>0 时 5 个类型全部被校正,fixed_cells=486(非全部 652,未配对类型不动);Σ_pred→Σ_last 的 Frobenius 距离全部缩小(如 OFT/RV-CM 33.3→21.8,IFT-CM 76.6→60.4 @MODE=1,W=0.5)。
- 均值保持:de_recovery 与 direction 在所有配置下几乎不变(de_recovery 恒 52.47),证明校正只动二阶结构。
查分结果(X3 A 半,seed0,共用 5 次,剩 15)
| 配置 | 总分 | cell_state | covar | de_rec | dir |
|---|---|---|---|---|---|
| 父节点 ISO β=3(W=0) | 57.67 | 76.35 | 45.57 | 52.47 | 50.12 |
| MODE=0 W=0.10 | 57.57 | 75.97 | 45.66 | 52.47 | 50.11 |
| NORM=1 W=0.30 | 57.52 | 75.85 | 45.63 | 52.47 | 50.10 |
| NORM=1 W=0.60 | 57.39 | 75.37 | 45.69 | 52.47 | 50.09 |
| MODE=1 W=0.50 | 57.61 | 76.13 | 45.65 | 52.47 | 50.10 |
| MODE=1 W=1.00(提交默认) | 57.66 | 76.23 | 45.76 | 52.47 | 50.07 |
结论(如实报告阴性结果)
PLAN 预期 covar +2~5;实测所有变体的 covar 变化 ≤ +0.19(远小于 T1 噪声 ~2),触发了 PLAN risks 1 的停止条件("若 W=0.10 变化 <1 分则说明 25 维 PC 空间校正太弱,应如实报告")。且 MODE=0/NORM 版随 W 增大 cell_state 单调下滑(T 的各向同性分量 ≈ 削弱 ISO 扩张,重演 node 11 的"削弱扩张必亏"教训);MODE=1 保方差版成功保护了 cell_state(76.23≈父)但 covar 仍不动。covariation 组对型内二阶结构修复不敏感——结合 node 11 的基因空间 CORR 校准同样无效,型内相关结构(PC 空间与基因空间两种实现)都不是 covar 组的驱动因素;node 10 的 covar +9.36 更可能来自其全类型施加+行洗牌对整体分布的破坏性重塑,而非相关修复本身。
提交默认 = 机制打开(MODE=1, W=1.0):A 半总分与父持平(57.66 vs 57.67,噪声内),covar 方向 +0.19,无实测代价,符合方法族"提交时机制打开"的要求。
验证与未验证
- 已验证:W=0 逐元素等于父;seed0 重跑逐元素确定;vec-check ok;单输入退路(copy_last)未改动;校正块只用视图内数据与时间差,无绝对时间/视图依赖。
- 未验证:B 半与 seed1/2;该机制在 final 视图(E8.5+E9.5→E10.5)上的效果(代码视图无关,应同样运行);W>1 或与非零掩码解码联合的进一步变体(证据显示 covar 组不响应,不值得扫)。
知识来源
无外部生物知识;全部为视图内数据的线性代数运算(父节点已有的 PCA/均值外推框架 + 协方差白化-再着色,通用统计方法)。
调研员的计划
| 名称 | 低秩协方差方向校正:PC空间温和白化-再着色修复covariation |
|---|---|
| 动机 | 父节点11(榜分59.00)covariation=45.93是四组最弱,且低于copy_last基线(node1的48.44),说明均值位移+各向同性扩张实际上损害了共变结构。node10证明PC空间协方差校正可大幅拉升covariation(+9.36→55.29),但因W=0.2、全类型施加、行洗牌导致cell_state崩溃(-6.99)。ANALYSIS建议'用last阶段型内协方差的低秩主方向直接重塑残差'。本方案在node10机制基础上做三处关键约束以实现净增益。 |
| 做法 | 在父节点run.py的ISO扩张之后、基因空间解码之前,插入PC空间协方差校正块(env开关COVAR_FIX2_W,默认0=关): 1. 对每个shaped type(仅5个配对类型,LOWRANK_FALLBACK=none的类型不动): a) 取该类型所有细胞在25维PC空间的残差矩阵R_pred(ISO扩张后) b) 计算Σ_pred = cov(R_pred)(25×25) c) 取last阶段该类型的PC残差R_last,计算Σ_last = cov(R_last)(25×25) d) 正则化:Σ_pred += ε·I, Σ_last += ε·I(ε=1e-6) e) 计算变换T = Σ_last^{1/2} · Σ_pred^{-1/2}(矩阵平方根用eigh) f) 混合:T_blend = (1-W)·I + W·T g) 对每个细胞残差:r_new = T_blend @ r_old 2. 参数:W ∈ {0.05, 0.10, 0.15}(vs node10的0.2);仅shaped types(vs node10的ALL=1);无行洗牌。 3. 解码不变:PC→基因空间逆投影、非零掩码、clip≥0,与父节点完全一致。 4. 单输入退路:copy_last不变(len(inputs)<2分支不动)。 5. 查分策略:先跑W=0(对照,应与父逐元素一致)确认实现正确,再跑W=0.10(中位),若covar≥47且cell_state≥76则试W=0.05和0.15;若W=0.10已使cell_state<75则只试W=0.05。预计4-6次查分。 6. 矩阵平方根实现:np.linalg.eigh + clip负特征值≥1e-10 + 重构,无需额外依赖。 |
| 风险 | 1) W过小(0.05)可能效果在噪声内(<2分)——Engineer应在W=0.10看到≥2分covariation变化才继续;若W=0.10变化<1分则说明25维PC空间校正太弱,应如实报告。2) cell_state仍可能下滑——若W=0.10时cell_state<76应停止增大W,接受covariation小幅改善。3) Σ_pred接近奇异(某些类型细胞数<25)——已有ε正则化和shape_min_cells=10门槛,但应额外检查eigh后特征值是否全正;若某类型Σ_pred条件数>1000则跳过该类型校正。4) 与node10的区别不够大导致类似失败——尽早发现:若W=0.10时cell_state已跌>3分,说明机制本身对cell_state有根本损伤,应停止。 |
代码改动?这个节点的程序和父节点程序的逐行差别:绿色是新增,红色是删除。
对比:父节点版本 279aef2c1d。改动的文件:solution/METHOD.md +28 −49、solution/README.md +3 −0、solution/run.py +73 −0
diff --git a/solution/METHOD.md b/solution/METHOD.mdindex 0903df5..f691188 100644--- a/solution/METHOD.md+++ b/solution/METHOD.md@@ -1,65 +1,44 @@-形状演化由逐PC各向异性改为各向同性单一扩张系数(型内方差加权、β=3、保留非零掩码解码),采用 node7 已验证机制作提交默认;PLAN 的 top-k PC 选择与相关校正已实现并实测无增益,默认关闭。+在父节点(ISO β=3)之上加 PC 空间型内协方差校正块(COVAR_FIX2):对 5 个 shaped 类型用 last 阶段型内协方差做白化-再着色,默认提交配置为相关结构校正(MODE=1, W=1.0,保各 PC 方差);实测 covariation 组对该机制不敏感,如实报告阴性结果。 -## 本节点做了什么+## 方法 -按 PLAN 在父节点(node 9 = node 5,逐 PC 各向异性 lowrank_shape,β=3)上实现三个开关,全部只在 env 显式开启时生效,默认值即提交配置:+父节点流水线(分型 PCA 均值外推 + ISO β=3 各向同性形状扩张 + 非零掩码加性解码)完全不变。在解码后、clip≥0 前插入协方差校正块(env 开关 `COVAR_FIX2_W`,W=0 即逐元素回到父节点): -1. **LOWRANK_SHAPE_TOPK**(PLAN 步 1–3,默认 0=全 25 PC):算出 `scale[25]` 后,若 TOPK>0 按 `|scale[k]|` 降序保留前 k 个、其余置 0(按方差比信号强弱选,不按 PC 方差序号)。-2. **LOWRANK_SHAPE_CORR_W**(PLAN 步 4,默认 0=关):解码后逐类型对 200 个高变 HVG 做型内基因-基因相关校准,`C_t = w·C_input + (1−w)·C_pred`,在标准化空间做白化-再着色 `T = C_pred^{-1/2}·C_t^{1/2}` 变换每个细胞;**CORR_MASK=1**(默认)把校准块重新掩回原非零模式,避免向零位置注入稠密信号(node 9 的教训)。-3. **LOWRANK_SHAPE_ISO**(默认 **1**,提交采用):把逐 PC 各向异性 `scale_k` 替换为型内方差加权的单一系数 `scale_iso = Σ vl_k·scale_k / Σ vl_k`(vl=last 阶段型内各 PC 方差),对所有 25 PC 均匀施加。这是全树最佳节点 node 7(rank3 59.60)已验证的机制,本节点把它并入 node 9 血统。+1. 仅对 shaped types(两阶段各 ≥10 细胞的配对类型,本视图 5 个:AVC-CM、IFT-CM、OFT/RV-CM、SV-CM、Unknown,共 486/652 细胞;LOWRANK_FALLBACK=none 下未配对类型不动)。+2. 把预测细胞在 hvg 上的表达逆投影回 25 维 PC 空间,去型内质心得 R_pred;Σ_pred = cov(R_pred)+εI(ε=1e-6)。同型 last 阶段细胞得 Σ_last。+3. T = Σ_last^{1/2}·Σ_pred^{-1/2}(eigh,负特征值 clip 到 ε),T_blend = (1−W)I + W·T,r_new = T_blend·r(保均值与细胞数)。+4. 三种模式:MODE=0 原始 PLAN 版;NORM=1 时 T 除以 (det T)^{1/k}(体积保持,只修方向);**MODE=1(提交默认)相关结构版**:把 Σ 各自标准化成相关矩阵后算 T,作用后再乘回 Σ_pred 的逐 PC 标准差——精确保各 PC 方差不变,只把型内相关结构向 Σ_last 旋转。+5. 解码与父一致:Δ = (r_new − r_old) 逆投影到基因空间,只加到原非零位置,clip≥0。+6. Σ_pred 特征值非正或条件数 >1000 的类型跳过(实测无类型触发)。 -**提交默认 = ISO=1, β=3, TOPK=0, CORR_W=0**(其余参数 τ=0.3、NHVG=2500、NPC=25、α=1.8、τ_shape=0.5、RLO=1、CLIP=4、mc=10 全部沿用父节点)。单输入退路(copy_last)未改动。+## 机制生效证据(COVAR_FIX2_DEBUG=1) -## 查分结果(X3 A 半,seed0,共用 13 次额度,剩 7)+- W=0 对照与父节点输出逐元素 maxdiff = 0.0(机制关闭 = 父节点)。+- W>0 时 5 个类型全部被校正,fixed_cells=486(非全部 652,未配对类型不动);Σ_pred→Σ_last 的 Frobenius 距离全部缩小(如 OFT/RV-CM 33.3→21.8,IFT-CM 76.6→60.4 @MODE=1,W=0.5)。+- 均值保持:de_recovery 与 direction 在所有配置下几乎不变(de_recovery 恒 52.47),证明校正只动二阶结构。++## 查分结果(X3 A 半,seed0,共用 5 次,剩 15) | 配置 | 总分 | cell_state | covar | de_rec | dir | |---|---|---|---|---|---|-| 父节点 aniso β=3(ISO=0,复现) | 57.33 | 75.52 | 45.21 | 52.47 | 50.08 |-| TOPK=3 | 56.77 | 73.2 | **46.53** | 51.96 | 50.05 |-| TOPK=5 | 56.88 | 73.67 | 46.41 | 51.96 | 50.02 |-| TOPK=8 | 57.14 | 74.72 | 45.43 | 52.47 | 50.07 |-| TOPK=12 | 57.17 | 74.91 | 45.33 | 52.47 | 50.07 |-| CORR_W=0.25 稠密(MASK=0) | 56.74 | 74.68 | 43.48 | 52.47 | 50.08 |-| CORR_W=0.5 稠密(MASK=0) | 56.29 | 73.79 | 42.55 | 52.47 | 50.09 |-| CORR_W=0.5 掩码(MASK=1) | 57.33 | 75.37 | 45.38 | 52.47 | 50.09 |-| CORR_W=1.0 掩码(MASK=1) | 57.07 | 74.84 | 45.63 | 51.96 | 50.02 |-| **ISO β=3(提交默认)** | **57.67** | **76.35** | **45.57** | **52.47** | **50.12** |-| ISO β=2 | 56.95 | 73.94 | 46.28 | 51.96 | 50.10 |-| ISO β=4 | 57.73 | 77.5 | 44.87 | 51.96 | 50.06 |-| ISO β=5 | 57.53 | 77.38 | 44.19 | 51.96 | 49.95 |--**结论**:-- **PLAN 主轴 top-k 证伪**:covar 随 k 减小单调回升(45.21→46.53@k=3,验证「去掉 ratio≈1 的噪声 PC 恢复共变」的假设方向正确),但 cell_state 与 de_recovery 同步下滑更多,总分无一超过父节点,无 k 满足 PLAN 接受判据(covar≥47 且 cell_state≥74 且总分≥57.3)。covariation↔cell_state 的张力是根本性的:恢复共变总以更多细胞多样性为代价。-- **PLAN 步 4 相关校正证伪**:稠密施加使 covar 崩到 42–43(重演 node 9 的 ALLHVG 失败——稠密化注入人工共变);加 CORR_MASK 掩回原非零后 covar 只回到 ≈父(45.4),因为只保留原有非零位置时校准几乎不改变二阶结构。净增益为零。-- **采用 ISO β=3(node 7 机制)**:四组全部 ≥父节点(cell_state +0.83、covar +0.36、de_rec 持平、dir +0.04),A 半总分 57.67(+0.34,在 T1 噪声 ~2 内),但方向与 node 7 的 B 半 rank3 优势(59.60 vs 父 59.11)一致,且我的 ISO β=3 A 半画像(cell_state 76.35 / covar 45.57)与 node 7 B 半(78.93 / 45.93,A 半通常低 2–3)吻合,故判断可迁移。β=4 总分名义略高(+0.06,纯噪声)但以 covar −0.34 换 cell_state,不采用。--## 机制生效证据(lowrank_shape 家族,ISO 默认开)--- **机制开关对照**:`LOWRANK_SHAPE_ISO=0` 输出与父节点(node 9 各向异性)逐元素 maxdiff=0.0(已验证);`LOWRANK_SHAPE_BETA=0` 关闭全部形状部分(复现 node 4,父已验证)。`ISO=1` 输出 nnz=1278357 vs `ISO=0` nnz=1277931,二者不同 → ISO 分支确在执行。-- **top-k 选择逻辑独立验证**:LOWRANK_DEBUG 打印保留的 PC 序号,AVC-CM=[6,7,9,15,24]、IFT-CM=[1,6,10,11,17]、SV-CM=[4,13,17,20,22] —— 分散而非前 k 个方差 PC,证明按 `|scale|` 选择而非按方差序号(PLAN 风险 2 已排除)。-- **改变了哪些细胞**:5 个配对类型被形状化(AVC-CM、IFT-CM、OFT/RV-CM、SV-CM、Unknown);不可配对类型不动(LOWRANK_FALLBACK=none)。各向同性下每个细胞的位移仍取决于其自身在 PC 空间偏离型心的残差(非常数位移,与 constant_shift 本质不同)。-- **vs constant_shift**:型内不同细胞获得不同位移;常数位移无法改变型内协方差。--## 验证过的+| 父节点 ISO β=3(W=0) | 57.67 | 76.35 | 45.57 | 52.47 | 50.12 |+| MODE=0 W=0.10 | 57.57 | 75.97 | 45.66 | 52.47 | 50.11 |+| NORM=1 W=0.30 | 57.52 | 75.85 | 45.63 | 52.47 | 50.10 |+| NORM=1 W=0.60 | 57.39 | 75.37 | 45.69 | 52.47 | 50.09 |+| MODE=1 W=0.50 | 57.61 | 76.13 | 45.65 | 52.47 | 50.10 |+| **MODE=1 W=1.00(提交默认)** | **57.66** | **76.23** | **45.76** | 52.47 | 50.07 | -- ISO=0(关机制)逐元素复现父节点 maxdiff=0.0;ISO=1 默认输出 = 显式 ISO=1 输出 maxdiff=0.0。-- seed0 连跑两次逐元素一致(确定性);seed1/2/3 正常运行、输出有限无 NaN、细胞数=652(在 [500,652])。-- **伪装视图**(所有阶段时间 +1 天、manifest 键逆序重排版、换路径 /tmp/opencode/dv11):输出与真实视图逐元素 maxdiff=0.0,基因顺序一致 → 视图无关(程序只用时间差 dt_in/dt_out,不读绝对时间/阶段名/board/mode/source/dataset,不写死细胞数)。-- vec-check:真实视图与伪装视图默认输出均 status=ok。-- 运行 ~10 s、内存 ~1.5 GB(limits 28 GB / 30 min 内富余)。-- 单输入退路(copy_last)代码路径未改动。+## 结论(如实报告阴性结果) -## 没验证的 / 风险+PLAN 预期 covar +2~5;实测所有变体的 covar 变化 ≤ +0.19(远小于 T1 噪声 ~2),触发了 PLAN risks 1 的停止条件("若 W=0.10 变化 <1 分则说明 25 维 PC 空间校正太弱,应如实报告")。且 MODE=0/NORM 版随 W 增大 cell_state 单调下滑(T 的各向同性分量 ≈ 削弱 ISO 扩张,重演 node 11 的"削弱扩张必亏"教训);MODE=1 保方差版成功保护了 cell_state(76.23≈父)但 covar 仍不动。**covariation 组对型内二阶结构修复不敏感**——结合 node 11 的基因空间 CORR 校准同样无效,型内相关结构(PC 空间与基因空间两种实现)都不是 covar 组的驱动因素;node 10 的 covar +9.36 更可能来自其全类型施加+行洗牌对整体分布的破坏性重塑,而非相关修复本身。 -- ISO β=3 只在 X3 A 半 seed0 打分(57.67);B 半行为推断自 node 7(同机制、B 半 rank3 59.60),未直接测。相对父的 A 半增益 +0.34 在噪声内,正式分增益预期同样小(~+0.5 rank3),但方向稳健。-- 未测 proxy/proxy2/final 视图(本节点只挂 X3);机制与父同族,父的跨视图结论应继续成立。-- top-k 与 CORR_W 两轴已判定无增益,未做更细扫描(PLAN 风险 3「delta<2 不追」已触发)。+提交默认 = 机制打开(MODE=1, W=1.0):A 半总分与父持平(57.66 vs 57.67,噪声内),covar 方向 +0.19,无实测代价,符合方法族"提交时机制打开"的要求。 -## 下一步建议(给后续节点)+## 验证与未验证 -- covariation 与 cell_state 的张力是 lowrank_shape 家族的核心瓶颈:任何恢复共变的操作(top-k、相关校正、降 β)都掉细胞多样性。要突破需从「注入正确的型内相关结构」而非「削弱扩张」入手——例如用 last 阶段型内协方差的低秩主方向直接重塑残差(保均值与细胞数),而不是各向同性放大。-- direction 组(~50,de_direction≈0.001–0.003 几乎无信号):对不可配对类型(Endocardium、V-CM 等,当前 LOWRANK_FALLBACK=none 完全不动)加 OT/近邻标签位移兜底,仍是未试方向,宜作独立开关单测。+- 已验证:W=0 逐元素等于父;seed0 重跑逐元素确定;vec-check ok;单输入退路(copy_last)未改动;校正块只用视图内数据与时间差,无绝对时间/视图依赖。+- 未验证:B 半与 seed1/2;该机制在 final 视图(E8.5+E9.5→E10.5)上的效果(代码视图无关,应同样运行);W>1 或与非零掩码解码联合的进一步变体(证据显示 covar 组不响应,不值得扫)。 ## 知识来源 -未使用任何保留阶段/基因型的测量信息;未读禁窗数据;未用 `uns.celltype_palette`;external/ 与 prior/ 均未读取。只用 view 内两个输入阶段的表达、标签、时间差。「细胞状态多样性随发育时间增加」为通用发育生物学常识(谱系渐进分化),不针对禁窗阶段;其余为统计常识(PCA、方差比收缩、各向同性 vs 各向异性扩张、稀疏掩码解码、相关矩阵白化),无外部数据注入。+无外部生物知识;全部为视图内数据的线性代数运算(父节点已有的 PCA/均值外推框架 + 协方差白化-再着色,通用统计方法)。diff --git a/solution/README.md b/solution/README.mdindex 663e2b0..3b34359 100644--- a/solution/README.md+++ b/solution/README.md@@ -2,3 +2,6 @@ See METHOD.md. Entry: `python run.py --data <view> --out <pred.h5ad> --seed <int>` (pure CPU, `EXECUTION.json` gpu=false). Env knobs (defaults are the submitted config): `LOWRANK_TAU=0.3`, `LOWRANK_ALPHA=1.8`, `LOWRANK_PER_TYPE=1`, `LOWRANK_FALLBACK=none`, `LOWRANK_NHVG=2500`, `LOWRANK_NPC=25`, `LOWRANK_SCAP=4.0`, `LOWRANK_SHAPE_BETA=3.0` (0 = parent node 4 exactly), `LOWRANK_SHAPE_TAU=0.5`, `LOWRANK_SHAPE_CLIP=4.0`, `LOWRANK_SHAPE_RLO=1.0` (expansion-only), `LOWRANK_SHAPE_NPCS=25`, `LOWRANK_SHAPE_MINCELLS=10`.++## node 13 追加:COVAR_FIX2(提交默认打开)+PC 空间型内协方差校正:`COVAR_FIX2_W`(默认 1.0,0=关闭、逐元素回到父节点)、`COVAR_FIX2_MODE`(默认 1=相关结构校正、保各 PC 方差;0=PLAN 原始白化-再着色)、`COVAR_FIX2_NORM`(默认 0;1=det(T)=1 体积保持,仅 MODE=0 时生效)、`COVAR_FIX2_EPS=1e-6`、`COVAR_FIX2_COND_MAX=1000`、`COVAR_FIX2_DEBUG=1` 打印每型 Σ 距离与校正细胞数。详见 METHOD.md(covariation 组对该机制不敏感的阴性结果)。diff --git a/solution/run.py b/solution/run.pyindex e35b8cc..db443aa 100644--- a/solution/run.py+++ b/solution/run.py@@ -80,6 +80,12 @@ def main() -> None: corr_w = _env_float("LOWRANK_SHAPE_CORR_W", 0.0) corr_nhvg = _env_int("LOWRANK_SHAPE_CORR_NHVG", 200) corr_mask = _env_int("LOWRANK_SHAPE_CORR_MASK", 1)+ covar_w = _env_float("COVAR_FIX2_W", 1.0)+ covar_eps = _env_float("COVAR_FIX2_EPS", 1e-6)+ covar_cond_max = _env_float("COVAR_FIX2_COND_MAX", 1000.0)+ covar_norm = _env_int("COVAR_FIX2_NORM", 0)+ covar_mode = _env_int("COVAR_FIX2_MODE", 1) # 1 = correlation-only, variance-preserving+ covar_debug = bool(os.environ.get("COVAR_FIX2_DEBUG")) manifest = load_manifest(args.data) genes = panel_genes(args.data, manifest)@@ -287,6 +293,73 @@ def main() -> None: sub_d = np.where(orig_nz, sub_d, 0.0) Xc[sel_pred] = sp.csr_matrix(sub_d.astype(np.float32)) + if covar_w > 0.0 and shape_scale_by_type:+ from numpy.linalg import eigh as _eigh2++ def _sym_pow2(M: np.ndarray, p: float, eps: float) -> np.ndarray:+ M = 0.5 * (M + M.T)+ w_, Q = _eigh2(M)+ w_ = np.clip(w_, eps, None)+ return (Q * (w_ ** p)) @ Q.T++ kk = V.shape[1]+ n_fixed_cells = 0+ for t in sorted(shape_scale_by_type.keys()):+ m_in = lab_last == t+ sel = np.flatnonzero(lab_last_rows == t)+ if sel.size < shape_min_cells or int(m_in.sum()) < shape_min_cells:+ continue+ Gp = _dense(Xc[sel][:, hvg]).astype(np.float64)+ Rp = (Gp - mean_h) @ V+ mu_p = Rp.mean(axis=0)+ Rp_c = Rp - mu_p+ Sp = (Rp_c.T @ Rp_c) / max(sel.size - 1, 1)+ from numpy.linalg import eigvalsh as _eigvalsh2+ ev_p = _eigvalsh2(0.5 * (Sp + Sp.T))+ if ev_p.min() <= 0 or ev_p.max() / ev_p.min() > covar_cond_max:+ if covar_debug:+ print(f" COVAR2 skip type={t} n={sel.size} cond={ev_p.max() / max(ev_p.min(), 1e-12):.1f}")+ continue+ Sp += covar_eps * np.eye(kk)+ Rl = Z_last[m_in].astype(np.float64)+ Rl_c = Rl - Rl.mean(axis=0)+ Sl = (Rl_c.T @ Rl_c) / max(int(m_in.sum()) - 1, 1)+ Sl += covar_eps * np.eye(kk)+ if covar_mode == 1:+ dp = np.sqrt(np.clip(np.diag(Sp), 1e-12, None))+ Dinv = np.diag(1.0 / dp)+ Rpc = Dinv @ Sp @ Dinv+ Dl = np.diag(1.0 / np.sqrt(np.clip(np.diag(Sl), 1e-12, None)))+ Rlc = Dl @ Sl @ Dl+ T = _sym_pow2(Rlc, 0.5, covar_eps) @ _sym_pow2(Rpc, -0.5, covar_eps)+ Tb = (1.0 - covar_w) * np.eye(kk) + covar_w * T+ Rn_c = (Rp_c @ Dinv @ Tb.T) * dp[None, :]+ else:+ T = _sym_pow2(Sl, 0.5, covar_eps) @ _sym_pow2(Sp, -0.5, covar_eps)+ if covar_norm:+ sign, logdet = np.linalg.slogdet(T)+ if sign > 0:+ T = T / float(np.exp(logdet / kk))+ Tb = (1.0 - covar_w) * np.eye(kk) + covar_w * T+ Rn_c = Rp_c @ Tb.T+ d_gene = ((Rn_c - Rp_c) @ Vt).astype(np.float32)+ sub = Xc[sel]+ row_ids = np.repeat(np.arange(sub.shape[0]), np.diff(sub.indptr))+ pos = np.searchsorted(hvg, sub.indices)+ pos_c = np.clip(pos, 0, hvg.size - 1)+ valid = hvg[pos_c] == sub.indices+ sub.data += np.where(valid, d_gene[row_ids, pos_c], 0.0).astype(np.float32)+ Xc[sel] = sub+ n_fixed_cells += sel.size+ if covar_debug:+ Sn = (Rn_c.T @ Rn_c) / max(sel.size - 1, 1)+ d_before = float(np.linalg.norm(Sp - Sl))+ d_after = float(np.linalg.norm(Sn - Sl))+ print(f" COVAR2 type={t} n_pred={sel.size} n_last={int(m_in.sum())} "+ f"|Sp-Sl|_F {d_before:.3f} -> |Sn-Sl|_F {d_after:.3f}")+ if covar_debug:+ print(f"COVAR2 W={covar_w} fixed_cells={n_fixed_cells}")+ np.clip(Xc.data, 0.0, None, out=Xc.data) Xc.eliminate_zeros() out_X = Xc
调研来源?调研员查到并用到的知识条目和文献检索结果(只列标题和编号)。
用到的知识库条目
| 编号 | 标题 | 出处 |
|---|---|---|
| k041 | Within-stage pseudotime and graph toolkit offline: scanpy DPT/PAGA/Leiden, Palantir, CellRank 2 | 10.1186/s13059-019-1663-x (PAGA); 10.1038/s41587-019-0068-4 (Palantir); 10.1038/s41592-024-02303-9 (CellRank 2) |
| k031 | Offline OT toolkit in the sandbox: moscot TemporalProblem, wot OTModel, POT, geomloss | 10.1038/s41586-024-08453-2 (moscot); 10.1016/j.cell.2019.01.006 (Waddington-OT) |
| k038 | RNA velocity family (scVelo, dynamo, CellRank velocity kernel): not applicable to T1 files; substitutes | 10.1038/s41587-020-0591-3 (scVelo); 10.1016/j.cell.2021.12.045 (dynamo); 10.1038/s41592-024-02303-9 (CellRank 2) |
分析结果?分析员写的 ANALYSIS.json:改了什么、各组分数怎么变、假设是否成立、经验和下一步建议。
| 改了什么 | 在父节点(ISO β=3)解码后、clip 前插入 PC 空间型内协方差校正块 COVAR_FIX2(env 开关,W=0 逐元素回到父):仅对 5 个 shaped 类型(486/652 细胞)用 last 阶段型内协方差做白化-再着色,含三种模式;提交默认 MODE=1(相关结构校正、保各 PC 方差)、W=1.0。 |
|---|---|
| 各组分数的变化 | cell_state:噪声内(-0.03,78.90 vs 78.93) covariation:噪声内(+0.16,46.09 vs 45.93,远小于 T1 噪声 ~2;PLAN 预期 +2~5 未实现) de_recovery:噪声内(+0.00,54.37 vs 54.37) direction:噪声内(-0.04,50.13 vs 50.17) |
| family_id | lowrank_shape |
| 假设是否成立 | 否 |
| 经验 |
|
| mechanism_active | 是 |
| 下一步建议 |
|
对话摘要?每个角色和大模型对话的统计:轮数、工具调用、用时、token 数和最后的回答摘录;原始记录只给路径。
只给统计和最后回答的摘录;完整对话请到原始记录位置里列出的文件看。
分析员
| 角色?调研员写计划、工程师改代码、分析员解读分数、审查员检查作弊。 | 分析员 alibaba-token-plan-cn/qwen3.8-max |
|---|---|
| 调用次数 | 1 次 |
| 轮数?大模型一共回复了几轮(每轮可以调用多个工具)。 | 3 |
| 工具调用?大模型调用读文件、执行命令等工具的次数,按工具名统计。 | 共 2 次:bash 1、write 1 |
| 用时 | 不到 1 分 |
| token 数?输入 / 输出(含思考)的 token 数,来自接口返回的用量。 | 输入 12,018 · 输出 968 · 思考 319 |
| 任务(第一行) | 分析节点 n13 的打分结果,写 ANALYSIS.json |
| 最后的回答(摘录) | ANALYSIS.json written |
| 原始记录位置?完整对话记录在 Spark 上的文件路径;看板不复制原始内容。 | /home/spark-longxinyang/vec/runs/formal/20261002-202907-search-t1-scr-A/nodes/13/analyst.jsonl 6 KB /home/spark-longxinyang/vec/runs/formal/20261002-202907-search-t1-scr-A/nodes/13/analyst.stderr |
工程师
| 角色 | 工程师 alibaba-token-plan-cn/qwen3.8-max |
|---|---|
| 调用次数 | 1 次 |
| 轮数 | 23 |
| 工具调用 | 共 26 次:bash 18、edit 6、read 1、write 1 |
| 用时 | 15 分 |
| token 数 | 输入 55,159 · 输出 7,712 · 思考 14,262 |
| 任务(第一行) | 按计划修改程序:低秩协方差方向校正:PC空间温和白化-再着色修复covariation |
| 最后的回答(摘录) | 完成。总结: **做了什么**:按 PLAN 在父节点(node 11, ISO β=3)解码后插入 PC 空间型内协方差校正块(`COVAR_FIX2_W`,仅 5 个 shaped types、486/652 细胞),实现了三种模式:原始白化-再着色、det=1 体积保持、相关结构校正(保各 PC 方差)。W=0 对照与父逐元素一致(maxdiff=0.0),seed0 重跑确定,vec-check 通过。 **查分结果**(5 次,X3 A 半):所有变体 covar 变化 ≤ +0.19(PLAN 预期 +2~5,噪声 ~2),触发 PLAN 停止条件,如实报告阴性结果——covariation 组对型内二阶结构修复不敏感(PC 空间与 node 11 的基因空间实现均无效)。MODE=0/NORM 版随 W 增大 cell_state 单调下滑(T 的各向同性分量 ≈ 削弱扩张,重演 node 11 教训);MODE=1 版保住了 cell_state。提交默认 = 机制打开(MODE=1, W=1.0):总分 57.66 vs 父 57.67(噪声内持平),covar +0.19。 **下一步最值得试**:covar 组的驱动因素不在型内相关结构,更可能在类型间组成/均值或整体分布形状(node 10 的 +9.36 疑来自全类型破坏性重塑);建议下个好节点转向不可配对类型(Endocardium、V-CM 等,当前完全不动)的 OT/近邻位移兜底以攻 direction 组(~50,几乎无信号),或研究 covar 组指标对什么结构敏感后再动。 |
| 原始记录位置 | /home/spark-longxinyang/vec/runs/formal/20261002-202907-search-t1-scr-A/nodes/13/engineer.jsonl 120 KB /home/spark-longxinyang/vec/runs/formal/20261002-202907-search-t1-scr-A/nodes/13/engineer.stderr |
调研员
| 角色 | 调研员 alibaba-token-plan-cn/qwen3.8-max |
|---|---|
| 调用次数 | 1 次 |
| 轮数 | 1 |
| 工具调用 | 共 0 次:— |
| 用时 | 2 分 |
| token 数 | 输入 17,169 · 输出 1,286 · 思考 6,218 |
| 任务(第一行) | 为节点 n13(改进,父节点 n11)写改进计划 PLAN.json |
| 最后的回答(摘录) | 、全类型施加、行洗牌导致cell_state崩溃(-6.99)。ANALYSIS建议'用last阶段型内协方差的低秩主方向直接重塑残差'。本方案在node10机制基础上做三处关键约束以实现净增益。",
"approach": "在父节点run.py的ISO扩张之后、基因空间解码之前,插入PC空间协方差校正块(env开关COVAR_FIX2_W,默认0=关):\n\n1. 对每个shaped type(仅5个配对类型,LOWRANK_FALLBACK=none的类型不动):\n a) 取该类型所有细胞在25维PC空间的残差矩阵R_pred(ISO扩张后)\n b) 计算Σ_pred = cov(R_pred)(25×25)\n c) 取last阶段该类型的PC残差R_last,计算Σ_last = cov(R_last)(25×25)\n d) 正则化:Σ_pred += ε·I, Σ_last += ε·I(ε=1e-6)\n e) 计算变换T = Σ_last^{1/2} · Σ_pred^{-1/2}(矩阵平方根用eigh)\n f) 混合:T_blend = (1-W)·I + W·T\n g) 对每个细胞残差:r_new = T_blend @ r_old\n\n2. 参数:W ∈ {0.05, 0.10, 0.15}(vs node10的0.2);仅shaped types(vs node10的ALL=1);无行洗牌。\n\n3. 解码不变:PC→基因空间逆投影、非零掩码、clip≥0,与父节点完全一致。\n\n4. 单输入退路:copy_last不变(len(inputs)<2分支不动)。\n\n5. 查分策略:先跑W=0(对照,应与父逐元素一致)确认实现正确,再跑W=0.10(中位),若covar≥47且cell_state≥76则试W=0.05和0.15;若W=0.10已使cell_state<75则只试W=0.05。预计4-6次查分。\n\n6. 矩阵平方根实现:np.linalg.eigh + clip负特征值≥1e-10 + 重构,无需额外依赖。",
"expected_groups": ["covariation"],
"risks": "1) W过小(0.05)可能效果在噪声内(<2分)——Engineer应在W=0.10看到≥2分covariation变化才继续;若W=0.10变化<1分则说明25维PC空间校正太弱,应如实报告。2) cell_state仍可能下滑——若W=0.10时cell_state<76应停止增大W,接受covariation小幅改善。3) Σ_pred接近奇异(某些类型细胞数<25)——已有ε正则化和shape_min_cells=10门槛,但应额外检查eigh后特征值是否全正;若某类型Σ_pred条件数>1000则跳过该类型校正。4) 与node10的区别不够大导致类似失败——尽早发现:若W=0.10时cell_state已跌>3分,说明机制本身对cell_state有根本损伤,应停止。",
"family_id": "lowrank_shape",
"mechanism": "在各向同性扩张后,用last阶段观测协方差的矩阵平方根对预测残差做温和白化-再着色变换,将型内共变结构向观测目标校正,而非各向同性放大。",
"vs_constant_shift": "常数位移对所有细胞加同一向量,不改变型内协方差结构。本机制对每个细胞的残差施加线性变换(依赖于该细胞在PC空间的残差方向),改变的是型内基因-基因相关模式(二阶结构),且不同细胞因残差方向不同而获得不同的变换效果。",
"mechanism_evidence": "1) W=0输出与父节点逐元素maxdiff=0.0(机制关闭对照)。2) W>0时,打印shaped type的Σ_pred与Σ_last的Frobenius范数距离,校正后应缩小。3) 报告每组的四组分变化,特别是covariation与cell_state的trade-off。4) 打印被校正的细胞数(应仅为5个shaped type的细胞,非全部652)。5) 对比W=0与W=0.10输出的型内基因-基因相关矩阵(取前50 HVG),确认相关模式确实改变。",
"mechanism_off_control": "同一程序设COVAR_FIX2_W=0(env变量),跳过整个校正块,输出应与父节点(ISO=1, β=3)逐元素一致(maxdiff=0.0)。预期差别:W=0时covariation≈45.9;W>0时covariation应上升2-5分,cell_state下降≤2分。"
} |
| 原始记录位置 | /home/spark-longxinyang/vec/runs/formal/20261002-202907-search-t1-scr-A/nodes/13/researcher.jsonl 5 KB /home/spark-longxinyang/vec/runs/formal/20261002-202907-search-t1-scr-A/nodes/13/researcher.stderr |