Virtual Embryo Challenge更新于 10-04 03:13(北京时间) / 每 5 分钟更新

总览 · ← 返回运行 20261003-171955-search-t2-embryo-interp-chain-12h

节点 n50

UNIVAL-P:单侧位移的软基因权重加指数 P=3(位移集中到强阶段效应基因),mmd_u/variogram/邻域三项 raw 同时略优、榜分与父 3 种子打平;PLAN 的类型感知 κ 经 5 种解码 + 等均值对照证否(排序无关,只有平均幅度起作用)。

运行?一次完整的自动搜索或 Agent 会话,有自己的锁定配置和证据包。20261003-171955-search-t2-embryo-interp-chain-12h
父节点n48
子节点n52
操作?种子:人写的起点;改进:在父节点上改;草稿:从头写;修复:修父节点的报错。改进
状态已打分
分数搜索目标分 65.71(+0.0) · proxy 65.71(+0.0) · 3 次复测均分 65.12
审查通过 1 越界读取:未发现问题。全部数据 I/O 走 src.task2_spatial.view_io 的 load_manifest/read_stage/write_t2(run.py:292, 2896-2906),仅有的直接文件读取是 view 内的 prior:os.path.join(view, "prior", "tf_regulons", ...) (run.py:1776) 与 prior/reactome|go|msigdb 的 gmt (run.py:1929-1941),均在 view_manifest.prior 清单内;无绝对路径、`..`、/mnt、/home、da…
用时?从运行开始到结束(或到现在)的挂钟时间。44 分
程序版本9a8c0ad76aa5fb252c2adc5dde708826bb0d73b1 (programs.git)

方法说明?节点程序自带的 METHOD.md:这个程序做了什么、为什么。

来自 programs.git 9a8c0ad76a:solution/METHOD.md

UNIVAL-P:单侧位移的软基因权重加指数 P=3(位移集中到强阶段效应基因),mmd_u/variogram/邻域三项 raw 同时略优、榜分与父 3 种子打平;PLAN 的类型感知 κ 经 5 种解码 + 等均值对照证否(排序无关,只有平均幅度起作用)。

提交内容(family: other,父节点 48)

父 48 全部管线不变(mix + procrustes3d 对齐 + 阻尼 log-RMS + α=5 型内收敛位移 + λ=6 投影加权 + 软阈值 + β=0.2 配对收缩 + 不对称相关扩散 + RECAL + DETR + DETRX-SIDE + NBHDCOH + WIRESET + UNIVAL κ=1)。本节点唯一改动(提交默认):

  • UNIVAL-P:UNIVAL 位移的软基因权重从 w_g = clip(|Δ̂_g|/τ,0,1)(τ=0.25,P=1 时 480/498 基因全参与)改为 w_g^P,P=3.0。位移集中到强阶段效应基因,弱基因位移按三次方衰减。方向、截断(cap=2)、乘性衰减、池化伪批量中和(g2)全部不变 → DE 通道结构性不动(de_score .3571 / de_direction .3647 在所有 18 次查分中逐位一致)。
  • 本节点新增的 PLAN 机制 UNIVAL-TA 及备选 MATCHDELTA、WIRESET-AC 都保留在代码里,默认全部关闭(T2_UNIVAL_TA=0、T2_UNIVAL_MATCH=0、T2_WIRESET_ADAPT=0),证否记录见下。

--ablate mechanism:关掉本节点全部新机制(TA、MATCH、ADAPT、P→1、κ_a=κ_b→1),UNIVAL/WIRESET 等父机制保持打开 → 输出与父 48 逐位一致(X digest 56f694d7d8a1a0b2,本地已验证)。

PLAN 机制 UNIVAL-TA:证否(步骤 1 诊断 + 5 解码 + 等均值对照)

步骤 1 诊断(不查分):单侧类型的字面 n_other(对侧同名细胞数)结构性为 0(22/22 个类型,>80% 判据触发)→ 按 PLAN 切换到标记基因检出率软权重。诊断还显示持久度信号强不对称:a 侧 7 型的标记在对侧(E8.0)检出率比 d_other/d_in≈1.0–1.5(程序普遍仍在表达),b 侧 15 型只有 0.02–0.10(新出现的特化程序)。

查分记录(proxy A 半,seed 0,父=65.129;每项为 raw):

#配置榜分mmd_uvariogramnbhd
q1TA ratio ref=0.1(a 侧 w=1,b 侧分级 0.26–0.97)65.009.01048.007430.04900
q3纯 per-side κ_a=1, κ_b=064.662.01065.007555.05104
q4纯 per-side κ_a=0, κ_b=165.116.01082.007362.04765
q5TA ratio ref=0.1 + κ_b=1.565.101.01080.007334.04789
q6纯 per-side κ_b=1.565.084.01200.007195.04606
q7纯 per-side κ_b=2.064.912.01348.007031.04526
q8等均值对照:uniform κ_b=0.62(=q1 的 b 侧平均权重)65.017.01044.007458.04895
q9TA det ref=0.3(PLAN 字面退路信号)64.748.01053.007536.05065
q10TA inv ref=0.2(反向假设:瞬态型多位移)65.064.01038.007447.04872

判决性证据是 q1 vs q8:分级 κ(按持久度排序)与同平均幅度的统一 κ,三项 raw 差 ≤3e-5、榜分差 0.008——持久度排序不携带信息,UNIVAL 的 mmd_u–nbhd 交换只由平均位移幅度驱动。q4/q3 进一步显示 b 侧回退承载全部收益(+0.42 vs UNIVAL 关闭的 64.699),a 侧前移净贡献 ≈0;q6/q7 显示 κ_b 放大时 mmd_u 的点损失约为 nbhd+variogram 收益的 2 倍。PLAN 假设(瞬态型的错误位移拖累 mmd_u)不成立:把瞬态型权重调低(q1/q9/q10)或调高(q10)都只沿同一条交换曲线滑动。

备选机制(同一弱项 cell_state/local_spatial)

  1. MATCHDELTA(类型匹配方向):单侧型的位移方向改为按表达谱相似度 softmax(β·Pearson) 加权的共有类型 Δ_c 混合(匹配合理:Blood Progenitor→HEM-Endoth、p-EXEM→ExEM-1、PHM/PAM→SOM)。q11(β=3,ρ=1,κ_b=1)65.047:nbhd .04723 为全家族最好,但 mmd_u .01126 更差;q12(+κ_b=1.5)64.959:匹配方向不保护 mmd_u(.01263 vs 统一方向 .01200);q14(范数匹配解码)65.049:证明 q11 的 nbhd 收益来自更长步长而非方向。→ 方向也不是 mmd_u 损伤源,证否。
  2. WIRESET-AC(父 ANALYSIS 建议 3,组大小自适应强度 κ_g=κ·clip(n_g/40,0.25,1)):q13 = 65.004,mmd_u .01049 改善但 nbhd 同量级损失,证否。
  3. UNIVAL-P(提交):见上。P=2(q15)与 P=3(q17)榜分都=65.129;P=3 三项 raw 全部略优于父(mmd_u .01084 vs .01089、variogram .007358 vs .007374、nbhd .04750 vs .04771),P=2 的 nbhd 略差(.04786),故选 P=3。P=2+κ_b=1.3(q16)65.126 亦平。

提交配置的机制生效证据

  • 改变了哪些细胞:1815 个单侧型输出细胞(854 a 起源 + 961 b 起源)的位移幅度逐基因改变:|Δ̂_g|≥0.25 的强基因 w_g=1 不变;|Δ̂_g|<0.25 的弱效应基因被三次方压缩(如 |Δ̂|=0.1:w 从 0.4 → 0.064;|Δ̂|=0.05:0.2 → 0.008)。其余 3185 个共有型细胞只受 g2 列缩放影响;坐标逐位不动。X digest 与父不同(63636e2338b129ae vs 56f694d7d8a1a0b2),--ablate 恢复父 digest。
  • 四组分变化(A 半 seed 0,vs 父):expression_change 62.69=62.69(逐位不变);shape_scale 77.75=77.75(坐标不动);cell_state:mmd_u 7.797(+.01)、variogram 6.783(+.005);local_spatial:nbhd 15.440(+.026)。榜分 65.129 = 65.129。
  • 种子稳健性:seed 1 = 64.295(父 64.294)、seed 2 = 64.445(父 64.439);机制 raw 与父差 ~1e-5(nbhd .04801/.04730 vs 父 .04803/.04731)。三种子均值 64.623 vs 父 64.621。

结论与下一步

本家族在 proxy A 半 seed 0 的天花板 ≈65.13:17 个配置(幅度、类型分级、per-side、方向匹配、基因选择五个自由度)全部落在同一条 mmd_u↔nbhd 交换曲线上,任何再分配净值不变。UNIVAL-P 是曲线上一个 raw 全面不劣于父的点,按规则提交备选机制而非退回父程序;预期 B 半 ≈ 父 ±0.1。下一步最值得试的不在表达通道:occupancy_dice skill .4214 仍低于地板(形状组唯一失分项),兄弟谱系节点 47 的 SIDEFRIM(b 侧稀疏边缘体素切除,shape_scale +0.26)值得移植到本谱系;以及 nbhd 与坐标配对的空间通道(表达-位置重配对,而非继续挤压值级位移)。

验证与合规

  • 完整视图运行 ~11 s / <1 GB 内存(limits 30 min / 28 GB 内);vec-check 通过;EXECUTION.json {"gpu": false}(纯 CPU)。
  • 视图无关自检:+1 天时间平移、输入文件改名、manifest 键序打乱的伪装视图上,seed 0 输出 X 与坐标 digest 与真实视图完全一致(63636e2338b129ae/0bc0cb7bdce1aa58)。程序不读 board/mode/路径/绝对时间,只用括号数据与相对 t。
  • 单输入阶段退路:无括号时走父级 copy 路径(本节点未改动);UNIVAL/TA/MATCH/AC 均只在括号存在时生效。
  • 确定性:无全局随机;--seed 传入 mix 抽样 rng,P 机制本身无随机。
  • 知识来源:无外部生物学知识。所有量(标记基因、检出率、相似度、Δ̂、n_g)都在运行时从 view 的括号阶段现场计算;未使用保留阶段/保留基因型的任何测量值,未硬编码任何统计量。
  • 查分用量:18/20(q1–q17 + q1 重复捕获全部分项);剩余 2 次未用。
  • 未验证:B 半与正式分(系统执行);真实 final 括号(E 输入阶段数不同)上 UNIVAL-P 的行为仅由视图无关性与单输入退路保证结构正确,分数未测。

