总览 · ← 返回运行 20261003-070222-search-t2-heart-extrap-g24-D
节点 n16 在终选来历上
实现T2HX-05逐主轴幅度趋势外推:两输入阶段PCA谱比值r_j对末阶段坐标做阻尼逐轴缩放(只改轴比);proxy双向证伪,按停止规则提交γ=0,输出=父节点13,机制留VEC_GAMMA开关。
| 运行?一次完整的自动搜索或 Agent 会话,有自己的锁定配置和证据包。 | 20261003-070222-search-t2-heart-extrap-g24-D |
|---|---|
| 父节点 | n13 |
| 子节点 | n19 |
| 操作?种子:人写的起点;改进:在父节点上改;草稿:从头写;修复:修父节点的报错。 | 改进 |
| 状态 | 已打分 |
| 分数 | 搜索目标分 54.15(+0.0) · proxy 54.15(+0.0) |
| 审查 | 未审查 |
| 用时?从运行开始到结束(或到现在)的挂钟时间。 | 17 分 |
| 程序版本 | cbb8919b2a17a09509ef52f8db9ee00874701cab (programs.git) |
方法说明?节点程序自带的 METHOD.md:这个程序做了什么、为什么。
来自 programs.git cbb8919b2a:solution/METHOD.md
实现T2HX-05逐主轴幅度趋势外推:两输入阶段PCA谱比值r_j对末阶段坐标做阻尼逐轴缩放(只改轴比);proxy双向证伪,按停止规则提交γ=0,输出=父节点13,机制留VEC_GAMMA开关。
榜 / 视图
T2:heart:val_extrap,proxy = E8.25_late + E8.75 → E9.5(步长比 1.5)。纯 CPU,约 2.2 s,峰值内存 <1 GB(EXECUTION.json: gpu=false)。查分用量 4/20。
实际实现的方法族(PLAN T2HX-05)
逐主轴幅度趋势外推(各向异性形状),按 PLAN 原文实现:
- 表达与细胞照抄末阶段(分层抽样到 max_cells 内;本视图 last.n=24826 ≤ 25179,全量输出)。父节点的基因级趋势外推(T2HX-03)保留在
VEC_ALPHA开关后,提交值 α=0(该族已有 6 组证伪)。 - 新机制:对 prev 与 last 各自做同一确定性 PCA(协方差特征分解、特征值降序),取逐轴标准差 σ_prev[j]、σ_last[j](谱按秩配对——旋转不变量;两阶段特征帧实际发生轴置换,见下);计算 r_j=σ_last[j]/σ_prev[j],对 last 的规范化坐标按轴乘 s_j=1+γ·(r_j−1),再做原各向同性缩放到 0.946×max_k RMS(input_k)。只改轴间比例(形状),不动表达;线性映射不动共线邻域结构;各向同性分量被后续 RMS 归一吸收。
- 单输入退路:prev 不存在 → γ 强制 0(本节点顺带修复了父节点单输入时
float(None)崩溃的 bug,dt_ratio 允许为 null)。 - 开关:
VEC_MECH_OFF=1或VEC_GAMMA=<g>(仅扫参);提交默认GAMMA=0.0。 - 视图无关:不读 board/路径/绝对时间,只用两输入坐标的协方差谱;在伪装视图(时间 +1 天、改路径名、乱序 manifest 键)上复跑,X 与坐标逐值相同。
机制生效的证据(γ=1.0 实测,proxy seed 0)
- 实际改变了哪些细胞:全部 24826 个输出细胞的坐标都被逐轴缩放(表达矩阵逐字节不变);s_j=[0.558, 0.610, 0.751](γ=1 即 r_j),输出轴比从 [1, 0.938, 0.796] 变为 [1, 0.957, 0.933](趋近球形),RMS 仍钉在 335.0。
- 离线诊断(PLAN 要求先看):σ_prev=[245.3, 210.4, 144.9]、σ_last=[136.8, 128.3, 108.9]、r_j=[0.558, 0.610, 0.751],无极端值(PLAN 风险界 0.5–2 之内)。轴比趋势:prev [1, 0.86, 0.59] → last [1, 0.94, 0.80](点云在变得更各向同性),γ=1 即沿该谱趋势再走一步。两阶段特征帧确实置换(prev 轴0 与 last 轴2 |cos|=0.91,对角 |cos| 仅 0.42/0.28/0.13),故配对用秩排序谱(旋转不变)而非物理方向——γ=1 的操作等价于对特征值谱做一步对数外推,不受置换影响。
- 四组分各自的变化(γ=0 对照 → γ=1.0):expression_change 50.00 → 50.00(不变,表达未动);cell_state 50.00 → 50.00(不变);local_spatial 50.00 → 50.02(线性映射,邻域基本不动,符合预期);shape_scale 66.60 → 54.37(d2_shape 0.0489 → 0.0570,occupancy_dice 0.815 → 0.761)。榜分 54.15 → 51.10。
机制对照结果(PLAN mechanism_off_control)
| 配置 | 榜分 | shape_scale | d2_shape | local_spatial | 表达三组 |
|---|---|---|---|---|---|
γ=0(VEC_MECH_OFF=1,= 父节点 12/13,md5 一致) | 54.15 | 66.60 | 0.0489 | 50.00 | 50.00×3 |
| γ=0.5 | 52.71 | 60.84 | 0.0546 | 50.01 | 50.00×3 |
| γ=1.0(一步谱趋势) | 51.10 | 54.37 | 0.0570 | 50.02 | 50.00×3 |
| γ=−0.5(放大各向异性,仅诊断) | 54.18 | 66.75 | 0.0436 | 49.97 | 50.00×3 |
| γ=0(提交默认,单独查分确认) | 54.15 | 66.60 | 0.0489 | 50.00 | 50.00×3 |
与 PLAN 预期一致:关闭机制后输出逐字节回到父节点(md5 9d788ba7…,与父节点重跑一致),表达三组恒为 50.00,只有 shape_scale / local_spatial 可能动。打开时方向为负且单调(γ↑ → d2_shape↑ → shape_scale↓),触发 PLAN 停止规则「shape_scale<66.0 即停、交 γ=0」。
结论与教训
- 谱趋势方向(趋向各向同性)被 proxy 证伪:目标 E9.5 的形状谱更接近 last(E8.75)自身,γ=1 把点云推向近球形使 d2_shape 恶化 17%。与 node6(固定各向异性混合,净负)先验一致(PLAN 风险 c 命中)——「把形状向各向同性改」这个族在本榜两次独立证伪。
- γ=−0.5(沿趋势反方向、放大各向异性)shape_scale 66.75(+0.15)、榜分 +0.03,均 <1 分噪声界(PLAN 风险 d),不算进步;且负 γ 是「沿 prev 形状方向外推」,与 node13 教训同理属利用 proxy 趋势伪影的打分器特化方向,明确不提交。
- 至此坐标形状侧已有 4 组证据:各向同性缩放 0.946×maxRMS 是局部最优(66.60),kNN 残差形变(node9/15)、各向异性固定混合(node6)、逐主轴谱趋势外推(本节点)全部 ≤ 该值。shape_scale 组对「只动全局线性几何」的改动已饱和。
验证过 / 没验证
- 验证过:proxy seed0 四档 γ 查分;γ=0 输出与父节点 md5 一致并单独查分确认 54.15;
vec-check通过;同 seed 复跑逐字节确定(seed 0/1);单输入视图退路不崩(本地构造单输入视图跑通 + vec-check);伪装视图(时间平移 +1、改路径、乱序 manifest)输出逐值相同;运行时 ~2.2 s、内存 <1 GB。 - 没验证:γ 在 (0, 0.5) 与 (−0.5, 0) 的细网格(两端单调、族已证伪,浪费额度);final 真实括号(E8.75+E9.5→E10.5)上的 r_j 谱——但该机制提交值 γ=0,真实视图输出即父节点行为(末阶段坐标 PCA 规范化 + 0.946×maxRMS),父节点已在 final 验证过合规。
知识来源
无外部生物知识;只用了输入视图内两个已发布阶段坐标的协方差谱(现场计算)与线性代数(特征值谱为旋转不变量)。未使用任何保留阶段/保留基因型信息。
下一步建议
- 全局线性几何(缩放、各向异性、谱外推)已 4 组饱和于 66.6;形状侧若还想动,只剩非线性的、由表达数据(而非坐标趋势)驱动的空间重排,例如按细胞类型组成的占据格变化——但 node9/15 的 kNN 形变已两次为负,先验不利。
- 表达三组钉在 50.00 地板;树内趋势族全灭。若要突破需要与 prev→last 差正交的信号(prior/ 调控网络约束的方向、或 external/ 的 Qiu E8.75 心脏细胞作参考锚定跨样本技术差),每个方向先 1 次查分看 de_direction 符号再投入。
调研员的计划
| 名称 | T2HX-05 逐主轴幅度趋势外推(各向异性形状)@node13 |
|---|---|
| 动机 | 父节点 13/12 的 cell_state、expression_change、local_spatial 三组均钉在 50.00(copy_last 地板),且『沿观测趋势外推表达』整族已有 5 组独立证伪(node4、node10、node13、方法卡 damped_shift、官方 pseudobulk_shift),ANALYSIS 明确不要再碰表达侧趋势族。唯一非地板、仍有上探空间的是 shape_scale=66.60,ANALYSIS 指出它被 d2_shape=0.0489 卡住,『只靠全局缩放无法再涨,需改变点云形状本身』。node6 曾试各向异性固定混合(w=0.35/0.7,净负),但那是把形状向各向同性收缩的固定权重,不是沿观测趋势外推;node9 的 kNN 残差形变改变的是局部相对几何且 proxy 上为负(54.15→53.92)。本方案改做各主轴幅度的趋势外推,是未测过的形状变体。 |
| 做法 | 1) 保留父节点全部:表达照抄末阶段、确定性 PCA 规范化、各向同性缩放到 0.946×max_k RMS。2) 新增机制(在最终各向同性缩放之前):对 prev 与 last 各自跑同一 pca_canonicalise,得各主轴标准差 σ_prev[j]、σ_last[j](sqrt 特征值);计算逐轴比值 r_j=σ_last[j]/σ_prev[j];对 last 的规范化坐标按轴乘 s_j=1+γ·(r_j−1),再做原各向同性缩放。这样只改变轴间比例(形状),γ 是趋势阻尼。3) γ 初值与搜索:先查 γ=1.0(一步趋势)与 γ=0.5 两个探针;若 shape_scale<66.0 立即停止并交 γ=0。范围上界 γ≤1(不外推超过一个观测步长,防发散)。4) 单输入退路:prev 不存在时无 σ_prev,γ 强制 0,输出=父节点。5) vec-score 快筛:每次只跑 proxy seed0,比较 shape_scale 与 d2_shape;用『首查 γ=1.0 若 shape_scale<66.0 即停』的停止规则控预算(照抄 node13 的纪律)。6) 视图无关:不读 board/时间,只用两输入阶段的协方差特征值,时间平移不变。 |
| 风险 | a) 逐轴比值可能主要反映 prev/last 的样本技术差异而非生物形状趋势(与表达侧全局水平差同理)——Engineer 先看离线诊断:打印 r_j 各分量,若全部≈1(形状几乎没变)则机制无量可外推,直接交 γ=0 不耗查分;若某轴 r_j 极端(>2 或<0.5)提示技术噪声,降 γ 或放弃。b) PCA 主轴在两阶段间可能交换次序/方向,导致逐轴比值错配——用特征值降序配对并在日志打印轴对应;若错配严重则该机制不可靠。c) 与 node6 各向异性净负的先验冲突——若 γ=0.5 与 γ=1.0 均 ≤66.0,即视为与 node6 一致被证伪,交 γ=0。d) 查分噪声约 1 分,<1 分的变化不算进步,需看 d2_shape 方向确认。 |
代码改动?这个节点的程序和父节点程序的逐行差别:绿色是新增,红色是删除。
对比:父节点版本 35d31a123f。改动的文件:solution/METHOD.md +32 −41、solution/run.py +108 −44
diff --git a/solution/METHOD.md b/solution/METHOD.mdindex fa1893c..5b87e7c 100644--- a/solution/METHOD.md+++ b/solution/METHOD.md@@ -1,62 +1,53 @@-实现T2HX-03基因级趋势外推,proxy证伪(α=0.2→52.05、de_direction−0.06,与幅度无关),按停止规则提交α=0;坐标机制保留,输出=父节点12(54.15)。+实现T2HX-05逐主轴幅度趋势外推:两输入阶段PCA谱比值r_j对末阶段坐标做阻尼逐轴缩放(只改轴比);proxy双向证伪,按停止规则提交γ=0,输出=父节点13,机制留VEC_GAMMA开关。 ## 榜 / 视图 -`T2:heart:val_extrap`,proxy = E8.25_late + E8.75 → E9.5(步长比 1.5)。纯 CPU,约 2 s,峰值内存 <1 GB(`EXECUTION.json`: `gpu=false`)。+`T2:heart:val_extrap`,proxy = E8.25_late + E8.75 → E9.5(步长比 1.5)。纯 CPU,约 2.2 s,峰值内存 <1 GB(`EXECUTION.json`: `gpu=false`)。查分用量 4/20。 -## 实际实现的方法族(PLAN T2HX-03)+## 实际实现的方法族(PLAN T2HX-05) -**阻尼基因级表达趋势外推**,按 PLAN 原文实现:+**逐主轴幅度趋势外推(各向异性形状)**,按 PLAN 原文实现: -1. 加载 prev(E8.25_late,58716 细胞)与 last(E8.75,24826 细胞)两个输入阶段,对每个基因 g 计算伪批量差 `delta_g = mean(X_last[:,g]) − mean(X_prev[:,g])`(面板序,500 基因)。-2. 对末阶段每个输出细胞:`X_pred[cell,g] = clip(X_last[cell,g] + α·delta_g, 0, ∞)`。每个基因有独立的、数据驱动的位移;无变化的基因不动(本视图上 500/500 基因 |delta|>0)。这不是常数位移(每基因不同标量),也不是组成重加权(细胞集合与比例不动)。-3. 坐标管线与父节点完全一致:确定性 PCA 规范帧(去质心 → eigh 降序 → det=+1 → 第三矩定向)+ 各向同性缩放到 `0.946 × max_k RMS(input_k)`(proxy: rms_inputs=[354.13, 216.88] → rms_out=335.00)。-4. 单输入退路:prev 不存在时无 delta,α 强制为 0,表达照抄、坐标同管线,不崩。-5. 开关:`VEC_MECH_OFF=1` 或 `VEC_ALPHA=<a>`(仅扫参用);提交默认 `ALPHA=0.0`。+1. 表达与细胞照抄末阶段(分层抽样到 max_cells 内;本视图 last.n=24826 ≤ 25179,全量输出)。父节点的基因级趋势外推(T2HX-03)保留在 `VEC_ALPHA` 开关后,提交值 α=0(该族已有 6 组证伪)。+2. **新机制**:对 prev 与 last 各自做同一确定性 PCA(协方差特征分解、特征值降序),取逐轴标准差 σ_prev[j]、σ_last[j](谱按秩配对——旋转不变量;两阶段特征帧实际发生轴置换,见下);计算 r_j=σ_last[j]/σ_prev[j],对 last 的规范化坐标按轴乘 s_j=1+γ·(r_j−1),再做原各向同性缩放到 0.946×max_k RMS(input_k)。只改轴间比例(形状),不动表达;线性映射不动共线邻域结构;各向同性分量被后续 RMS 归一吸收。+3. 单输入退路:prev 不存在 → γ 强制 0(本节点顺带修复了父节点单输入时 `float(None)` 崩溃的 bug,dt_ratio 允许为 null)。+4. 开关:`VEC_MECH_OFF=1` 或 `VEC_GAMMA=<g>`(仅扫参);提交默认 `GAMMA=0.0`。+5. 视图无关:不读 board/路径/绝对时间,只用两输入坐标的协方差谱;在伪装视图(时间 +1 天、改路径名、乱序 manifest 键)上复跑,X 与坐标逐值相同。 -## 机制生效的证据(α=0.2 实测,proxy seed 0)+## 机制生效的证据(γ=1.0 实测,proxy seed 0) -- **实际改变了哪些细胞**:全部 24826 个输出细胞都被移动(统一加 α·delta 向量);500/500 基因有非零位移,|delta| 中位数 0.112、P90 0.705、max 2.088(不是只有少数基因被移动);表达矩阵 L2 变化 190.6(非零);8.1M 个条目被下界 clip(零表达条目对负 delta 基因不动、对正 delta 基因变非零)。-- **四组分各自的变化**(α=0 对照 → α=0.2):expression_change 50.00 → **47.88**;cell_state 50.00 → **44.98**;local_spatial 50.00 → **49.46**;shape_scale 66.60 → **65.88**。榜分 54.15 → **52.05**。de_direction 0 → −0.0596,de_score 0 → −0.1111,mmd_u 0.0586 → 0.0605,variogram 0.0586 → 0.0849。+- **实际改变了哪些细胞**:全部 24826 个输出细胞的坐标都被逐轴缩放(表达矩阵逐字节不变);s_j=[0.558, 0.610, 0.751](γ=1 即 r_j),输出轴比从 [1, 0.938, 0.796] 变为 [1, 0.957, 0.933](趋近球形),RMS 仍钉在 335.0。+- **离线诊断(PLAN 要求先看)**:σ_prev=[245.3, 210.4, 144.9]、σ_last=[136.8, 128.3, 108.9]、r_j=[0.558, 0.610, 0.751],无极端值(PLAN 风险界 0.5–2 之内)。轴比趋势:prev [1, 0.86, 0.59] → last [1, 0.94, 0.80](点云在变得更各向同性),γ=1 即沿该谱趋势再走一步。两阶段特征帧确实置换(prev 轴0 与 last 轴2 |cos|=0.91,对角 |cos| 仅 0.42/0.28/0.13),故配对用秩排序谱(旋转不变)而非物理方向——γ=1 的操作等价于对特征值谱做一步对数外推,不受置换影响。+- **四组分各自的变化**(γ=0 对照 → γ=1.0):expression_change 50.00 → 50.00(不变,表达未动);cell_state 50.00 → 50.00(不变);local_spatial 50.00 → 50.02(线性映射,邻域基本不动,符合预期);shape_scale 66.60 → **54.37**(d2_shape 0.0489 → 0.0570,occupancy_dice 0.815 → 0.761)。榜分 54.15 → 51.10。 ## 机制对照结果(PLAN `mechanism_off_control`) -| 配置 | 榜分 | expr_change | cell_state | local_spatial | shape_scale |-|---|---:|---:|---:|---:|---:|-| α=0(`VEC_MECH_OFF=1`,= 父节点 12) | **54.15** | 50.00 | 50.00 | 50.00 | 66.60 |-| α=0.05 | 53.02 | 47.88 | 47.86 | 49.90 | 66.46 |-| α=0.2 | 52.05 | 47.88 | 44.98 | 49.46 | 65.88 |+| 配置 | 榜分 | shape_scale | d2_shape | local_spatial | 表达三组 |+|---|---:|---:|---:|---:|---|+| γ=0(`VEC_MECH_OFF=1`,= 父节点 12/13,md5 一致) | **54.15** | 66.60 | 0.0489 | 50.00 | 50.00×3 |+| γ=0.5 | 52.71 | 60.84 | 0.0546 | 50.01 | 50.00×3 |+| γ=1.0(一步谱趋势) | 51.10 | 54.37 | 0.0570 | 50.02 | 50.00×3 |+| γ=−0.5(放大各向异性,仅诊断) | 54.18 | 66.75 | 0.0436 | 49.97 | 50.00×3 |+| γ=0(提交默认,单独查分确认) | 54.15 | 66.60 | 0.0489 | 50.00 | 50.00×3 | -对照与 PLAN 预期一致(关闭后回到 54.15 / 50.00×3 / 66.60),即表达外推机制确实生效并改变了输出;但打开时**方向为负**,且 α 越小越接近 50(单调),α=0 是族内最优边界。+与 PLAN 预期一致:关闭机制后输出逐字节回到父节点(md5 9d788ba7…,与父节点重跑一致),表达三组恒为 50.00,只有 shape_scale / local_spatial 可能动。打开时方向为负且单调(γ↑ → d2_shape↑ → shape_scale↓),触发 PLAN 停止规则「shape_scale<66.0 即停、交 γ=0」。 -## 为什么提交 α=0(如实报告:机制被证伪)+## 结论与教训 -- PLAN 停止规则:「第一次查 α=0.2 时若 expression_change<50 立即终止」。实测 47.88 < 50,且 cell_state 44.98 同时 <50(PLAN 第 6 条的终止条件「两组均 ≤50」满足),故不扫 [0.1, 0.3, 0.5, 1.0],只补了一个边界探针 α=0.05 确认单调性。-- de_score / de_direction 在 α=0.05 与 α=0.2 完全相同(−0.1111 / −0.0596):DE 方向指标与幅度无关,说明 **prev→last 的基因级趋势方向本身与保留目标 E9.5 的真实变化方向不一致**(负相关),缩小 α 只能稀释损失、不能翻正。-- 与树内及方法卡证据一致:节点 4(分型伪批量 α=0.05)cell_state 49.04,节点 10(α=0.02)49.40,方法卡 damped_shift 分型网格 α∈[0.1,1.0] 全部 49.47→48.77 < 50,官方 pseudobulk_shift 基线 48.77。本次把证伪扩展到**全局逐基因 delta**(不分型、不做匹配)这一未测变体。-- 结构分析(离线,未耗查分):全局 delta 的均值 −0.124(E8.75 整体表达水平比 E8.25_late 低约 20%),疑似跨样本技术差异(覆盖/深度)而非生物学趋势;组成控制后的分型 delta 均值 −0.004、幅度小 30 倍(|δ| 中位数 0.0035),与全局 delta 相关 0.71;去掉全局水平项的校正 delta 与原始 delta cos=0.87——失败的主要分量(80% 符号一致)在这两个「结构修复」变体中仍然保留,且分型版本已被方法卡网格直接证伪,故未再消耗查分探针。-- 提交 α=0.2 会把节点打到 52.05(低于父 54.15)并向树传播一个在 proxy 上有害的机制;按方法卡先例(「外推网格单调低于地板,取边界 α=0」)与节点 12 的处理方式,提交族边界 α=0,机制代码保留在 `VEC_ALPHA` 开关后供后续节点复用。+- 谱趋势方向(趋向各向同性)被 proxy 证伪:目标 E9.5 的形状谱更接近 last(E8.75)自身,γ=1 把点云推向近球形使 d2_shape 恶化 17%。与 node6(固定各向异性混合,净负)先验一致(PLAN 风险 c 命中)——「把形状向各向同性改」这个族在本榜两次独立证伪。+- γ=−0.5(沿趋势反方向、放大各向异性)shape_scale 66.75(+0.15)、榜分 +0.03,均 <1 分噪声界(PLAN 风险 d),不算进步;且负 γ 是「沿 prev 形状方向外推」,与 node13 教训同理属利用 proxy 趋势伪影的打分器特化方向,明确不提交。+- 至此坐标形状侧已有 4 组证据:各向同性缩放 0.946×maxRMS 是局部最优(66.60),kNN 残差形变(node9/15)、各向异性固定混合(node6)、逐主轴谱趋势外推(本节点)全部 ≤ 该值。shape_scale 组对「只动全局线性几何」的改动已饱和。 -## 验证过的+## 验证过 / 没验证 -- **确定性**:同 seed 重跑 `.X`(data/indices/indptr)与 `obsm/spatial_3D` 逐元素相同;seed 0 与 seed 1 的 `.X`/`obsm`/`obs`/`var` 完全相同(n=24826 ≤ max_cells=25179,无抽样,rng 未被消费;仅 `uns/generator_seed` 记录不同,与父节点行为一致)。-- **与父节点等价**:提交默认(α=0)的输出与 `VEC_MECH_OFF=1` 对照、与父节点 12 的预测逐字节一致;正式分预期 = 父节点(54.15 A 半,rank3 ≈ 54.00)。-- **视图无关**:输出只取决于视图数据与 seed;不读 `board`/`mode`/`source`/`dataset`,无绝对发育时间分支(`extrap_step` 的步长比仅写日志;时间统一平移后 prev/last 选择与 delta 不变)。-- **格式**:`vec-check --data <proxy view>` → `{"status":"ok","errors":[]}`(α=0、α=0.05、α=0.2 三个产物都通过)。--## 没验证 / 风险--- α>0 在**真实括号**(E8.75+E9.5→E10.5,同一官方数据集、delta 更干净)上的方向未验证也无法验证(目标保留);proxy 的失败可能部分源于 E8.25_late 与 E8.75 两样本间的技术水平差。但按「分数要能迁移」与护栏规则,不能提交一个在唯一尺子上为负的机制赌真实视图翻正。-- 负 α(逆时间外推)在 proxy 上会得分更高,但那是利用两输入样本的技术水平差、对真实任务无迁移性的打分器特化,明确不做。-- 表达侧四组中 cell_state / expression_change / local_spatial 仍钉在 50.00(copy_last 地板),shape_scale 仍被 d2_shape=0.04891 钉在 66.60。本节点没有打开新缺口,贡献是把「基因级趋势外推」整族(全局 delta 变体)在 proxy 上证伪并留下可复用的开关实现。+- 验证过:proxy seed0 四档 γ 查分;γ=0 输出与父节点 md5 一致并单独查分确认 54.15;`vec-check` 通过;同 seed 复跑逐字节确定(seed 0/1);单输入视图退路不崩(本地构造单输入视图跑通 + vec-check);伪装视图(时间平移 +1、改路径、乱序 manifest)输出逐值相同;运行时 ~2.2 s、内存 <1 GB。+- 没验证:γ 在 (0, 0.5) 与 (−0.5, 0) 的细网格(两端单调、族已证伪,浪费额度);final 真实括号(E8.75+E9.5→E10.5)上的 r_j 谱——但该机制提交值 γ=0,真实视图输出即父节点行为(末阶段坐标 PCA 规范化 + 0.946×maxRMS),父节点已在 final 验证过合规。 ## 知识来源 -只用通用机制知识:线性趋势外推(数值方法);胚胎随发育时间增大、样本观测 RMS 只能低估真实尺寸(坐标机制沿用父节点,测量学常识)。未使用任何保留阶段(E8.5/E10.5/E12.5、禁窗 (8.25,8.75) 与 9.5<E≤13.5)或保留基因型的数据、比例、标记基因或形态信息;`external/`(Qiu E8.75)与 `prior/` 均未被 `run.py` 读取。+无外部生物知识;只用了输入视图内两个已发布阶段坐标的协方差谱(现场计算)与线性代数(特征值谱为旋转不变量)。未使用任何保留阶段/保留基因型信息。 -## 查分记录(共 4 次 / 上限 20)+## 下一步建议 -1. `t2hx03_a0.2` → 52.05(方向为负,触发 PLAN 停止规则)-2. `t2hx03_control_a0` → 54.15(机制关闭对照 = 父节点)-3. `t2hx03_a0.05` → 53.02(边界探针,确认单调)-4. `t2hx03_committed_a0` → 54.15(提交产物确认)+- 全局线性几何(缩放、各向异性、谱外推)已 4 组饱和于 66.6;形状侧若还想动,只剩非线性的、由表达数据(而非坐标趋势)驱动的空间重排,例如按细胞类型组成的占据格变化——但 node9/15 的 kNN 形变已两次为负,先验不利。+- 表达三组钉在 50.00 地板;树内趋势族全灭。若要突破需要与 prev→last 差正交的信号(prior/ 调控网络约束的方向、或 external/ 的 Qiu E8.75 心脏细胞作参考锚定跨样本技术差),每个方向先 1 次查分看 de_direction 符号再投入。diff --git a/solution/run.py b/solution/run.pyindex b81d07d..afcafb3 100644--- a/solution/run.py+++ b/solution/run.py@@ -1,44 +1,66 @@ #!/usr/bin/env python3-"""T2 extrapolation: copy-last expression (trend mechanism falsified, alpha=0) + PCA-normalised rescaled coordinates.--Mechanism (PLAN family T2HX-03), implemented in full and committed with-alpha = 0 because the proxy falsified every alpha > 0. Three parts:--1. Expression trend extrapolation (new, this node): with two or more input- stages, compute the per-gene pseudobulk delta between the last two inputs,- ``delta_g = mean(X_last[:, g]) - mean(X_prev[:, g])``, and displace every- output cell of the last stage by ``alpha * delta_g`` (clipped at 0). Each- gene gets its own data-driven displacement; genes that did not change are- not moved. With a single input stage there is no delta and alpha is- forced to 0 (expression copied verbatim).+"""T2 extrapolation: copy-last expression + PCA-normalised anisotropic-trend rescaled coordinates.++Three parts:++1. Expression baseline: the last observed stage's cells are copied verbatim+ (values and sparsity structure), stratified-sampled to max_cells when+ needed. (The per-gene trend extrapolation of family T2HX-03 is retained+ behind VEC_ALPHA for provenance but committed at ALPHA = 0: the proxy+ falsified every alpha > 0 -- alpha = 0.2 -> 52.05, alpha = 0.05 -> 53.02,+ alpha = 0 -> 54.15, with de_direction -0.0596 independent of magnitude.)++2. NEW (this node, PLAN family T2HX-05) per-axis amplitude trend+ extrapolation: run the same deterministic PCA canonicalisation on the+ previous and last input stages, giving per-axis standard deviations+ sigma_prev[j], sigma_last[j] (sqrt eigenvalues, rank-ordered -- a+ rotation-invariant spectrum pairing). Before the final isotropic+ rescale, multiply the last stage's canonical coordinates per axis by+ ``s_j = 1 + gamma * (r_j - 1)`` with ``r_j = sigma_last[j] /+ sigma_prev[j]``. gamma = 1 is exactly one multiplicative step of the+ observed spectrum trend (log sigma extrapolation); gamma damps it. This+ changes only the axis ratios (cloud shape), not the expression, not the+ relative within-cloud neighbourhood geometry (the map is linear), and not+ the final RMS radius (the isotropic rescale to the target RMS happens+ afterwards). Single input stage -> no sigma_prev, gamma forced to 0+ (output equals the parent node).++ Proxy diagnostics (E8.25_late -> E8.75): sigma_prev = [245.3, 210.4,+ 144.9], sigma_last = [136.8, 128.3, 108.9], r = [0.558, 0.610, 0.751]+ (none extreme per the PLAN risk bounds 0.5-2). Axis-ratio trend: prev+ [1, 0.86, 0.59] -> last [1, 0.94, 0.80] (cloud becoming more isotropic);+ gamma = 1 projects the last cloud onto a near-spherical spectrum. Note+ the eigenframes of the two stages are permuted (|cos| between axis 0 of+ prev and axis 2 of last = 0.91), which is why the pairing is done on the+ rank-ordered spectra (invariant) rather than on physical directions. Proxy verdict (T2:heart:val_extrap, E8.25_late + E8.75 -> E9.5):- alpha = 0.2 -> board 52.05 (expression_change 47.88, cell_state 44.98,- de_direction -0.0596); alpha = 0.05 -> board 53.02 (expression_change- 47.88, cell_state 47.86); alpha = 0 (control) -> board 54.15 with all- expression groups at 50.00. de_score/de_direction are identical at- alpha = 0.05 and 0.2 (direction metrics are magnitude-invariant), so the- prev->last per-gene trend points away from the held-out target on this- view for any alpha > 0; the committed default is the family boundary- alpha = 0. VEC_ALPHA re-enables the mechanism for future probes.--2. Expression baseline: the last observed stage's cells are otherwise copied- verbatim (values and sparsity structure), stratified-sampled to max_cells- when needed.--3. Coordinates (unchanged from parent): the last stage's point cloud is put- in a deterministic canonical frame (centroid at origin, PCA rotation with- fixed chirality and axis orientation via third moments) and then rescaled- isotropically to ``FACTOR * max_k RMS(input_k)``. Rationale: the measured- RMS radius of a sample can only underestimate the extent of the structure- (field of view / sections kept), it is not monotone in time, and the embryo- grows, so the target extent is at least the largest observed input RMS,- damped by FACTOR. Cell-to-cell relative geometry is preserved.--``VEC_MECH_OFF=1`` disables the expression extrapolation (alpha forced to 0;-output equals the parent node: copied expression + scaled coordinates).-``VEC_ALPHA`` overrides ALPHA (scan knob, defaults to the committed value).-``VEC_FACTOR`` overrides FACTOR (scan knob).+ the family is falsified in both directions. gamma = 1.0 -> board 51.10+ (shape_scale 54.37, d2_shape 0.0570); gamma = 0.5 -> 52.71 (shape_scale+ 60.84, d2_shape 0.0546); gamma = 0 (control) -> 54.15 (shape_scale+ 66.60, d2_shape 0.0489); gamma = -0.5 (amplify anisotropy, diagnostic+ only) -> 54.18 (shape_scale 66.75, d2_shape 0.0436), within noise of+ gamma = 0. d2_shape is monotone in gamma toward isotropy: the target+ E9.5 shape spectrum sits essentially at the last stage's spectrum, so+ no damped trend extrapolation of it helps (and negative gamma gains+ would be proxy-specific scorer chasing, explicitly not committed). The+ committed default is the family boundary GAMMA = 0; VEC_GAMMA+ re-enables the mechanism for future probes.++3. Coordinates: the last stage's point cloud is put in a deterministic+ canonical frame (centroid at origin, PCA rotation with fixed chirality+ and axis orientation via third moments), per-axis scaled as in (2), then+ rescaled isotropically to ``FACTOR * max_k RMS(input_k)``. Rationale for+ the isotropic target: the measured RMS radius of a sample can only+ underestimate the extent of the structure, it is not monotone in time,+ and the embryo grows, so the target extent is at least the largest+ observed input RMS, damped by FACTOR.++``VEC_MECH_OFF=1`` disables the anisotropic mechanism (gamma forced to 0;+output equals the parent node: copied expression + isotropically scaled+coordinates). ``VEC_GAMMA`` overrides GAMMA (scan knob). ``VEC_ALPHA``+overrides ALPHA (falsified family, kept at 0). ``VEC_FACTOR`` overrides+FACTOR (scan knob). """ from __future__ import annotations@@ -64,6 +86,28 @@ from src.task2_spatial.view_io import ( FACTOR = 0.946 ALPHA = 0.0+GAMMA = 0.0 # family boundary: proxy falsified every gamma != 0 (see module docstring)+++def _eig_desc(coords: np.ndarray) -> tuple[np.ndarray, np.ndarray]:+ """Covariance eigen-decomposition, eigenvalues/vectors in descending order."""+ x = np.asarray(coords, dtype=np.float64)+ x = x - x.mean(axis=0)+ cov = (x.T @ x) / max(len(x) - 1, 1)+ evals, evecs = np.linalg.eigh(cov)+ order = np.argsort(-evals, kind="stable")+ return evals[order], evecs[:, order]+++def sigma_spectrum(coords: np.ndarray) -> np.ndarray:+ """Per-axis standard deviations (sqrt eigenvalues), descending order.++ Rotation-invariant shape spectrum of the point cloud; this is what the+ per-axis trend pairs between stages (rank pairing, not physical axes --+ the eigenframes of two stages may be permuted relative to each other).+ """+ evals, _ = _eig_desc(coords)+ return np.sqrt(np.maximum(evals, 0.0)) def pca_canonicalise(coords: np.ndarray) -> tuple[np.ndarray, dict]:@@ -76,10 +120,7 @@ def pca_canonicalise(coords: np.ndarray) -> tuple[np.ndarray, dict]: """ x = np.asarray(coords, dtype=np.float64) x = x - x.mean(axis=0)- cov = (x.T @ x) / max(len(x) - 1, 1)- evals, evecs = np.linalg.eigh(cov)- order = np.argsort(-evals, kind="stable")- evals, evecs = evals[order], evecs[:, order]+ evals, evecs = _eig_desc(x) if np.linalg.det(evecs) < 0: evecs[:, -1] *= -1.0 diag = {"eig_frac": [float(v / max(evals.sum(), 1e-12)) for v in evals]}@@ -117,6 +158,7 @@ def main() -> None: mech_off = os.environ.get("VEC_MECH_OFF", "") == "1" factor = float(os.environ.get("VEC_FACTOR", "") or FACTOR) alpha = 0.0 if mech_off else float(os.environ.get("VEC_ALPHA", "") or ALPHA)+ gamma = 0.0 if mech_off else float(os.environ.get("VEC_GAMMA", "") or GAMMA) manifest = load_manifest(args.data) genes = panel_genes(args.data, manifest)@@ -149,19 +191,41 @@ def main() -> None: del prev canon, pca_diag = pca_canonicalise(last.coords[idx])- radii = [rms_radius(read_stage(args.data, e, genes).coords) for e in inputs_by_time(manifest)]+ stages = [read_stage(args.data, e, genes) for e in inputs_by_time(manifest)]+ radii = [rms_radius(st.coords) for st in stages] target_rms = float(np.max(radii)) * factor++ axis_info: dict = {}+ if gamma != 0.0 and prev_e is not None:+ # Rank-paired per-axis amplitude trend: sigma spectrum (sqrt eigenvalues,+ # descending) of prev vs last, s_j = 1 + gamma * (r_j - 1) applied to the+ # canonical coords BEFORE the isotropic rescale (so only axis ratios --+ # the cloud shape -- change; the final RMS stays at target_rms).+ sig_prev = sigma_spectrum(stages[-2].coords)+ sig_last = sigma_spectrum(stages[-1].coords)+ r = sig_last / np.maximum(sig_prev, 1e-9)+ s = np.maximum(1.0 + gamma * (r - 1.0), 1e-3)+ canon = canon * s+ axis_info = {+ "gamma": gamma,+ "sigma_prev": [round(float(v), 2) for v in sig_prev],+ "sigma_last": [round(float(v), 2) for v in sig_last],+ "r_j": [round(float(v), 4) for v in r],+ "s_j": [round(float(v), 4) for v in s],+ }+ coords = scale_to_rms(canon, target_rms).astype(np.float32) info = { "mech": "off" if mech_off else "on", "factor": factor,- "dt_ratio": float(ratio),+ "dt_ratio": None if ratio is None else float(ratio), "n": int(len(idx)), "pca": pca_diag, "rms_inputs": [round(r, 2) for r in radii], "rms_out": round(rms_radius(coords), 2), } info.update(delta_info)+ info.update(axis_info) if prev_e is not None: info["step"] = [prev_e["stage"], last_e["stage"], manifest["target"]["stage"]] print(json.dumps(info, default=float), file=sys.stderr)
调研来源?调研员查到并用到的知识条目和文献检索结果(只列标题和编号)。
用到的知识库条目
| 编号 | 标题 | 出处 |
|---|---|---|
| k007 | Interval staging and held-out-window filtering of external data | notes/official/来件/virtualembryo.ai/rules.md |
| k026 | Canonicalise predicted 3D coordinates before submission | notes/pitfalls/04_scorer_invariance.md |
| k016 | Degenerate-solution checks for population predictions | notes/handover/02_知识学习路线.md |
分析结果?分析员写的 ANALYSIS.json:改了什么、各组分数怎么变、假设是否成立、经验和下一步建议。
| 改了什么 | 实现 T2HX-05 逐主轴幅度趋势外推:对 prev/last 各取 PCA 谱(秩配对),r_j=σ_last/σ_prev,在各向同性缩放前对规范化坐标乘 s_j=1+γ(r_j−1),机制留在 VEC_GAMMA 开关后;proxy 探针证伪后按停止规则提交 γ=0,输出与父节点 13 逐字节一致(md5 相同)。顺带修复了父节点单输入视图 float(None) 崩溃 bug。Engineer 说法与变化量表一致(54.15=父分,四组 +0.00)。 |
|---|---|
| 各组分数的变化 | cell_state:噪声内/不变:50.00→50.00(+0.00),仍钉在 copy_last 地板。 expression_change:噪声内/不变:50.00→50.00(+0.00);机制本就不动表达,γ=1 探针下也恒为 50.00。 local_spatial:噪声内/不变:50.00→50.00(+0.00);γ=1 探针下仅 50.02(线性映射不动邻域,符合设计预期)。 shape_scale:提交值不变:66.60→66.60(+0.00);但机制打开时被证伪——探针 γ=0.5→60.84、γ=1.0→54.37(d2_shape 0.0489→0.0570,单调恶化);γ=−0.5→66.75(+0.15,在 1 分噪声内,且属打分器特化,未提交)。 |
| family_id | T2HX-05 |
| 假设是否成立 | 否 |
| 经验 |
|
| mechanism_active | 否 |
| 下一步建议 |
|
对话摘要?每个角色和大模型对话的统计:轮数、工具调用、用时、token 数和最后的回答摘录;原始记录只给路径。
只给统计和最后回答的摘录;完整对话请到原始记录位置里列出的文件看。
分析员
| 角色?调研员写计划、工程师改代码、分析员解读分数、审查员检查作弊。 | 分析员 alibaba-token-plan-cn/qwen3.8-max |
|---|---|
| 调用次数 | 1 次 |
| 轮数?大模型一共回复了几轮(每轮可以调用多个工具)。 | 4 |
| 工具调用?大模型调用读文件、执行命令等工具的次数,按工具名统计。 | 共 4 次:bash 3、write 1 |
| 用时 | 1 分 |
| token 数?输入 / 输出(含思考)的 token 数,来自接口返回的用量。 | 输入 18,133 · 输出 1,470 · 思考 2,367 |
| 任务(第一行) | 分析节点 n16 的打分结果,写 ANALYSIS.json |
| 最后的回答(摘录) | ANALYSIS.json written |
| 原始记录位置?完整对话记录在 Spark 上的文件路径;看板不复制原始内容。 | /home/spark-longxinyang/vec/runs/formal/20261003-070222-search-t2-heart-extrap-g24-D/nodes/16/analyst.jsonl 16 KB /home/spark-longxinyang/vec/runs/formal/20261003-070222-search-t2-heart-extrap-g24-D/nodes/16/analyst.stderr |
工程师
| 角色 | 工程师 alibaba-token-plan-cn/qwen3.8-max |
|---|---|
| 调用次数 | 1 次 |
| 轮数 | 31 |
| 工具调用 | 共 34 次:bash 24、edit 9、write 1 |
| 用时 | 11 分 |
| token 数 | 输入 65,041 · 输出 13,975 · 思考 13,963 |
| 任务(第一行) | 按计划修改程序:T2HX-05 逐主轴幅度趋势外推(各向异性形状)@node13 |
| 最后的回答(摘录) | All checks pass. Final state of `solution/`: `run.py` (GAMMA=0.0 committed, mechanism behind `VEC_GAMMA`), `METHOD.md`, `EXECUTION.json` (gpu=false). Verified: default output md5-identical to parent, vec-check ok, deterministic (seed 0/1 reruns), single-input fallback fixed (parent crashed on `float(None)`), disguised view (+1d time shift, renamed paths, shuffled manifest) gives byte-identical predictions. 4/20 queries used. **做了什么**:按 PLAN T2HX-05 实现逐主轴幅度趋势外推——对两输入阶段各取 PCA 谱(秩配对、旋转不变),r_j=σ_last/σ_prev,对各向同性缩放前的规范化坐标乘 s_j=1+γ(r_j−1);离线诊断确认 r_j=[0.558,0.610,0.751] 无极端值、两阶段特征帧轴置换(故用谱配对)。另修复了父节点单输入视图 `float(None)` 崩溃 bug。 **查分结果**:γ=1.0 → 51.10(shape_scale 54.37,d2_shape 0.0489→0.0570);γ=0.5 → 52.71;γ=−0.5(诊断)→ 54.18(+0.03,噪声内,且属打分器特化不提交);γ=0 对照与提交 → 54.15,输出逐字节=父节点。机制双向证伪,触发 PLAN 停止规则,提交族边界 γ=0。 **下一步最值得试**:坐标侧全局线性几何已 4 组饱和于 66.6(各向同性缩放最优,kNN 形变、各向异性混合、谱外推均负)。表达三组的 50.00 地板需要与 prev→last 差正交的信号源:用 external/ 的 Qiu E8.75 心脏细胞锚定跨样本技术差(−0.124 水平偏移是已证实的混淆主分量),或 prior/ 调控网络约束下的组成演化;每个方向先 1 次查分验证 de_direction 符号再投入。 |
| 原始记录位置 | /home/spark-longxinyang/vec/runs/formal/20261003-070222-search-t2-heart-extrap-g24-D/nodes/16/engineer.jsonl 174 KB /home/spark-longxinyang/vec/runs/formal/20261003-070222-search-t2-heart-extrap-g24-D/nodes/16/engineer.stderr |
调研员
| 角色 | 调研员 alibaba-token-plan-cn/qwen3.8-max |
|---|---|
| 调用次数 | 1 次 |
| 轮数 | 1 |
| 工具调用 | 共 0 次:— |
| 用时 | 4 分 |
| token 数 | 输入 13,257 · 输出 3,050 · 思考 8,192 |
| 任务(第一行) | 为节点 n16(改进,父节点 n13)写改进计划 PLAN.json |
| 最后的回答(摘录) | ivation": "父节点 13/12 的 cell_state、expression_change、local_spatial 三组均钉在 50.00(copy_last 地板),且『沿观测趋势外推表达』整族已有 5 组独立证伪(node4、node10、node13、方法卡 damped_shift、官方 pseudobulk_shift),ANALYSIS 明确不要再碰表达侧趋势族。唯一非地板、仍有上探空间的是 shape_scale=66.60,ANALYSIS 指出它被 d2_shape=0.0489 卡住,『只靠全局缩放无法再涨,需改变点云形状本身』。node6 曾试各向异性固定混合(w=0.35/0.7,净负),但那是把形状向各向同性收缩的固定权重,不是沿观测趋势外推;node9 的 kNN 残差形变改变的是局部相对几何且 proxy 上为负(54.15→53.92)。本方案改做各主轴幅度的趋势外推,是未测过的形状变体。", "approach": "1) 保留父节点全部:表达照抄末阶段、确定性 PCA 规范化、各向同性缩放到 0.946×max_k RMS。2) 新增机制(在最终各向同性缩放之前):对 prev 与 last 各自跑同一 pca_canonicalise,得各主轴标准差 σ_prev[j]、σ_last[j](sqrt 特征值);计算逐轴比值 r_j=σ_last[j]/σ_prev[j];对 last 的规范化坐标按轴乘 s_j=1+γ·(r_j−1),再做原各向同性缩放。这样只改变轴间比例(形状),γ 是趋势阻尼。3) γ 初值与搜索:先查 γ=1.0(一步趋势)与 γ=0.5 两个探针;若 shape_scale<66.0 立即停止并交 γ=0。范围上界 γ≤1(不外推超过一个观测步长,防发散)。4) 单输入退路:prev 不存在时无 σ_prev,γ 强制 0,输出=父节点。5) vec-score 快筛:每次只跑 proxy seed0,比较 shape_scale 与 d2_shape;用『首查 γ=1.0 若 shape_scale<66.0 即停』的停止规则控预算(照抄 node13 的纪律)。6) 视图无关:不读 board/时间,只用两输入阶段的协方差特征值,时间平移不变。", "expected_groups": ["shape_scale"], "risks": "a) 逐轴比值可能主要反映 prev/last 的样本技术差异而非生物形状趋势(与表达侧全局水平差同理)——Engineer 先看离线诊断:打印 r_j 各分量,若全部≈1(形状几乎没变)则机制无量可外推,直接交 γ=0 不耗查分;若某轴 r_j 极端(>2 或<0.5)提示技术噪声,降 γ 或放弃。b) PCA 主轴在两阶段间可能交换次序/方向,导致逐轴比值错配——用特征值降序配对并在日志打印轴对应;若错配严重则该机制不可靠。c) 与 node6 各向异性净负的先验冲突——若 γ=0.5 与 γ=1.0 均 ≤66.0,即视为与 node6 一致被证伪,交 γ=0。d) 查分噪声约 1 分,<1 分的变化不算进步,需看 d2_shape 方向确认。", "family_id": "T2HX-05", "mechanism": "把标量尺度趋势推广到逐主轴幅度:在 PCA 规范帧内,沿观测到的 prev→last 各主轴标准差比值做阻尼外推(s_j=1+γ(r_j−1)),只改轴间比例即点云形状,不动表达、不动相对邻域。", "vs_constant_shift": "不是每型常数位移(不动表达、不动细胞),也不是全局各向同性重缩放(那是父节点已做的 0.946×maxRMS);它按每条主轴各自的数据驱动比值缩放,不同轴位移系数不同,因此改变的是形状(轴比)而非单一尺度。", "mechanism_evidence": "Engineer 打印:各轴 σ_prev、σ_last、r_j(确认形状确有变化且方向合理)、γ>0 时逐轴 s_j≠1、d2_shape 与 shape_scale 相对 γ=0 的变化;并报告四组分各自增减。若 r_j 全≈1 说明机制无量可动,应如实报告。", "mechanism_off_control": "同一程序设 γ=0(或 VEC_GAMMA=0/VEC_MECH_OFF=1):s_j 全为 1,坐标管线退化为父节点,输出应逐字节等于父节点 12(54.15,50/50/50/66.60)。预期差别:γ>0 时仅 shape_scale 与 local_spatial 可能变化,表达三组不变。", "sources": [] } ``` |
| 原始记录位置 | /home/spark-longxinyang/vec/runs/formal/20261003-070222-search-t2-heart-extrap-g24-D/nodes/16/researcher.jsonl 12 KB /home/spark-longxinyang/vec/runs/formal/20261003-070222-search-t2-heart-extrap-g24-D/nodes/16/researcher.stderr |