总览 · ← 返回运行 20261003-172000-search-t2-heart-extrap-chain-12h
节点 n32
rel速度底物重耦合:α=1.5乘法外推+γ=1.0全量逐细胞再归一+ε=0.4扩散基座,叠|v|分位数分层(前40%×1.15/其余×0.55);坐标/组成/行序冻结
| 运行?一次完整的自动搜索或 Agent 会话,有自己的锁定配置和证据包。 | 20261003-172000-search-t2-heart-extrap-chain-12h |
|---|---|
| 父节点 | n30 |
| 子节点 | n34 |
| 操作?种子:人写的起点;改进:在父节点上改;草稿:从头写;修复:修父节点的报错。 | 改进 |
| 状态 | 已打分 |
| 分数 | 搜索目标分 56.78(+1.3) · proxy_noscale 56.78(+1.3) · 3 次复测均分 56.78 |
| 审查 | 通过 检查项1(越界读取):未发现问题。run.py 只经框架接口 src/task2_spatial.view_io(load_manifest/read_stage/anchor_entry/extrap_step/panel_genes/write_t2)读视图内数据;全文无 open()/h5py/网络调用、无绝对路径、'..'、/mnt、/home、data/raw、downloads、评分器路径,也未读取目标阶段文件(只用 anchor_entry 与 extrap_step 返回的输入阶段)。; 检查项2(硬编码目标统计量):未发现问题。所有常数(EPS=0.4、K_NN=15、AL… |
| 用时?从运行开始到结束(或到现在)的挂钟时间。 | 52 分 |
| 程序版本 | f2684b3ecb1473db99e5fb338275370b7b94e7b0 (programs.git) |
方法说明?节点程序自带的 METHOD.md:这个程序做了什么、为什么。
来自 programs.git f2684b3ecb:solution/METHOD.md
rel速度底物重耦合:α=1.5乘法外推+γ=1.0全量逐细胞再归一+ε=0.4扩散基座,叠|v|分位数分层(前40%×1.15/其余×0.55);坐标/组成/行序冻结
方法(family T2HX-01,父节点 30 的 improve)
流水线(坐标、组成、细胞数、行序全程冻结):
- 基座(node-23 算子):锚阶段=最后一个输入,n 夹到 [min_cells, max_cells](本视图 n=锚阶段全量 24826,无抽样,seed 无关),坐标 15-NN 图上 2 步支撑掩码扩散 ε=0.4(只动实测正值、保零模式),随后逐基因列缩放精确复原锚伪批量。
- rel 速度场(node-27/29 血统):v_{t,g}=(m_a−m_p)/(m_p+1),m=型内 log1p 均值(分母 ≥1,天然压低低表达噪声基因)。硬门控:型两阶段各 ≥30 细胞、基因 m≥0.05(两阶段)、|v|≤2 截断。软阈值 k=0.5(对 rel 场保留置信运动核心:本视图 31 型×500 基因中 407 对过门,|v| 分位 q50=0.596/q90=0.917/max=2.0)。
- 重耦合解码(本节点主要实测增益):逐细胞乘法位移 x'=Y0·2^(α·soft_k(v_{t(i),g})),α=1.5(rel 场幅度相对 log2 压缩,步长需重新耦合);随后逐细胞线性(CP10k)总量以幂 γ=1.0 精确拉回自身基座总量(位移只改组成、不改文库大小);PBC=10 亮度钳制(γ=1.0 下仅触及 6 个天然最亮细胞)。
- |v| 分位数分层(PLAN 机制,node-30 血统重耦合到 rel 场):过门 (型,基因) 对按原始 |v| 降序,前 m=40% 分位(163 对,阈值 |v|≥0.627)有效步长 ×β_h=1.15,其余 60%(244 对)×β'_l=0.55;总位移近守恒(sum|v_eff| 71→73,+3.6%),是按速度可靠性重分配幅度而非放量。rel 场 |v| 分布与 log2 不同,分层用实际过门对的分位数,不用绝对阈值常数。
- 单输入退路:无前一阶段 → α 强制 0 → 逐位回到扩散基座(精确复原,std_dp=0)。
提交态参数:ε=0.4、k=0.5、α=1.5、γ=1.0、PBC=10、m=0.4、β_h=1.15、β'_l=0.55、V_CAP=2、GENE_FLOOR=0.05、MIN_TYPE_CELLS=30。全部为方法超参(A 半网格选定),无任何由已发布/保留阶段测量值算出的常数;不读阶段名与绝对时间(extrap_step/anchor_entry 只按时间排序取相对位置),机制无时间常数。
对照开关
--ablate mechanism:β_h=β'_l=1.0(同底物统一幅度)→ 输出逐位等于分层关底物(本机 h5 数据逐位比对已验证;A 半 56.43)。分层开(56.54 配置)与关输出不同 → mechanism_active=yes。- 二级对照 α=0(env
VEC_ALPHA=0)→ 逐位=扩散基座(其自身无变化保护下 = copy_last 等效)。 - env 探针(仅复现网格):
VEC_VEL(rel|log2)VEC_ALPHAVEC_KSOFTVEC_GAMMAVEC_EPSVEC_PBCVEC_STRAT_M/BH/BLVEC_VCAP;父节点 log2 态可由VEC_VEL=log2 VEC_ALPHA=1 VEC_KSOFT=0.7 VEC_GAMMA=0.6 VEC_EPS=0.6复原(本机已验证 diag 与父节点 METHOD 一致:n_high=1841、thr=1.372、sum 2799→2727)。
A 半查分网格(20 次额度全部用完;尺子 T2:heart:val_extrap/proxy_noscale)
| # | 配置(rel 场,未注明即 ε=0.4、PBC=10、分层关) | 榜分 | de_score | de_dir | mmd_u | variogram | nbhd_mmd |
|---|---|---|---|---|---|---|---|
| Q1 | k0.5 γ0.3 α1.0(PLAN 字面 node-29 重建) | 53.50 | .1806 | .2845 | .0510 | .0540 | .0959 |
| Q1b | 同上,PBC=0 | 52.87 | .1667 | .2756 | .0532 | .0567 | .0999 |
| Q1c | k0.5 γ0.75 α1.0 | 54.37 | .1944 | .3243 | .0495 | .0507 | .0905 |
| — | k0.5 γ0.9 α1.0 | 54.74 | .2083 | .3269 | .0488 | .0491 | .0884 |
| — | k0.5 γ0.75 ε0.6 | 54.47 | |||||
| — | k0.5 γ1.0 α1.0 | 54.94 | .2083 | .3318 | .0484 | .0480 | .0871 |
| — | k0.25 γ1.0 α1.0 | 55.92 | .2083 | .3234 | .0480 | .0408 | .0805 |
| — | k0.5 γ1.0 α1.5 | 56.43 | .1944 | .3732 | .0468 | .0383 | .0797 |
| — | k0.5 γ1.0 α2.0 | 56.43 | .1944 | .3737 | .0504 | .0341 | .0814 |
| — | k0.25 γ1.0 α1.5 | 55.41 | .2083 | .3439 | .0586✗止损 | .0339 | .0880 |
| Q2 | k0.5 α1.5 γ1.0 + 分层 m0.4/βh1.15/βl0.55(提交态) | 56.54 | .1944 | .3746 | .0481 | .0358 | .0798 |
| — | 同上 βh=1.3(sum+15.8%) | 56.46 | .1944 | .3747 | .0500 | .0343 | .0810 |
| — | ε0.6 α1.5 γ1.0 | 56.16 | .1806 | .3663 | .0467 | .0386 | .0818 |
| — | k0.4 α1.5 γ1.0 | 56.44 | .1944 | .3679 | .0489 | .0358 | .0801 |
| — | α1.75 k0.5 γ1.0 | 56.53 | .1944 | .3724 | .0483 | .0356 | .0799 |
| — | VCAP1.5 α1.5 | 56.28 | .1944 | .3787 | .0468 | .0402 | .0801 |
| — | k0.25 α1.5 + 分层(sum 守恒 +0.0%) | 54.32 | .1944 | .3327 | .0668✗止损 | .0339 | .0965 |
| Q9 | 提交态但 β'l=0.7(sum+6.5%) | 56.54 | .1944 | .3737 | .0481 | .0358 | .0798 |
| Q5 | 提交态但 m=0.3(sum−1.5%) | 56.52 | .1806 | .3801 | .0479 | .0359 | .0798 |
| — | 父节点 30 原样重测(log2 k0.7 γ0.6 ε0.6 绝对分层,本地逐位复现其 diag) | 55.16 | .1667 | .2069 | .0498 | .0391 | .0821 |
平台:{k∈[0.4,0.5], α∈[1.5,2.0], γ=1.0, ε=0.4, 分层∈{关, 1.15/0.55, 1.15/0.7, m0.3}} 全部 56.43–56.54,按“取平台中心不取单点尖峰”选提交态。父节点 30 同尺重测 A 半 55.16(与其 METHOD 自报 55.160 一致;55.44 是其 B 半节点分)→ 提交态 A 半对 A 半领先 +1.38,且五项排名原始值全部不劣于父(de_score .1667→.1944、de_dir .2069→.3746、mmd_u .0498→.0481、variogram .0391→.0358、nbhd .0821→.0798)。四组对比(同 A 半):expression_change 55.32→58.67、cell_state 57.08→58.57、local_spatial 58.24→58.93、shape_scale 50.00→50.00(坐标冻结恒为地板)。
PLAN 判据的诚实评估
- 移植正确性检查未达 PLAN 预期:PLAN 字面的 node-29 重建(rel、k=0.5、γ=0.3、α=1、ε=0.4、PBC=10)A 半只有 53.50,不到预期的 ~56.2。其 de 两项与 node-29 公开记录几乎一致(de_dir .2845 vs .2837、de_score .1806 vs .1944),说明速度场方向重建正确,但分布三项(mmd_u/variogram/nbhd)远差于记录,且 γ=0.3→1.0、α=1→1.5 单调改善——node-29 的提交态应含未见于描述的再耦合(或 A/B 半平移大于预期),无法进一步考证(节点 29 代码不可得)。因此改为在 A 半上自行重耦合底物(γ、α 扫描),这构成本节点的实际增益来源。
- PLAN 机制(分层)在 rel 场上未过判据:分层开 56.54 vs 同底物分层关 56.43,+0.11 < 1.0 判据线,在噪声(~1 分)内;de 两项 ≥ 分层关(.3746≥.3732 / .1944=.1944)、mmd_u 0.0481≤0.055 ✓,但增益不成立 → “rel 场上 |v| 分位分层”作为增益来源被证否(βh1.15/1.3、βl0.55/0.7、m0.3/0.4 六点全在 ±0.11 内,另 k0.25 宽场+分层击穿 mmd_u 0.0668)。rel 的 /(m_p+1) 已天然压低低表达噪声对,k=0.5 后仅剩 407 个高置信对,分层无多少可重分配的“不可靠尾巴”——与 PLAN 风险 1 的预判一致。
- 未交 NO_CHANGE 的理由(任务书 §2:PLAN 被证否时应交针对同一弱项的备选机制,而非原样退回父节点):备选机制=rel 速度场与解码的再耦合(α=1.5 幅度重标定 + γ=1.0 逐细胞 CP10k 总量精确守恒 + ε=0.4),针对父节点最弱可改善组 expression_change(同 A 半 55.32→58.67,de_direction 原始值 .2069→.3746),整体 +1.38 A 半分(55.16→56.54,父节点同尺重测)。分层保留在提交态中(平台内边际非负、定义 --ablate 对照),但 METHOD 明确声明其非增益来源。
- PLAN 预过滤偏离说明:过门对 407 < PLAN 预设的 1000(rel+k0.5 的实际场比 PLAN 假设更稀疏),分层仍良定义(163/244 分割、sum|v_eff| 偏差 +3.6% < 20%),故未按退化处理而照常查分;k0.25 宽场(2116 对 ≥1000)的分层版本实测反而击穿止损(见网格)。
机制生效证据(PLAN mechanism_evidence 对应项)
- 重分配而非放量:sum|v_eff| 71→73(+3.6%,±20% 内);β 调度=前 40% 分位(|v|≥0.627)×1.15、其余 ×0.55;|v| 分位阈值 q10–q99 全部打印在运行日志。
- 因果隔离:
--ablate mechanism输出逐位=分层关底物(h5 数据逐位比对 True);full≠ablate(True)。分层改变 163 对高 |v| (型,基因) 的步长,覆盖有速度型的绝大多数细胞(31 型中过门型全部,24788/24826 细胞有速度,38 细胞无速度型保持基座值)。 - 四组分(A 半,分层开−分层关):expression_change 58.64→58.67(+.03)、cell_state 58.11→58.57(+.46)、local_spatial 58.98→58.93(−.05)、shape_scale 不变;vs 父节点 30 同 A 半重测(55.32/57.08/58.24/50.00):+3.35 / +1.49 / +0.69 / 0。
- 止损:mmd_u 0.0481 ≤ 0.055 ✓;variogram 0.0358 优于父节点 0.0384 ✓。
稳健性(已实测)
- 纯 CPU 3.2 s / 峰值 RSS 0.97 GB(限额 28 GB / 30 min);
vec-check通过(final 与 ablate 输出均 ok)。 - seed 0/1/2 输出逐位相同(本视图 n=锚阶段全量,无随机抽样路径;有抽样时也仅由 seed 决定)。
- 伪装视图(文件改名、manifest 键序打乱+重排版、全部时间 +1、换路径)输出逐位相同;程序不读 board/mode 做分支、无视图/数据集名、无写死细胞数。
- 单输入视图(自建测试视图):α→0,输出=扩散基座(std_dp=0),不崩。
- 确定性:机制不消耗随机数;np.random.default_rng(seed) 仅用于细胞抽样。
未验证 / 风险
- 全部读数来自 A 半;正式分用 B 半(各自地板/天花板)。外推榜有“本地领先到正式缩水”的历史教训(方法卡:本地 54.2→官网 49.6),+1.10 的 A 半领先在 B 半可能缩小;已按平台选参而非单点尖峰以降低该风险。
- 真实 final 视图(3 输入、锚阶段可能超 max_cells 触发分层抽样、prev/anchor 时间差不同)未实测;程序路径全部按 manifest 相对量计算,无绝对时间常数。
- α 平台在 A 半上 1.5–2.0 等价,B 半最优可能偏移;γ=1.0 的精确总量守恒使 PBC 钳制几乎失效(6 细胞),亮度尾巴风险由 γ 而非钳制承担。
- 分层(+0.11,噪声内)保留与否对分数无实质影响;若审查认为噪声级机制不应保留,
--ablate输出(56.43)即其去除态。
知识来源
- 无外部数据(external/ 未读取)、无 prior/ 文件、无文献数值。方法学知识全部来自本树已验证节点(21/23/24/25/27/29/30 的机制与教训);速度、门控、分位阈值、钳制界全部由视图两个输入阶段现场计算。生物学假设仅为通用机制知识:细胞类型的转录速度(型内伪批量相对变化)可外推下一区间的调控程序走向(谱系推进、信号驱动的 TF 级联),与已发表节点的用法一致,不含任何保留阶段/基因型的测量值。
调研员的计划
| 名称 | rel速度底物上重耦合幅度分层外推(节点29基座+节点30分层) |
|---|---|
| 动机 | 父节点30(55.44)四组除 shape_scale=50.00(坐标冻结、proxy_noscale 上 scale_log_ratio 被钉住为盲区、且 T2HX-07 空间先验只在 final 可用,故本榜不可改善)外均高于地板;最弱可改善组是 expression_change=55.27(de_score skill 0.548、de_direction skill 0.557,为非形状项中最低)。当前最佳节点29(56.26)证明 rel 速度 v=(m_a−m_p)/(m_p+1)+ε=0.4 平滑底物显著更优:de_direction 0.2837 vs 30 的 0.2038、de_score 0.1944 vs 0.1667、mmd_u 0.04669 vs 0.04864、neighborhood_mmd 0.07569 vs 0.07817。而节点30已被证明有效的幅度分层(前40%×1.15/其余×0.55,两项 DE 同升、总位移守恒)只在更弱的 log2+ε=0.6 底物上测过。两个已被证明有效的部件从未组合(任务书明确允许组合有效部件,且节点29本身就是'移植'先例)。节点30网格的平坦平台(m∈[0.3,0.45] 均≈55.0)说明硬阈值不是约束,真正杠杆是底物+把分层重耦合到 rel 场。 |
| 做法 | 步骤1(移植节点29底物进 run.py):rel 速度 v_{t,g}=(m_a−m_p)/(m_p+1)(m=型内 log1p 均值,下界−1;硬门控:型两阶段各≥30细胞、基因 pb≥0.05、|v|≤2)+ 坐标15-NN 图2步支撑掩码扩散 ε=0.4(保零、逐基因列缩放精确复原伪批量)+ 逐细胞乘法解码 x·2^(α·soft_k(v)),α=1、软阈值 k=0.5(承节点29,非节点30的0.7,因 k=0.5 已对 rel 场调过)。坐标/组成/行序/细胞数冻结。步骤2(本节点机制=分层重耦合):因 rel 的 |v| 分布与 log2 不同(有界、动态范围不同),不得沿用节点30绝对阈值 |v|=1.372;改按实际过门 (型,基因) 对 |v| 的分位数分层:上 m% 分位×β_h、其余×β'_l,总位移近守恒,并同步重耦合 γ(分层改变了逐细胞总量分布,节点29的 γ=0.3 是无分层时的最优,需重扫)。先做无查分诊断:打印 |v| 分位数、过门对数、分层前后 sum|v_eff|;预过滤退化配置(过门对<1000 或 sum|v_eff| 偏差>±20% 不查分,沿用节点30做法)。步骤3(vec-score A半网格,约12次):Q1=分层关(β_h=β'_l=1)、γ=0.3,必须≈节点29(~56.2)作为移植正确性+本节点机制的关闭基线;Q2–4=分层开(m=0.4,β_h=1.15,β'_l=0.55)、γ∈{0.3,0.4,0.5};Q5–6=取最优γ、m∈{0.3,0.5};Q7–8=取最优m、β_h∈{1.1,1.2};Q9=取最优、β'_l=0.7;Q10=最优配置 seed1 复现;余约8次留作复跑/边界。步骤4(判据):最优分层开须比 Q1(分层关,同底物)高>1.0 A半分,且 de_score 与 de_direction 同时≥Q1、mmd_u≤0.055 止损,差值须过 seed1;不满足则机制被证否,按 NO_CHANGE 提交(默认输出逐位=父节点30)。单输入退路:无前一阶段则无 rel 速度→α 强制为0→逐位=copy_last。视图无关:不读任何阶段名/时间,机制无时间常数。 |
| 风险 | 1) 分层在 rel 底物上边际收益≈0(rel 的 /(m_p+1) 已天然压低低表达噪声基因,分层或变冗余)→机制未生效;Engineer 应在 Q1 vs Q2–4 配对 A 半最先发现,Δ<1 即停止查分并提交 NO_CHANGE,不烧预算。2) 与兄弟节点31(父=29,很可能也加分层)撞车→本方案以'|v|分位数自适应分层+γ重耦合'为差异点;若最终配置与既有节点逐位相同,提交 NO_CHANGE 而非复制。3) 更干净的 rel 场上 β_h 过高可能击穿 mmd_u→β_h≤1.2、止损 mmd_u≤0.055。4) 外推榜本地高估(ANALYSIS 教训:本地领先到正式缩水、分组方向可相反)→要求多配置平台+seed1 复现+>1 分边际,不追单点最高。5) rel |v| 分位退化(过门对太少)→无查分诊断预过滤。6) 移植 bug→Q1 必须复现节点29(~56.2),明显偏低先调试再继续。 |
代码改动?这个节点的程序和父节点程序的逐行差别:绿色是新增,红色是删除。
对比:父节点版本 0f7ef5099f。改动的文件:solution/METHOD.md +72 −92、solution/README.md +17 −15、solution/run.py +154 −181
diff --git a/solution/METHOD.md b/solution/METHOD.mdindex 89729d9..ad1446c 100644--- a/solution/METHOD.md+++ b/solution/METHOD.md@@ -1,99 +1,79 @@-速度幅度分层位移(T2HX-01/T2HX-04):对过门控的按型(型,基因)速度对按|v|降序分层,前40%高信号对用α×1.15、其余60%压缩到α×0.55,总位移量守恒地重分配外推幅度。--## 方法--基座 = 父节点 26/28 提交态(逐位承继):copy_last 锚阶段(n 夹到 [min_cells, max_cells]、-`take` 分层)→ 坐标 15-NN 图 2 步支撑掩码扩散 ε=0.6 → 逐基因列缩放精确复原伪批量 →-按型 log2 速度 v_{t,g}=log2(pb_anchor)−log2(pb_prev)(硬门控:型两阶段各 ≥30 细胞、-型内 pb ≥0.05、|v|≤2)→ 软阈值 k=0.7 → 逐细胞乘法位移 x·2^(α·v_soft),α=1 →-逐细胞线性总量回拉 γ=0.6。坐标、组成、细胞数、行序冻结(形状三项恒 = 地板)。--**本节点新机制(幅度分层)**:软阈值门控后,对全部过门 (型,基因) 对(本视图 4603 对)按-原始 |v_{t,g}| 降序全局排序;前 m=40%(1841 对,阈值 |v|≥1.372)乘 β_h=1.15,其余 60%-(2762 对)乘 β_l=0.55。有效位移场从统一幅度变为可靠性加权幅度:高 |v|(发育程序核心-驱动基因,方向证据可靠)获得更大外推步长,低 |v|(节点 28 已证明是 de_direction 的稀释-项)被压缩。sum|v_eff| 2799→2727(−2.6%),是**重分配而非放量**。--`--ablate mechanism`(PLAN mechanism_off_control):β_h=β_l=1.0,分层退化为统一幅度,-输出**逐位等于父节点**(本机 np.array_equal 验证 X / 坐标 / 基因序 / 细胞序,-`preds/final_ablate.h5ad` vs `preds/parent_default.h5ad` = True)。--## 查分记录(A 半,`T2:heart:val_extrap/proxy_noscale`,共 18 次,余 2)--父节点同半基线 54.87(节点 28 ANALYSIS 配对实测;本节点默认关闭态与其逐位相同)。-PLAN 网格 27 配置先本地诊断 sum|v_eff|,16 个通过 ±20% 过滤(预算内选出 6+6+4 覆盖-全部 m、β、β' 维度的代表点),全部查分如下(board = 四组均分):--| # | m | β_h | β'_l | sum\|v_eff\|(dev) | board | de_score | de_dir | mmd_u | nbh_mmd |-|---|---|---|---|---|---|---|---|---|---|-| 1 | 0.3 | 1.2 | 0.7 | 2774 (−0.9%) | 55.105 | 0.1528 | 0.2123 | 0.0505 | 0.0825 |-| 2 | 0.3 | 1.3 | 0.7 | 2937 (+4.9%) | 54.935 | 0.1528 | 0.2086 | 0.0531 | 0.0838 |-| 3 | 0.4 | 1.2 | 0.7 | 2949 (+5.4%) | 55.118 | **0.1806** | 0.2024 | 0.0512 | 0.0828 |-| 4 | 0.5 | 1.2 | 0.7 | 3087 (+10.3%) | 54.978 | 0.1667 | 0.1971 | 0.0516 | 0.0833 |-| 5 | 0.3 | 1.2 | 1.0 | 3125 (+11.6%) | 54.998 | 0.1667 | 0.2004 | 0.0514 | 0.0832 |-| 6 | 0.3 | 1.5 | 0.7 | 3263 (+16.6%) | 54.291 | 0.1528 | 0.2011 | **0.0597**(止损) | 0.0887 |-| 7 | 0.35 | 1.2 | 0.7 | 2866 (+2.4%) | 55.078 | 0.1667 | 0.2015 | 0.0509 | 0.0827 |-| 8 | 0.45 | 1.2 | 0.7 | 3022 (+8.0%) | 55.025 | 0.1667 | 0.1987 | 0.0512 | 0.0830 |-| 9 | 0.4 | 1.15 | 0.7 | 2727 (−2.6%) | 55.112 | 0.1667 | 0.2042 | 0.0500 | 0.0824 |-| 10 | 0.4 | 1.2 | 0.55 | 2827 (+1.0%) | 55.110 | 0.1667 | 0.2045 | 0.0510 | 0.0826 |-| 11 | 0.4 | 1.25 | 0.7 | 3027 (+8.2%) | 54.975 | 0.1667 | 0.2020 | 0.0527 | 0.0835 |-| 12 | 0.45 | 1.2 | 0.55 | 2921 (+4.4%) | 55.065 | 0.1667 | 0.1997 | 0.0510 | 0.0828 |-| 13 | 0.4 | 1.15 | 0.55 | 2727 (−2.6%) | **55.160** | 0.1667 | 0.2069 | 0.0498 | 0.0821 |-| 14 | 0.4 | 1.2 | 0.4 | 2705 (−3.4%) | 55.153 | 0.1667 | 0.2076 | 0.0508 | 0.0823 |-| 15 | 0.3 | 1.2 | 0.55 | 2599 (−7.1%) | 55.163 | 0.1528 | 0.2156 | 0.0502 | 0.0822 |-| 16 | 0.35 | 1.25 | 0.55 | 2810 (+0.4%) | 55.043 | 0.1667 | 0.2021 | 0.0521 | 0.0831 |-| 17 | =13, seed 1 | | | | 55.160 | 0.1667 | 0.2069 | 0.0498 | 0.0821 |-| 18 | =3, seed 1 | | | | 55.117 | 0.1806 | 0.2024 | 0.0512 | 0.0828 |--未查分的 11 个过滤通过配置是网格内部冗余点(与已查点差 ≤0.05 的 β'/m 组合);β_h=1.5-在 m=0.3 即触发 mmd_u>0.055 止损(#6),更高 m 只会更差,按 PLAN 止损规则不再查。--**提交选择 #13(m=0.4, β_h=1.15, β'_l=0.55)**,理由:board 55.160(全表并列最高,高于-父 +0.29);两项 DE 同时严格高于父(0.1667>0.1528、0.2069>0.1961,PLAN 成功判据);-mmd_u/nbh 退化全表最小(0.0498/0.0821);sum|v_eff| 偏差 −2.6% 最接近守恒;m=0.4 在-网格内部(避 PLAN 风险 3 的边界问题,m∈[0.3,0.45] 是 ≥55.0 的平坦区,最优点不在边界-尖峰上)。#15 board 相同但 m=0.3 在网格边界且 de_score 不高于父;#3 de_score 最高-(0.1806) 但 de_dir/mmd/nbh 均劣于 #13,且 de_score 的 0.0139 量化步长(≈1 个基因命中)-在 B 半迁移风险更高。--## 机制生效证据(PLAN mechanism_evidence 四条)--1. **位移重分配而非总量膨胀**:sum|v_eff| 2799→2727(−2.6%);高信号组 1841 对 ×1.15,- 低组 2762 对 ×0.55(run.py 打印 `[diag] strat ...`)。-2. **de_score 与 de_direction 同时 ≥ 父**:0.1667>0.1528 且 0.2069>0.1961 ✓。-3. **mmd_u / neighborhood_mmd 在容差内**:mmd_u 0.0473→0.0498(+0.0025 ≤ PLAN 容差- ±0.003);nbh 0.0796→0.0821(+0.0025 ≤ ±0.005)✓。-4. **高信号组 = |v| 上尾**:全局排序阈值 |v|=1.372(过门对 |v|∈(0.7,1.3] 的上 40%;- 实际因 V_CAP=2 截断,|v| 范围 (0.7, 2.0])。-5. 四组分变化(A 半):expression_change 54.93→55.32,cell_state 56.82→57.08,- local_spatial 58.62→58.24,shape_scale 50→50(坐标冻结不变)。机制改变了全部 31 个- 有速度型的细胞的表达(4603 个过门 (型,基因) 对的位移幅度全部被重加权;24826 个输出- 细胞中除 38 个无速度型细胞外全部受影响)。-6. 对照:`--ablate mechanism` 输出逐位 = 父节点 → 与默认输出的差异全部来自分层机制- (mechanism_active 应为 yes)。+rel速度底物重耦合:α=1.5乘法外推+γ=1.0全量逐细胞再归一+ε=0.4扩散基座,叠|v|分位数分层(前40%×1.15/其余×0.55);坐标/组成/行序冻结++## 方法(family T2HX-01,父节点 30 的 improve)++流水线(坐标、组成、细胞数、行序全程冻结):++1. **基座**(node-23 算子):锚阶段=最后一个输入,n 夹到 [min_cells, max_cells](本视图 n=锚阶段全量 24826,无抽样,seed 无关),坐标 15-NN 图上 2 步支撑掩码扩散 ε=0.4(只动实测正值、保零模式),随后逐基因列缩放**精确复原**锚伪批量。+2. **rel 速度场**(node-27/29 血统):v_{t,g}=(m_a−m_p)/(m_p+1),m=型内 log1p 均值(分母 ≥1,天然压低低表达噪声基因)。硬门控:型两阶段各 ≥30 细胞、基因 m≥0.05(两阶段)、|v|≤2 截断。软阈值 k=0.5(对 rel 场保留置信运动核心:本视图 31 型×500 基因中 407 对过门,|v| 分位 q50=0.596/q90=0.917/max=2.0)。+3. **重耦合解码**(本节点主要实测增益):逐细胞乘法位移 x'=Y0·2^(α·soft_k(v_{t(i),g})),**α=1.5**(rel 场幅度相对 log2 压缩,步长需重新耦合);随后逐细胞线性(CP10k)总量以幂 **γ=1.0 精确拉回自身基座总量**(位移只改组成、不改文库大小);PBC=10 亮度钳制(γ=1.0 下仅触及 6 个天然最亮细胞)。+4. **|v| 分位数分层**(PLAN 机制,node-30 血统重耦合到 rel 场):过门 (型,基因) 对按原始 |v| 降序,前 m=40% 分位(163 对,阈值 |v|≥0.627)有效步长 ×β_h=1.15,其余 60%(244 对)×β'_l=0.55;总位移近守恒(sum|v_eff| 71→73,+3.6%),是按速度可靠性**重分配**幅度而非放量。rel 场 |v| 分布与 log2 不同,分层用实际过门对的分位数,不用绝对阈值常数。+5. 单输入退路:无前一阶段 → α 强制 0 → 逐位回到扩散基座(精确复原,std_dp=0)。++**提交态参数**:ε=0.4、k=0.5、α=1.5、γ=1.0、PBC=10、m=0.4、β_h=1.15、β'_l=0.55、V_CAP=2、GENE_FLOOR=0.05、MIN_TYPE_CELLS=30。全部为方法超参(A 半网格选定),无任何由已发布/保留阶段测量值算出的常数;不读阶段名与绝对时间(extrap_step/anchor_entry 只按时间排序取相对位置),机制无时间常数。++## 对照开关++- `--ablate mechanism`:β_h=β'_l=1.0(同底物统一幅度)→ 输出**逐位等于**分层关底物(本机 h5 数据逐位比对已验证;A 半 56.43)。分层开(56.54 配置)与关输出不同 → mechanism_active=yes。+- 二级对照 α=0(env `VEC_ALPHA=0`)→ 逐位=扩散基座(其自身无变化保护下 = copy_last 等效)。+- env 探针(仅复现网格):`VEC_VEL`(rel|log2) `VEC_ALPHA` `VEC_KSOFT` `VEC_GAMMA` `VEC_EPS` `VEC_PBC` `VEC_STRAT_M/BH/BL` `VEC_VCAP`;父节点 log2 态可由 `VEC_VEL=log2 VEC_ALPHA=1 VEC_KSOFT=0.7 VEC_GAMMA=0.6 VEC_EPS=0.6` 复原(本机已验证 diag 与父节点 METHOD 一致:n_high=1841、thr=1.372、sum 2799→2727)。++## A 半查分网格(20 次额度全部用完;尺子 T2:heart:val_extrap/proxy_noscale)++| # | 配置(rel 场,未注明即 ε=0.4、PBC=10、分层关) | 榜分 | de_score | de_dir | mmd_u | variogram | nbhd_mmd |+|---|---|---:|---:|---:|---:|---:|---:|+| Q1 | k0.5 γ0.3 α1.0(PLAN 字面 node-29 重建) | 53.50 | .1806 | .2845 | .0510 | .0540 | .0959 |+| Q1b | 同上,PBC=0 | 52.87 | .1667 | .2756 | .0532 | .0567 | .0999 |+| Q1c | k0.5 γ0.75 α1.0 | 54.37 | .1944 | .3243 | .0495 | .0507 | .0905 |+| — | k0.5 γ0.9 α1.0 | 54.74 | .2083 | .3269 | .0488 | .0491 | .0884 |+| — | k0.5 γ0.75 ε0.6 | 54.47 | | | | | |+| — | k0.5 γ1.0 α1.0 | 54.94 | .2083 | .3318 | .0484 | .0480 | .0871 |+| — | k0.25 γ1.0 α1.0 | 55.92 | .2083 | .3234 | .0480 | .0408 | .0805 |+| — | **k0.5 γ1.0 α1.5** | **56.43** | .1944 | .3732 | .0468 | .0383 | .0797 |+| — | k0.5 γ1.0 α2.0 | 56.43 | .1944 | .3737 | .0504 | .0341 | .0814 |+| — | k0.25 γ1.0 α1.5 | 55.41 | .2083 | .3439 | .0586✗止损 | .0339 | .0880 |+| Q2 | k0.5 α1.5 γ1.0 + 分层 m0.4/βh1.15/βl0.55(**提交态**) | **56.54** | .1944 | .3746 | .0481 | .0358 | .0798 |+| — | 同上 βh=1.3(sum+15.8%) | 56.46 | .1944 | .3747 | .0500 | .0343 | .0810 |+| — | ε0.6 α1.5 γ1.0 | 56.16 | .1806 | .3663 | .0467 | .0386 | .0818 |+| — | k0.4 α1.5 γ1.0 | 56.44 | .1944 | .3679 | .0489 | .0358 | .0801 |+| — | α1.75 k0.5 γ1.0 | 56.53 | .1944 | .3724 | .0483 | .0356 | .0799 |+| — | VCAP1.5 α1.5 | 56.28 | .1944 | .3787 | .0468 | .0402 | .0801 |+| — | k0.25 α1.5 + 分层(sum 守恒 +0.0%) | 54.32 | .1944 | .3327 | .0668✗止损 | .0339 | .0965 |+| Q9 | 提交态但 β'l=0.7(sum+6.5%) | 56.54 | .1944 | .3737 | .0481 | .0358 | .0798 |+| Q5 | 提交态但 m=0.3(sum−1.5%) | 56.52 | .1806 | .3801 | .0479 | .0359 | .0798 |+| — | **父节点 30 原样重测**(log2 k0.7 γ0.6 ε0.6 绝对分层,本地逐位复现其 diag) | **55.16** | .1667 | .2069 | .0498 | .0391 | .0821 |++平台:{k∈[0.4,0.5], α∈[1.5,2.0], γ=1.0, ε=0.4, 分层∈{关, 1.15/0.55, 1.15/0.7, m0.3}} 全部 56.43–56.54,按“取平台中心不取单点尖峰”选提交态。父节点 30 同尺重测 A 半 55.16(与其 METHOD 自报 55.160 一致;55.44 是其 B 半节点分)→ 提交态 A 半对 A 半领先 **+1.38**,且五项排名原始值全部不劣于父(de_score .1667→.1944、de_dir .2069→.3746、mmd_u .0498→.0481、variogram .0391→.0358、nbhd .0821→.0798)。四组对比(同 A 半):expression_change 55.32→58.67、cell_state 57.08→58.57、local_spatial 58.24→58.93、shape_scale 50.00→50.00(坐标冻结恒为地板)。++## PLAN 判据的诚实评估++1. **移植正确性检查未达 PLAN 预期**:PLAN 字面的 node-29 重建(rel、k=0.5、γ=0.3、α=1、ε=0.4、PBC=10)A 半只有 53.50,不到预期的 ~56.2。其 de 两项与 node-29 公开记录几乎一致(de_dir .2845 vs .2837、de_score .1806 vs .1944),说明**速度场方向重建正确**,但分布三项(mmd_u/variogram/nbhd)远差于记录,且 γ=0.3→1.0、α=1→1.5 单调改善——node-29 的提交态应含未见于描述的再耦合(或 A/B 半平移大于预期),无法进一步考证(节点 29 代码不可得)。因此改为在 A 半上自行重耦合底物(γ、α 扫描),这构成本节点的实际增益来源。+2. **PLAN 机制(分层)在 rel 场上未过判据**:分层开 56.54 vs 同底物分层关 56.43,**+0.11 < 1.0 判据线**,在噪声(~1 分)内;de 两项 ≥ 分层关(.3746≥.3732 / .1944=.1944)、mmd_u 0.0481≤0.055 ✓,但增益不成立 → **“rel 场上 |v| 分位分层”作为增益来源被证否**(βh1.15/1.3、βl0.55/0.7、m0.3/0.4 六点全在 ±0.11 内,另 k0.25 宽场+分层击穿 mmd_u 0.0668)。rel 的 /(m_p+1) 已天然压低低表达噪声对,k=0.5 后仅剩 407 个高置信对,分层无多少可重分配的“不可靠尾巴”——与 PLAN 风险 1 的预判一致。+3. **未交 NO_CHANGE 的理由**(任务书 §2:PLAN 被证否时应交针对同一弱项的备选机制,而非原样退回父节点):备选机制=**rel 速度场与解码的再耦合**(α=1.5 幅度重标定 + γ=1.0 逐细胞 CP10k 总量精确守恒 + ε=0.4),针对父节点最弱可改善组 expression_change(同 A 半 55.32→58.67,de_direction 原始值 .2069→.3746),整体 +1.38 A 半分(55.16→56.54,父节点同尺重测)。分层保留在提交态中(平台内边际非负、定义 --ablate 对照),但 METHOD 明确声明其非增益来源。+4. PLAN 预过滤偏离说明:过门对 407 < PLAN 预设的 1000(rel+k0.5 的实际场比 PLAN 假设更稀疏),分层仍良定义(163/244 分割、sum|v_eff| 偏差 +3.6% < 20%),故未按退化处理而照常查分;k0.25 宽场(2116 对 ≥1000)的分层版本实测反而击穿止损(见网格)。++## 机制生效证据(PLAN mechanism_evidence 对应项)++- 重分配而非放量:sum|v_eff| 71→73(+3.6%,±20% 内);β 调度=前 40% 分位(|v|≥0.627)×1.15、其余 ×0.55;|v| 分位阈值 q10–q99 全部打印在运行日志。+- 因果隔离:`--ablate mechanism` 输出逐位=分层关底物(h5 数据逐位比对 True);full≠ablate(True)。分层改变 163 对高 |v| (型,基因) 的步长,覆盖有速度型的绝大多数细胞(31 型中过门型全部,24788/24826 细胞有速度,38 细胞无速度型保持基座值)。+- 四组分(A 半,分层开−分层关):expression_change 58.64→58.67(+.03)、cell_state 58.11→58.57(+.46)、local_spatial 58.98→58.93(−.05)、shape_scale 不变;vs 父节点 30 同 A 半重测(55.32/57.08/58.24/50.00):+3.35 / +1.49 / +0.69 / 0。+- 止损:mmd_u 0.0481 ≤ 0.055 ✓;variogram 0.0358 优于父节点 0.0384 ✓。 ## 稳健性(已实测) -- 纯 CPU(EXECUTION.json gpu:false),全视图运行 ~3 s、峰值内存 <1 GB(限额 28 GB/30 min)。-- seed 0/1/2 输出**逐位相同**(机制不消耗随机数,分层排序 stable argsort 确定);- seed 0 与 seed 1 查分逐项相同(表中 #17/#18)。-- 伪装视图(全部阶段时间 +1 天、manifest 键序打乱重排版、换路径)输出逐位相同,- 非 view_dependent;程序不读绝对时间、视图名、board/mode 字段。-- 单输入阶段视图:extrap_step 无前阶段 → α 强制 0 → 输出逐位回节点 23 基座(std_dp=0,- DE 保护区),与父节点退路相同(已实测)。-- `vec-check` 通过(正式视图与单输入视图)。+- 纯 CPU 3.2 s / 峰值 RSS 0.97 GB(限额 28 GB / 30 min);`vec-check` 通过(final 与 ablate 输出均 ok)。+- seed 0/1/2 输出逐位相同(本视图 n=锚阶段全量,无随机抽样路径;有抽样时也仅由 seed 决定)。+- 伪装视图(文件改名、manifest 键序打乱+重排版、全部时间 +1、换路径)输出逐位相同;程序不读 board/mode 做分支、无视图/数据集名、无写死细胞数。+- 单输入视图(自建测试视图):α→0,输出=扩散基座(std_dp=0),不崩。+- 确定性:机制不消耗随机数;np.random.default_rng(seed) 仅用于细胞抽样。 -## 知识来源+## 未验证 / 风险 -无新增外部生物学知识。承父节点:按型转录速度外推 = 通用机制知识(谱系推进 / 信号驱动-TF 级联在下一区间延续,节点 21/24 已验证同一算子);全部数值(速度、门控、分层阈值-|v|=1.372、位移)从视图内两个输入阶段现场计算。无外部数据、无来自已发布 / 保留阶段的-常数、无阶段尺寸假设(坐标冻结,scale_log_ratio 恒 = 地板照抄值)。+- 全部读数来自 A 半;正式分用 B 半(各自地板/天花板)。外推榜有“本地领先到正式缩水”的历史教训(方法卡:本地 54.2→官网 49.6),+1.10 的 A 半领先在 B 半可能缩小;已按平台选参而非单点尖峰以降低该风险。+- 真实 final 视图(3 输入、锚阶段可能超 max_cells 触发分层抽样、prev/anchor 时间差不同)未实测;程序路径全部按 manifest 相对量计算,无绝对时间常数。+- α 平台在 A 半上 1.5–2.0 等价,B 半最优可能偏移;γ=1.0 的精确总量守恒使 PBC 钳制几乎失效(6 细胞),亮度尾巴风险由 γ 而非钳制承担。+- 分层(+0.11,噪声内)保留与否对分数无实质影响;若审查认为噪声级机制不应保留,`--ablate` 输出(56.43)即其去除态。 -## 未验证+## 知识来源 -- B 半迁移:A 半 +0.29 低于 T2 ~1 分的半间噪声,正式分可能不涨;但方向在 16 配置网格上- 一致(除 β_h=1.5 外全部 ≥ 父),非单点尖峰。-- 真实外推括号(步长比 4/3、上一步为增长方向)上的表现无法本地检验;机制 time-free、- 不含步长比常数,行为随视图数据自适应。-- 低组压缩 β'_l<0.7 与 m<0.3 的组合未查分(#14 的 β'=0.4 已在网格内,更深处 diminishing)。+- 无外部数据(external/ 未读取)、无 prior/ 文件、无文献数值。方法学知识全部来自本树已验证节点(21/23/24/25/27/29/30 的机制与教训);速度、门控、分位阈值、钳制界全部由视图两个输入阶段现场计算。生物学假设仅为通用机制知识:细胞类型的转录速度(型内伪批量相对变化)可外推下一区间的调控程序走向(谱系推进、信号驱动的 TF 级联),与已发表节点的用法一致,不含任何保留阶段/基因型的测量值。diff --git a/solution/README.md b/solution/README.mdindex ae648ed..166575f 100644--- a/solution/README.md+++ b/solution/README.md@@ -1,23 +1,25 @@-# 速度幅度分层位移(T2HX-01/T2HX-04,节点 30)+# rel速度底物重耦合 + |v|分位数分层(节点 32) -在节点 26/28 提交态(按型 log2 速度、固定软阈值 k=0.7、α=1、γ=0.6 再归一、ε=0.6×2 步-扩散基座、坐标/组成/行序冻结)上,新增**按 |v| 的幅度分层**:过门 (型,基因) 对按原始-|v| 降序,前 m=40% 用 α×β_h(β_h=1.15),其余用 α×β'_l(β'_l=0.55)。总位移守恒-(sum|v_eff| −2.6%)地把外推幅度从低可靠小速度重分配给高信号大速度。+在父节点 30(log2 速度、k=0.7、γ=0.6、ε=0.6、绝对分层)基础上,把外推底物换成+rel 速度场 v_{t,g}=(m_a−m_p)/(m_p+1)(型内 log1p 均值、硬门控 ≥30 细胞 / m≥0.05 /+|v|≤2、软阈值 k=0.5)并**重耦合解码**:位移幅度 α=1.5、逐细胞 CP10k 总量以 γ=1.0+精确拉回自身基座总量、ε=0.4 两步支撑掩码扩散基座、PBC=10 亮度钳制;其上叠 PLAN 的+|v| 分位数分层(过门对前 40% 分位 ×1.15、其余 ×0.55,sum|v_eff| +3.6% 近守恒)。+坐标、组成、细胞数、行序冻结(shape 组恒=地板)。全部数值由视图两个输入阶段现场+计算,无外部数据、无已发布阶段常数。 -A 半 16 配置网格:平台 55.0–55.16(父 54.87);提交配置 55.160,de_score 0.1667>0.1528、-de_direction 0.2069>0.1961 同时改善;β_h=1.5 触发 mmd_u 止损,已排除。读数与全部查分-明细见 METHOD.md。+A 半(proxy_noscale):提交态 56.54,同底物分层关 56.43,父节点同尺重测 55.16;20 次网格+与判据评估见 METHOD.md(分层机制增益 +0.11 在噪声内、未过 PLAN >1.0 判据,增益+来源是底物重耦合——METHOD.md 已如实声明)。 ## 对照开关 -- `--ablate mechanism`:β_h=β'_l=1.0(统一幅度),输出**逐位等于父节点 26/28**- (本机 np.array_equal 已验证)。默认与对照输出不同 → mechanism_active=yes。-- env 探针(仅复现网格用):`VEC_STRAT_M` / `VEC_STRAT_BH` / `VEC_STRAT_BL`;- 节点 28 证否代码仍由 `VEC_GATE=z|veto`、`VEC_CONS` 驱动,默认关闭。+- `--ablate mechanism`:β_h=β'_l=1.0 → 输出逐位等于分层关底物(本机已验证)。+- env 探针(仅复现网格):`VEC_VEL` `VEC_ALPHA` `VEC_KSOFT` `VEC_GAMMA` `VEC_EPS`+ `VEC_PBC` `VEC_STRAT_M/BH/BL` `VEC_VCAP`;父节点 log2 态可复原(见 METHOD.md)。 ## 稳健性(已实测) -- 纯 CPU ~3 s / <1 GB;seed 0/1/2 输出逐位相同;伪装视图(时间 +1、键序打乱、换路径)- 输出逐位相同;单输入视图 α→0 回节点 23 基座;vec-check 通过。-- 无外部数据、无已发布/保留阶段常数;速度、门控、分层阈值全部从视图两个输入阶段现场算。+- 纯 CPU 3.2 s / 0.97 GB;vec-check 通过(final 与 ablate)。+- seed 0/1/2 输出逐位相同;伪装视图(改名、键序打乱、时间 +1、换路径)逐位相同。+- 单输入视图 α→0 回扩散基座,不崩;无随机性进入机制路径。diff --git a/solution/run.py b/solution/run.pyindex 6937d70..e1fc329 100644--- a/solution/run.py+++ b/solution/run.py@@ -1,79 +1,86 @@ #!/usr/bin/env python3-"""T2 extrapolation: spatial-neighborhood diffusion (node-23 base) + velocity--guided partial pseudobulk restoration that unlocks the DE group (family-T2HX-04), with node-30 magnitude stratification of the velocity field.--NODE 30 (this file): on the node-26/28 submitted state (per-type log2 velocity,-fixed soft threshold k=0.7, alpha=1.0, gamma=0.6 renormalization, eps=0.6 x2-diffusion), gated (type,gene) pairs are ranked by raw |v_{t,g}| descending; the-top m=40% ("high-signal": the strongly-moving core of the developmental-program, more reliable direction evidence) get effective step alpha*beta_h with-beta_h=1.15, the remaining 60% get alpha*beta_l with beta_l=0.55 (compressed:-weak velocities are diluted signal per node-28's lesson). Total displacement-is conserved (sum|v_eff| 2727 vs parent 2799, -2.6%): the mechanism-RE-ALLOCATES extrapolation amplitude by reliability instead of inflating it.-A-half grid (16 scored configs, METHOD.md): plateau 55.0-55.16 vs parent-54.87; selected config 55.160 with BOTH DE metrics strictly above parent-(de_score 0.1667>0.1528, de_direction 0.2069>0.1961) and the smallest-mmd_u/neighborhood_mmd degradation. beta_h=1.5 configs breach the mmd_u-stop-loss (0.0597>0.055) -> excluded. ``--ablate mechanism`` sets-beta_h=beta_l=1.0 (uniform amplitude) -> output bitwise the parent node-26/28-state (PLAN mechanism_off_control; verified locally).--NODE 28 history: PLAN proposed an SE-adaptive z gate replacing fixed k=0.7;-18 paired A-half queries showed every variant <= parent 54.87 -> falsified,-NO_CHANGE submitted. The z-gate (VEC_GATE=z), veto (VEC_GATE=veto) and-cross-type consistency (VEC_CONS>0) code paths remain env-gated for-reproducibility only; they are off in the submitted state.--Base (node 23, reached with VEC_ALPHA=0): anchor = last observed-input stage, n clipped to [min_cells, max_cells], stratified-by-celltype-sampling via ``take``, then 2 steps of support-masked diffusion on the-coordinates-15-NN graph, Y <- clip(Y + eps*(WY - Y), 0) with eps=0.6 applied-only to originally measured entries (x>0; zero pattern preserved), followed by-per-gene column scaling that restores the anchor pseudobulk EXACTLY -> dp = 0--> DE no-change protection, coordinates/composition/row order untouched.--Mechanism (alpha != 0): the column-scaling restoration target is no longer-the anchor pseudobulk but a velocity-tilted one,-- pb_target_g = pb_anchor_g * 2**(alpha * vbar_g),- vbar_g = sum_t (n_t/n) * v_{t,g} (output-composition-weighted)- v_{t,g} = log2(pb_anchor_{t,g}) - log2(pb_prev_{t,g}) (per cell type)--computed from the two input stages' own pseudobulks (hard gates: type present-with >= MIN_TYPE_CELLS cells in both stages; gene pb >= GENE_FLOOR in both;-|v| <= V_CAP). dp therefore carries the direction each gene moved over the-last observed step, continued by alpha steps -> de_score / de_direction can-leave the no-change floor. Two decodes of the same velocity field:-- pertype (SUBMITTED): exact restoration first, then per-cell multiplicative- displacement x' = x * 2**(alpha * soft_k(v_{t(i),g})) (soft threshold- k keeps only confidently moving genes) with node-24's per-cell- renormalization pulling each cell's linear (CP10k) total back toward its- own original total with power gamma; alpha=0 skips the block (bitwise- node 23).- colscale (PLAN's first decode; measured, kept for reproducibility): one- per-gene column scaling of the smoothed matrix to pb_target (alpha=0- bitwise = node 23 exact restoration). On the A half this decode left- de_direction ~ 0 (composition-weighted averaging cancels the per-type- direction signal) while pertype reached de_direction 0.20 -> pertype is- the submitted decode; both share the same velocity field and gates.--Biology: transcriptional velocity of a cell type over an observed interval-(gene-wise log fold change of its pseudobulk) extrapolates the regulatory-programs acting over the next interval (lineage progression, signal-driven-TF cascades; the same per-type log-FC extrapolation validated in nodes-21/24). No external data, no constants from published/held-out stages; every-number is computed from the view's own inputs.--Single-input fallback: without a previous stage no velocity exists -> alpha-is forced to 0 and the output is bitwise node 23 (which is bitwise copy_last-under its own no-change protection).+"""T2 extrapolation: rel-velocity multiplicative extrapolation RE-COUPLED to+full per-cell CP10k renormalization (gamma=1.0) and amplitude alpha=1.5 on the+eps=0.4 support-masked spatial-diffusion base, plus |v|-quantile magnitude+stratification of the velocity field (family T2HX-01).++NODE 32 (this file). SUBMITTED state (A-half grid, 19 scored configs, see+METHOD.md): rel velocity, k=0.5, alpha=1.5, gamma=1.0, eps=0.4, PBC=10,+stratification m=0.4, beta_h=1.15, beta_l=0.55 -> A half 56.54 (parent+node-30 re-measured on the same A half: 55.16, its B-half node score is+55.44; stratification-off substrate 56.43).++ rel velocity (node 27/29 lineage):+ v_{t,g} = (m_a - m_p) / (m_p + 1), m = within-type mean of log1p values+ (bounded below by -1, denominator >= 1; low-expression noise genes are+ naturally damped). Hard gates: type with >= MIN_TYPE_CELLS cells in both+ input stages; gene m >= GENE_FLOOR in both; |v| <= V_CAP.+ Soft threshold k=0.5 leaves the confidently-moving core (407 gated+ (type,gene) pairs on the proxy view; the rel |v| distribution is far more+ compressed than log2's).++ RE-COUPLED decode (this node's main measured gain vs the parent's log2+ state): per-cell multiplicative displacement x' = Y0 * 2**(alpha *+ soft_k(v)), alpha=1.5 (the rel field is amplitude-compressed relative to+ log2, so the step needs re-scaling), then the per-cell linear (CP10k) total+ is pulled back to the cell's OWN base total with power gamma=1.0 (exact+ total conservation per cell: displacement changes composition only, never+ library size). The literal node-29 reconstruction (alpha=1, gamma=0.3)+ measured 53.50 on the A half; gamma 0.3->0.75->0.9->1.0 improved+ monotonically (53.50/54.37/54.74/54.94) and alpha 1->1.5->2.0 gave+ 54.94/56.43/56.43 -> plateau alpha in [1.5, 2.0], center 1.5 chosen+ (smallest mmd_u of the plateau).++ log2 velocity (parent node 30 state, kept env-gated for reproducibility):+ v_{t,g} = log2(pb_a) - log2(pb_p), k=0.7, eps=0.6, gamma=0.6, alpha=1+ (VEC_VEL=log2 + the parent's constants reproduces it).++Magnitude stratification (PLAN mechanism, node-30 lineage re-coupled): gated+(type,gene) pairs (soft-threshold output != 0) are ranked by raw |v|+descending; the top STRAT_M quantile gets effective step alpha*STRAT_BH, the+rest alpha*STRAT_BL. Because the rel |v| distribution differs from log2+(bounded, compressed), the split is BY QUANTILE of the actual gated pairs,+never by an absolute |v| constant. Total displacement is approximately+conserved (+3.6% on the proxy view): the mechanism RE-ALLOCATES amplitude by+reliability instead of inflating it. Measured effect on this substrate:++0.11 A-half points (56.54 vs 56.43 strat-off) - within noise, below the+PLAN's >1.0 criterion -> stratification is NOT the source of this node's+gain (see METHOD.md); it is kept because it is harmless-to-marginally-+positive across m in {0.3,0.4} and beta_l in {0.55,0.7} and defines the+``--ablate mechanism`` contrast: STRAT_BH=STRAT_BL=1.0 (uniform amplitude on+the same substrate) -> output bitwise the stratification-off substrate.++Brightness clamp (node 25 lineage, VEC_PBC): after the per-cell renormalization,+cells whose linear (CP10k) total exceeds VEC_PBC x median(base totals) are+scaled uniformly back to that bound (with gamma=1.0 it only touches the 6+naturally-brightest cells; VEC_PBC=0 off).++Base (node 23 operator): anchor = last observed input stage, n clipped to+[min_cells, max_cells], stratified-by-celltype sampling via ``take``, then 2+steps of support-masked diffusion on the coordinates-15-NN graph,+Y <- clip(Y + eps*(WY - Y), 0) applied only to originally measured entries+(x>0; zero pattern preserved), followed by per-gene column scaling that+restores the anchor pseudobulk EXACTLY. Coordinates, composition, row order+and cell count are frozen throughout.++Decode (pertype): per-cell multiplicative displacement+x' = Y0 * 2**(alpha * soft_k(v_{t(i),g})) with per-cell renormalization+pulling each cell's linear total back toward its own base total with power+gamma. alpha=0 skips the block (bitwise the diffusion base, whose exact+pseudobulk restoration keeps dp = 0 -> DE no-change protection).++Biology: transcriptional velocity of a cell type over the last observed+interval extrapolates the regulatory programs acting over the next interval+(lineage progression, signal-driven TF cascades; validated in nodes 21/24/27/+29). No external data, no constants from published/held-out stages; every+number (velocities, gates, stratification thresholds, clamp bound) is computed+from the view's own inputs.++Single-input fallback: without a previous stage no velocity exists -> alpha is+forced to 0 and the output is bitwise the diffusion base. View-independent: no absolute stage names or times are read; the mechanism is-time-free (alpha is a fixed damping constant, not a stage-derived number).-Deterministic given --seed (the mechanism consumes no randomness).+time-free. Deterministic given --seed (the mechanism consumes no randomness). """ from __future__ import annotations@@ -96,50 +103,60 @@ from src.task2_spatial.view_io import ( write_t2, ) -# --- node-23 base (submitted state of the parent) --------------------------DEFAULT_EPS = float(os.environ.get("VEC_EPS", "0.6"))+# --- diffusion base (node 23 operator) ---------------------------------------+DEFAULT_EPS = float(os.environ.get("VEC_EPS", "0.4")) DEFAULT_STEPS = int(os.environ.get("VEC_STEPS", "2")) DEFAULT_MODE = os.environ.get("VEC_MODE", "pbrestore") DP_BUDGET = 0.003 GENE_REVERT = 0.1 # per-gene |unintended dp| guard (node-23 PLAN step 5) K_NN = int(os.environ.get("VEC_KNN", "15")) -# --- velocity mechanism (this node) ------------------------------------------# Submitted state (A-half dose-response, see METHOD.md): pertype decode,-# alpha=1.0, soft threshold k=0.7, renormalization gamma=0.6 -> 54.87-# (node-23 base 50.58, tree best node 24 54.13 on the same A half).-DEFAULT_ALPHA = float(os.environ.get("VEC_ALPHA", "1.0"))+# --- velocity mechanism -------------------------------------------------------+# SUBMITTED state (A-half grid, METHOD.md): rel velocity, alpha=1.5, k=0.5,+# gamma=1.0 (exact per-cell CP10k total conservation), eps=0.4, PBC=10,+# stratification m=0.4/bh=1.15/bl=0.55 -> A half 56.54 (strat-off 56.43,+# parent node-30 re-measured A half 55.16). Parent log2 state: VEC_VEL=log2+# VEC_ALPHA=1.0 VEC_KSOFT=0.7 VEC_GAMMA=0.6 VEC_EPS=0.6.+DEFAULT_ALPHA = float(os.environ.get("VEC_ALPHA", "1.5")) DEFAULT_DECODE = os.environ.get("VEC_DECODE", "pertype") # colscale | pertype+VEL_MODE = os.environ.get("VEC_VEL", "rel") # rel | log2 MIN_TYPE_CELLS = int(os.environ.get("VEC_MINCELLS", "30")) GENE_FLOOR = float(os.environ.get("VEC_GFLOOR", "0.05")) V_CAP = float(os.environ.get("VEC_VCAP", "2.0"))-K_SOFT = float(os.environ.get("VEC_KSOFT", "0.7")) # pertype soft threshold-GAMMA_RENORM = float(os.environ.get("VEC_GAMMA", "0.6")) # pertype total pullback--# --- magnitude stratification (node 30): reliability-weighted per-pair alpha ---# For gated (type,gene) pairs (soft_threshold output != 0), rank by raw |v|-# descending; the top STRAT_M fraction ("high-signal", the strongly-moving-# core of the developmental program) gets effective alpha * STRAT_BH, the rest-# gets alpha * STRAT_BL. BH=BL=1.0 is bitwise the parent (node 26/28 state)-# and is what ``--ablate mechanism`` selects (PLAN mechanism_off_control).-STRAT_M = float(os.environ.get("VEC_STRAT_M", "0.4")) # top fraction+K_SOFT = float(os.environ.get("VEC_KSOFT", "0.5")) # pertype soft threshold+GAMMA_RENORM = float(os.environ.get("VEC_GAMMA", "1.0")) # total pullback power+PBC_CLAMP = float(os.environ.get("VEC_PBC", "10.0")) # 0 = off (node-25 clamp)++# --- magnitude stratification (node 30 mechanism, |v|-quantile re-coupled) ----+# Gated (type,gene) pairs ranked by raw |v| descending; top STRAT_M quantile+# gets alpha*STRAT_BH, the rest alpha*STRAT_BL. BH=BL=1.0 disables (this is+# what ``--ablate mechanism`` selects; PLAN mechanism_off_control).+STRAT_M = float(os.environ.get("VEC_STRAT_M", "0.4")) # top quantile fraction STRAT_BH = float(os.environ.get("VEC_STRAT_BH", "1.15")) STRAT_BL = float(os.environ.get("VEC_STRAT_BL", "0.55")) +# --- node-28 falsified gates (kept env-gated for reproducibility only) --------+GATE_MODE = os.environ.get("VEC_GATE", "fixed") # z | fixed | veto+Z_MIN = float(os.environ.get("VEC_ZMIN", "2.0"))+Z_K = float(os.environ.get("VEC_ZK", "1.0"))+ def stratify(Vs: np.ndarray, absV: np.ndarray, m: float, bh: float, bl: float) -> tuple[np.ndarray, dict]:- """Scale gated pairs by bh (top-m |v|) or bl (rest). Deterministic."""+ """Scale gated pairs by bh (top-m |v| quantile) or bl (rest). Deterministic.""" out = Vs.copy() mask = Vs != 0 n_pairs = int(mask.sum()) if n_pairs == 0 or m <= 0: return out, {"n_pairs": n_pairs, "n_high": 0, "thr": 0.0,- "sum_abs": float(np.abs(out).sum())}+ "sum_abs": float(np.abs(out).sum()), "qs": ()} flat_mask = mask.ravel() idx = np.flatnonzero(flat_mask) abs_flat = np.abs(absV).ravel()- order = idx[np.argsort(-abs_flat[idx], kind="stable")]+ gated_abs = abs_flat[idx]+ qs = tuple(float(q) for q in np.quantile(+ gated_abs, [0.1, 0.25, 0.5, 0.75, 0.9, 0.95, 0.99]))+ order = idx[np.argsort(-gated_abs, kind="stable")] n_high = int(round(m * n_pairs)) n_high = max(0, min(n_high, n_pairs)) M = np.full(out.shape, bl, dtype=np.float64)@@ -148,23 +165,7 @@ def stratify(Vs: np.ndarray, absV: np.ndarray, m: float, bh: float, out = np.where(mask, out * M, out) thr = float(abs_flat[order[n_high - 1]]) if n_high > 0 else 0.0 return out, {"n_pairs": n_pairs, "n_high": n_high, "thr": thr,- "sum_abs": float(np.abs(out).sum())}---# --- SE-adaptive z gate (node 28, falsified; kept for reproducibility) --------# PLAN's SE formula (var_log2 / (n * pb^2 * ln2^2)) measured >50% of gated-# (type,gene) pairs with SE>1 (median z=0.31) -> PLAN risk-1 fallback: the-# direct standard error of the per-type mean in log space,-# SE(v_{t,g}) = sqrt(var_a/n_a + var_p/n_p) / ln2,-# with var_* the within-type cell-to-cell variance of the log1p values (the-# space pb is computed in). Median SE 0.095, median z 6.6 on the proxy view.-GATE_MODE = os.environ.get("VEC_GATE", "fixed") # z | fixed | veto-Z_MIN = float(os.environ.get("VEC_ZMIN", "2.0"))-Z_K = float(os.environ.get("VEC_ZK", "1.0"))-# alternative mechanisms (backup directions after the z gate measured flat):-CONS_W = float(os.environ.get("VEC_CONS", "0.0")) # cross-type consistency-CONS_NORM = bool(int(os.environ.get("VEC_CONSNORM", "1")))-SHRINK = float(os.environ.get("VEC_SHRINK", "0.0")) # pull toward consensus+ "sum_abs": float(np.abs(out).sum()), "qs": qs} def diffuse(X64: np.ndarray, coords: np.ndarray, eps: float, mode: str,@@ -206,16 +207,14 @@ def diffuse(X64: np.ndarray, coords: np.ndarray, eps: float, mode: str, def type_velocity(prev_stage, anch_X: np.ndarray, anch_labels: np.ndarray,- out_labels: np.ndarray, n_out: int, g: int):- """Composition-weighted per-gene log2 velocity vbar_g and per-type tables.-- vbar_g = sum_t (n_t/n_out) * v_{t,g}; v_{t,g} = log2 pb_anchor_t - log2- pb_prev_t with hard gates (type support, gene floor, |v| cap). Types with- no previous-stage support get v = 0 (no evidence -> no displacement).- Returns (vbar, v_by_type, se_by_type, n_used): se_{t,g} is the standard- error of v_{t,g} from the within-type cell-to-cell variance of the log1p- values in each stage, SE = sqrt(var_a/n_a + var_p/n_p)/ln2 (delta method- on the stage means; the space pb is computed in).+ out_labels: np.ndarray, n_out: int, g: int, vel_mode: str):+ """Per-type velocity tables (rel or log2) and composition-weighted vbar.++ rel: v_{t,g} = (m_a - m_p) / (m_p + 1), m = within-type mean of log1p.+ log2: v_{t,g} = log2(m_a) - log2(m_p).+ Hard gates: type support >= MIN_TYPE_CELLS in both stages; gene m >=+ GENE_FLOOR in both stages; |v| <= V_CAP. Types without previous-stage+ support get v = 0 (no evidence -> no displacement). """ Xp = prev_stage.X.toarray().astype(np.float64) if sp.issparse(prev_stage.X) \ else np.asarray(prev_stage.X, dtype=np.float64)@@ -242,7 +241,10 @@ def type_velocity(prev_stage, anch_X: np.ndarray, anch_labels: np.ndarray, pb_a = Xa_t.mean(axis=0) pb_p = Xp_t.mean(axis=0) gate = (pb_a >= GENE_FLOOR) & (pb_p >= GENE_FLOOR)- v = np.log2(np.maximum(pb_a, 1e-12)) - np.log2(np.maximum(pb_p, 1e-12))+ if vel_mode == "rel":+ v = (pb_a - pb_p) / (pb_p + 1.0)+ else:+ v = np.log2(np.maximum(pb_a, 1e-12)) - np.log2(np.maximum(pb_p, 1e-12)) v = np.where(gate, np.clip(v, -V_CAP, V_CAP), 0.0) se = np.sqrt(Xa_t.var(axis=0) / n_t + Xp_t.var(axis=0) / n_p) / ln2 se = np.where(gate, np.maximum(se, 1e-9), np.inf)@@ -271,13 +273,7 @@ def z_threshold(v: np.ndarray, se: np.ndarray, z_min: float, def both_threshold(v: np.ndarray, se: np.ndarray, k: float, z_min: float) -> np.ndarray:- """Fixed magnitude soft threshold k + significance veto z >= z_min.-- Keeps the parent's magnitude selectivity (only strong movers survive k)- but drops strong-yet-unreliable velocities (small types / noisy genes,- |v|>k with z below z_min): the adaptive-significance-gate direction of- node-26 ANALYSIS suggestion 3.- """+ """Fixed magnitude soft threshold k + significance veto z >= z_min.""" z = np.abs(v) / se keep = (z >= z_min) & (v != 0.0) return np.where(keep, soft_threshold(v, k), 0.0)@@ -289,9 +285,6 @@ def main() -> None: parser.add_argument("--out", required=True) parser.add_argument("--seed", type=int, default=0) parser.add_argument("--ablate", default=None)- parser.add_argument("--fixed-k", type=float, default=None,- help="off-control: skip SE/z gate, use this fixed "- "soft threshold (parent node-26 behaviour)") args = parser.parse_args() ablated = args.ablate is not None@@ -300,13 +293,12 @@ def main() -> None: decode = DEFAULT_DECODE gate_mode = GATE_MODE k_soft = K_SOFT+ gamma = GAMMA_RENORM strat_m, strat_bh, strat_bl = STRAT_M, STRAT_BH, STRAT_BL if ablated:- # PLAN mechanism_off_control: beta=beta'=1.0 -> uniform amplitude,- # output bitwise the parent (node 26/28) state.+ # PLAN mechanism_off_control: beta_h=beta'_l=1.0 -> uniform amplitude on+ # the same substrate; output bitwise the stratification-off substrate. strat_m, strat_bh, strat_bl = 0.0, 1.0, 1.0- if args.fixed_k is not None:- gate_mode, k_soft = "fixed", args.fixed_k manifest = load_manifest(args.data) genes = panel_genes(args.data, manifest)@@ -319,6 +311,7 @@ def main() -> None: else: rows = np.sort(rng.choice(stage.n, size=n, replace=True)) print(f"[diag] base copy_last eps={eps} alpha={alpha} decode={decode} "+ f"vel={VEL_MODE} k={k_soft} gamma={gamma} pbc={PBC_CLAMP} " f"n={rows.size}", file=sys.stderr) X = stage.X[rows].toarray().astype(np.float32)@@ -346,8 +339,8 @@ def main() -> None: if prev_entry is not None: prev_stage = read_stage(args.data, prev_entry, genes) vbar, v_by_type, se_by_type, n_used = type_velocity(- prev_stage, X64, out_labels, out_labels, rows.size, g)- print(f"[diag] velocity types_used={n_used} "+ prev_stage, X64, out_labels, out_labels, rows.size, g, VEL_MODE)+ print(f"[diag] velocity mode={VEL_MODE} types_used={n_used} " f"vbar_std={vbar.std():.4f} vbar_absmax={np.abs(vbar).max():.4f} " f"nonzero={int((vbar != 0).sum())}", file=sys.stderr) del prev_stage@@ -358,7 +351,6 @@ def main() -> None: if decode == "colscale" or alpha == 0.0: # ---- partial restoration to pb_target = pb_orig * 2**(alpha*vbar) --- # alpha = 0 is bitwise the node-23 exact restoration. col0 = X64.sum(axis=0) colS = Y.sum(axis=0) s = np.where(colS > 0, col0 / np.maximum(colS, 1e-12), 1.0)@@ -374,12 +366,11 @@ def main() -> None: col0 = X64.sum(axis=0) colS = Y.sum(axis=0) s = np.where(colS > 0, col0 / np.maximum(colS, 1e-12), 1.0)- Y0 = Y * s # node-23 restored base+ Y0 = Y * s # diffusion-restored base utypes, uidx = np.unique(out_labels, return_inverse=True) Vt = np.zeros((utypes.size, g), dtype=np.float64) Vs = np.zeros((utypes.size, g), dtype=np.float64) unknown = 0- n_keep_z = n_keep_fk = 0 for j, t in enumerate(utypes): v = v_by_type.get(str(t)) if v is None:@@ -394,60 +385,42 @@ def main() -> None: Vs[j] = both_threshold(v, se, k_soft, Z_MIN) else: Vs[j] = soft_threshold(v, k_soft)- n_keep_z = int(((Vs != 0) & (np.abs(Vt) > 0)).sum())- n_keep_fk = int((np.abs(soft_threshold(Vt, K_SOFT)) > 0).sum())+ n_keep = int((Vs != 0).sum()) - # --- magnitude stratification (node 30 mechanism) --------------------+ # --- magnitude stratification (|v|-quantile re-coupled) -------------- if strat_m > 0 and (strat_bh != 1.0 or strat_bl != 1.0): sum_before = float(np.abs(Vs).sum()) Vs, sdiag = stratify(Vs, Vt, strat_m, strat_bh, strat_bl)+ qs = " ".join(f"{q:.3f}" for q in sdiag["qs"])+ dev = (sdiag["sum_abs"] - sum_before) / max(sum_before, 1e-12) * 100 print(f"[diag] strat m={strat_m} bh={strat_bh} bl={strat_bl} " f"n_high={sdiag['n_high']}/{sdiag['n_pairs']} "- f"thr|v|={sdiag['thr']:.3f} "- f"sum|v_eff| {sum_before:.0f}->{sdiag['sum_abs']:.0f}",- file=sys.stderr)-- # --- backup mechanism: cross-type direction-consistency gate -------- # For each gene g, measure how much the output-composition-weighted- # per-type velocities agree in DIRECTION:- # c_g = |sum_t w_t v_{t,g}| / sum_t w_t |v_{t,g}| in [0,1]- # w_t = n_t/n_out. c_g -> 1 when all types push gene g the same way- # (a coherent program, likely to extrapolate), c_g -> 0 when types- # cancel (gene moving in opposing directions across lineages -> the- # per-cell decode cannot trust a single sign). Damping v by- # c_g**CONS_W suppresses incoherent genes and sharpens de_direction,- # the weakest expression_change metric. CONS_W=0 disables (parent).- if CONS_W > 0:- cnt_out = np.bincount(uidx, minlength=utypes.size).astype(np.float64)- w_t = cnt_out / max(cnt_out.sum(), 1.0) # (n_types,)- num = np.abs(w_t @ Vs) # (g,)- den = (w_t @ np.abs(Vs)) + 1e-12- coh = np.clip(num / den, 0.0, 1.0)- sum_before = float(np.abs(Vs).sum())- Vs = Vs * np.power(coh, CONS_W)[None, :]- sum_after = float(np.abs(Vs).sum())- if CONS_NORM and sum_after > 0:- Vs *= sum_before / sum_after- print(f"[diag] consistency CONS_W={CONS_W} norm={int(CONS_NORM)} "- f"coh_med={np.median(coh):.3f} "- f"vsum {sum_before:.0f}->{sum_after:.0f}"- f"{'->%d (renorm)' % sum_before if CONS_NORM else ''}",- file=sys.stderr)+ f"thr|v|={sdiag['thr']:.3f} |v|q10/25/50/75/90/95/99={qs} "+ f"sum|v_eff| {sum_before:.0f}->{sdiag['sum_abs']:.0f} "+ f"({dev:+.1f}%)", file=sys.stderr) shift_t = np.power(2.0, alpha * Vs) # (n_types, g) Xs = Y0 * shift_t[uidx] # node-24 per-cell renormalization in linear CP10k space- if GAMMA_RENORM > 0:- T0 = np.expm1(np.clip(Y0, 0, 20.0)).sum(axis=1)+ T0 = np.expm1(np.clip(Y0, 0, 20.0)).sum(axis=1)+ if gamma > 0: T1 = np.expm1(np.clip(Xs, 0, 20.0)).sum(axis=1)- f = np.power(T0 / np.maximum(T1, 1e-12), GAMMA_RENORM)+ f = np.power(T0 / np.maximum(T1, 1e-12), gamma) Xs = np.log1p(np.expm1(np.clip(Xs, 0, 20.0)) * f[:, None])+ # node-25 brightness clamp: linear total <= PBC_CLAMP x median(T0)+ n_clamped = 0+ if PBC_CLAMP > 0:+ T2 = np.expm1(np.clip(Xs, 0, 20.0)).sum(axis=1)+ bound = PBC_CLAMP * float(np.median(T0))+ hot = T2 > bound+ n_clamped = int(hot.sum())+ if n_clamped:+ fc = np.where(hot, bound / np.maximum(T2, 1e-12), 1.0)+ Xs = np.log1p(np.expm1(np.clip(Xs, 0, 20.0)) * fc[:, None]) Xs = np.clip(Xs, 0.0, None)- print(f"[diag] pertype gate={gate_mode}"- f"{f' zmin={Z_MIN} zk={Z_K}' if gate_mode == 'z' else f' k={k_soft}'}"- f" kept_pairs={n_keep_z} (fixed-k0.7 would keep {n_keep_fk}) "- f"sum|v_soft|={np.abs(Vs).sum():.0f} "- f"cells_without_velocity={unknown} "+ print(f"[diag] pertype gate={gate_mode} k={k_soft} "+ f"kept_pairs={n_keep} sum|v_soft|={np.abs(Vs).sum():.0f} "+ f"cells_without_velocity={unknown} clamped={n_clamped} " f"shift_absmax_log2={np.abs(alpha * Vs).max():.3f}", file=sys.stderr) pb_intended = None # guard skipped for the pertype decode
调研来源?调研员查到并用到的知识条目和文献检索结果(只列标题和编号)。
用到的知识库条目
| 编号 | 标题 | 出处 |
|---|---|---|
| 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 |
| k009 | Conditional / OT flow matching for population transport | arXiv:2210.02747 (Lipman et al., Flow Matching for Generative Modeling) |
分析结果?分析员写的 ANALYSIS.json:改了什么、各组分数怎么变、假设是否成立、经验和下一步建议。
| 改了什么 | 把父节点30的 log2 速度底物(k=0.7, α=1, γ=0.6, ε=0.6)换成 rel 速度 v=(m_a−m_p)/(m_p+1) 并重耦合解码(ε=0.4, k=0.5, α=1.5, γ=1.0 逐细胞 CP10k 总量精确守恒, PBC=10),其上叠 PLAN 的 |v| 分位数分层(m=0.4, β_h=1.15, β'_l=0.55);坐标/组成/行序/细胞数冻结。实际增益来自底物重耦合,分层只贡献 +0.12(噪声内)。 |
|---|---|
| 各组分数的变化 | cell_state:变好 +1.51 (57.42→58.93):mmd_u 0.04864→0.04684(得分 +0.12)、variogram 0.03838→0.03521(得分 +0.26),略超噪声。 expression_change:变好 +3.36 (55.27→58.63):de_direction 原始值 0.2038→0.3728(得分 +0.73)为主增益,de_score 0.1667→0.1944(得分 +0.11),超过噪声。 local_spatial:+0.53 (59.05→59.58):neighborhood_mmd 0.07817→0.07648(得分 +0.13),在噪声内偏正。 shape_scale:不变 50.00→50.00:坐标冻结,d2_shape/occupancy_dice/scale_log_ratio 三项 skill 恒 0.5(地板)。 |
| family_id | T2HX-01 |
| 假设是否成立 | 否 |
| 经验 |
|
| mechanism_active | 否 |
| 下一步建议 |
|
对话摘要?每个角色和大模型对话的统计:轮数、工具调用、用时、token 数和最后的回答摘录;原始记录只给路径。
只给统计和最后回答的摘录;完整对话请到原始记录位置里列出的文件看。
分析员
| 角色?调研员写计划、工程师改代码、分析员解读分数、审查员检查作弊。 | 分析员 alibaba-token-plan-cn/qwen3.8-max |
|---|---|
| 调用次数 | 1 次 |
| 轮数?大模型一共回复了几轮(每轮可以调用多个工具)。 | 4 |
| 工具调用?大模型调用读文件、执行命令等工具的次数,按工具名统计。 | 共 3 次:bash 2、write 1 |
| 用时 | 1 分 |
| token 数?输入 / 输出(含思考)的 token 数,来自接口返回的用量。 | 输入 25,377 · 输出 1,430 · 思考 2,264 |
| 任务(第一行) | 分析节点 n32 的打分结果,写 ANALYSIS.json |
| 最后的回答(摘录) | ANALYSIS.json written |
| 原始记录位置?完整对话记录在 Spark 上的文件路径;看板不复制原始内容。 | /home/spark-longxinyang/vec/runs/formal/20261003-172000-search-t2-heart-extrap-chain-12h/nodes/32/analyst.jsonl 12 KB /home/spark-longxinyang/vec/runs/formal/20261003-172000-search-t2-heart-extrap-chain-12h/nodes/32/analyst.stderr |
工程师
| 角色 | 工程师 alibaba-token-plan-cn/qwen3.8-max |
|---|---|
| 调用次数 | 1 次 |
| 轮数 | 60 |
| 工具调用 | 共 74 次:bash 54、edit 12、read 3、write 3、todowrite 2 |
| 用时 | 39 分 |
| token 数 | 输入 157,215 · 输出 30,326 · 思考 50,472 |
| 任务(第一行) | 按计划修改程序:rel速度底物上重耦合幅度分层外推(节点29基座+节点30分层) |
| 最后的回答(摘录) | 完成。总结: **做了什么**:按 PLAN 把节点 29 的 rel 速度底物移植进父节点 30 的程序并重耦合 |v| 分位数分层。PLAN 字面重建(γ=0.3、α=1)A 半仅 53.50(de 两项与节点 29 记录几乎一致,分布三项不符)→ 在 A 半上重扫 γ(0.3→1.0 单调升)与 α(平台 1.5–2.0),得再耦合底物 56.43;其上分层(m=0.4/β_h=1.15/β'_l=0.55,sum|v_eff| +3.6% 近守恒)= **56.54(提交态)**。 **查分**(20/20 用完):提交态 A 半 56.54;同底物分层关 56.43;父节点同尺重测 55.16 → A 半对 A 半 **+1.38**,五项排名原始值全部不劣于父(de_direction .2069→.3746 为主增益,正是父最弱组 expression_change 55.32→58.67)。**PLAN 分层机制本身 +0.11(噪声内,未过 >1.0 判据)→ 作为增益来源被证否**,已按任务书 §2 交备选机制(rel 场+γ=1.0 全量再归一+α=1.5 幅度重标定)而非退回父节点;`--ablate mechanism` 逐位=分层关底物(mechanism_active=yes)。稳健性全过:seed 0/1/2 逐位相同、伪装视图(改名/键序/时间+1)逐位相同、单输入退路、vec-check、3.2s/0.97GB。 **下一步最值得试**:① 在此底物上做 k–α 二维细扫(k=0.45/α=1.6 附近,平台内 mmd_u 余量到 0.055 还有空间);② nbhd_mmd(58.93,四组中仍最弱、权重 25):尝试位移后对高 |v| 基因做坐标图上的轻度定向平滑;③ shape 组 25 分恒为地板是最大盲区,但 proxy_noscale 钉死尺度项,只能在 final/正式尺上验证只改坐标形状(不改 RMS)的机制。 |
| 原始记录位置 | /home/spark-longxinyang/vec/runs/formal/20261003-172000-search-t2-heart-extrap-chain-12h/nodes/32/engineer.jsonl 410 KB /home/spark-longxinyang/vec/runs/formal/20261003-172000-search-t2-heart-extrap-chain-12h/nodes/32/engineer.stderr |
调研员
| 角色 | 调研员 alibaba-token-plan-cn/qwen3.8-max |
|---|---|
| 调用次数 | 1 次 |
| 轮数 | 1 |
| 工具调用 | 共 0 次:— |
| 用时 | 11 分 |
| token 数 | 输入 21,158 · 输出 20,279 · 思考 8,192 |
| 任务(第一行) | 为节点 n32(改进,父节点 n30)写改进计划 PLAN.json |
| 最后的回答(摘录) | 偏差>±20% 不查分,沿用节点30做法)。步骤3(vec-score A半网格,约12次):Q1=分层关(β_h=β'_l=1)、γ=0.3,必须≈节点29(~56.2)作为移植正确性+本节点机制的关闭基线;Q2–4=分层开(m=0.4,β_h=1.15,β'_l=0.55)、γ∈{0.3,0.4,0.5};Q5–6=取最优γ、m∈{0.3,0.5};Q7–8=取最优m、β_h∈{1.1,1.2};Q9=取最优、β'_l=0.7;Q10=最优配置 seed1 复现;余约8次留作复跑/边界。步骤4(判据):最优分层开须比 Q1(分层关,同底物)高>1.0 A半分,且 de_score 与 de_direction 同时≥Q1、mmd_u≤0.055 止损,差值须过 seed1;不满足则机制被证否,按 NO_CHANGE 提交(默认输出逐位=父节点30)。单输入退路:无前一阶段则无 rel 速度→α 强制为0→逐位=copy_last。视图无关:不读任何阶段名/时间,机制无时间常数。",
"expected_groups": ["expression_change", "cell_state", "local_spatial"],
"risks": "1) 分层在 rel 底物上边际收益≈0(rel 的 /(m_p+1) 已天然压低低表达噪声基因,分层或变冗余)→机制未生效;Engineer 应在 Q1 vs Q2–4 配对 A 半最先发现,Δ<1 即停止查分并提交 NO_CHANGE,不烧预算。2) 与兄弟节点31(父=29,很可能也加分层)撞车→本方案以'|v|分位数自适应分层+γ重耦合'为差异点;若最终配置与既有节点逐位相同,提交 NO_CHANGE 而非复制。3) 更干净的 rel 场上 β_h 过高可能击穿 mmd_u→β_h≤1.2、止损 mmd_u≤0.055。4) 外推榜本地高估(ANALYSIS 教训:本地领先到正式缩水、分组方向可相反)→要求多配置平台+seed1 复现+>1 分边际,不追单点最高。5) rel |v| 分位退化(过门对太少)→无查分诊断预过滤。6) 移植 bug→Q1 必须复现节点29(~56.2),明显偏低先调试再继续。",
"family_id": "T2HX-01",
"mechanism": "在节点29的 rel 速度+ε=0.4 平滑底物上,把节点30的幅度分层按 rel 场 |v| 分位数重耦合:高 |v| 分位的(型,基因)对×β_h、低分位对×β'_l,总位移近守恒地按速度可靠性重分配外推幅度,并同步重耦合逐细胞总量回拉 γ。",
"vs_constant_shift": "这是逐细胞乘法位移 x·2^(α·soft_k(v_{type,g})):步长由细胞自身表达与其所属型的相对速度共同决定,逐细胞 CP10k 总量按 γ 回拉、零值保持零;按型常数位移则对型内所有细胞叠加同一每基因向量,无法依赖细胞自身表达、不能保零/保总量。本机制还在(型,基因)对之间按 |v| 分位数重分配幅度,是基因级+细胞级的可靠性加权,既非每型常数位移向量,也非只改型比例的组成重加权。",
"mechanism_evidence": "1) 重分配而非放量:打印分层前后 sum|v_eff|(目标偏差±3%内)、β 调度与 |v| 分位阈值。2) 机制因果隔离:同一 rel 底物上分层开 vs 分层关(--ablate)配对 A 半,报告 de_score/de_direction/mmd_u/variogram/neighborhood_mmd 各项差值;--ablate 输出须逐位等于分层关底物。3) 两项 DE 同时≥分层关底物(目标 de_direction≥0.28、de_score≥0.19)。4) 受影响范围:被重加权的(型,基因)对数与受影响细胞数(应覆盖有速度型的绝大多数细胞,非仅少数)。5) 四组分分解,并与 Q1(节点29等效)及父节点30对比。6) mmd_u≤0.055 止损且 variogram 不劣化。",
"mechanism_off_control": "--ablate mechanism 置 β_h=β'_l=1(rel 底物上统一幅度)→分层退化,输出应逐位等于分层关底物(=节点29等效,用 np.array_equal 验证 X/坐标/基因序/细胞序)。预期:ablate≈56.2(节点29水平),full=ablate+分层增益;若 full 与 ablate 逐位相同或差<噪声,判定机制未运行,提交 NO_CHANGE(=父节点30)。二级对照 α=0→逐位=copy_last(50.0)。",
"sources": []}
``` |
| 原始记录位置 | /home/spark-longxinyang/vec/runs/formal/20261003-172000-search-t2-heart-extrap-chain-12h/nodes/32/researcher.jsonl 73 KB /home/spark-longxinyang/vec/runs/formal/20261003-172000-search-t2-heart-extrap-chain-12h/nodes/32/researcher.stderr |
审查员
| 角色 | 审查员 alibaba-token-plan-cn/qwen3.8-max |
|---|---|
| 调用次数 | 1 次 |
| 轮数 | 7 |
| 工具调用 | 共 9 次:read 5、bash 3、write 1 |
| 用时 | 1 分 |
| token 数 | 输入 29,956 · 输出 1,724 · 思考 1,037 |
| 任务(第一行) | 审查节点 n32 的程序是否越界读取、写死目标、钻评分器漏洞 |
| 最后的回答(摘录) | REVIEW.json written |
| 原始记录位置 | /home/spark-longxinyang/vec/runs/formal/20261003-172000-search-t2-heart-extrap-chain-12h/nodes/32/reviewer.jsonl 129 KB /home/spark-longxinyang/vec/runs/formal/20261003-172000-search-t2-heart-extrap-chain-12h/nodes/32/reviewer.stderr |