调研员的计划

名称UNIVAL-TA: 持久度加权κ拆解单侧细胞值级对齐的mmd_u–nbhd交换
动机父48的UNIVAL κ扫描显示单调交换:κ=1.0→1.5→2.0,nbhd raw .04771→.04621→.04553持续改善,mmd_u raw .01089→.01209→.01372持续恶化,净峰在κ=1.0(65.084)。交换根源是统一κ不区分类型:持久型(目标阶段仍存在)的值级前移/回退改善邻域连贯性,瞬态型(目标阶段已消失/未出现)的同等位移把细胞推离真值PCA中该型的实际位置,损害mmd_u。ANALYSIS建议1(类型感知κ)和建议2(per-side κ_a/κ_b)合并可拆解此交换。当前cell_state 60.08(mmd_u skill .643、variogram skill .558)和local_spatial 62.95(nbhd skill .629)均有提升空间;occupancy_dice skill .424低于地板但已被节点46证明为mix家族结构性问题,不碰。
做法在父48全部管线(mix+procrustes3d+阻尼log-RMS+α=5收敛位移+λ=6投影加权+软阈值+β=0.2配对收缩+不对称相关扩散+RECAL+DETR+DETRX-SIDE+UNIVAL+WIRESET)之上,把UNIVAL的统一κ=1.0改为类型感知κ:

步骤1(诊断,不查分):统计每个单侧独有类型在对侧括号阶段的细胞数n_other。若>80%的单侧类型n_other=0,说明持久度信号太稀疏,退路改用该类型标记基因在对侧的平均检出率(>0的基因占比)作为软持久度权重。

步骤2(核心机制):对每个单侧类型计算持久度权重 w_type = clip(n_other / n_thresh, 0, 1)。a起源细胞的位移幅度乘 κ_a × w_type,b起源乘 κ_b × w_type。n_other=0的类型κ=0(不做值级位移,保留原始阶段表达),避免把已消失/未出现类型的细胞推向不存在的中间态。位移方向、Δ̂估计、软权重w_g、截断、乘性衰减、池化伪批量中和全部不变(DE通道结构性不动)。

步骤3(参数扫描,用vec-score A半seed 0筛选):
- 第一轮(4次查分):κ_a=κ_b=1.0,n_thresh∈{3,5,10},加一组n_thresh=3+per-side κ_a=1.0/κ_b=0.7。目标:确认类型感知κ是否优于统一κ=1.0(65.084)。
- 第二轮(6次查分):取最佳n_thresh,κ_a×κ_b∈{0.7,1.0,1.5}×{0.7,1.0,1.5},共9组取最佳6组。目标:找到mmd_u中性而nbhd保持或改善的组合。
- 第三轮(2-3次查分):最佳配置重复查分确认(差距<1分需2次以上同向),再跑seed 1验证。

单输入阶段退路:本机制只用括号内数据(两侧细胞计数),若只有一个输入阶段则无括号、无单侧类型,机制自动退化为恒等(κ×0=0),不影响输出。

时间预算:实现约30行(在UNIVAL循环内加类型权重查找),运行时间与父相同(~2s),20次查分额度足够。
风险1)多数单侧类型n_other=0(持久度信号稀疏),导致UNIVAL-TA≈关闭UNIVAL,分数回落到父46水平(64.62)。Engineer应在步骤1先统计n_other分布,若>80%为0则立即切换到标记基因检出率的软权重退路,不要浪费查分额度。2)持久度权重引入额外离散噪声(小样本类型的n_other不稳定),可能使κ在种子间波动。缓解:n_thresh≥3,且用min(两侧细胞数)加权(与Δ̂估计一致)。3)改善幅度可能<1分(T2噪声),需重复查分确认;若两轮最佳配置差<0.5分且方向不一致,提交父配置(NO_CHANGE)。

代码改动?这个节点的程序和父节点程序的逐行差别:绿色是新增,红色是删除。

对比:父节点版本 2f00188b46。改动的文件:solution/METHOD.md +56 −108、solution/run.py +325 −32

