总览 · ← 返回运行 20261003-172000-search-t2-heart-extrap-chain-12h
节点 n40
型内中位再闭合(封顶±3×)+逐基因伪批量精确复原:保留位移导致的型间总量结构、同时 dp 与父节点逐位一致,机制只能在细胞间再分配表达
| 运行?一次完整的自动搜索或 Agent 会话,有自己的锁定配置和证据包。 | 20261003-172000-search-t2-heart-extrap-chain-12h |
|---|---|
| 父节点 | n35 |
| 子节点 | n42 |
| 操作?种子:人写的起点;改进:在父节点上改;草稿:从头写;修复:修父节点的报错。 | 改进 |
| 状态 | 已打分 |
| 分数 | 搜索目标分 57.59(+0.5) · proxy_noscale 57.59(+0.5) · 3 次复测均分 57.60 |
| 审查 | 通过 1 越界读取:未发现问题——run.py 仅通过 src.task2_spatial.view_io 的 load_manifest/read_stage/panel_genes 读 manifest 给定输入(run.py:327-335,621-641),无绝对路径/../、/mnt、external、prior、打分器路径访问,无联网。; 2 硬编码目标统计量:未发现问题——所有数值常量(alpha=1、gamma=1.35、cap=3.0、PBC=10 等,run.py:337-386)为算法调参而非目标阶段统计量;型内中位、全局中位、封顶界、pb 目标均在运行时从视图输入计算(ru… |
| 用时?从运行开始到结束(或到现在)的挂钟时间。 | 55 分 |
| 程序版本 | 40f41eea767dbf13bd17d5f016e72c1a969446b9 (programs.git) |
方法说明?节点程序自带的 METHOD.md:这个程序做了什么、为什么。
来自 programs.git 40f41eea76:solution/METHOD.md
型内中位再闭合(封顶±3×)+逐基因伪批量精确复原:保留位移导致的型间总量结构、同时 dp 与父节点逐位一致,机制只能在细胞间再分配表达
方法族与谱系
- family_id: T2HX-01(按型伪批量乘法外推),父节点 35,管线其余全部冻结(copy_last 基座、ε=0.1 两步底物平滑、rel 速度 v_t=(m_a−m_p)/(m_p+1)、k=0.5 软阈值、α=1、γ=1.35 几何再闭合、β_rec=0.15 场平滑+电平中性、PBC=10、双硬门控、坐标/行序/细胞数/组成不动)。
- 本节点唯一改动:再闭合参考点
s_i=(r_ref_i/r̃_i)^γ中的r_ref_i,以及一层伪批量复原保护。
提交配置(默认值已烧进 run.py)
- 型内参考(
VEC_REC_SCOPE=type):r_ref_i= 细胞 i 所属型内平滑总量比场 r̃ 的中位数;型内锚细胞 <30(VEC_REC_TYPE_MIN)时用全局中位数(PLAN 风险 1 的守卫)。 - 封顶(
VEC_REC_CAP=3.0):型内中位数夹到 [全局/3, 全局×3]。本视图上原始型内中位数跨 0.44×–44823×全局(Allantois 8×10⁴、SOM 5916、Neural Tube 332)——不封顶时高速型细胞被留在 PBC=10× 钳位上(19% 细胞钳死),DE 崩塌的直接来源。 - 伪批量精确复原(
VEC_PB_RESTORE=1,20 次对数域 Newton,残差 ≤2e-15):并行跑一遍全局参考(=父节点 35 逐位)的再闭合+PBC 得到目标逐基因 pb;型内参考输出在 PBC 之后按逐基因单一列因子缩放,使最终 pb 与父节点精确相等。因此 dp、de_score、de_direction 逐位保持父节点值(实测两项 raw 0.2778/0.3839 与父完全一致),机制只能在每个基因列内部再分配细胞间表达,无法倾斜群体均值。列因子保零模式(支撑集两路相同)、不引入任何拟合常数(两路都是输入数据的纯函数)。
PLAN 机制的证否记录(不封顶的 λ 混合,PLAN 原样实现)
守卫(PLAN 给定):nb_mmd raw ≤0.0820、de_direction ≥0.383、de_score ≥0.2778。A 半查分(评分器确定性已复核:同一文件重查逐位同分):
| 配置 | A半总分 | de_score | de_direction | mmd_u | variogram | nb_mmd | 守卫 |
|---|---|---|---|---|---|---|---|
| 父节点 35 | 56.869 | 0.2778 | 0.3839 | 0.04853 | 0.035414 | 0.08093 | — |
| λ=0.15 | 55.981 | 0.2222 | 0.3379 | 0.04770 | 0.040441 | 0.08200 | DE 双破 |
| λ=0.3 | 56.017 | 0.2222 | 0.3327 | 0.04696 | 0.040987 | 0.08130 | DE 双破 |
| λ=0.5 | 56.009 | 0.2222 | 0.3175 | 0.04616 | 0.041623 | 0.08056 | DE 双破 |
| λ=1.0 | 55.633 | 0.1667 | 0.2684 | 0.04564 | 0.042577 | 0.07925 | DE 双破 |
mmd_u 按 PLAN 预期单调改善、nb_mmd 也改善,但 de_direction/de_score 随 λ 单调崩塌(型间亮度倾斜直接搬动群体伪批量),variogram 同步变差,λ 全网格远低于父节点——PLAN 原样机制证否(4 个幅度 + 下方封顶 2 个解码,共 ≥6 次查分)。
PLAN 动机的事实性修正:锚阶段每个细胞的线性总量精确 =1e4(CP10k),31 个型的型内中位总量全部逐位相同(运行时实测,CV=0)。“真值中型间总量有天然差异”在本数据里不成立;r̃ 的型间差异完全来自速度导致的位移膨胀。机制仍然有效,但生效通道是“保留与位移幅度成比例的型级总量结构”,不是恢复什么天然差异。
提交解码的查分(封顶 + pb 复原)
| 配置 | A半总分 | mmd_u | variogram | nb_mmd | DE 两项 |
|---|---|---|---|---|---|
| cap1.5+restore | 57.190 | 0.04699 | 0.035649 | 0.07778 | 逐位=父 |
| cap2+restore | 57.290 | 0.04669 | 0.035783 | 0.07661 | 逐位=父 |
| cap2.5+restore | 57.317 | 0.04649 | 0.035883 | 0.07633 | 逐位=父 |
| cap3+restore(提交) | 57.332 | 0.04630 | 0.035963 | 0.07621 | 逐位=父 |
| λ=1 不封顶+restore | 57.271 | 0.04590 | 0.036896 | 0.07635 | 逐位=父 |
| cap3+restore+γ=1.45 | 57.323 | 0.04669 | 0.035297 | 0.07629 | 0.2639/0.3900 |
cap 曲线在 3.0 处内部峰值(+0.463 A半 vs 父),γ=1.45 持平(de_score −1 量化步)故保 γ=1.35。分组:cell_state mmd_u 升(PLAN 目标 ≤0.046 达成)、variogram 微付;local_spatial nb_mmd 0.08093→0.07621 为全树最佳且随机制强度跨 5 个解码单调(父→cap1.5→cap2→cap2.5→cap3→不封顶:0.08093/0.07778/0.07661/0.07633/0.07621/0.07635)——结构性而非噪声;expression_change 逐位冻结;shape_scale 坐标冻结=地板。细胞总量中位 1.825×→~1.5× 基线,更靠近实测阶段的 CP10k 不变量(与节点 35 拒绝的“提亮”方向相反)。
机制生效证据(对照 PLAN mechanism_evidence)
- 型间 r̃ 中位比跨 0.44×–44823×(CV=5.12)≫10% —— 机制有作用空间(但来源是速度膨胀,见上)。
- mmd_u raw 0.04853→0.04630(skill 0.551→0.558,+0.11 pts);nb_mmd raw −0.0047(skill +0.014,+0.22 pts,权重 25)。
- 型间总量结构:父节点输出各型中位总量被压向共同水平;提交版按位移幅度恢复型级差(封顶后 ≤3^γ≈5.5×,pb 复原后基因均值不变、型间相对差保留在列内)。
- de_score/de_direction 逐位不变(pb 最大残差 1.8e-15)——改动不触碰基因排序,与 PLAN 判据一致。
- 关闭对照:
--ablate <任意名>(含mechanism、rec_scope)→ 型内参考与 pb 复原同时关闭 → 输出与父节点 35 逐位相同(h5 data/indptr/坐标 array_equal 验证);VEC_REC_SCOPE=global等效。harness 对照运行将得到 mechanism_active=yes 的逐位差异证据。
验证过 / 未验证
- 已验证:seed 0/1/2 逐位一致(锚阶段 ≤ max_cells,逐位与 seed 无关);伪装视图(时间统一 +1、manifest 键序打乱、换路径)逐位一致;单输入视图退路 = copy_last(合成单输入视图实测,vec-check 过);
vec-check通过;8.1s / 1.88GB(限值 30min / 28GB)。 - 未验证:B 半与真实 final 视图(本地无法检验;nb_mmd/mmd_u 增益为跨解码单调的结构性位移,预期可迁移,但幅度未知);TYPE_MIN=60(不封顶档实测与 30 无差,封顶使极端小型失效);REC_TYPE_MIN 在 final 视图上的小样本型行为(已由 cap 兜底)。
- 查分台账:18/20 已用。其中 3 次浪费在
VEC_REC_SCOPE默认值笔误("dist" 静默落入 global 分支,输出与父逐位相同仍被送分)——教训:查分前必须先离线确认输出与父逐位不同;1 次用于复核评分器确定性。
知识来源
无外部生物学知识条目;全部量为运行时从视图输入计算(型内中位、全局中位、封顶界、pb 目标、PBC 界),无任何阶段特异常数、无绝对发育时间(只用 manifest 输入的先后与时间差)。PLAN sources 为空,一致。
调研员的计划
| 名称 | 型内中位再闭合:恢复型间总量异质性改善 mmd_u |
|---|---|
| 动机 | 父节点35的 mmd_u raw=0.04751(skill 0.551),显著差于节点31的0.04464(γ=0.45时)。节点33将γ从0.45推到1.35后 de_direction/de_score 大幅改善(0.3213→0.3763),但 mmd_u 从0.04464恶化到0.04782——γ越大,逐细胞总量越被压向全局中位数,抹平了不同细胞型之间天然的总量水平差异。真值中不同型(心肌、内皮、间质等)的细胞大小/总量有系统差异,全局再闭合把这个型间信号压掉了,导致细胞状态分布(mmd_u)偏离。cell_state组58.92是除地板形状组外最弱的可动组。 |
| 做法 | 在父节点35管线上只改再闭合步骤的参考点:将 s_i=(r_med_global/r̃_i)^γ 改为 s_i=(r_med_type(i)/r̃_i)^γ,其中 r_med_type(i) 是细胞 i 所属型内所有锚细胞的总量比中位数。实现步骤:(1) 在再闭合前按型分组计算 r̃ 的中位数 r_med_t;(2) 对型 t 中每个细胞用 s_i=(r_med_t/r̃_i)^γ;(3) 其余全部冻结(α=1, k=0.5, γ=1.35, ε=0.1, β_rec=0.15, SMOOTH_STEPS=2, K=15, PBC=10, 门控)。环境变量 VEC_REC_SCOPE=type|global 控制开关(默认type,global退化为父节点)。单输入阶段退路不变(逐位回退copy_last)。若 type 版 mmd_u 改善但 nb_mmd 恶化超守卫,试折中方案:r_ref_i = (1-λ)·r_med_global + λ·r_med_type(i),λ∈{0.3,0.5,0.7,1.0}。守卫:nb_mmd raw≤0.0820、de_direction≥0.383、de_score≥0.2778。预计3-5次查分(type/1.0 + λ网格3档 + 可能的γ微调1档)。 |
| 风险 | (1) 型内细胞数少(<50)的型中位数不稳,可加守卫:型内细胞<30时该型用全局中位;(2) 恢复型间总量差异可能在型边界处制造表达不连续,恶化 nb_mmd——用守卫≤0.0820监控,若破线则用λ折中;(3) 型间总量差异可能不是 mmd_u 恶化的主因(可能是型内宽度问题),此时机制无效但无副作用(γ不变、DE不变)——Engineer 第一次查分即可判断:若 mmd_u 不动(±0.001内)则假设不成立,按边界规则提交机制关态。尽早发现方式:先离线算型间总量比中位数的变异系数(若<5%则说明型间差异本就小,机制无空间)。 |
代码改动?这个节点的程序和父节点程序的逐行差别:绿色是新增,红色是删除。
对比:父节点版本 b7b5f10d06。改动的文件:solution/METHOD.md +41 −61、solution/README.md +17 −20、solution/run.py +170 −16
diff --git a/solution/METHOD.md b/solution/METHOD.mdindex a44397b..dd8037a 100644--- a/solution/METHOD.md+++ b/solution/METHOD.md@@ -1,79 +1,59 @@-再闭合场 log(r_i) 在坐标15-NN上低通(β=0.15)并按数据自算中位总量电平中性化;de_direction/de_score/mmd_u 升、nb_mmd 略升(该项假设被证否)+型内中位再闭合(封顶±3×)+逐基因伪批量精确复原:保留位移导致的型间总量结构、同时 dp 与父节点逐位一致,机制只能在细胞间再分配表达 -- family_id: T2HX-01(承父节点 33:rel 速度乘法外推 + 几何再闭合,坐标/行序/细胞数/组成冻结)-- parent: node 33(A 半 56.792,节点分 57.04)-- 本节点 A 半 56.869(+0.077);查分 19/20 次,明细见下表+## 方法族与谱系 -## 1. 方法+- family_id: T2HX-01(按型伪批量乘法外推),父节点 35,管线其余全部冻结(copy_last 基座、ε=0.1 两步底物平滑、rel 速度 v_t=(m_a−m_p)/(m_p+1)、k=0.5 软阈值、α=1、γ=1.35 几何再闭合、β_rec=0.15 场平滑+电平中性、PBC=10、双硬门控、坐标/行序/细胞数/组成不动)。+- 本节点唯一改动:再闭合参考点 `s_i=(r_ref_i/r̃_i)^γ` 中的 `r_ref_i`,以及一层伪批量复原保护。 -在父节点管线上只加一个作用点:几何再闭合的**输入场**从"逐细胞原始总量比 r_i"换成"在锚坐标 15-NN 图上扩散 1 步后的 r̃_i"(权重 β_rec),再算 s_i=(r_med/r̃_i)^γ。-扩散非中位数守恒,原始做法会同时**提亮**整个预测(Jensen:中位线性总量 1.825→2.386)。为把机制与电平副作用分开,加了 `VEC_REC_LEVEL=matched`:把平滑场的每细胞线性总量中位数**重标定回未平滑场所给的值**(两个量都在运行时从输入数据算出,无任何拟合常数),因此机制只能改场的**形状**、不能改库大小电平。+## 提交配置(默认值已烧进 run.py) -其余全部冻结:α=1、k=0.5、γ=1.35、ε=0.1、SMOOTH_STEPS=2、K=15、PBC=10、门控(std 比 ≥0.01、spearman ≥0.3)、坐标/行序/细胞数/组成。单输入阶段或锚≠末输入时逐位回退 copy_last(承父)。+1. **型内参考**(`VEC_REC_SCOPE=type`):`r_ref_i` = 细胞 i 所属型内平滑总量比场 r̃ 的中位数;型内锚细胞 <30(`VEC_REC_TYPE_MIN`)时用全局中位数(PLAN 风险 1 的守卫)。+2. **封顶**(`VEC_REC_CAP=3.0`):型内中位数夹到 [全局/3, 全局×3]。本视图上原始型内中位数跨 0.44×–44823×全局(Allantois 8×10⁴、SOM 5916、Neural Tube 332)——不封顶时高速型细胞被留在 PBC=10× 钳位上(19% 细胞钳死),DE 崩塌的直接来源。+3. **伪批量精确复原**(`VEC_PB_RESTORE=1`,20 次对数域 Newton,残差 ≤2e-15):并行跑一遍全局参考(=父节点 35 逐位)的再闭合+PBC 得到目标逐基因 pb;型内参考输出在 PBC 之后按逐基因单一列因子缩放,使最终 pb 与父节点**精确相等**。因此 dp、de_score、de_direction 逐位保持父节点值(实测两项 raw 0.2778/0.3839 与父完全一致),机制只能在每个基因列内部**再分配**细胞间表达,无法倾斜群体均值。列因子保零模式(支撑集两路相同)、不引入任何拟合常数(两路都是输入数据的纯函数)。 -## 2. 机制生效证据(`--ablate` 对照)+## PLAN 机制的证否记录(不封顶的 λ 混合,PLAN 原样实现) -- `--ablate mechanism`(也测了 `--ablate rec_field_smoothing`)→ 输出与父节点 33 **逐位相同**(X 与坐标 array_equal=True),即关掉机制精确回到父行为;不带参数时输出与父**不同**(X 改变、坐标逐位不变)→ mechanism_active=yes。-- 平滑确实运行且去除了高频:型内 std(log r) 3.139 → 2.921(β=0.08)/ 2.737(0.15)/ 2.367(0.3)/ 1.928(0.5),单调下降;中位线性总量由构造固定为 1.825(与父相同)。-- 四组分变化(A 半,β=0.15 vs 父):expression_change 59.83→60.29(**升**,de_score 0.2639→0.2778 即 +1 量化步、de_direction 0.3730→0.3839);cell_state 58.53→58.59(**升**,mmd_u 0.04888→0.04853 变好,variogram 0.035314→0.035414 基本持平);local_spatial 58.80→58.60(**降**,nb_mmd 0.08025→0.08093 变差);shape_scale 50.00→50.00(坐标冻结,三项 raw 逐位相同,结构门保持 1:nb_mmd skill 0.586 > 0.5)。+守卫(PLAN 给定):nb_mmd raw ≤0.0820、de_direction ≥0.383、de_score ≥0.2778。A 半查分(评分器确定性已复核:同一文件重查逐位同分): -## 3. PLAN 的核心假设被证否(nb_mmd 方向)+| 配置 | A半总分 | de_score | de_direction | mmd_u | variogram | nb_mmd | 守卫 |+|---|---|---|---|---|---|---|---|+| 父节点 35 | 56.869 | 0.2778 | 0.3839 | 0.04853 | 0.035414 | 0.08093 | — |+| λ=0.15 | 55.981 | 0.2222 | 0.3379 | 0.04770 | 0.040441 | 0.08200 | DE 双破 |+| λ=0.3 | 56.017 | 0.2222 | 0.3327 | 0.04696 | 0.040987 | 0.08130 | DE 双破 |+| λ=0.5 | 56.009 | 0.2222 | 0.3175 | 0.04616 | 0.041623 | 0.08056 | DE 双破 |+| λ=1.0 | 55.633 | 0.1667 | 0.2684 | 0.04564 | 0.042577 | 0.07925 | DE 双破 | -PLAN 预期平滑能收回 mmd_u 与 nb_mmd。实测:**nb_mmd 随 β_rec 单调变差**,mmd_u 只在 β_rec ≤0.15 略微变好。电平中性后的纯机制效应(A 半):+mmd_u 按 PLAN 预期单调改善、nb_mmd 也改善,但 de_direction/de_score 随 λ **单调崩塌**(型间亮度倾斜直接搬动群体伪批量),variogram 同步变差,λ 全网格远低于父节点——PLAN 原样机制证否(4 个幅度 + 下方封顶 2 个解码,共 ≥6 次查分)。 -| β_rec | 榜分 | de_score | de_direction | mmd_u | variogram | nb_mmd |-|---|---:|---:|---:|---:|---:|---:|-| 0(父 33) | 56.792 | 0.2639 | 0.3730 | 0.04888 | 0.035314 | 0.08025 |-| 0.08 | 56.758 | 0.2500 | 0.3810 | 0.04856 | 0.035400 | 0.08056 |-| **0.15(提交)** | **56.869** | **0.2778** | **0.3839** | **0.04853** | 0.035414 | 0.08093 |-| 0.30 | 56.762 | 0.2778 | 0.3841 | 0.04928 | 0.035200 | 0.08199 |-| 0.50 | 56.501 | 0.2639 | 0.3822 | 0.05090 | 0.034868 | 0.08358 |+**PLAN 动机的事实性修正**:锚阶段每个细胞的线性总量精确 =1e4(CP10k),31 个型的型内中位总量全部逐位相同(运行时实测,CV=0)。“真值中型间总量有天然差异”在本数据里不成立;r̃ 的型间差异完全来自**速度导致的位移膨胀**。机制仍然有效,但生效通道是“保留与位移幅度成比例的型级总量结构”,不是恢复什么天然差异。 -选 β=0.15 的理由(按 PLAN 步骤 6:总分差在 1 分噪声内时以连续量与量化步判收益,不以总分判):de_direction 在**全部 4 个幅度**上都 +0.008~+0.011(连续量、电平受控的偏相关,高于历史 ±0.01 抖动 → 结构性而非噪声);de_score +1 量化步;mmd_u 为本档最佳;variogram 持平;榜分为网格内点最大。代价是 nb_mmd −0.00068 raw(skill 仍远高于 0.5,门不触发)。+## 提交解码的查分(封顶 + pb 复原) -## 4. 被拒的"提亮"方向(重要,供后续节点)+| 配置 | A半总分 | mmd_u | variogram | nb_mmd | DE 两项 |+|---|---|---|---|---|---|+| cap1.5+restore | 57.190 | 0.04699 | 0.035649 | 0.07778 | 逐位=父 |+| cap2+restore | 57.290 | 0.04669 | 0.035783 | 0.07661 | 逐位=父 |+| cap2.5+restore | 57.317 | 0.04649 | 0.035883 | 0.07633 | 逐位=父 |+| **cap3+restore(提交)** | **57.332** | **0.04630** | 0.035963 | **0.07621** | 逐位=父 |+| λ=1 不封顶+restore | 57.271 | 0.04590 | 0.036896 | 0.07635 | 逐位=父 |+| cap3+restore+γ=1.45 | 57.323 | 0.04669 | 0.035297 | 0.07629 | 0.2639/0.3900 | -未做电平中性时,β_rec=0.3/0.5/1.0/2步 的榜分是 57.016/57.017/56.595/56.917,看起来"有效"。诊断证明**收益全部来自提亮副作用,与平滑无关**:+cap 曲线在 3.0 处内部峰值(+0.463 A半 vs 父),γ=1.45 持平(de_score −1 量化步)故保 γ=1.35。分组:cell_state mmd_u 升(PLAN 目标 ≤0.046 达成)、variogram 微付;local_spatial nb_mmd 0.08093→0.07621 为**全树最佳**且随机制强度跨 5 个解码单调(父→cap1.5→cap2→cap2.5→cap3→不封顶:0.08093/0.07778/0.07661/0.07633/0.07621/0.07635)——结构性而非噪声;expression_change 逐位冻结;shape_scale 坐标冻结=地板。细胞总量中位 1.825×→~1.5× 基线,**更靠近**实测阶段的 CP10k 不变量(与节点 35 拒绝的“提亮”方向相反)。 -| 配置 | 榜分 | de_score | de_direction | mmd_u | variogram | nb_mmd | 中位总量 |-|---|---:|---:|---:|---:|---:|---:|---:|-| 父 33 | 56.792 | 0.2639 | 0.3730 | 0.04888 | 0.035314 | 0.08025 | 1.825× |-| 纯常数提亮 ×1.31(无平滑) | **57.143** | 0.3194 | 0.3768 | 0.04631 | 0.036564 | 0.08007 | 2.390× |-| β=0.5 未中性化 | 57.017 | 0.3333 | 0.3890 | 0.04755 | 0.036114 | 0.08285 | 2.386× |-| β=0.5 电平中性 | 56.501 | 0.2639 | 0.3822 | 0.05090 | 0.034868 | 0.08358 | 1.825× |+## 机制生效证据(对照 PLAN mechanism_evidence) -不做平滑、只乘常数的提亮**比机制本身分更高**(57.143 > 57.017),且 de_direction(控制 pb(ref) 秩的偏相关)几乎不动(+0.004)而动的是 de_score(其 chance 校正按 ±pb(ref) 排序,对电平倾斜校正不完全)。已发布阶段的 CP10k 不变量要求每细胞线性总量恒为 10^4;父节点已是 1.83×,提亮到 2.39× 进一步偏离,没有生物学解读,只有指标实现层面的解读;本外推尺子又已知高估(历史本地 54.2 → 官网 49.6)。故按"不针对打分器实现细节优化"的规则**拒绝提交**该方向,改用数据自算的电平中性化。+1. 型间 r̃ 中位比跨 0.44×–44823×(CV=5.12)≫10% —— 机制有作用空间(但来源是速度膨胀,见上)。+2. mmd_u raw 0.04853→0.04630(skill 0.551→0.558,+0.11 pts);nb_mmd raw −0.0047(skill +0.014,+0.22 pts,权重 25)。+3. 型间总量结构:父节点输出各型中位总量被压向共同水平;提交版按位移幅度恢复型级差(封顶后 ≤3^γ≈5.5×,pb 复原后基因均值不变、型间相对差保留在列内)。+4. de_score/de_direction 逐位不变(pb 最大残差 1.8e-15)——改动不触碰基因排序,与 PLAN 判据一致。+5. 关闭对照:`--ablate <任意名>`(含 `mechanism`、`rec_scope`)→ 型内参考与 pb 复原同时关闭 → 输出与父节点 35 **逐位相同**(h5 data/indptr/坐标 array_equal 验证);`VEC_REC_SCOPE=global` 等效。harness 对照运行将得到 mechanism_active=yes 的逐位差异证据。 -## 5. 其他备选机制(均已实测证否,代码保留、默认关)+## 验证过 / 未验证 -1. **事后平滑(伪批量精确复原)**:位移+再闭合+PBC 之后再做一次支撑掩码扩散,逐基因列缩放精确复原伪批量(pb 最大相对差 9.3e-15 → dp 逐位不变 → de_score/de_direction **按构造**保持 0.2639/0.3730)。ε_post 0.15/0.3/0.5/0.7 → 56.582/56.365/55.985/55.470,nb_mmd 0.08110/0.08292/0.08706/0.09335 **单调变差**:位移之后的额外局部相干性是过度平滑,父节点 ε=0.1 已在最优附近。(`VEC_POST_EPS`)-2. **PLAN 指定的兜底 PBC∈{8,12}**:在 γ=1.35/ε=0.1 下钳制**完全不激活**(cap ≥ 4 时 clamped_frac=0.0000),4/6/8/12 都是逐位空操作;只有 cap ≤3 起作用(PBC=3:钳 1.41% 细胞 → 56.790,与父持平)。该兜底在本基座上是死方向。-3. **速度软阈值 k=0.4**(PLAN 兜底另一支)→ 56.735,de_score 0.2500(−1 量化步)。-4. **底物平滑邻域宽度 SMOOTH_K=30** → 56.778,与父持平(nb_mmd 0.08032)。-5. **底物 ε 提到 0.25/0.4 + 场平滑**:中位总量涨到 2.49×/3.49×、钳制 0.2%/7.7%,收益完全被提亮支配,未提交(离线诊断后放弃,未耗查分)。+- 已验证:seed 0/1/2 逐位一致(锚阶段 ≤ max_cells,逐位与 seed 无关);伪装视图(时间统一 +1、manifest 键序打乱、换路径)逐位一致;单输入视图退路 = copy_last(合成单输入视图实测,vec-check 过);`vec-check` 通过;8.1s / 1.88GB(限值 30min / 28GB)。+- 未验证:B 半与真实 final 视图(本地无法检验;nb_mmd/mmd_u 增益为跨解码单调的结构性位移,预期可迁移,但幅度未知);TYPE_MIN=60(不封顶档实测与 30 无差,封顶使极端小型失效);REC_TYPE_MIN 在 final 视图上的小样本型行为(已由 cap 兜底)。+- 查分台账:18/20 已用。其中 3 次浪费在 `VEC_REC_SCOPE` 默认值笔误("dist" 静默落入 global 分支,输出与父逐位相同仍被送分)——**教训:查分前必须先离线确认输出与父逐位不同**;1 次用于复核评分器确定性。 -## 6. 验证过什么+## 知识来源 -- 父节点复现:默认关闭机制时 A 半 56.792、八项 raw 与父节点记录逐项一致。-- `--ablate` 逐位回父(X 与坐标);机制开启时 X 改变、坐标逐位不变。-- 格式:`vec-check --task T2:heart:val_extrap/proxy_noscale` 在 seed 0/1/2 与 ablate 输出上均 `{status: ok, errors: []}`;n_obs=24826 ∈ [1000, 25179],500 基因按 genes.txt 同序,X 有限无 NaN/Inf。-- **视图无关**:构造伪装视图(换路径 `/tmp/...`、manifest 键序打乱并重排版、所有输入/目标/external 阶段时间统一 +1 天)重跑,X 与坐标与真实视图**逐位相同**。-- **确定性**:seed 0/1/2 输出逐位相同(锚阶段细胞数 ≤ max_cells,分层 take 返回全部行);无全局随机状态,15-NN 图由 cKDTree 确定构建。-- 资源:CPU ~2–3 s、峰值 <1.5 GB(`EXECUTION.json {"gpu": false}`),远低于 limits(28 GB / 30 min)。--## 7. 没验证什么 / 风险--- 提交档总收益 +0.077 **在 1 分噪声之内**;依据是 de_direction 连续量在 4 个幅度上一致上升 + de_score 一个量化步 + mmd_u 变好,不是总分。B 半可能落在父节点之下。-- nb_mmd 仍变差(PLAN 的目标之一未达成)。de_direction 的上升与 nb_mmd 的下降在本基座上同向出现,二者可能有共同成因(再闭合场的空间结构),未分离。-- 只在心脏外推代理括号(E8.25+E8.75→E9.5)上验证;该尺子已知高估外推收益。final 视图(两输入)走同一条代码路径,但真实括号的上一步方向由程序现场从输入算,未实测。-- 查分额度已用尽(19/20 + 1 次被拒的 vec-check 调用),提交档只跑了 seed 0;未做多种子查分复核。--## 8. 知识来源--未使用任何外部生物学知识、文献、数据库或记忆中的阶段测量值;`sources: []`(承 PLAN)。程序所有量(速度、总量比、中位数、15-NN 图、列缩放因子、电平中性化因子)都在运行时从 manifest 指定的输入阶段现场计算,无硬编码阶段名、细胞数、比例、尺寸或任何由已发布阶段测量值导出的常数。--## 9. 下一步建议--1. nb_mmd 是当前唯一恶化项且权重最大(25 分 + 结构门)。本节点已排除"任何形式再加平滑"(事前底物 ε↑、事后 ε_post、场平滑 β↑ 三个作用点全部单调变差),说明该基座的局部结构已过度平滑;应改从**位移场本身**入手(例如按型速度的空间相干化,即 VDIFF 在新基座 (γ1.35, ε0.1) 上重试——旧基座证否过,新基座未试)。-2. de_direction 在 β≥0.15 已进入平台(0.3839/0.3841/0.3822),提示场平滑对 DE 排序的贡献已饱和;expression_change 的进一步收益应来自 γ×ε 的未探区(1.35–1.5 之间)或速度估计器,而不是再闭合场。-3. 请勿再用"提亮"(线性域整体放大)取分:本节点已量化其对 de_score 的杠杆(+0.055)与其非物理性(违反 CP10k 不变量),属于打分器实现层面的收益。+无外部生物学知识条目;全部量为运行时从视图输入计算(型内中位、全局中位、封顶界、pb 目标、PBC 界),无任何阶段特异常数、无绝对发育时间(只用 manifest 输入的先后与时间差)。PLAN sources 为空,一致。diff --git a/solution/README.md b/solution/README.mdindex 068cbbb..14cbc78 100644--- a/solution/README.md+++ b/solution/README.md@@ -1,23 +1,20 @@-# 空间低通再闭合场(电平中性)+ 几何均值再闭合 rel 速度乘法外推(T2:heart:val_extrap,T2HX-01,节点35)+# 型内中位再闭合(封顶±3×)+ 伪批量精确复原(T2:heart:val_extrap,T2HX-01,节点40) -copy_last 基座(坐标/行序/细胞数/组成冻结)承自节点 33:锚阶段表达先在坐标 15-NN 图上做两步支撑掩码-扩散平滑(ε=0.1,零模式逐位保留,逐基因列缩放复原伪批量),再按共有细胞型的相对差速度-v_t=(m_a−m_p)/(m_p+1) 做乘法位移 x′=x_smoothed·2^(α·v̂_t)(α=1,k=0.5 MAD 软阈值),门控-(std 比 ≥0.01、spearman ≥0.3)通过后做几何再闭合 s_i=(r_med/r_i)^γ(γ=1.35)与 PBC=10 钳亮尾。+copy_last 基座(坐标/行序/细胞数/组成冻结)承自节点 35:锚阶段表达先在坐标 15-NN 图上做两步支撑掩码+扩散平滑(ε=0.1,保零模式,逐基因列缩放复原伪批量),按共有型 rel 速度 v_t=(m_a−m_p)/(m_p+1)+乘法位移 x′=x·2^(α·v̂_t)(α=1,k=0.5 软阈值),过双硬门控后做几何再闭合 s_i=(r_ref/r̃_i)^γ+(γ=1.35,r̃ 为 β_rec=0.15 空间低通+电平中性的总量比场),PBC=10 钳亮尾。 -**节点 35 改动**:再闭合的输入场从"逐细胞原始总量比 r_i"换成"在坐标 15-NN 图上扩散 1 步后的 r̃_i"-(β_rec=0.15),并把平滑场的每细胞线性总量中位数**按数据自算**重标定回未平滑场所给的值-(`VEC_REC_LEVEL=matched`,无拟合常数)——机制只改场的形状,不改库大小电平。-proxy_noscale A 半 56.869(父 56.792):de_direction 0.3730→0.3839(连续量、4 个幅度上一致上升)、-de_score 0.2639→0.2778(+1 量化步)、mmd_u 0.04888→0.04853(变好)、variogram 持平、-nb_mmd 0.08025→0.08093(变差,PLAN 在该项的假设被证否);结构门保持 1。+**节点 40 改动**:再闭合参考 r_ref 从全局中位改为**型内中位**(封顶 [1/3,3]×全局,型内 <30 细胞退回全局),+并在 PBC 之后按逐基因列因子(对数域 Newton,20 步,残差≤2e-15)把伪批量**精确复原**到并行计算的全局参考+(=父节点)输出上:dp、de_score、de_direction 逐位保持父值,机制只能在基因列内部再分配细胞间表达。+proxy_noscale A 半 56.869→57.332:nb_mmd 0.08093→0.07621(全树最佳,跨 5 个解码单调)、+mmd_u 0.04853→0.04630、variogram 0.035414→0.035963(小代价)、DE 两项逐位不变、形状组地板不变。 -- 运行:`python run.py --data <view> --out <pred.h5ad> --seed <int>`;CPU ~3s、<1.5GB(`EXECUTION.json gpu:false`)。-- 关闭对照:`--ablate <任意名>` → β_rec=0 且事后平滑关闭 → 输出逐位 = 节点 33(已验证)。-- 已证否(默认关,代码保留,明细见 METHOD.md):**再闭合场平滑对 nb_mmd 的假设**(β↑ 时 nb_mmd 单调变差)、- **提亮方向**(不做电平中性时收益全部来自库大小膨胀;纯常数 ×1.31 得 57.143 比机制本身更高,但违反 CP10k- 不变量、只在 de_score 的 chance 校正缺口上起作用,已拒绝提交)、事后伪批量守恒平滑(ε 0.15–0.7 全单调变差)、- PBC∈{4,6,8,12}(在 γ1.35/ε0.1 下钳制不激活,逐位空操作)、k=0.4、SMOOTH_K=30,以及父节点列出的- 速度回归/全局收缩/加性解码/幅度分层/方向非对称/速度空间扩散/原始总量再闭合基准。-- 确定性:seed 0/1/2 逐位一致;伪装视图(时间 +1 天平移、manifest 键序打乱、换路径)逐位一致;- 单输入/锚≠末输入退路逐位 copy_last。+- 运行:`python run.py --data <view> --out <pred.h5ad> --seed <int>`;CPU ~8s、<2GB(`EXECUTION.json gpu:false`)。+- 关闭对照:`--ablate <任意名>` → 型内参考与 pb 复原同时关 → 输出逐位 = 节点 35(已验证)。+- PLAN 原样机制(不封顶 λ 混合)已证否:λ 0.15–1.0 全网格 de_direction 0.338→0.268、de_score 0.222→0.167+ 单调崩塌(型间亮度倾斜搬动群体 pb),总分 55.6–56.0 < 父;pb 复原解码正是针对这一失败通道。+- 其余已证否方向(默认关,代码保留,明细见 run.py docstring 与 METHOD.md):再闭合场平滑对 nb_mmd 的假设、+ 提亮方向、事后平滑、PBC∈{4,6,8,12}、k=0.4/0.6、SMOOTH_K=30、γ=1.45(持平)、TYPE_MIN=60(无差)。+- 确定性:seed 0/1/2 逐位一致;伪装视图(时间 +1、键序打乱、换路径)逐位一致;单输入退路逐位 copy_last。diff --git a/solution/run.py b/solution/run.pyindex 61c073f..f00ee1f 100644--- a/solution/run.py+++ b/solution/run.py@@ -24,12 +24,47 @@ Mechanism (on by default, alpha = 1.0): Coordinates, row order and cell count are never modified. ---ablate <name> (any name) turns THIS node's mechanism (the spatial low-pass-of the re-closure field, see the node 35 block in main()) off and keeps the-rest of the pipeline unchanged (raw per-cell total ratio = parent node 33,-verified bit-for-bit).+--ablate <name> (any name) turns THIS node's mechanism (the per-type+re-closure reference + pb-restore, node 40) off and keeps the rest of the+pipeline unchanged: the re-closure reference reverts to the global median+and the pb-restore is skipped, making the output bit-for-bit parent node 35+(verified by array comparison). -Node 35 addition on top of node 33 (the submitted configuration):+Node 40 addition on top of node 35 (the submitted configuration):++(9) Per-type re-closure reference, capped and pb-restored+ (VEC_REC_SCOPE=type, VEC_REC_CAP=3.0, VEC_REC_TYPE_MIN=30,+ VEC_REC_LAMBDA=1.0, VEC_PB_RESTORE=1, VEC_PB_RESTORE_ITERS=20).+ The gamma=1.35 re-closure divides by (r~/r_med_global)**gamma -- a+ single global reference erases the type-level total structure the+ displacement created. Referencing each cell to its OWN TYPE's median of+ the smoothed ratio field instead (capped to [1/3, 3]x the global median+ to protect the extreme-velocity types whose raw medians reach 44823x and+ would pin 19% of all cells at the PBC clamp) keeps that structure.+ The PLAN as specified (uncapped type medians, lambda blend) is+ FALSIFIED: lambda 1.0/0.5/0.3 -> A-half 55.63/56.01/56.02 vs parent+ 56.869, with de_direction 0.268/0.318/0.333 and de_score 0.167/0.222/+ 0.222 breaking the PLAN guards (>=0.383/>=0.2778) monotonically in+ lambda -- the between-type brightness tilt moves the population+ pseudobulk away from the true dp ranking, and the variogram pays the+ rest. The submitted decode protects dp BY CONSTRUCTION: the+ global-reference (parent) re-closure is computed in parallel and each+ gene column of the type-scoped output is rescaled by a single Newton-+ solved factor so the final per-gene pseudobulk equals the parent's+ exactly (max residual 1.8e-15; de_score/de_direction come out+ bit-for-bit at the parent's 0.2778/0.3839). The mechanism can then only+ REDISTRIBUTE expression between cells within each gene column.+ A-half (deterministic scorer): cap 1.5/2/2.5/3/inf -> 57.190/57.290/+ 57.317/57.332/57.271 vs parent 56.869. SUBMITTED cap=3.0: nb_mmd+ 0.08093 -> 0.07621 (tree best, monotone in mechanism strength across 5+ decodes -> structural), mmd_u 0.04853 -> 0.04630 (PLAN target <=0.046+ met), variogram 0.035414 -> 0.035963 (small cost), cell total median+ 1.825x -> ~1.5x base (CLOSER to the exact CP10k invariant of measured+ stages). gamma=1.45 on this base: 57.323 (flat, de_score -1 step) --+ gamma=1.35 kept. TYPE_MIN=60 without restore measured the same as 30+ under the cap (extreme small types are capped anyway).++Node 35 addition on top of node 33: (8) Spatially low-passed re-closure field, level-neutral by construction (VEC_BETA_REC=0.15, VEC_REC_STEPS=1, VEC_REC_K=15, VEC_REC_LEVEL=matched).@@ -272,6 +307,8 @@ VEC_C (0.0 = pure multiplicative), VEC_K (0.5), VEC_GAMMA (1.35), VEC_RECLOSE_GEO (1), VEC_BETA_REC (0.15), VEC_REC_STEPS (1), VEC_REC_K (15), VEC_REC_LEVEL (matched), VEC_REC_BRIGHT (1.0 = off, diagnostic only),+VEC_REC_SCOPE (type), VEC_REC_TYPE_MIN (30), VEC_REC_LAMBDA (1.0),+VEC_REC_CAP (3.0), VEC_PB_RESTORE (1), VEC_PB_RESTORE_ITERS (20), VEC_POST_EPS (0.0 = off, falsified), VEC_POST_STEPS (2), VEC_POST_K (15), VEC_PBC (10.0), VEC_MIXMODE (rel), VEC_MIXREL (1.0), VEC_MIXEPS (1.0), VEC_DOMAIN (log), VEC_SOFTD (0), VEC_CAPD (0), VEC_CVEL (-1 = legacy@@ -327,6 +364,12 @@ BETA_REC = float(os.environ.get("VEC_BETA_REC", "0.15")) # node 35: spatial low REC_STEPS = int(os.environ.get("VEC_REC_STEPS", "1")) # diffusion steps of the re-closure field smoothing REC_K = int(os.environ.get("VEC_REC_K", "15")) # coordinate neighbours of the re-closure field smoothing REC_LEVEL = os.environ.get("VEC_REC_LEVEL", "matched") # "matched": renormalise the smoothed re-closure field to the median linear total the unsmoothed field would give (data-derived, no tuned constant)+REC_SCOPE = os.environ.get("VEC_REC_SCOPE", "type") # node 40 re-closure reference: "type" = per-type median of the smoothed ratio field (mechanism on), "global" = global median (parent node 35, bit-for-bit)+REC_TYPE_MIN = int(os.environ.get("VEC_REC_TYPE_MIN", "30")) # types with fewer anchor cells than this use the global median (PLAN risk 1: unstable per-type medians)+REC_LAMBDA = float(os.environ.get("VEC_REC_LAMBDA", "1.0")) # blend of the per-type reference toward the global one: r_ref = (1-lam)*r_med_global + lam*r_med_type (PLAN fallback grid)+REC_CAP = float(os.environ.get("VEC_REC_CAP", "3.0")) # clamp the per-type reference to [r_med_global/CAP, r_med_global*CAP] (0 = off); protects extreme-velocity types from pinning at the PBC cap -- uncapped type medians span 0.44x..44823x the global median on this view+PB_RESTORE = os.environ.get("VEC_PB_RESTORE", "1") not in ("0", "", "false", "False") # node 40 submitted decode: after the type-scoped re-closure, rescale each gene column (Newton solve) so the pseudobulk equals the GLOBAL-reference (parent) re-closure's EXACTLY -- dp, hence de_score/de_direction, preserved bit-for-bit; the mechanism can then only REDISTRIBUTE expression between cells/types, never tilt the population mean+PB_RESTORE_ITERS = int(os.environ.get("VEC_PB_RESTORE_ITERS", "20")) # Newton iterations of the log-domain column solve (convex monotone problem, steps clipped to e^+-5; residual < 1e-9) REC_BRIGHT = float(os.environ.get("VEC_REC_BRIGHT", "1.0")) # diagnostic: constant linear-domain multiplier on the re-closure scale s_i (1.0 = off); isolates the brightening side-effect of field smoothing from its dispersion removal POST_EPS = float(os.environ.get("VEC_POST_EPS", "0.0")) # node 35 submitted mechanism: support-masked diffusion smoothing AFTER re-closure+PBC, with exact per-gene pseudobulk restoration (0 = off) POST_STEPS = int(os.environ.get("VEC_POST_STEPS", "2")) # diffusion steps of the post-hoc smoothing@@ -565,13 +608,15 @@ def main() -> None: shrink_on = SHRINK_N0 > 0.0 and args.ablate is None vdiff_w = VDIFF_W if args.ablate is None else 0.0 reclose_geo = RECLOSE_GEO- # Node 35 off-control: --ablate <any> turns OFF the node's mechanism and- # nothing else. The SUBMITTED mechanism is the post-hoc pseudobulk-preserving- # smoothing pass (post_on); the PLAN's original re-closure field smoothing- # (beta_rec) was falsified and ships at 0, but --ablate disables it too so- # the ablated run is bit-for-bit parent node 33 either way.- beta_rec = BETA_REC if args.ablate is None else 0.0- post_on = args.ablate is None+ # Node 40 off-control: --ablate <any> turns OFF THIS node's mechanism+ # (per-type re-closure reference) and NOTHING else: the re-closure+ # reference reverts to the global median, all node-35 components+ # (beta_rec=0.15, REC_LEVEL=matched, post pass off) stay as submitted, so+ # the ablated run is bit-for-bit parent node 35 (verified).+ beta_rec = BETA_REC+ post_on = True+ rec_scope_type = REC_SCOPE == "type" and args.ablate is None+ pb_restore_on = PB_RESTORE and rec_scope_type manifest = load_manifest(args.data) genes = panel_genes(args.data, manifest)@@ -598,6 +643,7 @@ def main() -> None: # ORIGINAL stage matrices; the displacement is applied to the # smoothed anchor Xs. steps=0/eps=0 -> Xs is Xa bit-for-bit. Xs, sinfo = spatial_smooth(Xa, coords, SMOOTH_STEPS, SMOOTH_EPS, SMOOTH_K)+ pb_target = None # node 40 backup decode: set only when pb_restore_on if DEBUG: print(f"smooth: active={sinfo['active']} steps={SMOOTH_STEPS} eps={SMOOTH_EPS} " f"k={SMOOTH_K} changed_frac_pos={sinfo.get('changed_frac_pos', 0.0):.4f} "@@ -767,8 +813,60 @@ def main() -> None: else: r_use = r r_med = float(np.median(r_use))- sg = np.power(np.divide(np.full_like(r_use, r_med),- np.maximum(r_use, 1e-12)), gamma)+ if rec_scope_type:+ # Node 40 mechanism: per-type re-closure reference.+ # s_i = (r_ref_i / r~_i)**gamma with r_ref_i the+ # median of the smoothed ratio field WITHIN cell+ # i's own type (capped to [1/CAP, CAP] x the global+ # median; types with < REC_TYPE_MIN cells use the+ # global median). NOTE: the PLAN's motivation+ # ("measured stages have natural between-type total+ # differences") is FALSE for this data -- every+ # input stage is exactly CP10k (per-cell totals+ # 1e4, per-type medians identical, measured at+ # runtime). What r_med_type actually carries is+ # the type-specific velocity-induced inflation+ # (0.44x..44823x the global median on the proxy+ # view); referencing per type RETAINS a type-level+ # total structure proportional to the displacement+ # instead of erasing it, which empirically+ # tightens the per-type clouds the way the truth's+ # distribution expects (mmd_u 0.04853 -> 0.0463,+ # nb_mmd 0.08093 -> 0.0762, tree best) while the+ # pb-restore below keeps dp (de_score/de_direction)+ # bit-for-bit at the parent's.+ lab_rec = np.asarray(stage.labels[rows]).astype(str)+ r_flat = r_use.ravel()+ r_ref = np.full_like(r_flat, r_med)+ t_meds: list[tuple[str, int, float]] = []+ for t in sorted(set(lab_rec.tolist())):+ m_t = lab_rec == t+ n_t = int(m_t.sum())+ tm = float(np.median(r_flat[m_t])) if n_t >= REC_TYPE_MIN else r_med+ if REC_CAP > 0.0:+ tm = float(np.clip(tm, r_med / REC_CAP, r_med * REC_CAP))+ if n_t >= REC_TYPE_MIN:+ r_ref[m_t] = tm+ t_meds.append((t, n_t, tm))+ r_ref = (1.0 - REC_LAMBDA) * r_med + REC_LAMBDA * r_ref+ sg = np.power(np.divide(r_ref[:, None],+ np.maximum(r_use, 1e-12)), gamma)+ if DEBUG:+ med_t = np.array([tm for _, _, tm in t_meds])+ cv = float(med_t.std() / max(med_t.mean(), 1e-12))+ print(f"rec_scope: type lam={REC_LAMBDA} "+ f"n_types={len(t_meds)} r_med_global={r_med:.4f} "+ f"type_med_cv={cv:.4f} "+ f"type_med_ratio_min={float((med_t / r_med).min()):.4f} "+ f"max={float((med_t / r_med).max()):.4f} "+ f"small_types={sum(1 for _, n_t, _ in t_meds if n_t < REC_TYPE_MIN)}",+ flush=True)+ for t, n_t, tm in t_meds:+ print(f" rmed {t}: n={n_t} r_ref={tm:.4f} ratio={tm / r_med:.4f}",+ flush=True)+ else:+ sg = np.power(np.divide(np.full_like(r_use, r_med),+ np.maximum(r_use, 1e-12)), gamma) if REC_LEVEL == "matched" and beta_rec > 0.0: # Level-neutrality by construction: rescale the # smoothed-field scale so the MEDIAN per-cell linear@@ -787,6 +885,38 @@ def main() -> None: sg = sg * (m_raw / max(m_sm, 1e-12)) if REC_BRIGHT != 1.0: sg = sg * REC_BRIGHT+ pb_target = None+ if pb_restore_on:+ # PB-restoring decode (node 40 backup mechanism):+ # run the GLOBAL-reference re-closure in parallel+ # (bit-for-bit the parent node 35 pass, incl. the+ # matched level and the PBC clamp) and record its+ # per-gene pseudobulk. After the type-scoped pass+ # (and its PBC clamp), each gene column is rescaled+ # by a single factor (Newton solve) so the final+ # pseudobulk equals this target EXACTLY: dp, hence+ # de_score/de_direction, is preserved bit-for-bit,+ # and the mechanism can only REDISTRIBUTE+ # expression between cells within a gene column,+ # never tilt the population mean. Both passes are+ # pure functions of the input data -- no fitted or+ # tuned constants.+ sg_par = np.power(np.divide(np.full_like(r_use, r_med),+ np.maximum(r_use, 1e-12)), gamma)+ if REC_LEVEL == "matched" and beta_rec > 0.0:+ sg_raw_p = np.power(np.divide(np.full_like(r, float(np.median(r))),+ np.maximum(r, 1e-12)), gamma)+ m_raw_p = float(np.median((lin * sg_raw_p).sum(axis=1)))+ m_par = float(np.median((lin * sg_par).sum(axis=1)))+ sg_par = sg_par * (m_raw_p / max(m_par, 1e-12))+ Xpar = np.log1p(lin * sg_par)+ if PBC > 0:+ lin_par = np.expm1(Xpar)+ tot_par = lin_par.sum(axis=1, keepdims=True)+ base_par = float(np.median(np.expm1(Xa).sum(axis=1)))+ sc_par = np.minimum(1.0, (PBC * base_par) / np.maximum(tot_par, 1e-12))+ Xpar = np.log1p(lin_par * sc_par)+ pb_target = Xpar.mean(axis=0) Xp = np.log1p(lin * sg) if DEBUG: lraw = np.log(np.maximum(r, 1e-12)).ravel()@@ -844,9 +974,33 @@ def main() -> None: print(f"pbc: cap={PBC} clamped_frac={float((sc < 1).mean()):.4f} " f"post_tot med={float(np.median(np.expm1(Xp).sum(axis=1)) / base):.3f}", flush=True)+ if pb_target is not None:+ # Column restore (node 40 backup decode): per-gene factor+ # c_g solving mean_i log1p(lin_ig * c_g) = pb_target_g by+ # Newton (h(c) is concave increasing -> monotone safe with+ # a positivity clamp). Zeros stay zero (both passes share+ # the support), coordinates untouched.+ Lin = np.expm1(Xp)+ u = np.zeros(Lin.shape[1], dtype=np.float64)+ active = pb_target > 0.0+ for _ in range(PB_RESTORE_ITERS):+ c_it = np.exp(u)+ Lc = Lin * c_it+ h = np.log1p(Lc).mean(axis=0) - pb_target+ d = (Lc / (1.0 + Lc)).mean(axis=0) # dh/du >= 0+ step = np.divide(-h, d, out=np.zeros_like(u),+ where=(d > 1e-15) & active)+ u = u + np.clip(step, -5.0, 5.0)+ c = np.exp(u)+ Xp = np.log1p(Lin * c)+ if DEBUG:+ resid = float(np.max(np.abs(np.log1p(Lin * c).mean(axis=0) - pb_target)))+ print(f"pb_restore: iters={PB_RESTORE_ITERS} max_resid={resid:.3e} "+ f"c_min={float(c.min()):.4f} c_max={float(c.max()):.4f} "+ f"c_med={float(np.median(c)):.4f}", flush=True) if POST_EPS > 0.0 and POST_STEPS > 0 and post_on:- # Node 35 submitted mechanism (PLAN alternative after the- # re-closure-field smoothing was falsified): a post-hoc+ # FALSIFIED alternative (node 35, default off -- POST_EPS+ # ships at 0.0): a post-hoc # support-masked diffusion pass on the coordinate k-NN # graph, applied AFTER the displacement, re-closure and # clamp, with an exact per-gene column rescale that
调研来源?调研员查到并用到的知识条目和文献检索结果(只列标题和编号)。
用到的知识库条目
| 编号 | 标题 | 出处 |
|---|---|---|
| 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 |
| k024 | World-model evaluation dimensions for state-transition predictors | notes/competition/07_biomedical_world_models.md |
分析结果?分析员写的 ANALYSIS.json:改了什么、各组分数怎么变、假设是否成立、经验和下一步建议。
| 改了什么 | 再闭合参考点从全局中位改为型内中位(封顶 [1/3,3]×全局、型内<30细胞退回全局),并在 PBC 后加逐基因伪批量精确复原(并行跑父节点全局路径作目标,Newton 列缩放,残差≤2e-15),使 dp/de_score/de_direction 逐位保持父值;PLAN 原样的不封顶 λ 混合已实测证否(DE 单调崩塌),提交的是这个封顶+复原变体。 |
|---|---|
| 各组分数的变化 | cell_state:变好但在噪声边缘:mmd_u raw 0.04751→0.04529(skill 0.551→0.563,+0.15 分),variogram 0.03471→0.03528 微付(-0.05 分),组 58.92→59.32(+0.40,小于 T2 约 1 分噪声) expression_change:噪声内/冻结:de_score 0.2778、de_direction 0.3874 均与父逐位相同(pb 复原按构造保证),组分 60.35→60.35 local_spatial:变好:nb_mmd raw 0.07784→0.07304(skill 0.592→0.607,+0.38 分),组 59.15→60.69(+1.54,超过噪声);Engineer 报告该 raw 随机制强度跨 5 个解码单调,为结构性位移 shape_scale:不变:坐标冻结,三项 raw 与 skill 逐位相同,50.00(地板),结构门保持 1(邻域 skill 0.607>0.5) |
| family_id | T2HX-01 |
| 假设是否成立 | 是 |
| 经验 |
|
| mechanism_active | 是 |
| 下一步建议 |
|
对话摘要?每个角色和大模型对话的统计:轮数、工具调用、用时、token 数和最后的回答摘录;原始记录只给路径。
只给统计和最后回答的摘录;完整对话请到原始记录位置里列出的文件看。
分析员
| 角色?调研员写计划、工程师改代码、分析员解读分数、审查员检查作弊。 | 分析员 alibaba-token-plan-cn/qwen3.8-max |
|---|---|
| 调用次数 | 1 次 |
| 轮数?大模型一共回复了几轮(每轮可以调用多个工具)。 | 2 |
| 工具调用?大模型调用读文件、执行命令等工具的次数,按工具名统计。 | 共 1 次:write 1 |
| 用时 | 不到 1 分 |
| token 数?输入 / 输出(含思考)的 token 数,来自接口返回的用量。 | 输入 21,828 · 输出 1,257 · 思考 834 |
| 任务(第一行) | 分析节点 n40 的打分结果,写 ANALYSIS.json |
| 最后的回答(摘录) | ANALYSIS.json written |
| 原始记录位置?完整对话记录在 Spark 上的文件路径;看板不复制原始内容。 | /home/spark-longxinyang/vec/runs/formal/20261003-172000-search-t2-heart-extrap-chain-12h/nodes/40/analyst.jsonl 6 KB /home/spark-longxinyang/vec/runs/formal/20261003-172000-search-t2-heart-extrap-chain-12h/nodes/40/analyst.stderr |
工程师
| 角色 | 工程师 alibaba-token-plan-cn/qwen3.8-max |
|---|---|
| 调用次数 | 1 次 |
| 轮数 | 67 |
| 工具调用 | 共 71 次:bash 46、edit 19、read 4、write 2 |
| 用时 | 49 分 |
| token 数 | 输入 181,518 · 输出 24,367 · 思考 63,362 |
| 任务(第一行) | 按计划修改程序:型内中位再闭合:恢复型间总量异质性改善 mmd_u |
| 最后的回答(摘录) | All verification passes. Final state of `solution/` is complete and consistent. ## 会话总结 **做了什么**:按 PLAN 实现型内中位再闭合(`s_i=(r_med_type/r̃_i)^γ`,`--ablate` 退回全局中位=父节点35逐位)。PLAN 原样机制(不封顶 λ 网格 0.15/0.3/0.5/1.0)证否:mmd_u 单调改善但 de_direction/de_score 单调崩塌(0.384→0.268),全网格低于父。离线实测还修正了 PLAN 动机——锚阶段是精确 CP10k,型间总量差全部来自速度膨胀而非"天然差异"。 **提交的备选机制**(同族、同弱项):型内参考**封顶 ±3×** + **逐基因伪批量精确复原**(并行跑父节点全局路径,Newton 列缩放使 dp 逐位守恒,残差 2e-15)——DE 两项按构造冻结在父值,机制只能在基因列内再分配。 **查分结果**(18/20 已用,评分器确定性已复核):提交档 A 半 **57.332**(父 56.869,+0.463);nb_mmd 0.08093→**0.07621 全树最佳**(跨 5 个解码单调=结构性),mmd_u 0.04853→0.04630(PLAN 目标达成),variogram 微付 0.00055,PLAN 三守卫全过。seed/伪装视图/单输入退路/vec-check 全部逐位验证;8.1s、1.9GB。 **下一步最值得试**:(1) pb-复原把"任何再分配类机制"的 DE 风险降为零——可在此保护层下试更激进的列内再分配(如型内 r̃ 分位映射替代幂律、或按邻域均值的 r̃ 参考),直接冲 nb_mmd/mmd_u;(2) variogram 是本档唯一付出项,试在复原后加逐基因二阶矩(列内方差)对齐;(3) cap∈[2.5,3] 平台已平坦,别再细扫。教训给后续节点:查分前先离线确认输出与父逐位不同(本节点 3 次额度浪费在默认值笔误的静默空操作上)。 |
| 原始记录位置 | /home/spark-longxinyang/vec/runs/formal/20261003-172000-search-t2-heart-extrap-chain-12h/nodes/40/engineer.jsonl 439 KB /home/spark-longxinyang/vec/runs/formal/20261003-172000-search-t2-heart-extrap-chain-12h/nodes/40/engineer.stderr |
调研员
| 角色 | 调研员 alibaba-token-plan-cn/qwen3.8-max |
|---|---|
| 调用次数 | 1 次 |
| 轮数 | 1 |
| 工具调用 | 共 0 次:— |
| 用时 | 5 分 |
| token 数 | 输入 23,675 · 输出 6,664 · 思考 8,192 |
| 任务(第一行) | 为节点 n40(改进,父节点 n35)写改进计划 PLAN.json |
| 最后的回答(摘录) | ill 0.551),显著差于节点31的0.04464(γ=0.45时)。节点33将γ从0.45推到1.35后 de_direction/de_score 大幅改善(0.3213→0.3763),但 mmd_u 从0.04464恶化到0.04782——γ越大,逐细胞总量越被压向全局中位数,抹平了不同细胞型之间天然的总量水平差异。真值中不同型(心肌、内皮、间质等)的细胞大小/总量有系统差异,全局再闭合把这个型间信号压掉了,导致细胞状态分布(mmd_u)偏离。cell_state组58.92是除地板形状组外最弱的可动组。",
"approach": "在父节点35管线上只改再闭合步骤的参考点:将 s_i=(r_med_global/r̃_i)^γ 改为 s_i=(r_med_type(i)/r̃_i)^γ,其中 r_med_type(i) 是细胞 i 所属型内所有锚细胞的总量比中位数。实现步骤:(1) 在再闭合前按型分组计算 r̃ 的中位数 r_med_t;(2) 对型 t 中每个细胞用 s_i=(r_med_t/r̃_i)^γ;(3) 其余全部冻结(α=1, k=0.5, γ=1.35, ε=0.1, β_rec=0.15, SMOOTH_STEPS=2, K=15, PBC=10, 门控)。环境变量 VEC_REC_SCOPE=type|global 控制开关(默认type,global退化为父节点)。单输入阶段退路不变(逐位回退copy_last)。若 type 版 mmd_u 改善但 nb_mmd 恶化超守卫,试折中方案:r_ref_i = (1-λ)·r_med_global + λ·r_med_type(i),λ∈{0.3,0.5,0.7,1.0}。守卫:nb_mmd raw≤0.0820、de_direction≥0.383、de_score≥0.2778。预计3-5次查分(type/1.0 + λ网格3档 + 可能的γ微调1档)。",
"expected_groups": ["cell_state"],
"risks": "(1) 型内细胞数少(<50)的型中位数不稳,可加守卫:型内细胞<30时该型用全局中位;(2) 恢复型间总量差异可能在型边界处制造表达不连续,恶化 nb_mmd——用守卫≤0.0820监控,若破线则用λ折中;(3) 型间总量差异可能不是 mmd_u 恶化的主因(可能是型内宽度问题),此时机制无效但无副作用(γ不变、DE不变)——Engineer 第一次查分即可判断:若 mmd_u 不动(±0.001内)则假设不成立,按边界规则提交机制关态。尽早发现方式:先离线算型间总量比中位数的变异系数(若<5%则说明型间差异本就小,机制无空间)。",
"family_id": "T2HX-01",
"mechanism": "将几何再闭合的参考总量从全局中位改为型内中位,让再闭合只消除型内总量变异而不抹平型间天然总量差异,从而保持不同细胞型在表达空间中的正确位置分离。",
"vs_constant_shift": "常数位移是每型一个固定乘数(所有细胞同幅度缩放);本机制保持逐细胞的非线性总量修正((r_med_t/r̃_i)^γ 仍依赖每个细胞自身的总量比),只改变参考点从全局中位到型内中位。它不是给每型加一个常数,而是让型内的再闭合不再被型间偏差污染。",
"mechanism_evidence": "(1) 离线诊断:计算各型的 r_med_type 与 r_med_global 的比值,若型间变异>10%则说明机制有作用空间;(2) mmd_u raw 从0.04751向0.04464方向回落(目标≤0.046);(3) 型间总量变异系数(std/mean of per-type median totals)在预测中恢复(对照父节点被压缩的值);(4) de_direction/de_score 不变(±0.005内),证明改动不影响基因排序;(5) 四组分变化:cell_state升、expression_change平、local_spatial平或微升、shape_scale不变。",
"mechanism_off_control": "环境变量 VEC_REC_SCOPE=global(或 --ablate rec_scope)时,再闭合参考点退回全局中位数,输出与父节点35逐位相同(X array_equal=True、坐标不变)。预期差别:关闭后 mmd_u 回到0.04751,开启后若机制有效则 mmd_u 下降≥0.002。若开关无差别(mmd_u 变化<0.001),说明型间总量差异本就极小,机制未运行。",
"sources": []
}
``` |
| 原始记录位置 | /home/spark-longxinyang/vec/runs/formal/20261003-172000-search-t2-heart-extrap-chain-12h/nodes/40/researcher.jsonl 24 KB /home/spark-longxinyang/vec/runs/formal/20261003-172000-search-t2-heart-extrap-chain-12h/nodes/40/researcher.stderr |
审查员
| 角色 | 审查员 alibaba-token-plan-cn/qwen3.8-max |
|---|---|
| 调用次数 | 1 次 |
| 轮数 | 7 |
| 工具调用 | 共 10 次:read 7、bash 2、write 1 |
| 用时 | 1 分 |
| token 数 | 输入 41,901 · 输出 1,371 · 思考 969 |
| 任务(第一行) | 审查节点 n40 的程序是否越界读取、写死目标、钻评分器漏洞 |
| 最后的回答(摘录) | REVIEW.json written |
| 原始记录位置 | /home/spark-longxinyang/vec/runs/formal/20261003-172000-search-t2-heart-extrap-chain-12h/nodes/40/reviewer.jsonl 217 KB /home/spark-longxinyang/vec/runs/formal/20261003-172000-search-t2-heart-extrap-chain-12h/nodes/40/reviewer.stderr |