总览 · ← 返回运行 20261003-171955-search-t2-embryo-interp-chain-12h
节点 n11 在终选来历上
父节点8之上新增型内NN配对中点收缩:共有类型a/b侧细胞在DE基因维度贪心配对,双方仅沿DE维度向配对中点收缩β=0.2(nnz-only、坐标不动),压缩Δ方向之外的型内残余方差。
| 运行?一次完整的自动搜索或 Agent 会话,有自己的锁定配置和证据包。 | 20261003-171955-search-t2-embryo-interp-chain-12h |
|---|---|
| 父节点 | n8 |
| 子节点 | n13 |
| 操作?种子:人写的起点;改进:在父节点上改;草稿:从头写;修复:修父节点的报错。 | 改进 |
| 状态 | 已打分 |
| 分数 | 搜索目标分 61.79(+0.0) · proxy 61.79(+0.0) · 3 次复测均分 61.80 |
| 审查 | 通过 1 越界读取:未发现问题——run.py 仅通过 view_io 的 load_manifest/read_stage/panel_genes 从 --data 读取(run.py:306-316),无绝对路径、..、/mnt、网络访问;src.task2_spatial.* 为框架自带模块。; 2 硬编码目标统计量:未发现问题——Δ、类型均值、DE 掩码均由两个输入阶段现场计算(run.py:115-127, 203-204);α=5/λ=6/β=0.2/阈值0.25 等为算法超参数(run.py:60-89),非细胞类型比例或基因列表等目标统计量。; 3 钻评分器漏洞:未发现问题——坐标… |
| 用时?从运行开始到结束(或到现在)的挂钟时间。 | 19 分 |
| 程序版本 | dbf8b5759773e6509cc2ff811b75c532aa54a1fd (programs.git) |
| 导入自 | 20261003-094242-search-t2-embryo-interp-g24-D-s2#11 |
| 备注 | re-scored at launch (origin 20261003-094242-search-t2-embryo-interp-g24-D-s2 node 11, score there 61.79) |
方法说明?节点程序自带的 METHOD.md:这个程序做了什么、为什么。
来自 programs.git dbf8b57597:solution/METHOD.md
父节点8之上新增型内NN配对中点收缩:共有类型a/b侧细胞在DE基因维度贪心配对,双方仅沿DE维度向配对中点收缩β=0.2(nnz-only、坐标不动),压缩Δ方向之外的型内残余方差。
方法(family T2EI-01,PLAN:型内NN配对中点收缩修复variogram)
保留父节点 8 全部管线(procrustes3d、scale_damp=0.5、分层混抽 n=5000、α=5、λ=6、|Δ|≥0.25 DE 掩码、nnz-only、坐标不动),在 λ 加权位移之后新增:
- 对每个共有类型 k(输出中 a/b 两侧各 ≥ T2_PAIR_MIN_CELLS=10 个细胞),取位移后的 a 侧集 A_k、b 侧集 B_k。
- 距离只用 |Δ_k|≥0.25 的 DE 基因维度(<10 个 DE 基因则跳过该型),算 A_k×B_k 欧氏距离矩阵。
- 贪心 NN 匹配:按 A_k 索引顺序,每个细胞配 B_k 中最近的未匹配细胞;多余细胞不配对。
- 配对收缩:m=(a_i+b_j)/2;a_i ← clip(a_i+β(m−a_i),0)、b_j 对称,仅作用于 DE 维度(T2_PAIR_DE_ONLY=1,非 DE 基因保持实测值)、仅 nnz 项。
- β=0 完全跳过配对,逐位复现父节点 8(已验证 array_equal=True,X 与坐标均同)。
- 环境变量:T2_PAIR_BETA(默认 0.2)、T2_PAIR_MIN_CELLS(10)、T2_PAIR_MIN_DE(10)、T2_PAIR_DE_ONLY(1)。
- 单输入阶段退路:同父节点,分层复制最后观测阶段,无位移无配对。
机制生效证据(seed 0,proxy E6.75+E8.0→E7.25,t=0.4,β=0.2 de-only)
- 9 个类型完成配对、共 868 对(第 10 个共有类型因输出侧细胞 <10 被跳过)。
- 平均配对距离 / 型内直径 = 0.648(<0.8,配对有意义;PLAN 判据满足)。
- 配对前后型内表达 std 比(DE 维度)= 0.948;沿 Δ 正交方向(PC2+PC3)方差比 = 0.915——正交方向压缩更多,正是 λ 投影加权未触及的自由度(对照:λ 机制的型内 std 比 0.920 主要沿 Δ)。
- 稀疏结构保持:收缩只动 nnz 项且限于 DE 维度。
关闭对照(mechanism_off_control)
T2_PAIR_BETA=0:输出与父节点 8(α=5, λ=6)逐位相同(X 与 spatial_3D array_equal=True)——管线正确性验证通过。
查分结果(同日 A 半锚点;控制组 β=0 当日 = 60.72,与父节点 METHOD 同日锚点一致)
全基因收缩(de_only=0)与 DE-only 收缩两组网格:
| 配置 | seed0 | seed1 | mmd_u skill | variogram skill | nbr skill |
|---|---|---|---|---|---|
| β=0(=父节点8) | 60.72 | 60.71 | 0.599/0.602 | 0.368/0.361 | 0.585/0.582 |
| 全基因 β=0.05/0.1/0.15/0.2/0.3 | 60.75/60.76/60.78/60.79/60.78 | — | 0.601→0.609 单调 | 0.369→0.376 单调 | 0.584→0.577 |
| 全基因 β=0.5/1.0 | 60.52/59.91 | — | 0.608/0.588 | 0.382/0.399 | 0.571/0.550 |
| de-only β=0.3/0.5/1.0 | 60.80/60.75/60.25 | 60.48/— | 0.609/0.611/0.602 | 0.374/0.378/0.390 | 0.579/0.574/0.558 |
| de-only β=0.2(提交) | 60.79 | 60.63 | 0.607/0.611 | 0.372/0.365 | 0.581/0.579 |
如实结论:机制方向性信号一致——mmd_u skill 随 β 单调升(0.599→0.611,两个 seed 均复现),variogram skill 单调升(0.368→0.399,β=1.0 时越过地板 0.389),证明配对收缩确实作用于 PLAN 针对的型内全方向残余方差;但 neighborhood_mmd 同步单调降(0.585→0.550,型内压缩让邻域平均分布偏离真值),榜分净收益两 seed 均值 ≈ +0.0(60.71→60.71),全部在 T2 约 1 分噪声内。取 β=0.2 de-only:榜分平台(60.79/60.63)内 nbr 损失最小、护栏全保(mmd_u≥0.59 ✓、nbr≥0.577,接近但未破 0.58 线;β=0.3 时 nbr 0.577 且 seed1 榜分 60.48 更差)。
- 已验证:β=0 逐位复现父节点;β∈{0.05,0.1,0.15,0.2,0.3,0.5,1.0}×{全基因,de-only} 网格;两 seed(0,1)复核提交配置;vec-check 通过;同 seed 两次运行逐位相同(无新增随机源,贪心匹配按固定索引序确定);默认参数输出与网格文件逐位一致。
- 未验证:真实括号(E7.25+E8.0,更窄、共有类型更多但每型细胞数分布不同,配对距离/直径比可能变化);α×β、λ×β 联合网格;β∈(0.2,0.3) 细扫(差别在噪声内,无意义)。
知识来源
未使用新的生物学知识。Δ、类型均值、配对全部由 view 内两个输入阶段现场计算;无硬编码统计量、无保留阶段/基因型信息。DE 阈值 0.25 沿用评分器公开的 DE 定义(方法卡)。
下一步建议
- cell_state 的 mmd_u/variogram 与 local_spatial 的 neighborhood_mmd 在"型内方差压缩"上存在直接权衡(压缩帮 mmd_u/variogram、伤 nbr,权重 25 vs 12.5+12.5),纯表达侧压缩已到收益上限;再提升需改变邻域平均本身(如坐标侧让同型细胞更聚簇,使 nbr 平均更像真值),或做组成层面的改动(插值型比例而非整细胞混抽)。
- occupancy_dice skill 0.367–0.369 仍是形状组最大失分项(d2/scale 已 0.93+),坐标侧各向异性整形(node 7 在另一分支做到 shape_scale 83)与本表达机制正交、可叠加,是最大的剩余头寸(形状组满打满算 +2 榜分级别)。
调研员的计划
| 名称 | 型内NN配对中点收缩修复variogram(叠加于λ加权位移) |
|---|---|
| 动机 | 父节点8的cell_state组49.75是四组最弱,核心瓶颈是variogram skill 0.386(低于地板0.5)。ANALYSIS明确指出:沿Δ的投影加权对variogram无效(0.389→0.386),型内双峰残差主要不在Δ方向上,基因共变结构未被修复。mmd_u skill 0.610尚有空间。occupancy_dice skill 0.367属坐标侧问题,与表达机制正交,本节点不动。 |
| 做法 | 保留父节点8全部管线(procrustes3d、scale_damp=0.5、分层混抽n=5000、α=5、λ=6、nnz-only、坐标不动),在λ加权位移之后新增型内配对收缩: 1. 对每个共有类型k(a/b各≥10细胞),取该型在输出中的a侧细胞集A_k和b侧细胞集B_k(已经过α+λ位移)。 2. 距离计算:只用|Δ_k|≥0.25的DE基因维度,计算A_k×B_k的欧氏距离矩阵。若DE基因数<10则跳过该型。 3. 贪心NN匹配:对A_k中每个细胞找B_k中最近未匹配细胞,形成配对集(|A_k|≠|B_k|时多余细胞不配对)。 4. 配对收缩:对每对(a_i, b_j),midpoint m=(a_i+b_j)/2;a_i ← a_i + β·(m−a_i),仅作用于a_i>0的项,clip≥0;b_j对称。β默认0.15,搜索{0.05,0.1,0.15,0.2,0.3}。 5. β=0时配对步骤不执行,输出与父节点8逐位相同(关闭对照)。 6. 环境变量T2_PAIR_BETA(默认0.15)、T2_PAIR_MIN_CELLS(默认10)。 7. 单输入阶段退路:同父节点,分层复制最后观测阶段,无位移无配对。 8. vec-score筛选:先跑β=0确认逐位复现父节点;再跑β=0.15,看variogram skill是否从0.386上升;若上升则扩展网格,若不上升则尝试β=0.3/0.5。 9. 预期耗时增加<0.5s(每型距离矩阵≤300×300×50维)。 |
| 风险 | 1) α=5+λ=6已大幅压缩型内方差,残余双峰可能很小,配对收缩无空间→检查配对前后型内std比值,若变化<5%则机制无信号;2) β过大→型内多样性塌缩→mmd_u反降;护栏:mmd_u skill不低于0.59;3) 贪心NN在高维稀疏空间可能配对质量差→报告配对距离中位数与型内直径之比,若>0.8说明配对无意义;4) 总收益可能<1分噪声→若首次查分差<0.5,换β再查2次确认方向。 |
代码改动?这个节点的程序和父节点程序的逐行差别:绿色是新增,红色是删除。
对比:父节点版本 95a9992ba8。改动的文件:solution/EXECUTION.json +1 −0、solution/METHOD.md +36 −30、solution/README.md +7 −5、solution/run.py +124 −2
diff --git a/solution/EXECUTION.json b/solution/EXECUTION.jsonnew file mode 100644index 0000000..9d5125c--- /dev/null+++ b/solution/EXECUTION.json@@ -0,0 +1 @@+{"gpu": false}diff --git a/solution/METHOD.md b/solution/METHOD.mdindex 4db8403..3656ee8 100644--- a/solution/METHOD.md+++ b/solution/METHOD.md@@ -1,44 +1,50 @@-父节点 mix+类型级常数收敛位移之上,把位移改为逐细胞投影加权:细胞沿 Δ 方向已前伸的少移、极端的多移(w=clip(1∓λp,0.2,2.5),λ=6),型内分布向中间压缩而非刚性平移。+父节点8之上新增型内NN配对中点收缩:共有类型a/b侧细胞在DE基因维度贪心配对,双方仅沿DE维度向配对中点收缩β=0.2(nnz-only、坐标不动),压缩Δ方向之外的型内残余方差。 -## 方法(family T2EI-01,PLAN:型内投影加权异质位移)+## 方法(family T2EI-01,PLAN:型内NN配对中点收缩修复variogram) -保留父节点 5 全部管线(procrustes3d 对齐、scale_damp=0.5、按类型分层混抽 (1−t,t)、n=5000、共有类型 Δ=μ_b−μ_a 只保留 |Δ|≥0.25、nnz-only + clip≥0、坐标不动、α=5),只把常数位移改成逐细胞加权:+保留父节点 8 全部管线(procrustes3d、scale_damp=0.5、分层混抽 n=5000、α=5、λ=6、|Δ|≥0.25 DE 掩码、nnz-only、坐标不动),在 λ 加权位移之后新增: -1. 对每个共有类型 k、Δ≠0 的基因维度:a 侧细胞 i 计算偏差投影 p_i = dot(x_i − μ_a,k, Δ_k)/(‖Δ_k‖²+ε),ε=1.0;权重 w_i = clip(1 − λ·p_i, 0.2, 2.5);位移 x_i ← clip(x_i + α·t·w_i·Δ_k, 0),只作用于 x_i>0 的项。-2. b 侧对称:p_i 相对 μ_b,k,w_i = clip(1 + λ·p_i, 0.2, 2.5),位移 −α·(1−t)·w_i·Δ_k。-3. 直觉:已沿 Δ 方向伸展较远(更接近中间态)的细胞获得更小位移,极端细胞获得更大位移 → 型内端点双峰被压缩而非整块平移。-4. λ=0 时 w≡1,退化为父节点常数位移(对照,验证逐位相同)。λ 默认 6.0,环境变量 `T2_CONVERGE_LAMBDA` / `T2_CONVERGE_EPS` 可覆盖,提交时保持打开。-5. 单输入阶段退路:同父节点,分层复制最后观测阶段,无位移。坐标完全不动,表达-位置配对不因机制被破坏。+1. 对每个共有类型 k(输出中 a/b 两侧各 ≥ T2_PAIR_MIN_CELLS=10 个细胞),取位移后的 a 侧集 A_k、b 侧集 B_k。+2. 距离只用 |Δ_k|≥0.25 的 DE 基因维度(<10 个 DE 基因则跳过该型),算 A_k×B_k 欧氏距离矩阵。+3. 贪心 NN 匹配:按 A_k 索引顺序,每个细胞配 B_k 中最近的未匹配细胞;多余细胞不配对。+4. 配对收缩:m=(a_i+b_j)/2;a_i ← clip(a_i+β(m−a_i),0)、b_j 对称,**仅作用于 DE 维度**(T2_PAIR_DE_ONLY=1,非 DE 基因保持实测值)、仅 nnz 项。+5. β=0 完全跳过配对,逐位复现父节点 8(已验证 array_equal=True,X 与坐标均同)。+6. 环境变量:T2_PAIR_BETA(默认 0.2)、T2_PAIR_MIN_CELLS(10)、T2_PAIR_MIN_DE(10)、T2_PAIR_DE_ONLY(1)。+7. 单输入阶段退路:同父节点,分层复制最后观测阶段,无位移无配对。 -## 机制生效证据(seed 0,proxy E6.75+E8.0→E7.25,t=0.4,10 个共有类型全部位移)+## 机制生效证据(seed 0,proxy E6.75+E8.0→E7.25,t=0.4,β=0.2 de-only) -- 权重分布:λ=6 时 w_mean=1.096、w_std=0.652(≫0.05,投影有区分力;均值略高于 1 因下界 0.2/上界 2.5 的 clip 不对称)。λ=1/2/3 时 w_std=0.15/0.29/0.40,随 λ 单调。-- 型内表达标准差比(after/before)0.920、型间均值距离比 0.804;零元结构保持(nnz-only 位移)。-- λ=0 输出与父节点 run.py 输出逐位相同(X 与坐标 array_equal=True)——关闭对照通过。+- 9 个类型完成配对、共 868 对(第 10 个共有类型因输出侧细胞 <10 被跳过)。+- 平均配对距离 / 型内直径 = **0.648**(<0.8,配对有意义;PLAN 判据满足)。+- 配对前后型内表达 std 比(DE 维度)= **0.948**;沿 Δ 正交方向(PC2+PC3)方差比 = **0.915**——正交方向压缩更多,正是 λ 投影加权未触及的自由度(对照:λ 机制的型内 std 比 0.920 主要沿 Δ)。+- 稀疏结构保持:收缩只动 nnz 项且限于 DE 维度。 -## 对照与查分结果(全部为同一时段 A 半查分;父节点输出同日重查 = 60.55,此前变化量表中的 61.51 属另一次评分锚点,跨日绝对值不可直接比)+## 关闭对照(mechanism_off_control) -| 配置 | 总分 | mmd_u skill | variogram skill | neighborhood skill | cell_state 组 |+T2_PAIR_BETA=0:输出与父节点 8(α=5, λ=6)逐位相同(X 与 spatial_3D array_equal=True)——管线正确性验证通过。++## 查分结果(同日 A 半锚点;控制组 β=0 当日 = 60.72,与父节点 METHOD 同日锚点一致)++全基因收缩(de_only=0)与 DE-only 收缩两组网格:++| 配置 | seed0 | seed1 | mmd_u skill | variogram skill | nbr skill | |---|---:|---:|---:|---:|---:|-| λ=0(对照=父节点,逐位相同) | 60.55 | 0.585 | 0.371 | 0.583 | 47.82 |-| λ=0.5 | 60.60 | 0.587 | 0.374 | 0.583 | 48.07 |-| λ=1.0 | 60.65 | 0.590 | 0.376 | 0.582 | 48.29 |-| λ=2.0 | 60.67 | 0.596 | 0.373 | 0.581 | 48.47 |-| λ=3.0 | 60.69 | 0.599 | 0.371 | 0.582 | 48.50 |-| **λ=6.0(提交)** | **60.72** | 0.599 | 0.368 | 0.585 | 48.33 |-| λ=10.0 | 60.49 | 0.592 | 0.365 | 0.587 | 47.88 |-| λ=1/3, ε=0.1 | 60.65/60.69 | 0.590/0.599 | 0.376/0.371 | 0.582 | — |--- 收益来源是 mmd_u skill(0.585→0.599,随 λ 单调到 6 后在 10 回落),variogram 基本持平(0.371→0.368),neighborhood、DE 两项、形状三项不动。-- **如实说明**:同日同锚点下总收益 +0.17(60.55→60.72),低于 T2 约 1 分的查分噪声,PLAN 预期的 variogram 明显上升没有出现;只有 mmd_u 的单调改善是跨 λ 一致的方向性信号(护栏 mmd_u≥0.585、neighborhood≥0.58 均未破)。λ=10 过冲回落,平台在 3–6,取 λ=6。-- 已验证:λ=0 逐位复现父节点;λ∈{0.5,1,2,3,6,10}、ε∈{0.1,1.0} 网格;vec-check 通过;默认参数输出与 λ=6 网格输出一致;无新增随机源,对 seed 确定。-- 未验证:λ 与 α 的联合网格(α 固定 5);真实括号(跨度更窄、Δ 更小,投影 p 的尺度随 ‖Δ‖ 变化,λ 的最优值可能移动——ε=1.0 在 ‖Δ‖² 小时会稀释权重,跨括号迁移性存疑);proxy2/final 视图未跑(本节点只挂 proxy 尺子)。+| β=0(=父节点8) | 60.72 | 60.71 | 0.599/0.602 | 0.368/0.361 | 0.585/0.582 |+| 全基因 β=0.05/0.1/0.15/0.2/0.3 | 60.75/60.76/60.78/60.79/60.78 | — | 0.601→0.609 单调 | 0.369→0.376 单调 | 0.584→0.577 |+| 全基因 β=0.5/1.0 | 60.52/59.91 | — | 0.608/0.588 | 0.382/0.399 | 0.571/0.550 |+| de-only β=0.3/0.5/1.0 | 60.80/60.75/60.25 | 60.48/— | 0.609/0.611/0.602 | 0.374/0.378/0.390 | 0.579/0.574/0.558 |+| **de-only β=0.2(提交)** | **60.79** | **60.63** | 0.607/0.611 | 0.372/0.365 | 0.581/0.579 |++**如实结论**:机制方向性信号一致——mmd_u skill 随 β 单调升(0.599→0.611,两个 seed 均复现),variogram skill 单调升(0.368→0.399,β=1.0 时越过地板 0.389),证明配对收缩确实作用于 PLAN 针对的型内全方向残余方差;但 neighborhood_mmd 同步单调降(0.585→0.550,型内压缩让邻域平均分布偏离真值),榜分净收益两 seed 均值 ≈ +0.0(60.71→60.71),全部在 T2 约 1 分噪声内。取 β=0.2 de-only:榜分平台(60.79/60.63)内 nbr 损失最小、护栏全保(mmd_u≥0.59 ✓、nbr≥0.577,接近但未破 0.58 线;β=0.3 时 nbr 0.577 且 seed1 榜分 60.48 更差)。++- 已验证:β=0 逐位复现父节点;β∈{0.05,0.1,0.15,0.2,0.3,0.5,1.0}×{全基因,de-only} 网格;两 seed(0,1)复核提交配置;vec-check 通过;同 seed 两次运行逐位相同(无新增随机源,贪心匹配按固定索引序确定);默认参数输出与网格文件逐位一致。+- 未验证:真实括号(E7.25+E8.0,更窄、共有类型更多但每型细胞数分布不同,配对距离/直径比可能变化);α×β、λ×β 联合网格;β∈(0.2,0.3) 细扫(差别在噪声内,无意义)。 ## 知识来源 -未使用新的生物学知识;Δ 向量、类型均值全部由 view 内两个输入阶段现场计算,无硬编码统计量,无保留阶段/基因型信息。+未使用新的生物学知识。Δ、类型均值、配对全部由 view 内两个输入阶段现场计算;无硬编码统计量、无保留阶段/基因型信息。DE 阈值 0.25 沿用评分器公开的 DE 定义(方法卡)。 ## 下一步建议 -- variogram 对"沿 Δ 的投影加权"不敏感,说明双峰残差主要不在 Δ 方向上;可试型内沿主成分的分位数压缩,或对 a/b 两侧细胞做型内 OT 配对后向配对中点收缩(保 nnz 结构)。-- occupancy_dice skill 0.369 仍是形状组主要失分项,与表达机制正交,值得单独做坐标侧改进。+- cell_state 的 mmd_u/variogram 与 local_spatial 的 neighborhood_mmd 在"型内方差压缩"上存在直接权衡(压缩帮 mmd_u/variogram、伤 nbr,权重 25 vs 12.5+12.5),纯表达侧压缩已到收益上限;再提升需改变邻域平均本身(如坐标侧让同型细胞更聚簇,使 nbr 平均更像真值),或做组成层面的改动(插值型比例而非整细胞混抽)。+- occupancy_dice skill 0.367–0.369 仍是形状组最大失分项(d2/scale 已 0.93+),坐标侧各向异性整形(node 7 在另一分支做到 shape_scale 83)与本表达机制正交、可叠加,是最大的剩余头寸(形状组满打满算 +2 榜分级别)。diff --git a/solution/README.md b/solution/README.mdindex aa33d1e..41f8ea6 100644--- a/solution/README.md+++ b/solution/README.md@@ -1,6 +1,8 @@-# mix + 类型级表达时间收敛(T2:embryo:val_interp)+# mix + 型内表达收敛位移 + NN配对中点收缩(T2:embryo:val_interp) -父节点 mix(procrustes3d、scale_damp=0.5、分层混抽)之上新增:共有类型按 Δ=μ_b−μ_a-对 a 侧 +α·t·Δ、b 侧 −α·(1−t)·Δ 位移,只动已表达项、只留 |Δ|≥0.25 基因,clip≥0,坐标不动。-α 默认 5(`T2_CONVERGE_ALPHA` 可覆盖;α=0 逐位复现父节点)。proxy A 半:对照 56.36 → 60.55(seed 1:60.34)。-详见 METHOD.md。+父节点 8(mix 混抽 + α=5 类型级收敛位移 + λ=6 投影加权)之上新增:共有类型的 a/b 侧输出细胞+在 DE 基因维度(|Δ|≥0.25)上贪心最近邻配对,双方仅沿 DE 维度向配对中点收缩 β=0.2+(nnz-only、clip≥0、坐标不动),压缩沿 Δ 之外的型内残余方差,改善 mmd_u / variogram。+β=0 逐位复现父节点 8(`T2_PAIR_BETA` 可覆盖;另有 `T2_PAIR_DE_ONLY`、`T2_PAIR_MIN_CELLS`、`T2_PAIR_MIN_DE`)。+proxy A 半同日锚点:对照 60.72/60.71(seed 0/1)→ 本节点 60.79/60.63;mmd_u skill 0.599→0.607、+variogram 0.368→0.372 一致上升,榜分净差在噪声内。详见 METHOD.md。diff --git a/solution/run.py b/solution/run.pyindex 201dac6..5505261 100644--- a/solution/run.py+++ b/solution/run.py@@ -30,6 +30,14 @@ bimodality until clipping and over-shooting take over. If the target is not bracketed, falls back to a stratified copy of the latest input before it (no displacement possible without two stages).++Newest mechanism (PAIR_BETA, this node): after the λ-weighted displacement,+within-type greedy NN pairing between the a-side and b-side output cells+(distance on DE genes |Δ|≥0.25 only, ≥10 cells per side, ≥10 DE genes), then+both partners shrink β toward their pair midpoint, DE-gene dimensions only,+nnz entries only, clipped at 0. Compresses within-type residual spread in all+directions (the projection-weighted shift only compresses along Δ). β = 0+reproduces the λ-parent bit-for-bit. """ from __future__ import annotations@@ -63,6 +71,22 @@ CONVERGE_NNZ_ONLY = os.environ.get("T2_CONVERGE_NNZ_ONLY", "1") == "1" # it. λ = 0 gives w ≡ 1 and reproduces the constant-shift parent bit-for-bit. CONVERGE_LAMBDA = float(os.environ.get("T2_CONVERGE_LAMBDA", "6.0")) CONVERGE_EPS = float(os.environ.get("T2_CONVERGE_EPS", "1.0"))+# Within-type NN pairing midpoint shrinkage (family T2EI-01 refine, this node):+# after the λ-weighted displacement, for every shared type with ≥PAIR_MIN_CELLS+# cells on both output sides, greedily match each a-side cell to its nearest+# unmatched b-side cell (Euclidean distance restricted to DE genes |Δ|≥0.25)+# and shrink both partners a fraction β toward their pair midpoint, applied+# only to entries already expressed in each cell and clipped at 0. This+# compresses within-type residual spread in ALL directions (not just along Δ),+# which the projection-weighted shift provably does not touch. β = 0 skips the+# step entirely and reproduces the λ-parent bit-for-bit.+PAIR_BETA = float(os.environ.get("T2_PAIR_BETA", "0.2"))+PAIR_MIN_CELLS = int(os.environ.get("T2_PAIR_MIN_CELLS", "10"))+PAIR_MIN_DE = int(os.environ.get("T2_PAIR_MIN_DE", "10"))+# DE-only shrinkage: move paired cells toward each other only on genes with+# |Δ|≥CONVERGE_MIN_DELTA; all other genes keep their measured values, so the+# bulk of the sparse structure and co-variance is untouched.+PAIR_DE_ONLY = os.environ.get("T2_PAIR_DE_ONLY", "1") == "1" def mix_converge(stage_a, stage_b, t: float, params: dict, alpha: float):@@ -161,6 +185,102 @@ def mix_converge(stage_a, stage_b, t: float, params: dict, alpha: float): conv["between_type_mean_dist_rel"] = float(np.mean(dists_a) / max(np.mean(dists_b), 1e-12)) conv["n_shared_types_converged"] = len(shared) + pair_info = {"pair_beta": PAIR_BETA, "n_paired_types": 0, "n_pairs": 0,+ "pair_within_std_rel": None, "pair_orth_var_rel": None,+ "pair_dist_over_diam": None}+ if PAIR_BETA != 0.0 and ia.size and ib.size:+ labs_a = np.asarray(stage_a.labels).astype(str)[ia]+ labs_b = np.asarray(stage_b.labels).astype(str)[ib]+ means_a = type_means(stage_a.X, stage_a.labels)+ means_b = type_means(stage_b.X, stage_b.labels)+ cnt_oa = {k: int((labs_a == k).sum()) for k in set(labs_a.tolist())}+ cnt_ob = {k: int((labs_b == k).sum()) for k in set(labs_b.tolist())}+ pair_types = sorted(k for k in set(means_a) & set(means_b)+ if cnt_oa.get(k, 0) >= PAIR_MIN_CELLS and cnt_ob.get(k, 0) >= PAIR_MIN_CELLS)+ stds, ortho, ratios, n_pairs = [], [], [], 0+ n_types_paired = 0+ for lab in pair_types:+ d = (means_b[lab] - means_a[lab]).astype(np.float32)+ de = np.abs(d) >= CONVERGE_MIN_DELTA+ if int(de.sum()) < PAIR_MIN_DE:+ continue+ ma = labs_a == lab+ mb = labs_b == lab+ A = xa[np.where(ma)[0]][:, de].astype(np.float64)+ B = xb[np.where(mb)[0]][:, de].astype(np.float64)+ ia_idx = np.where(ma)[0]+ ib_idx = np.where(mb)[0]+ # pairwise distances |A| x |B| on DE dims+ D2 = (A * A).sum(1)[:, None] + (B * B).sum(1)[None, :] - 2.0 * (A @ B.T)+ np.maximum(D2, 0.0, out=D2)+ used = np.zeros(B.shape[0], dtype=bool)+ pairs = []+ for i in range(A.shape[0]):+ row = D2[i].copy()+ row[used] = np.inf+ j = int(np.argmin(row))+ if not np.isfinite(row[j]):+ break+ used[j] = True+ pairs.append((i, j))+ if not pairs:+ continue+ n_types_paired += 1+ n_pairs += len(pairs)+ # evidence: within-type std and orthogonal (PC2/PC3) variance before pairing+ comb_before = np.vstack([A, B])+ mu = comb_before.mean(0)+ centered = comb_before - mu+ cov = centered.T @ centered+ evals, evecs = np.linalg.eigh(cov)+ order = np.argsort(evals)[::-1]+ evecs = evecs[:, order[1:3]] # PC2, PC3+ var_before = ((centered @ evecs) ** 2).mean(0)+ # diameter: max pairwise distance within the type (subsample pairs)+ sub = comb_before[np.linspace(0, len(comb_before) - 1, min(len(comb_before), 200)).astype(int)]+ dsub = np.sqrt(np.maximum((sub * sub).sum(1)[:, None] + (sub * sub).sum(1)[None, :] - 2.0 * (sub @ sub.T), 0.0))+ diam = float(dsub.max()) if dsub.size else 0.0+ pdists = [float(np.sqrt(D2[i, j])) for i, j in pairs]+ if diam > 0:+ ratios.append(float(np.mean(pdists)) / diam)+ # apply midpoint shrinkage on nnz entries of the FULL gene vector+ Afull_before = xa[ia_idx]+ Bfull_before = xb[ib_idx]+ Afull = Afull_before.copy()+ Bfull = Bfull_before.copy()+ for i, j in pairs:+ a_row = Afull[i]+ b_row = Bfull[j]+ mid = 0.5 * (a_row.astype(np.float64) + b_row.astype(np.float64))+ da = PAIR_BETA * (mid - a_row.astype(np.float64))+ db = PAIR_BETA * (mid - b_row.astype(np.float64))+ if PAIR_DE_ONLY:+ da = da * de+ db = db * de+ na = np.clip(a_row.astype(np.float64) + da, 0.0, None)+ nb = np.clip(b_row.astype(np.float64) + db, 0.0, None)+ Afull[i] = np.where(a_row > 0, na, a_row).astype(np.float32)+ Bfull[j] = np.where(b_row > 0, nb, b_row).astype(np.float32)+ xa[ia_idx] = Afull+ xb[ib_idx] = Bfull+ # evidence after pairing (DE dims only, for orth variance)+ A2 = Afull[:, de].astype(np.float64)+ B2 = Bfull[:, de].astype(np.float64)+ comb_after = np.vstack([A2, B2])+ centered_a = comb_after - mu # same frame as before+ var_after = ((centered_a @ evecs) ** 2).mean(0)+ ortho.append(var_after.sum() / max(var_before.sum(), 1e-12))+ stds.append((comb_after.std(0).mean(), comb_before.std(0).mean()))+ if stds:+ arr = np.array(stds)+ pair_info["pair_within_std_rel"] = float(arr[:, 0].mean() / max(arr[:, 1].mean(), 1e-12))+ if ortho:+ pair_info["pair_orth_var_rel"] = float(np.mean(ortho))+ if ratios:+ pair_info["pair_dist_over_diam"] = float(np.mean(ratios))+ pair_info["n_paired_types"] = n_types_paired+ pair_info["n_pairs"] = n_pairs+ expr = np.clip(np.vstack([xa, xb]), 0.0, None).astype(np.float32) if (ia.size or ib.size) else np.zeros((0, len(stage_a.genes)), np.float32) coord_parts = [] if ia.size:@@ -171,7 +291,7 @@ def mix_converge(stage_a, stage_b, t: float, params: dict, alpha: float): coords = scale_to_rms(coords, target_rms) info.update( t=t, n=int(expr.shape[0]), rms_a=rms_a, rms_b=rms_b, target_rms=target_rms,- out_rms=rms_radius(coords), n_from_a=int(ia.size), n_from_b=int(ib.size), **conv,+ out_rms=rms_radius(coords), n_from_a=int(ia.size), n_from_b=int(ib.size), **conv, **pair_info, ) return expr, coords.astype(np.float32), info @@ -199,7 +319,9 @@ def main() -> None: keep = {k: info.get(k) for k in ("t", "n", "rms_a", "rms_b", "out_rms", "n_shared_types", "z_dot", "z_flipped", "align", "alpha", "n_shared_types_converged", "within_type_std_rel", "between_type_mean_dist_rel", "n_from_a", "n_from_b",- "lambda", "weight_mean", "weight_std")}+ "lambda", "weight_mean", "weight_std",+ "pair_beta", "n_paired_types", "n_pairs", "pair_within_std_rel",+ "pair_orth_var_rel", "pair_dist_over_diam")} print(json.dumps({"bracket": [a["stage"], b["stage"]], **keep}, default=float), file=sys.stderr) write_t2(args.out, expr, coords, genes, seed=args.seed)
调研来源?调研员查到并用到的知识条目和文献检索结果(只列标题和编号)。
用到的知识库条目
| 编号 | 标题 | 出处 |
|---|---|---|
| k007 | Interval staging and held-out-window filtering of external data | notes/official/来件/virtualembryo.ai/rules.md |
| k024 | World-model evaluation dimensions for state-transition predictors | notes/competition/07_biomedical_world_models.md |
| k026 | Canonicalise predicted 3D coordinates before submission | notes/pitfalls/04_scorer_invariance.md |
分析结果?分析员写的 ANALYSIS.json:改了什么、各组分数怎么变、假设是否成立、经验和下一步建议。
| 改了什么 | 在父节点8(mix混抽+α=5类型级收敛位移+λ=6投影加权)之后新增型内NN配对中点收缩:共有类型a/b侧输出细胞在DE基因维度(|Δ|≥0.25)贪心配对,双方仅沿DE维度向配对中点收缩β=0.2(nnz-only、坐标不动);β=0逐位复现父节点。 |
|---|---|
| 各组分数的变化 | cell_state:噪声内略好:mmd_u 0.01158→0.01123,skill 0.610→0.617,得分+0.09;variogram 0.01414→0.01392,skill 0.386→0.389,得分+0.05;组+0.56,未超1分噪声 expression_change:噪声内:de_score 0.3103不变(+0.00),de_direction 0.3944→0.3986(得分+0.02),组+0.09 local_spatial:噪声内略差:neighborhood_mmd 0.05015→0.05119,skill 0.608→0.603,得分-0.12,组-0.49 shape_scale:不变:三项原始值与得分全部相同,组+0.00 |
| family_id | T2EI-01 |
| 假设是否成立 | 否 |
| 经验 |
|
| mechanism_active | 是 |
| 下一步建议 |
|
对话摘要?每个角色和大模型对话的统计:轮数、工具调用、用时、token 数和最后的回答摘录;原始记录只给路径。
只给统计和最后回答的摘录;完整对话请到原始记录位置里列出的文件看。
分析员
| 角色?调研员写计划、工程师改代码、分析员解读分数、审查员检查作弊。 | 分析员 alibaba-token-plan-cn/qwen3.8-max |
|---|---|
| 调用次数 | 1 次 |
| 轮数?大模型一共回复了几轮(每轮可以调用多个工具)。 | 3 |
| 工具调用?大模型调用读文件、执行命令等工具的次数,按工具名统计。 | 共 2 次:— |
| 用时 | 不到 1 分 |
| token 数?输入 / 输出(含思考)的 token 数,来自接口返回的用量。 | 输入 16,494 · 输出 1,079 · 思考 365 |
| 任务(第一行) | 分析节点 n11 的打分结果,写 ANALYSIS.json |
| 最后的回答(摘录) | ANALYSIS.json written |
| 原始记录位置?完整对话记录在 Spark 上的文件路径;看板不复制原始内容。 | /home/spark-longxinyang/vec/runs/formal/20261003-171955-search-t2-embryo-interp-chain-12h/nodes/11/analyst.jsonl (文件不在) |
工程师
| 角色 | 工程师 alibaba-token-plan-cn/qwen3.8-max |
|---|---|
| 调用次数 | 1 次 |
| 轮数 | 31 |
| 工具调用 | 共 35 次:— |
| 用时 | 17 分 |
| token 数 | 输入 60,587 · 输出 10,926 · 思考 10,015 |
| 任务(第一行) | 按计划修改程序:型内NN配对中点收缩修复variogram(叠加于λ加权位移) |
| 最后的回答(摘录) | 完成。总结: **做了什么**:按 PLAN 在父节点 8(mix + α=5 收敛位移 + λ=6 投影加权)之上实现型内 NN 配对中点收缩——共有类型 a/b 侧输出细胞在 DE 基因维度(|Δ|≥0.25)上贪心配对,双方仅沿 DE 维度向配对中点收缩 β(nnz-only、坐标不动)。机制证据齐全:9 型 868 对、配对距离/直径 0.648、型内 std 比 0.948、正交方向(PC2/PC3)方差比 0.915(比沿 Δ 压缩更多,正是 λ 未触及的自由度)。关闭对照 β=0 逐位复现父节点。 **查分**(同日 A 半锚点,对照 β=0 = 60.72/60.71 seed 0/1):提交 de-only β=0.2 得 60.79/60.63。mmd_u skill 0.599→0.611、variogram 0.368→0.399(β 单调,两 seed 一致,β=1 时 variogram 越过地板 0.389),但 neighborhood_mmd 同步单调下降(0.585→0.550),榜分净收益 ≈0,在 1 分噪声内——机制方向被证实,榜分已到该权衡的上限。额度用尽(20 次)。 **下一步最值得试**:(1) occupancy_dice(skill 0.367)是形状组最大失分,坐标侧各向异性整形与本表达机制正交可叠加(node 7 在另一分支做到 shape_scale 83);(2) 型内压缩与 neighborhood_mmd 存在结构性权衡(权重 25 vs 25),纯表达压缩无剩余头寸,改做组成插值(按型比例而非整细胞混抽)或让同型细胞坐标更聚簇以直接改善邻域平均。 |
| 原始记录位置 | /home/spark-longxinyang/vec/runs/formal/20261003-171955-search-t2-embryo-interp-chain-12h/nodes/11/engineer.jsonl (文件不在) |
调研员
| 角色 | 调研员 alibaba-token-plan-cn/qwen3.8-max |
|---|---|
| 调用次数 | 1 次 |
| 轮数 | 1 |
| 工具调用 | 共 0 次:— |
| 用时 | 2 分 |
| token 数 | 输入 15,592 · 输出 1,152 · 思考 3,971 |
| 任务(第一行) | 为节点 n11(改进,父节点 n8)写改进计划 PLAN.json |
| 最后的回答(摘录) | ```json
{
"name": "型内NN配对中点收缩修复variogram(叠加于λ加权位移)",
"motivation": "父节点8的cell_state组49.75是四组最弱,核心瓶颈是variogram skill 0.386(低于地板0.5)。ANALYSIS明确指出:沿Δ的投影加权对variogram无效(0.389→0.386),型内双峰残差主要不在Δ方向上,基因共变结构未被修复。mmd_u skill 0.610尚有空间。occupancy_dice skill 0.367属坐标侧问题,与表达机制正交,本节点不动。",
"approach": "保留父节点8全部管线(procrustes3d、scale_damp=0.5、分层混抽n=5000、α=5、λ=6、nnz-only、坐标不动),在λ加权位移之后新增型内配对收缩:\n1. 对每个共有类型k(a/b各≥10细胞),取该型在输出中的a侧细胞集A_k和b侧细胞集B_k(已经过α+λ位移)。\n2. 距离计算:只用|Δ_k|≥0.25的DE基因维度,计算A_k×B_k的欧氏距离矩阵。若DE基因数<10则跳过该型。\n3. 贪心NN匹配:对A_k中每个细胞找B_k中最近未匹配细胞,形成配对集(|A_k|≠|B_k|时多余细胞不配对)。\n4. 配对收缩:对每对(a_i, b_j),midpoint m=(a_i+b_j)/2;a_i ← a_i + β·(m−a_i),仅作用于a_i>0的项,clip≥0;b_j对称。β默认0.15,搜索{0.05,0.1,0.15,0.2,0.3}。\n5. β=0时配对步骤不执行,输出与父节点8逐位相同(关闭对照)。\n6. 环境变量T2_PAIR_BETA(默认0.15)、T2_PAIR_MIN_CELLS(默认10)。\n7. 单输入阶段退路:同父节点,分层复制最后观测阶段,无位移无配对。\n8. vec-score筛选:先跑β=0确认逐位复现父节点;再跑β=0.15,看variogram skill是否从0.386上升;若上升则扩展网格,若不上升则尝试β=0.3/0.5。\n9. 预期耗时增加<0.5s(每型距离矩阵≤300×300×50维)。",
"expected_groups": ["cell_state"],
"risks": "1) α=5+λ=6已大幅压缩型内方差,残余双峰可能很小,配对收缩无空间→检查配对前后型内std比值,若变化<5%则机制无信号;2) β过大→型内多样性塌缩→mmd_u反降;护栏:mmd_u skill不低于0.59;3) 贪心NN在高维稀疏空间可能配对质量差→报告配对距离中位数与型内直径之比,若>0.8说明配对无意义;4) 总收益可能<1分噪声→若首次查分差<0.5,换β再查2次确认方向。",
"family_id": "T2EI-01",
"mechanism": "在类型级常数位移+λ投影加权之后,对同型a/b侧细胞做表达空间NN配对,双方向配对中点收缩β比例,直接压缩型内全方向残余方差(而非仅沿Δ),修复基因共变结构。",
"vs_constant_shift": "常数位移/λ加权位移对所有细胞施加同一方向(Δ)的力,只移动型均值、压缩Δ方向方差;本机制为每个细胞找到其最近的异侧同型伙伴,沿两者连线(任意方向)收缩,直接减少型内全维度离散度,对variogram度量的基因对差异有直接作用。",
"mechanism_evidence": "Engineer应报告:(1) 配对前后各型内表达标准差比(预期<0.95);(2) 配对前后型内沿Δ正交方向(PC2,PC3)的方差比(预期明显下降,这是λ机制未触及的);(3) 平均配对距离与型内直径之比(<0.6说明配对有意义);(4) variogram skill从0.386是否上升;(5) mmd_u skill不低于0.59。",
"mechanism_off_control": "设T2_PAIR_BETA=0,配对步骤完全跳过,输出应与父节点8(λ=6, α=5)逐位相同(array_equal=True)。若不同则管线有bug。预期差别:β>0时variogram skill上升、型内方差下降,β=0时与父节点无差异。",
"sources": []
}
``` |
| 原始记录位置 | /home/spark-longxinyang/vec/runs/formal/20261003-171955-search-t2-embryo-interp-chain-12h/nodes/11/researcher.jsonl (文件不在) |
审查员
| 角色 | 审查员 alibaba-token-plan-cn/qwen3.8-max |
|---|---|
| 调用次数 | 1 次 |
| 轮数 | 7 |
| 工具调用 | 共 10 次:— |
| 用时 | 1 分 |
| token 数 | 输入 23,629 · 输出 1,236 · 思考 4,799 |
| 任务(第一行) | 审查节点 n11 的程序是否越界读取、写死目标、钻评分器漏洞 |
| 最后的回答(摘录) | REVIEW.json written |
| 原始记录位置 | /home/spark-longxinyang/vec/runs/formal/20261003-171955-search-t2-embryo-interp-chain-12h/nodes/11/reviewer.jsonl (文件不在) |