diff --git a/solution/METHOD.md b/solution/METHOD.mdindex 531a2d9..8f6aaf6 100644--- a/solution/METHOD.md+++ b/solution/METHOD.md@@ -1,108 +1,56 @@-UNIVAL:单侧独有类型细胞的表达值沿共有类型估计的组织阶段效应前移/回退(池化伪批量精确中和保 DE),叠加 WIRESET 型×侧抽样漂移均值回正;PLAN 的 VDEF 方差放气经 5 配置证否。--# 节点 48(improve,父 = 46 = 45 = 42 谱系,board T2:embryo:val_interp)--## 提交内容--父管线(mix 混抽 + procrustes3d + 阻尼 log-RMS + α=5 逐类型收敛位移 + λ=6 投影加权 +-软阈值 + β=0.2 配对收缩 + 不对称相关扩散 + RECAL γ=0.25 + DETR s=2.0/NBHDCOH +-DETRX-SIDE s_ext=0.7)全部保留,在表达管线最末(DETR 之后)新增两个机制,坐标逐位不动:--1. **UNIVAL(主机制,`T2_UNIVAL_KAPPA=1.0` 默认开)**:单侧独有类型的**值级**时间对齐。-   输出里约 36%(proxy seed 0 实测 1815 个细胞)属于只在括号一侧出现的类型;父管线只用-   DETRX 校准了它们的**检出率**,表达**值**仍停在原始阶段水平,而真值中对应细胞处于中间-   状态。逐基因从共有类型(两侧各 ≥10 细胞)估计组织级阶段效应-   Δ̂(g) = Σ_c w_c·(pb_b(c,g) − pb_a(c,g)) / Σ_c w_c(w_c = min(两侧细胞数),只用括号-   数据,无外部知识),软权重 w_g = clip(|Δ̂|/τ, 0, 1)(τ=0.25,与管线 DE 阈一致),-   截断 |Δ̂|≤cap=2.0。a 起源单侧细胞非零条目加 +κ·t·Δ̂·w_g;b 起源细胞负方向用乘性-   衰减 exp(−κ·(1−t)·Δ̂·w_g)(任何条目不会变成 0,支持集与检出计数逐位不变);随后-   逐基因 g2 = pb_pre/pb_post **精确**复原池化伪批量 → de_score/de_direction 结构性不变-   (所有配置 raw .3571/.3647 逐位一致),只有组间质量分布(mmd_u/variogram/nbhd 可见)-   改变。-2. **WIRESET(次机制,`T2_WIRESET_KAPPA=1.0, CAP=0.4, EPS=0.03` 默认开)**:把节点 44-   的 WITHINP 思想移植到本谱系(该件此前未在本谱系测过;节点 46 证否的是整配方移植)。-   型×侧分组,在**原始阶段**上测得 drawn 均值相对全阶段均值的抽样漂移-   ρ_g = (μ_full+ε)/(μ_drawn+ε)(log 截断 ±cap),乘性作用于输出组非零条目(支持集不-   动),再逐基因精确池化伪批量中和(同样保 DE 通道)。--`--ablate mechanism`(或两个 env κ=0)→ 两机制均恒等,输出与父节点 46 逐位一致-(X digest `c541623c9e07eec5`,实测等于本会话 κ=0 基线运行)。--## PLAN 机制 VDEF 的证否记录(5 配置,6 次查分)--按 PLAN 实现:型×侧×基因,v_pre(输出 drawn 方差,含 DETR 零)对 v_tgt =-v_full,a^(1−t)·v_full,b^t(全阶段方差),仅 r=sqrt(v_tgt/v_pre)<1 时向组均值收缩-(跳过零条目、组均值精确回正、池化 pb 中和)。诊断确认前提成立:v_pre/v_tgt 中位比-1.60、25.2% 基因-组可压缩、f_mean 0.807、pb 漂移 ~1e-8、nnz 逐位不变——但 A 半 seed 0-全部劣于父(64.622):--| 配置 | board | variogram | mmd_u | nbhd | de_score |-|---|---:|---:|---:|---:|---:|-| κ=1, lo=0.7 | 64.578 | .007559 | .01079 | .05141 | .3571 |-| κ=1, lo=0.7(重复查分,同文件) | 64.578 | 同上 | 同上 | 同上 | .3571 |-| κ=0.5, lo=0.7 | 64.602 | .007554 | .01074 | .05134 | .3571 |-| κ=0.25, lo=0.7 | 64.613 | .007551 | .01072 | .05130 | .3571 |-| κ=1, lo=0.5 | 64.555 | .007562 | .01085 | .05145 | .3571 |-| κ=1, lo=0.9 | 64.607 | .007553 | .01073 | .05132 | .3571 |--mmd_u、nbhd 随 κ 单调恶化,variogram 不降反微升 → 真值中间阶段的型内宽度**不低于**-混合云(PLAN 风险 1 命中),压缩反向。与节点 17/19(膨胀方向证否)合并结论:型内宽度-通道双向封闭。默认 `T2_VDEF_KAPPA=0`,代码保留。--## 查分记录(A 半 proxy,seed 0,父 = 64.622;共 20 次,额度用尽)--| # | 配置 | board | 关键 raw(variogram / mmd_u / nbhd) |-|---|---|---:|---|-| 1–6 | VDEF 5 档(见上表) | 64.555–64.613 | 全部劣化 |-| 7 | WIRESET κ1 cap0.1 eps0.1 | 64.660 | – / .01062 / .05113 |-| 8 | WIRESET κ1 cap0.2 eps0.1 | 64.677 | .007552 / .01059 / .05106 |-| 9 | WIRESET κ0.5 cap0.2 eps0.1 | 64.645 | .007552 / .01066 / .05117 |-| 10 | WIRESET κ1 cap0.4 eps0.1 | 64.691 | .007553 / .01056 / .05101 |-| 11 | WIRESET κ1 cap1.0 eps0.1 | 64.691 | 与 cap0.4 同(漂移已全在界内) |-| 12 | WIRESET κ1 cap0.4 eps0.3 | 64.675 | – / .01060 / .05106 |-| 13 | WIRESET κ1 cap0.4 eps0.03 | 64.699 | .007553 / .01054 / .05099 |-| 14 | **UNIVAL κ1.0** | **65.084** | .007374 / .01089 / **.04771** |-| 15 | UNIVAL κ1.5 | 65.036 | .007213 / .01209 / .04621 |-| 16 | UNIVAL κ2.0 | 64.815 | .007049 / .01372 / .04553 |-| 17 | UNIVAL κ0.7 | 64.997 | .007452 / .01054 / .04890 |-| 18 | **UNIVAL κ1 + WIRESET cap0.4 eps0.03(提交)** | **65.129** | .007357 / .01084 / **.04752** |-| 19 | 提交配置 seed 1 | 64.294 | .007674 / .01046 / .04803 |-| 20 | 提交配置 seed 2 | 64.439 | .007392 / .01057 / .04731 |--κ 扫描显示清晰的交换结构:κ↑ → nbhd/variogram 单调改善、mmd_u 单调恶化(单侧细胞移向-中间态使 15-NN 表达环境更连贯,但把部分细胞推离真值 PCA 里该类型的实际位置),κ=1.0-(线性时间权重,无自由调参)是净峰值。四组分(提交配置 vs 父):local_spatial-61.75 vs ~60.0(nbhd .04752 vs .05126,本节点主要收益);cell_state 组内 variogram-改善(.007357 vs .00755)、mmd_u 略差(.01084 vs ~.0101),组分基本持平;-expression_change 与 shape_scale 结构性不变(de_* raw 逐位一致,坐标逐位不动)。--## 机制生效证据(mechanism_active)--- UNIVAL:1815 个单侧细胞(36%)被移动,480 基因 |w_g|>0.05,step 均值 0.357;-  nnz 114241→114241 逐位不变;关掉后 X digest 回到父(`c541623c9e07eec5`)。-- WIRESET:42 组、g2 偏差 ≤0.105;单独 +0.077,与 UNIVAL 叠加再 +0.045。-- 两机制的 g2 中和保证池化 pb 精确不变 → DE 通道对所有配置 raw 逐位 .3571/.3647。--## 验证过 / 没验证--- 验证过:`vec-check` ok(seed 0/1);seed 0 默认运行与查分配置 digest 逐位一致;-  `--ablate mechanism` 逐位还原父输出;伪装视图(时间 +1 平移、输入重命名、manifest-  键序重排)digest 与真实视图逐位一致 → 视图无关;单输入回退路径(b=None)在两机制-  之前返回,不触发;运行 ~3 s / <1 GB,纯 CPU(EXECUTION.json gpu=false)。-- 没验证:B 半分数(正式分);seed 1/2 只查了提交配置本身(64.294/64.439),父配置-  在 seed 1/2 的 A 半分没有对照额度——跨 seed 绝对分不可比(混抽随 seed 变),机制-  方向的证据是 seed 0 配对差(+0.51)与三个 seed 上 nbhd/variogram raw 一致优于父-  seed 0 值;真实括号(两输入相邻、共有类型更多)上 Δ̂ 估计会更稳,但单侧类型占比-  可能不同,收益幅度未验证。-- 生物学知识来源:无外部知识——Δ̂、w_g、ρ_g 全部从视图括号输入现场计算(通用机制-  知识仅"组织内细胞随发育时间沿共享转录程序移动",即谱系/阶段顺序意义上的教科书-  常识,未使用任何保留阶段的测量值)。--## 下一步建议--1. UNIVAL 的 κ-mmd_u 交换提示可做**类型感知幅度**:对真值中大概率仍存在的单侧类型-   (a 侧类型在 b 侧检出率仍高的)用大 κ,对快速消失的类型用小 κ——用 b 侧该类型的-   检出信号做权重,仍是括号内数据。-2. WIRESET 收益小但方向稳定,可试按组大小自适应 cap(小组漂移大、cap 应更小)。-3. nbhd 在 κ=1.5 仍改善而 mmd_u 崩:两指标对单侧细胞位置的偏好相反,值得用-   per-side 独立 κ(κ_a、κ_b)拆一下哪一侧贡献 mmd_u 损失。+UNIVAL-P:单侧位移的软基因权重加指数 P=3(位移集中到强阶段效应基因),mmd_u/variogram/邻域三项 raw 同时略优、榜分与父 3 种子打平;PLAN 的类型感知 κ 经 5 种解码 + 等均值对照证否(排序无关,只有平均幅度起作用)。++## 提交内容(family: other,父节点 48)++父 48 全部管线不变(mix + procrustes3d 对齐 + 阻尼 log-RMS + α=5 型内收敛位移 + λ=6 投影加权 + 软阈值 + β=0.2 配对收缩 + 不对称相关扩散 + RECAL + DETR + DETRX-SIDE + NBHDCOH + WIRESET + UNIVAL κ=1)。本节点唯一改动(提交默认):++- **UNIVAL-P**:UNIVAL 位移的软基因权重从 `w_g = clip(|Δ̂_g|/τ,0,1)`(τ=0.25,P=1 时 480/498 基因全参与)改为 `w_g^P`,**P=3.0**。位移集中到强阶段效应基因,弱基因位移按三次方衰减。方向、截断(cap=2)、乘性衰减、池化伪批量中和(g2)全部不变 → DE 通道结构性不动(de_score .3571 / de_direction .3647 在所有 18 次查分中逐位一致)。+- 本节点新增的 PLAN 机制 UNIVAL-TA 及备选 MATCHDELTA、WIRESET-AC 都保留在代码里,**默认全部关闭**(`T2_UNIVAL_TA=0`、`T2_UNIVAL_MATCH=0`、`T2_WIRESET_ADAPT=0`),证否记录见下。++`--ablate mechanism`:关掉本节点全部新机制(TA、MATCH、ADAPT、P→1、κ_a=κ_b→1),UNIVAL/WIRESET 等父机制保持打开 → 输出与父 48 逐位一致(X digest `56f694d7d8a1a0b2`,本地已验证)。++## PLAN 机制 UNIVAL-TA:证否(步骤 1 诊断 + 5 解码 + 等均值对照)++步骤 1 诊断(不查分):单侧类型的字面 n_other(对侧同名细胞数)**结构性为 0**(22/22 个类型,>80% 判据触发)→ 按 PLAN 切换到标记基因检出率软权重。诊断还显示持久度信号强不对称:a 侧 7 型的标记在对侧(E8.0)检出率比 d_other/d_in≈1.0–1.5(程序普遍仍在表达),b 侧 15 型只有 0.02–0.10(新出现的特化程序)。++查分记录(proxy A 半,seed 0,父=65.129;每项为 raw):++| # | 配置 | 榜分 | mmd_u | variogram | nbhd |+|---|---|---:|---|---|---|+| q1 | TA ratio ref=0.1(a 侧 w=1,b 侧分级 0.26–0.97)| 65.009 | .01048 | .007430 | .04900 |+| q3 | 纯 per-side κ_a=1, κ_b=0 | 64.662 | .01065 | .007555 | .05104 |+| q4 | 纯 per-side κ_a=0, κ_b=1 | 65.116 | .01082 | .007362 | .04765 |+| q5 | TA ratio ref=0.1 + κ_b=1.5 | 65.101 | .01080 | .007334 | .04789 |+| q6 | 纯 per-side κ_b=1.5 | 65.084 | .01200 | .007195 | .04606 |+| q7 | 纯 per-side κ_b=2.0 | 64.912 | .01348 | .007031 | .04526 |+| q8 | **等均值对照**:uniform κ_b=0.62(=q1 的 b 侧平均权重)| 65.017 | .01044 | .007458 | .04895 |+| q9 | TA det ref=0.3(PLAN 字面退路信号)| 64.748 | .01053 | .007536 | .05065 |+| q10 | TA inv ref=0.2(反向假设:瞬态型多位移)| 65.064 | .01038 | .007447 | .04872 |++**判决性证据是 q1 vs q8**:分级 κ(按持久度排序)与同平均幅度的统一 κ,三项 raw 差 ≤3e-5、榜分差 0.008——持久度**排序不携带信息**,UNIVAL 的 mmd_u–nbhd 交换只由平均位移幅度驱动。q4/q3 进一步显示 b 侧回退承载全部收益(+0.42 vs UNIVAL 关闭的 64.699),a 侧前移净贡献 ≈0;q6/q7 显示 κ_b 放大时 mmd_u 的点损失约为 nbhd+variogram 收益的 2 倍。PLAN 假设(瞬态型的错误位移拖累 mmd_u)不成立:把瞬态型权重调低(q1/q9/q10)或调高(q10)都只沿同一条交换曲线滑动。++## 备选机制(同一弱项 cell_state/local_spatial)++1. **MATCHDELTA**(类型匹配方向):单侧型的位移方向改为按表达谱相似度 softmax(β·Pearson) 加权的共有类型 Δ_c 混合(匹配合理:Blood Progenitor→HEM-Endoth、p-EXEM→ExEM-1、PHM/PAM→SOM)。q11(β=3,ρ=1,κ_b=1)65.047:nbhd .04723 为全家族最好,但 mmd_u .01126 更差;q12(+κ_b=1.5)64.959:匹配方向**不保护** mmd_u(.01263 vs 统一方向 .01200);q14(范数匹配解码)65.049:证明 q11 的 nbhd 收益来自更长步长而非方向。→ 方向也不是 mmd_u 损伤源,证否。+2. **WIRESET-AC**(父 ANALYSIS 建议 3,组大小自适应强度 κ_g=κ·clip(n_g/40,0.25,1)):q13 = 65.004,mmd_u .01049 改善但 nbhd 同量级损失,证否。+3. **UNIVAL-P**(提交):见上。P=2(q15)与 P=3(q17)榜分都=65.129;P=3 三项 raw 全部略优于父(mmd_u .01084 vs .01089、variogram .007358 vs .007374、nbhd .04750 vs .04771),P=2 的 nbhd 略差(.04786),故选 P=3。P=2+κ_b=1.3(q16)65.126 亦平。++## 提交配置的机制生效证据++- **改变了哪些细胞**:1815 个单侧型输出细胞(854 a 起源 + 961 b 起源)的位移幅度逐基因改变:|Δ̂_g|≥0.25 的强基因 w_g=1 不变;|Δ̂_g|<0.25 的弱效应基因被三次方压缩(如 |Δ̂|=0.1:w 从 0.4 → 0.064;|Δ̂|=0.05:0.2 → 0.008)。其余 3185 个共有型细胞只受 g2 列缩放影响;坐标逐位不动。X digest 与父不同(`63636e2338b129ae` vs `56f694d7d8a1a0b2`),--ablate 恢复父 digest。+- **四组分变化(A 半 seed 0,vs 父)**:expression_change 62.69=62.69(逐位不变);shape_scale 77.75=77.75(坐标不动);cell_state:mmd_u 7.797(+.01)、variogram 6.783(+.005);local_spatial:nbhd 15.440(+.026)。榜分 65.129 = 65.129。+- **种子稳健性**:seed 1 = 64.295(父 64.294)、seed 2 = 64.445(父 64.439);机制 raw 与父差 ~1e-5(nbhd .04801/.04730 vs 父 .04803/.04731)。三种子均值 64.623 vs 父 64.621。++## 结论与下一步++本家族在 proxy A 半 seed 0 的天花板 ≈65.13:17 个配置(幅度、类型分级、per-side、方向匹配、基因选择五个自由度)全部落在同一条 mmd_u↔nbhd 交换曲线上,任何再分配净值不变。UNIVAL-P 是曲线上一个 raw 全面不劣于父的点,按规则提交备选机制而非退回父程序;预期 B 半 ≈ 父 ±0.1。**下一步最值得试的不在表达通道**:occupancy_dice skill .4214 仍低于地板(形状组唯一失分项),兄弟谱系节点 47 的 SIDEFRIM(b 侧稀疏边缘体素切除,shape_scale +0.26)值得移植到本谱系;以及 nbhd 与坐标配对的空间通道(表达-位置重配对,而非继续挤压值级位移)。++## 验证与合规++- 完整视图运行 ~11 s / <1 GB 内存(limits 30 min / 28 GB 内);`vec-check` 通过;`EXECUTION.json {"gpu": false}`(纯 CPU)。+- **视图无关自检**:+1 天时间平移、输入文件改名、manifest 键序打乱的伪装视图上,seed 0 输出 X 与坐标 digest 与真实视图完全一致(`63636e2338b129ae`/`0bc0cb7bdce1aa58`)。程序不读 board/mode/路径/绝对时间,只用括号数据与相对 t。+- 单输入阶段退路:无括号时走父级 copy 路径(本节点未改动);UNIVAL/TA/MATCH/AC 均只在括号存在时生效。+- 确定性:无全局随机;--seed 传入 mix 抽样 rng,P 机制本身无随机。+- **知识来源:无外部生物学知识**。所有量(标记基因、检出率、相似度、Δ̂、n_g)都在运行时从 view 的括号阶段现场计算;未使用保留阶段/保留基因型的任何测量值,未硬编码任何统计量。+- 查分用量:18/20(q1–q17 + q1 重复捕获全部分项);剩余 2 次未用。+- 未验证:B 半与正式分(系统执行);真实 final 括号(E 输入阶段数不同)上 UNIVAL-P 的行为仅由视图无关性与单输入退路保证结构正确,分数未测。diff --git a/solution/run.py b/solution/run.pyindex cc8ced9..f5dca6a 100644--- a/solution/run.py+++ b/solution/run.py@@ -8,6 +8,37 @@ exp(log r_a + SCALE_DAMP·t·Δlog r), and draws cells stratified by type: round(t·n) from the later stage, the rest from the earlier one. Coordinates travel with the cells. n is log-linear in t, clipped to the board range. +This node (50, family other): PLAN mechanism UNIVAL-TA (type-aware+persistence-weighted κ: w_type from marker-program detection in the opposite+bracket stage, per-side κ_a/κ_b) was implemented and FALSIFIED on the proxy A+half (seed 0, parent = 65.129): ratio ref=0.1 → 65.009, ratio+κ_b=1.5 →+65.101, det ref=0.3 (PLAN literal fallback signal) → 64.748, inverted+(transient-emphasis) ref=0.2 → 65.064, and the decisive control — uniform+κ_b = 0.62 (the MEAN b-side TA weight) → 65.017 with mmd_u/variogram/nbhd+raws identical to graded TA to ≤3e-5 (65.009): the persistence ORDERING+carries no information; only the mean displacement amplitude matters. Per-side+κ grid: κ_b=0 → 64.662, κ_a=0 → 65.116 (b-side regression carries ALL of+UNIVAL's gain; a-side advance is neutral), κ_b=1.5 → 65.084, κ_b=2 → 64.912+(mmd_u degrades ~2x faster in points than nbhd+variogram gain). Backup 2+MATCHDELTA (type-matched stage-effect direction, softmax β=3 over shared-type+profile correlation): κ_b=1 → 65.047 (nbhd .04723 best-in-family but mmd_u+.01126 worse), κ_b=1.5 → 64.959, norm-matched → 65.049 — direction is not the+mmd_u damage source either. Backup 3 WIRESET-AC (group-size-adaptive κ,+nref=40 flo=0.25) → 65.004. SUBMITTED: backup 4 UNIVAL-P — exponent P=3.0 on+the UNIVAL soft gene weight w_g = clip(|Δ̂|/τ,0,1)^P, concentrating the+one-sided displacement on strong stage-effect genes (P=1 spreads it over+480/498 genes). Seed 0: 65.129 (= parent to 3 decimals) with all THREE+cell_state/local_spatial raws slightly better than parent (mmd_u .01084 vs+.01089, variogram .007358 vs .007374, nbhd .04750 vs .04771); seeds 1/2:+64.295/64.445 vs parent 64.294/64.439 — a robust TIE, de_* bit-identical+(pooled-pb neutralisation intact). Interpretation: the UNIVAL gain is+amplitude-driven and gene-selection-neutral; the family's A-half ceiling is+~65.13 at seed 0 and every reallocation between mmd_u and nbhd slides along+one exchange curve. --ablate mechanism (TA/MATCH/ADAPT off, P→1, κ_a=κ_b=1)+reproduces parent node 48 bit-for-bit (X digest 56f694d7d8a1a0b2); disguised+view (+1d shift, renamed inputs, reordered manifest keys) gives the identical+digest (63636e2338b129ae) → view-independent.+ This node (48, family other): PLAN mechanism VDEF (one-sided per type×side variance deflation toward the t-geometric full-stage variance target) was implemented and FALSIFIED on the proxy A half (seed 0) across 5 amplitude/clip@@ -859,12 +890,25 @@ WIRESET_CAP = float(os.environ.get("T2_WIRESET_CAP", "0.4")) WIRESET_MIN_CELLS = int(os.environ.get("T2_WIRESET_MIN_CELLS", "10")) WIRESET_EPS = float(os.environ.get("T2_WIRESET_EPS", "0.03")) +# WIRESET-AC (node 50 backup mechanism, parent ANALYSIS suggestion 3):+# group-size-adaptive correction strength. The drawn-group mean of a small+# type×side group is a noisy estimate of its full-stage mean; resetting it+# fully injects resampling noise into the output. Scale the per-group κ by a+# reliability factor clip(n_g / NREF, FLO, 1): large groups (n_g ≥ NREF) keep+# the full correction, small groups are shrunk toward no-op. Bracket data only.+# ADAPT=0 → parent node 48 bit-for-bit.+WIRESET_ADAPT = os.environ.get("T2_WIRESET_ADAPT", "0") == "1"+WIRESET_NREF = float(os.environ.get("T2_WIRESET_NREF", "40"))+WIRESET_FLO = float(os.environ.get("T2_WIRESET_FLO", "0.25"))+  def wireset_reset(expr, out_labels, stage_a, stage_b, ia, ib, n_from_a,-                  kappa, cap, min_cells, eps):+                  kappa, cap, min_cells, eps, adapt=False, nref=40.0, flo=0.25):     """Type×side resampling-drift reset with exact pooled-pb neutralisation."""     info = {"wireset_kappa": float(kappa), "wireset_cap": float(cap),-            "wireset_min_cells": int(min_cells), "wireset_applied": False}+            "wireset_min_cells": int(min_cells), "wireset_applied": False,+            "wireset_adapt": bool(adapt), "wireset_nref": float(nref),+            "wireset_flo": float(flo)}     n = expr.shape[0]     if kappa <= 0.0 or n == 0 or out_labels is None or out_labels.shape[0] != n:         return expr, info@@ -876,6 +920,7 @@ def wireset_reset(expr, out_labels, stage_a, stage_b, ia, ib, n_from_a,     is_a = np.zeros(n, dtype=bool)     is_a[:n_from_a] = True     drift_logs = []+    kg_logs = []     n_groups = 0     for stage, rows_idx, side_mask in ((stage_a, ia, is_a), (stage_b, ib, ~is_a)):         if rows_idx is None or len(rows_idx) == 0:@@ -899,7 +944,9 @@ def wireset_reset(expr, out_labels, stage_a, stage_b, ia, ib, n_from_a,                 continue             n_groups += 1             drift_logs.append(log_rho.tolist())-            f = np.exp(kappa * log_rho)+            kg = kappa * (min(max(ng / max(nref, 1e-9), flo), 1.0) if adapt else 1.0)+            kg_logs.append(float(kg))+            f = np.exp(kg * log_rho)             Xg = E[rows]             nz = Xg != 0.0             E[rows] = np.where(nz, Xg * f[None, :], 0.0)@@ -914,6 +961,8 @@ def wireset_reset(expr, out_labels, stage_a, stage_b, ia, ib, n_from_a,         D = np.abs(np.concatenate([np.asarray(x) for x in drift_logs]))         info.update(             wireset_applied=True, wireset_n_groups=n_groups,+            wireset_kg_min=float(np.min(kg_logs)), wireset_kg_max=float(np.max(kg_logs)),+            wireset_n_adapted=int(sum(1 for x in kg_logs if x < kappa - 1e-9)),             wireset_abslogdrift_median=float(np.median(D)),             wireset_abslogdrift_p90=float(np.quantile(D, 0.90)),             wireset_abslogdrift_max=float(D.max()),@@ -944,13 +993,122 @@ UNIVAL_KAPPA = float(os.environ.get("T2_UNIVAL_KAPPA", "1.0")) UNIVAL_TAU = float(os.environ.get("T2_UNIVAL_TAU", "0.25")) UNIVAL_CAP = float(os.environ.get("T2_UNIVAL_CAP", "2.0")) UNIVAL_MIN_CELLS = int(os.environ.get("T2_UNIVAL_MIN_CELLS", "10"))+# UNIVAL-P (node 50): exponent on the soft gene weight w_g = clip(|Δ̂|/τ,0,1)^P.+# P>1 concentrates the displacement on strong stage-effect genes and spares+# weak ones (480/498 genes are active at P=1). If the mmd_u damage at κ=1+# comes from displacing hundreds of weak/noisy genes while the nbhd gain comes+# from the strong DE genes, P>1 should bend the exchange curve. P=1 → parent.+UNIVAL_P = float(os.environ.get("T2_UNIVAL_P", "3.0"))++# UNIVAL-TA (node 50, PLAN mechanism): type-aware κ. The uniform κ scan of node+# 48 showed a clean exchange — κ↑ improves nbhd/variogram monotonically while+# mmd_u degrades monotonically (net peak κ=1.0). Hypothesis: the exchange comes+# from treating every one-sided type alike. Persistence-weighted κ scales each+# one-sided type's displacement by how strongly its marker program is still (or+# already) detected in the OPPOSITE bracket stage:+#   markers(c) = top-K genes by (det-rate in c − det-rate in rest of origin stage)+#   signal(c)  = "ratio": mean det-rate of markers among opposite-stage cells /+#                          mean det-rate among c's own cells  (program persistence)+#                "det":   mean det-rate of markers among opposite-stage cells+#                "count": PLAN-literal cell count of type c in the opposite stage+#                          (structurally 0 for one-sided types → diagnostic only)+#   w_type     = clip(signal / TA_REF, TA_FLOOR, 1)+#   κ_cell     = κ_side · w_type, with per-side multipliers κ_a / κ_b.+# Bracket data only; no target-stage information; deterministic given the input.+# TA off (T2_UNIVAL_TA=0 or --ablate) → all w_type = 1, κ_a = κ_b = 1 →+# uniform κ = parent node 48 bit-for-bit.+UNIVAL_TA = os.environ.get("T2_UNIVAL_TA", "0") == "1"+UNIVAL_TA_MODE = os.environ.get("T2_UNIVAL_TA_MODE", "ratio")  # ratio | det | count+UNIVAL_TA_REF = float(os.environ.get("T2_UNIVAL_TA_REF", "0.1"))+UNIVAL_TA_FLOOR = float(os.environ.get("T2_UNIVAL_TA_FLOOR", "0.0"))+UNIVAL_TA_K = int(os.environ.get("T2_UNIVAL_TA_K", "25"))+UNIVAL_KA = float(os.environ.get("T2_UNIVAL_KA", "1.0"))+UNIVAL_KB = float(os.environ.get("T2_UNIVAL_KB", "1.0"))++# MATCHDELTA (node 50 backup mechanism, submitted after UNIVAL-TA was falsified):+# per one-sided type, the stage-effect DIRECTION is the softmax(β·sim)-weighted+# blend of per-shared-type deltas Δ_c, where sim = centered Pearson correlation+# of the one-sided type's own-stage pseudobulk profile with each shared type's+# same-stage profile; blended with the pooled Δ̂ by ρ. ρ=0 / MATCH=0 → parent+# node 48 bit-for-bit. Motivation: the uniform-κ scan showed the nbhd gain and+# mmd_u damage scale together with the pooled direction; if the mmd_u damage+# comes from displacing specialized young types along a GENERIC tissue axis,+# type-matched directions should let a larger κ_b buy nbhd without mmd_u loss.+UNIVAL_MATCH = os.environ.get("T2_UNIVAL_MATCH", "0") == "1"+UNIVAL_MATCH_BETA = float(os.environ.get("T2_UNIVAL_MATCH_BETA", "3.0"))+UNIVAL_MATCH_RHO = float(os.environ.get("T2_UNIVAL_MATCH_RHO", "1.0"))+UNIVAL_MATCH_TOPK = int(os.environ.get("T2_UNIVAL_MATCH_TOPK", "0"))+UNIVAL_MATCH_NORM = os.environ.get("T2_UNIVAL_MATCH_NORM", "1") == "1"+++def _det_rate(X, rows=None):+    """Per-gene detection rate (>0 fraction) of a CSR matrix (optionally row subset)."""+    if rows is None:+        nnz = np.asarray((X != 0).sum(axis=0)).ravel()+        return nnz / max(X.shape[0], 1)+    Xs = X[rows]+    nnz = np.asarray((Xs != 0).sum(axis=0)).ravel()+    return nnz / max(Xs.shape[0], 1)+++def unival_ta_weights(stage_a, stage_b, one_sided_types, mode, ref, floor, k):+    """Persistence weight w_type ∈ [floor, 1] for each one-sided type (dict)."""+    la = np.asarray(stage_a.labels).astype(str)+    lb = np.asarray(stage_b.labels).astype(str)+    set_a, set_b = set(la.tolist()), set(lb.tolist())+    det_a = _det_rate(stage_a.X)+    det_b = _det_rate(stage_b.X)+    ws = {}+    for c in one_sided_types:+        in_a = c in set_a+        labs = la if in_a else lb+        X_own = stage_a.X if in_a else stage_b.X+        X_oth = stage_b.X if in_a else stage_a.X+        det_own_all = det_a if in_a else det_b+        det_oth = det_b if in_a else det_a+        m = labs == c+        n_c = int(m.sum())+        if n_c == 0:+            ws[c] = float(floor)+            continue+        if mode == "count":+            ws[c] = float(np.clip(0.0 / max(ref, 1e-9), floor, 1.0))+            continue+        d_in_c = _det_rate(X_own, m)+        d_rest = (det_own_all * len(labs) - d_in_c * n_c) / max(len(labs) - n_c, 1)+        spec = d_in_c - d_rest+        kk = min(int(k), len(spec))+        idx = np.argsort(-spec, kind="stable")[:kk]+        d_other = float(det_oth[idx].mean())+        if mode == "det":+            sig = d_other+        elif mode == "inv":+            # opposite hypothesis probe: TRANSIENT types (signal≈0) get w≈1,+            # persistent types (signal≥ref) get w→floor.+            ratio = d_other / max(float(d_in_c[idx].mean()), 1e-6)+            ws[c] = float(np.clip(1.0 - ratio / max(ref, 1e-9), floor, 1.0))+            continue+        else:  # ratio+            sig = d_other / max(float(d_in_c[idx].mean()), 1e-6)+        ws[c] = float(np.clip(sig / max(ref, 1e-9), floor, 1.0))+    return ws   def unival_align(expr, out_labels, stage_a, stage_b, t, n_from_a,-                 kappa, tau, cap, min_cells):+                 kappa, tau, cap, min_cells,+                 ta_enable=False, ta_mode="ratio", ta_ref=0.1, ta_floor=0.0,+                 ta_k=25, kappa_a=1.0, kappa_b=1.0,+                 match_enable=False, match_beta=3.0, match_rho=1.0, match_topk=0,+                 match_norm=False, wp=1.0):     """Advance/regress one-sided-type cells along the shared-type stage effect."""     info = {"unival_kappa": float(kappa), "unival_tau": float(tau),-            "unival_cap": float(cap), "unival_applied": False}+            "unival_cap": float(cap), "unival_applied": False,+            "unival_ta": bool(ta_enable), "unival_ta_mode": str(ta_mode),+            "unival_ta_ref": float(ta_ref), "unival_ta_floor": float(ta_floor),+            "unival_kappa_a": float(kappa_a), "unival_kappa_b": float(kappa_b),+            "unival_match": bool(match_enable), "unival_match_beta": float(match_beta),+            "unival_match_rho": float(match_rho), "unival_match_topk": int(match_topk),+            "unival_match_norm": bool(match_norm)}     n = expr.shape[0]     if kappa <= 0.0 or n == 0 or out_labels is None or out_labels.shape[0] != n:         return expr, info@@ -968,6 +1126,8 @@ def unival_align(expr, out_labels, stage_a, stage_b, t, n_from_a,     D = np.stack([ma_b[c] - ma_a[c] for c in shared])           # (n_shared, G)     dhat = (w[:, None] * D).sum(axis=0) / w.sum()               # (G,)     wg = np.clip(np.abs(dhat) / max(tau, 1e-9), 0.0, 1.0)+    if float(wp) != 1.0:+        wg = wg ** float(wp)     step = np.clip(dhat, -cap, cap) * wg                        # bounded stage effect     E = np.asarray(expr, dtype=np.float64)     labs_out = np.asarray(out_labels).astype(str)@@ -975,6 +1135,63 @@ def unival_align(expr, out_labels, stage_a, stage_b, t, n_from_a,     is_a[:n_from_a] = True     set_a, set_b = set(la.tolist()), set(lb.tolist())     one_sided = np.array([c not in set_a or c not in set_b for c in labs_out])+    ta_ws = {}+    w_cell = None+    if ta_enable:+        os_types = sorted({c for c, o in zip(labs_out.tolist(), one_sided.tolist()) if o})+        ta_ws = unival_ta_weights(stage_a, stage_b, os_types, ta_mode, ta_ref,+                                  ta_floor, ta_k)+        w_cell = np.array([ta_ws.get(c, 1.0) for c in labs_out.tolist()],+                          dtype=np.float64)+    # MATCHDELTA (node 50 backup mechanism): type-matched stage-effect+    # direction. The pooled Δ̂ is the count-weighted mean over shared types —+    # one generic direction for every one-sided type. Instead, per one-sided+    # type u, match u's own-stage pseudobulk profile against the same-stage+    # shared-type profiles (centered Pearson over panel genes), softmax-weight+    # the per-shared-type deltas Δ_c by exp(β·sim), and blend with the pooled+    # Δ̂: step_u = clip((1−ρ)Δ̂ + ρ·Σ softmax·Δ_c) · w_g(u). ρ = 0 (or match+    # off) → pooled step → parent bit-for-bit. Bracket data only.+    step_by_type = {}+    if match_enable and one_sided.any():+        def _sim(p, q):+            pc = p - p.mean()+            qc = q - q.mean()+            den = np.linalg.norm(pc) * np.linalg.norm(qc)+            return float(pc @ qc / den) if den > 1e-12 else 0.0+        os_types = sorted({c for c, o in zip(labs_out.tolist(), one_sided.tolist()) if o})+        sims_log = {}+        for u in os_types:+            in_a = u in set_a+            own_stage = stage_a if in_a else stage_b+            own_labs = la if in_a else lb+            own_means = ma_a if in_a else ma_b+            p_u = np.asarray(own_stage.X[own_labs == u].mean(axis=0)).ravel().astype(np.float64)+            sims = np.array([_sim(p_u, own_means[c]) for c in shared])+            order = np.argsort(-sims, kind="stable")+            kk = len(shared) if int(match_topk) <= 0 else min(int(match_topk), len(shared))+            order = order[:kk]+            sm = sims[order]+            ex = np.exp(float(match_beta) * (sm - sm.max()))+            ww = ex / ex.sum()+            matched = (ww[:, None] * D[order]).sum(axis=0)+            blend = (1.0 - float(match_rho)) * dhat + float(match_rho) * matched+            wg_u = np.clip(np.abs(blend) / max(tau, 1e-9), 0.0, 1.0)+            step_u = np.clip(blend, -cap, cap) * wg_u+            if match_norm:+                # direction-only change: restore the pooled step's L2 norm so+                # per-type steps displace cells by the SAME total amplitude as+                # the parent (matched Δ_c blends are less cancellation-averaged+                # than the pooled Δ̂ and hence longer; the extra length, not the+                # direction, is what pushes cells off the truth manifold).+                nu = float(np.linalg.norm(step_u))+                if nu > 1e-12:+                    step_u = step_u * (float(np.linalg.norm(step)) / nu)+            step_by_type[u] = step_u+            sims_log[u] = {"side": "a" if in_a else "b",+                           "top": [(shared[i], round(float(sims[i]), 3), round(float(wi), 3))+                                   for i, wi in zip(order[:3], ww[:3])],+                           "cos_with_pooled": _sim(blend, dhat)}+        info["unival_match_sim"] = sims_log     n_one = 0     for side in (True, False):         rows = one_sided & (is_a == side)@@ -982,14 +1199,44 @@ def unival_align(expr, out_labels, stage_a, stage_b, t, n_from_a,         if k == 0:             continue         n_one += k-        s = (kappa * t if side else -kappa * (1.0 - t)) * step-        Xg = E[rows]-        nz = Xg != 0.0-        pos = np.maximum(s, 0.0)-        dec = np.exp(np.minimum(s, 0.0))-        Y = np.where(nz, np.where(s[None, :] >= 0.0, Xg + pos[None, :], Xg * dec[None, :]), 0.0)-        np.maximum(Y, 0.0, out=Y)-        E[rows] = Y+        kside = float(kappa_a) if side else float(kappa_b)+        amp = kappa * kside * t if side else -kappa * kside * (1.0 - t)+        Xg_all = E[rows]+        if step_by_type:+            labs_rows = labs_out[rows]+            w_rows = w_cell[rows] if ta_enable else None+            Yall = np.zeros_like(Xg_all)+            for u in np.unique(labs_rows):+                m_u = labs_rows == u+                s = amp * step_by_type.get(u, step)+                Xg = Xg_all[m_u]+                nz = Xg != 0.0+                if w_rows is not None:+                    S = w_rows[m_u][:, None] * s[None, :]+                    Y = np.where(nz, np.where(S >= 0.0, Xg + np.maximum(S, 0.0),+                                              Xg * np.exp(np.minimum(S, 0.0))), 0.0)+                else:+                    pos = np.maximum(s, 0.0)+                    dec = np.exp(np.minimum(s, 0.0))+                    Y = np.where(nz, np.where(s[None, :] >= 0.0, Xg + pos[None, :], Xg * dec[None, :]), 0.0)+                Yall[m_u] = Y+            np.maximum(Yall, 0.0, out=Yall)+            E[rows] = Yall+        else:+            s = amp * step+            Xg = Xg_all+            nz = Xg != 0.0+            if ta_enable:+                S = w_cell[rows][:, None] * s[None, :]+                pos = np.maximum(S, 0.0)+                dec = np.exp(np.minimum(S, 0.0))+                Y = np.where(nz, np.where(S >= 0.0, Xg + pos, Xg * dec), 0.0)+            else:+                pos = np.maximum(s, 0.0)+                dec = np.exp(np.minimum(s, 0.0))+                Y = np.where(nz, np.where(s[None, :] >= 0.0, Xg + pos[None, :], Xg * dec[None, :]), 0.0)+            np.maximum(Y, 0.0, out=Y)+            E[rows] = Y     if n_one == 0:         return expr, info     out = E.astype(np.float32)@@ -1008,6 +1255,22 @@ def unival_align(expr, out_labels, stage_a, stage_b, t, n_from_a,         unival_nnz_before=int((np.asarray(expr) != 0).sum()),         unival_nnz_after=int((out != 0).sum()),     )+    if ta_enable:+        wv = np.array(list(ta_ws.values()), dtype=np.float64) if ta_ws else np.zeros(0)+        wc = np.array([ta_ws.get(c, 1.0) for c in labs_out[one_sided].tolist()]) \+            if one_sided.any() else np.zeros(0)+        info.update(+            unival_ta_applied=bool(len(ta_ws) > 0),+            unival_ta_n_types=int(len(ta_ws)),+            unival_ta_n_zero_types=int((wv <= 1e-9).sum()) if wv.size else 0,+            unival_ta_n_clipped_types=int((wv >= 1.0 - 1e-9).sum()) if wv.size else 0,+            unival_ta_w_min=float(wv.min()) if wv.size else None,+            unival_ta_w_med=float(np.median(wv)) if wv.size else None,+            unival_ta_w_max=float(wv.max()) if wv.size else None,+            unival_ta_cellw_mean=float(wc.mean()) if wc.size else None,+            unival_ta_cellw_zero_frac=float((wc <= 1e-9).mean()) if wc.size else None,+            unival_ta_weights={k: round(v, 4) for k, v in sorted(ta_ws.items())},+        )     return out, info  @@ -2608,13 +2871,13 @@ def main() -> None:     parser.add_argument("--out", required=True)     parser.add_argument("--seed", type=int, default=0)     parser.add_argument("--ablate", default=None,-                        help="mechanism-off control (node 48): 'mechanism' (or any name) disables "-                             "VDEF (one-sided per type×side variance deflation, κ→0 = identity), "-                             "WIRESET (type×side resampling-drift mean reset, κ→0 = identity) "-                             "and UNIVAL (one-sided-type value-level temporal alignment, κ→0 = identity); "-                             "ANISO2/RDENS coordinate probes stay off (falsified in node 46), so "-                             "the ablated output reproduces parent node 46 bit-for-bit. Inherited "-                             "mechanisms (NBHDCOH, DETRX-SIDE, DETR, RECAL, ...) stay ON in both runs")+                        help="mechanism-off control (node 50): 'mechanism' (or any name) disables "+                             "ONLY UNIVAL-TA (type-aware persistence-weighted κ): all w_type = 1, "+                             "κ_a = κ_b = 1, so UNIVAL keeps its uniform κ = 1.0. Inherited "+                             "mechanisms (UNIVAL, WIRESET, NBHDCOH, DETRX-SIDE, DETR, RECAL, ...) "+                             "stay ON in both runs, so the ablated output reproduces parent node 48 "+                             "bit-for-bit. ANISO2/RDENS/VDEF coordinate/variance probes stay off "+                             "(falsified in nodes 46/48)")     args = parser.parse_args()     # Mechanism-off control (node 45): DETR-SIDE-SHARED (origin-split shared-type     # removal counts). This is the ONLY mechanism this node adds on top of parent@@ -2733,28 +2996,45 @@ def main() -> None:                 side_strength_b=DETR_SIDE_STRENGTH_B)             info.update(detr_info)     # VDEF (node 48, PLAN mechanism): one-sided within-type variance deflation-    # at the very end of the expression pipeline (after DETR/DETRX). --ablate-    # mechanism forces κ = 0 → identity → parent node 46 bit-for-bit.-    vdef_kappa = 0.0 if args.ablate else VDEF_KAPPA+    # at the very end of the expression pipeline (after DETR/DETRX). Default+    # κ = 0 (falsified in node 48).+    vdef_kappa = VDEF_KAPPA     expr, vdef_info = vdef_deflate(expr, info.get("out_labels"), stage_a, stage_b,                                    float(t), int(info.get("n_from_a", 0) or 0),                                    vdef_kappa, VDEF_LO, VDEF_MIN_CELLS, VDEF_MEANFIX)     info.update(vdef_info)-    # WIRESET (node 48 backup mechanism): type×side resampling-drift reset.-    # --ablate mechanism forces κ = 0 → identity → parent node 46 bit-for-bit.-    wireset_kappa = 0.0 if args.ablate else WIRESET_KAPPA+    # WIRESET (node 48 mechanism, inherited) + WIRESET-AC (node 50 backup+    # mechanism): group-size-adaptive strength. --ablate turns off the node-50+    # mechanisms (TA, MATCH, ADAPT) → parent node 48 bit-for-bit.+    wireset_kappa = WIRESET_KAPPA+    ws_adapt = WIRESET_ADAPT and not args.ablate     expr, ws_info = wireset_reset(expr, info.get("out_labels"), stage_a, stage_b,                                   info.get("mix_ia"), info.get("mix_ib"),                                   int(info.get("n_from_a", 0) or 0),                                   wireset_kappa, WIRESET_CAP, WIRESET_MIN_CELLS,-                                  WIRESET_EPS)+                                  WIRESET_EPS, adapt=ws_adapt, nref=WIRESET_NREF,+                                  flo=WIRESET_FLO)     info.update(ws_info)-    # UNIVAL (node 48 backup mechanism 2): one-sided-type value-level temporal-    # alignment. --ablate mechanism forces κ = 0 → identity → parent bit-for-bit.-    unival_kappa = 0.0 if args.ablate else UNIVAL_KAPPA+    # UNIVAL (node 48 mechanism, inherited) + node 50 mechanisms: UNIVAL-TA+    # (type-aware persistence-weighted κ — FALSIFIED on the proxy A half,+    # default off) and MATCHDELTA (type-matched stage-effect direction).+    # --ablate turns off ONLY the node-50 mechanisms (TA + MATCH) → parent+    # node 48 bit-for-bit.+    unival_kappa = UNIVAL_KAPPA+    ta_enable = UNIVAL_TA and not args.ablate+    ta_ka = 1.0 if args.ablate else UNIVAL_KA+    ta_kb = 1.0 if args.ablate else UNIVAL_KB+    match_enable = UNIVAL_MATCH and not args.ablate     expr, uv_info = unival_align(expr, info.get("out_labels"), stage_a, stage_b,                                  float(t), int(info.get("n_from_a", 0) or 0),-                                 unival_kappa, UNIVAL_TAU, UNIVAL_CAP, UNIVAL_MIN_CELLS)+                                 unival_kappa, UNIVAL_TAU, UNIVAL_CAP, UNIVAL_MIN_CELLS,+                                 ta_enable=ta_enable, ta_mode=UNIVAL_TA_MODE,+                                 ta_ref=UNIVAL_TA_REF, ta_floor=UNIVAL_TA_FLOOR,+                                 ta_k=UNIVAL_TA_K, kappa_a=ta_ka, kappa_b=ta_kb,+                                 match_enable=match_enable, match_beta=UNIVAL_MATCH_BETA,+                                 match_rho=UNIVAL_MATCH_RHO, match_topk=UNIVAL_MATCH_TOPK,+                                 match_norm=UNIVAL_MATCH_NORM,+                                 wp=(1.0 if args.ablate else UNIVAL_P))     info.update(uv_info)     sc_info = {"sidecluster": sidecluster}     if sidecluster and expr.shape[0]:@@ -2867,6 +3147,8 @@ def main() -> None:                                          "vdef_g2_dev_max", "vdef_nnz_before", "vdef_nnz_after",                                          "wireset_kappa", "wireset_cap", "wireset_min_cells",                                          "wireset_applied", "wireset_n_groups",+                                         "wireset_adapt", "wireset_nref", "wireset_flo",+                                         "wireset_kg_min", "wireset_kg_max", "wireset_n_adapted",                                          "wireset_abslogdrift_median", "wireset_abslogdrift_p90",                                          "wireset_abslogdrift_max", "wireset_g2_dev_max",                                          "wireset_nnz_before", "wireset_nnz_after",@@ -2874,7 +3156,18 @@ def main() -> None:                                          "unival_applied", "unival_n_shared",                                          "unival_n_one_sided_cells", "unival_step_absmean",                                          "unival_step_absmax", "unival_n_genes_active",-                                         "unival_g2_dev_max", "unival_nnz_before", "unival_nnz_after")}+                                         "unival_g2_dev_max", "unival_nnz_before", "unival_nnz_after",+                                         "unival_ta", "unival_ta_mode", "unival_ta_ref",+                                         "unival_ta_floor", "unival_kappa_a", "unival_kappa_b",+                                         "unival_ta_applied", "unival_ta_n_types",+                                         "unival_ta_n_zero_types", "unival_ta_n_clipped_types",+                                         "unival_ta_w_min", "unival_ta_w_med", "unival_ta_w_max",+                                         "unival_ta_cellw_mean", "unival_ta_cellw_zero_frac",+                                         "unival_ta_weights",+                                         "unival_match", "unival_match_beta",+                                         "unival_match_rho", "unival_match_topk",+                                         "unival_match_norm",+                                         "unival_match_sim")}     print(json.dumps({"bracket": [a["stage"], b["stage"]], **keep}, default=float), file=sys.stderr)     write_t2(args.out, expr, coords, genes, seed=args.seed) 

调研来源?调研员查到并用到的知识条目和文献检索结果(只列标题和编号)。

用到的知识库条目

编号标题出处
k007Interval staging and held-out-window filtering of external datanotes/official/来件/virtualembryo.ai/rules.md
k024World-model evaluation dimensions for state-transition predictorsnotes/competition/07_biomedical_world_models.md
k008Navigo: iterative rectified flow matching on snapshot time series10.64898/2026.06.18.733286

分析结果?分析员写的 ANALYSIS.json:改了什么、各组分数怎么变、假设是否成立、经验和下一步建议。

改了什么在父48管线之上:PLAN的UNIVAL-TA(按类型持久度加权κ,含det/inv/count三种解码+per-side κ_a/κ_b)被实现并在proxy A半证否;实际提交的默认改动是备选机制UNIVAL-P——把UNIVAL软基因权重 w_g=clip(|Δ̂|/τ,0,1) 加指数 P=3.0,使单侧位移集中到强阶段效应基因;另实现但默认关闭 MATCHDELTA(类型匹配方向)与 WIRESET-AC(组大小自适应强度)。坐标不动,DE通道由池化伪批量中和结构性保持不变。
各组分数的变化board:65.7040→65.7053,+0.0013,等于打平
cell_state:噪声内:mmd_u raw .01004=.01004(skill .643,得分 8.04)、variogram raw .007212=.007212(skill .558,得分 6.98);组 60.08→60.08,+0.00。P=3 只压缩弱效应基因的位移幅度,未改变这两项的可测分布量
expression_change:噪声内(无变化):de_score raw .3448=.3448、skill .614、得分 7.67=7.67;de_direction raw .3845=.3845、得分 7.95=7.95;组 62.47→62.47,+0.00
local_spatial:噪声内:neighborhood_mmd raw .04585→.04584,skill .629→.630,得分 15.74→15.74;组 62.95→62.96,+0.01,远小于 T2 约 1 分的噪声。结构门=1(邻域 skill .630 > 0.5),形状组未被打折
shape_scale:噪声内(结构性不变):d2_shape .00661(skill .963,8.03)、occupancy_dice .8086(skill .424,3.53,仍低于地板 4.17)、scale_log_ratio .0099(skill .932,7.77);组 77.31→77.31,+0.00。坐标逐位不动,符合预期
family_idother
假设是否成立否
经验
  1. 在 UNIVAL 这类值级位移上,任何按类型/基因分级加权的方案,先用『等均值统一权重』做对照再花查分额度:本节点分级 TA(ref=0.1)65.009 vs 同平均幅度的统一 κ_b=0.62 得 65.017,mmd_u/variogram/nbhd 三项 raw 差 ≤3e-5 → 持久度排序不携带信息,交换只由平均位移幅度驱动,PLAN 假设(瞬态型的错误位移拖累 mmd_u)不成立。
  2. per-side 消融能把交换定位到具体一侧:κ_b=0 → 64.662(≈UNIVAL 关闭的 64.699),κ_a=0 → 65.116,说明 UNIVAL 的全部收益来自 b 侧回退,a 侧前移净贡献≈0;κ_b 继续放大(1.5/2.0)时 mmd_u 的点数损失约为 nbhd+variogram 收益的 2 倍。
  3. 位移『方向』不是 mmd_u 的损伤源:MATCHDELTA 用类型相似度 softmax 混合方向,nbhd raw .04723 为全家族最好但 mmd_u 更差(.01126),且范数匹配解码证明该 nbhd 收益来自更长步长而非方向。
  4. 基因选择的重整(P=3 把 480/498 基因的弱效应位移三次方压缩)可以让三项 raw 同向略优(A 半:mmd_u .01084 vs .01089、variogram .007358 vs .007374、nbhd .04750 vs .04771)却在正式评测上完全打平(+0.0013),说明 raw 层面 ~1e-3 量级的改善不足以兑现为分数,不能据此宣称有效。
  5. 本谱系在表达值通道的 A 半 seed 0 天花板 ≈65.13:17 个配置(幅度、类型分级、per-side、方向匹配、基因选择五个自由度)全部落在同一条 mmd_u↔nbhd 交换曲线上,任何再分配净值不变 → 该通道已饱和,继续调参是零和。
  6. Engineer 报告的 raw(de .3571/.3647、mmd_u .01084、nbhd .04750)来自本地 proxy A 半 seed 0,与变化量表的正式评测值(de .3448/.3845、mmd_u .01004、nbhd .04584)不同源,不可混用;但两边给出的结论一致(打平)。
  7. 关闭机制对照有效:--ablate(TA/MATCH/ADAPT off、P→1、κ_a=κ_b=1)逐位还原父48的 X digest(56f694d7d8a1a0b2),harness 也确认 ablated prediction differs → 机制确实在改动输出,只是改动对分数无影响。
mechanism_active是
下一步建议
  1. 针对 shape_scale:occupancy_dice skill .424 是形状组唯一低于地板(4.17)的失分项,而 d2_shape .963、scale_log_ratio .932 已近天花板——移植兄弟谱系节点47的 SIDEFRIM(b 侧稀疏边缘体素切除,该处 shape_scale +0.26),只删远离主体的稀疏点、保持 RMS 半径与 d2_shape 不退化(改动后需同时盯 scale_log_ratio)。
  2. 针对 local_spatial(权重 25+门):放弃继续挤压值级位移,改做表达-位置重配对——在 mix 混抽阶段决定『哪些细胞放在哪些坐标』(例如按 15-NN 表达环境一致性做局部重排/OT 配对),使 neighborhood_mmd 的邻域平均分布更贴近真值;先在小网格上验证 nbhd raw 能否突破 .0458 而不损 mmd_u。
  3. 流程建议:后续节点若再提按类型/基因/组的分级加权机制,PLAN 里必须预先写明等均值统一权重对照(同均值、同支持集),并要求第一步就跑该对照,避免像本节点一样用 5 次解码去证否一个排序无关的假设。

对话摘要?每个角色和大模型对话的统计:轮数、工具调用、用时、token 数和最后的回答摘录;原始记录只给路径。

只给统计和最后回答的摘录;完整对话请到原始记录位置里列出的文件看。

分析员

角色?调研员写计划、工程师改代码、分析员解读分数、审查员检查作弊。分析员 alibaba-token-plan-cn/qwen3.8-max
调用次数1 次
轮数?大模型一共回复了几轮(每轮可以调用多个工具)。3
工具调用?大模型调用读文件、执行命令等工具的次数,按工具名统计。共 2 次:bash 1、write 1
用时1 分
token 数?输入 / 输出(含思考)的 token 数,来自接口返回的用量。输入 22,730 · 输出 1,827 · 思考 1,131
任务(第一行)分析节点 n50 的打分结果,写 ANALYSIS.json
最后的回答(摘录)
ANALYSIS.json written
原始记录位置?完整对话记录在 Spark 上的文件路径;看板不复制原始内容。/home/spark-longxinyang/vec/runs/formal/20261003-171955-search-t2-embryo-interp-chain-12h/nodes/50/analyst.jsonl 12 KB
/home/spark-longxinyang/vec/runs/formal/20261003-171955-search-t2-embryo-interp-chain-12h/nodes/50/analyst.stderr

工程师

角色工程师 alibaba-token-plan-cn/qwen3.8-max
调用次数1 次
轮数64
工具调用共 68 次:bash 47、edit 18、write 3
用时39 分
token 数输入 164,385 · 输出 29,788 · 思考 45,365
任务(第一行)按计划修改程序:UNIVAL-TA: 持久度加权κ拆解单侧细胞值级对齐的mmd_u–nbhd交换
最后的回答(摘录)
All checks pass. Final state verified: deterministic, `--ablate` reproduces parent bit-for-bit, disguised-view identical, vec-check ok.

**做了什么**:实现 PLAN 的 UNIVAL-TA(持久度加权 κ,含 det/inv 退路解码)并证否——判决性对照显示分级 κ 与同均值统一 κ_b(0.62)三项 raw 差 ≤3e-5,持久度排序不携带信息,交换只由平均幅度驱动;per-side 网格证明 UNIVAL 收益全部来自 b 侧回退(κ_b=0→64.66,κ_a=0→65.12)。随后依次证否三个备选(MATCHDELTA 类型匹配方向 65.05/64.96、范数匹配 65.05、WIRESET-AC 自适应强度 65.00),最终提交 UNIVAL-P(软基因权重指数 P=3,位移集中到强阶段效应基因)。

**查分结果**(A 半,18/20 次):提交配置 seed 0 = 65.129(= 父),但 mmd_u .01084/.01089、variogram .007358/.007374、nbhd .04750/.04771 三项 raw 同时略优;seed 1/2 = 64.295/64.445 vs 父 64.294/64.439,稳健打平;DE 通道逐位不变(池化中和完好);--ablate 逐位还原父 48。本家族在 seed 0 的天花板 ≈65.13——17 个配置全部落在同一条 mmd_u↔nbhd 交换曲线上。

**下一步最值得试**:离开表达值通道——(1) 移植兄弟谱系节点 47 的 SIDEFRIM(occupancy_dice skill .421 仍低于地板,是形状组唯一失分项);(2) 表达-位置重配对的空间通道(nbhd 权重 25+门,值级位移已榨干)。
原始记录位置/home/spark-longxinyang/vec/runs/formal/20261003-171955-search-t2-embryo-interp-chain-12h/nodes/50/engineer.jsonl 459 KB
/home/spark-longxinyang/vec/runs/formal/20261003-171955-search-t2-embryo-interp-chain-12h/nodes/50/engineer.stderr

调研员

角色调研员 alibaba-token-plan-cn/qwen3.8-max
调用次数1 次
轮数1
工具调用共 0 次:—
用时3 分
token 数输入 22,076 · 输出 1,701 · 思考 6,906
任务(第一行)为节点 n50(改进,父节点 n48)写改进计划 PLAN.json
最后的回答(摘录)
80%的单侧类型n_other=0,说明持久度信号太稀疏,退路改用该类型标记基因在对侧的平均检出率(>0的基因占比)作为软持久度权重。\n\n步骤2(核心机制):对每个单侧类型计算持久度权重 w_type = clip(n_other / n_thresh, 0, 1)。a起源细胞的位移幅度乘 κ_a × w_type,b起源乘 κ_b × w_type。n_other=0的类型κ=0(不做值级位移,保留原始阶段表达),避免把已消失/未出现类型的细胞推向不存在的中间态。位移方向、Δ̂估计、软权重w_g、截断、乘性衰减、池化伪批量中和全部不变(DE通道结构性不动)。\n\n步骤3(参数扫描,用vec-score A半seed 0筛选):\n- 第一轮(4次查分):κ_a=κ_b=1.0,n_thresh∈{3,5,10},加一组n_thresh=3+per-side κ_a=1.0/κ_b=0.7。目标:确认类型感知κ是否优于统一κ=1.0(65.084)。\n- 第二轮(6次查分):取最佳n_thresh,κ_a×κ_b∈{0.7,1.0,1.5}×{0.7,1.0,1.5},共9组取最佳6组。目标:找到mmd_u中性而nbhd保持或改善的组合。\n- 第三轮(2-3次查分):最佳配置重复查分确认(差距<1分需2次以上同向),再跑seed 1验证。\n\n单输入阶段退路:本机制只用括号内数据(两侧细胞计数),若只有一个输入阶段则无括号、无单侧类型,机制自动退化为恒等(κ×0=0),不影响输出。\n\n时间预算:实现约30行(在UNIVAL循环内加类型权重查找),运行时间与父相同(~2s),20次查分额度足够。",
  "expected_groups": ["cell_state", "local_spatial"],
  "risks": "1)多数单侧类型n_other=0(持久度信号稀疏),导致UNIVAL-TA≈关闭UNIVAL,分数回落到父46水平(64.62)。Engineer应在步骤1先统计n_other分布,若>80%为0则立即切换到标记基因检出率的软权重退路,不要浪费查分额度。2)持久度权重引入额外离散噪声(小样本类型的n_other不稳定),可能使κ在种子间波动。缓解:n_thresh≥3,且用min(两侧细胞数)加权(与Δ̂估计一致)。3)改善幅度可能<1分(T2噪声),需重复查分确认;若两轮最佳配置差<0.5分且方向不一致,提交父配置(NO_CHANGE)。",
  "family_id": "other",
  "mechanism": "UNIVAL的κ从统一常数改为按类型持久度加权:κ_cell = κ_side × clip(n_other/n_thresh, 0, 1),其中n_other是该单侧类型在对侧括号阶段的细胞数。持久型(n_other高)获得接近κ_side的位移,瞬态型(n_other=0)不做值级位移,从而在保持nbhd收益的同时保护mmd_u不被瞬态型的错误位移拖累。可选per-side非对称κ_a≠κ_b进一步拆解两侧贡献。",
  "vs_constant_shift": "不是全局常数位移:κ按类型×起源侧变化,由括号内实测细胞计数决定(生物学证据驱动),位移方向是逐基因阶段效应Δ̂(非统一方向),幅度受软权重w_g和截断约束,且池化伪批量精确中和保证DE通道不变。常数位移对所有细胞施加相同向量,本机制对不同持久度的类型施加不同幅度甚至零幅度。",
  "mechanism_evidence": "1)κ_type分布应为非均匀(部分类型κ=0,部分接近κ_side),若全部κ相同则机制未生效;2)对比统一κ=1.0,瞬态型(κ=0)细胞的表达应不变、持久型细胞的表达应被位移,可用X digest或逐细胞L2范数差验证;3)mmd_u raw应从.01089下降(瞬态型不再被错误位移),nbhd raw应保持≤.04771或进一步改善;4)de_score/de_direction raw应逐位不变(.3448/.3845),确认池化中和完好;5)四组分各自变化:cell_state和local_spatial应改善,expression_change和shape_scale应不变。",
  "mechanism_off_control": "设T2_UNIVAL_TA=0(或env κ_a=κ_b=1.0, n_thresh=∞),使所有w_type=1,κ_cell=κ_side×1=统一κ,退化为父48的UNIVAL。预期输出与父48逐位一致(X digest相同),榜分差=0。若关闭后输出仍不同,说明实现有bug。",
  "sources": []
}
```
原始记录位置/home/spark-longxinyang/vec/runs/formal/20261003-171955-search-t2-embryo-interp-chain-12h/nodes/50/researcher.jsonl 7 KB
/home/spark-longxinyang/vec/runs/formal/20261003-171955-search-t2-embryo-interp-chain-12h/nodes/50/researcher.stderr

审查员

角色审查员 alibaba-token-plan-cn/qwen3.8-max
调用次数1 次
轮数26
工具调用共 29 次:bash 19、read 9、write 1
用时4 分
token 数输入 61,720 · 输出 3,628 · 思考 3,695
任务(第一行)审查节点 n50 的程序是否越界读取、写死目标、钻评分器漏洞
最后的回答(摘录)
REVIEW.json written
原始记录位置/home/spark-longxinyang/vec/runs/formal/20261003-171955-search-t2-embryo-interp-chain-12h/nodes/50/reviewer.jsonl 267 KB
/home/spark-longxinyang/vec/runs/formal/20261003-171955-search-t2-embryo-interp-chain-12h/nodes/50/reviewer.stderr