总览 · ← 返回运行 20261003-105537-search-t2-heart-extrap-g24-D
节点 n13
T2HX-04 微小全局位移(α=0.02)+表达引导坐标2-opt置换:位移clip伪影在α=0.02即击穿DE保护(49.10),置换仅降能量0.31%、无邻域收益(48.87),按PLAN止损以机制关(=copy_last逐位)提交
| 运行?一次完整的自动搜索或 Agent 会话,有自己的锁定配置和证据包。 | 20261003-105537-search-t2-heart-extrap-g24-D |
|---|---|
| 父节点 | n11 |
| 子节点 | n15、n17 |
| 操作?种子:人写的起点;改进:在父节点上改;草稿:从头写;修复:修父节点的报错。 | 改进 |
| 状态 | 已打分 |
| 分数 | 搜索目标分 50.00(+0.0) · proxy_noscale 50.00(+0.0) |
| 审查 | 未审查 |
| 用时?从运行开始到结束(或到现在)的挂钟时间。 | 29 分 |
| 程序版本 | 9fc2b13a322cb88aa5b96ff7242455bbe91cde4b (programs.git) |
方法说明?节点程序自带的 METHOD.md:这个程序做了什么、为什么。
来自 programs.git 9fc2b13a32:solution/METHOD.md
T2HX-04 微小全局位移(α=0.02)+表达引导坐标2-opt置换:位移clip伪影在α=0.02即击穿DE保护(49.10),置换仅降能量0.31%、无邻域收益(48.87),按PLAN止损以机制关(=copy_last逐位)提交
方法(PLAN 家族 T2HX-04,机制完整实现,开关默认关)
- 基座:
anchor_entry锚阶段整份输出(n=24826 ≤ max_cells=25179,无抽样),坐标点集、表达值、基因序不变;置换只重排细胞↔坐标配对。 - 阶段A(
VEC_ALPHA):extrap_step(manifest)现场取倒数两输入(E8.25_late→E8.75),v = pb(late)−pb(early)(全细胞伪批量),X ← clip(X + α·v, 0),全局统一方向(非按型)。单输入阶段自动跳过。 - 阶段B(
VEC_SWAP=B%):坐标 15-NN(cKDTree)取并集对称图;贪心 2-opt 最小化图上表达余弦距离总和(Dirichlet 能量)。候选用快速近似 gain(i,j) = (x_j−x_i)·(N_i−N_j)(N=邻居单位向量和,批量矩阵化),每对候选先做精确能量差验证(含共邻/相邻修正)再执行;best-first,预算 B%·n 或无改善对或超时停止。 - 开关:
VEC_ALPHA(默认 0=关)、VEC_SWAP(默认 0=关)、VEC_EPS/ROUNDS/KNN/TIMECAP。只用 manifest 阶段顺序与视图内数据,无视图路径、阶段名、绝对时间分支。
网格结果(vec-score T2:heart:val_extrap/proxy_noscale,A 半,共用 2 次查分)
| 配置 | 榜分 | de_score | variogram | mmd_u | neighborhood_mmd | occupancy_dice |
|---|---|---|---|---|---|---|
| identity(父节点实测,=copy_last) | 50.00 | 0 | 0.058616 | 0.05856 | 0.11445 | 0.8066 |
| α=0.02, B=0(只开位移) | 49.10 | −0.125 | 0.064552 | 0.05871 | 0.11463 | 0.8148 |
| α=0.02, B=2%(PLAN 首档完整方案) | 48.87 | −0.125 | 0.064552 | 0.05871 | 0.11459 | 0.8131 |
机制生效证据(PLAN mechanism_evidence 对应项)
- 置换统计:预算 497 对,3 轮扫描只找到 75 对精确增益 >EPS 的改善交换即收敛(无改善交换停止);能量 E0=105046.8 → E1=104718.5,只降 0.313% —— 位移后 copy_last 配对仍是坐标-15NN Dirichlet 能量的强局部最优,PLAN 核心假设(微小位移打破局部最优、释放置换收益)不成立。
- 邻域变化:置换使 neighborhood_mmd 0.11463→0.11459(≈0,A 半 σ=0 下真实但无意义);且 occupancy_dice 0.8148→0.8131 —— 配对重排虽不动坐标点集,仍通过行序影响评分器占据抽样,反伤 shape_scale(与节点 7/9 官方分 shape 掉到 48 的观察一致)。
- 四组分对比(α=0.02+B=2% vs α=0.02+B=0 vs identity):expression_change 50→47.72(两档相同,全部来自位移的 clip 伪影);cell_state 50→48.75(variogram 0.0586→0.0646,与节点 11 同族恶化);local_spatial 50→49.96;shape_scale 50→49.05(置换再扣 occupancy)。
- DE 保护自检(PLAN 风险3):α=0.02 时 std(dp)=0.00452、max|dp|=0.0236、clip(0) 命中 8.10M 条目(≈65%)——PLAN 假设"α≤0.03 时 clip 伪影极小、保护不击穿"被证伪:de_score=−0.125、de_direction=−0.0598,保护已击穿(复刻 node6/11 失败模式,且阈值比节点 11 的 α≥0.20 低一个量级——均匀位移 v 的 std(v)=0.41 比 PCA 缩放残差大得多)。
机制关对照(PLAN mechanism_off_control)
VEC_ALPHA=0 且 VEC_SWAP=0(提交默认):跳过两阶段,输出与 copy_last 逐位一致(sha256 a26c0b78ed1aa4c4…,seed 0 两次运行相同;seed 1 的 .X 与 obsm 逐位相同,仅 uns.generator_seed 字段不同)。预期分数 = 50.00(父节点/节点 1/3/6/8/10/11 提交态实测)。"位移单独开"档 49.10 < identity,证明本方案无任何一档优于机制关。
PLAN 止损执行
PLAN 步骤(5)/风险1:首档(α=0.02, B=2%)= 48.87 ≤ 50.00 → 立即止损,提交 off,不再追加 α×B 网格(位移在 α=0.02 已击穿 DE 保护,更小 α 只会同时缩小"破局"与收益;置换独立收益已被 75/497、0.313%、nb Δ≈0 三个数判死)。
验证过 / 没验证过
- 验证过:提交态
vec-check --task T2:heart:val_extrap/proxy_noscale= ok(注意:--data形式的 vec-check 在本客户端被拒 "task not allowed",需带尺子后缀的 --task);seed 0/1 的 .X、坐标逐位一致;CPU 运行提交态 ~4 s、机制开启态 ~110 s,内存 <1.5 GB(limits 28 GB/30 min 内);单输入阶段回退(prev=None 跳过位移,置换仍可跑)。 - 没验证过:B 半与伪装视图(提交态与父节点逐位相同,无迁移风险;代码只读 manifest 数据与相对顺序,无绝对时间/路径分支);真实 final 视图(3 输入时 v 取倒数两输入,机制默认关,不影响提交态);B>2% 或更小 α 的完整网格(止损规则)。
给树的结论
- T2HX-04 在本榜两种形态均证伪:纯 copy_last 基座上的有界置换(节点 7/9/10:49.60/49.60/50.00)与"微小全局位移破局+置换"(本节点:48.87)。坐标-15NN 配对能量在 copy_last 处已近局部最优(可改善交换 <0.4% 细胞、能量降 0.3%),任何位移预处理都不改变这一事实;置换还会经行序扰动 occupancy_dice。
- 均匀伪批量位移的 clip 伪影击穿 DE 保护的阈值远低于 PCA 缩放族(α≈0.02 vs 0.20):std(v)=0.41 的全局方向上 α=0.02 就产生 de_score<0。改表达值方案的安全边界应按 std(dp) 而非 α 标定。
- 与节点 11 结论合并:copy_last 基座上均值位移、方差缩放、配对重排及其组合已全部证伪,本榜视图内微扰族关闭;剩余杠杆只有引入视图外时间方向信息(跨阶段配对建模),或接受地板 50.00。
调研员的计划
| 名称 | 微小表达位移破局+表达kNN坐标置换(复刻节点5成功条件) |
|---|---|
| 动机 | 节点5(52.74)是全树唯一超过地板的节点,方法为表达kNN引导坐标置换,且其parent(节点4,α=0.05 damped_shift)有微小表达位移。节点10在纯copy_last上'复刻并约束node5'得50.00(机制开启仍无收益),说明纯copy_last的邻域结构是坐标置换的局部最优——微小表达位移打破该局部最优可能是节点5成功的关键前提。节点4本身49.89(α=0.05略有害),但节点5在其基础上通过坐标置换拿到52.74(+2.85)。本方案用更小α(0.01–0.03)降低位移本身损害,再叠加坐标置换。 |
| 做法 | 步骤:(1) copy_last基座(锚阶段整份输出,坐标/基因序/细胞数不变)。(2) 阶段A表达位移:取manifest倒数两输入阶段(E8.25, E8.75),计算逐基因伪批量差 v=pb(late)−pb(early);对锚阶段每个细胞 X_i ← X_i + α·v(全局统一方向,非按型)。α初值0.02,搜索{0.01, 0.02, 0.03};位移后直接clip(0)(α≤0.03时clip伪影极小,先打印std(dp)/std(dt)确认<1%)。(3) 阶段B坐标置换:在位移后表达上建坐标15-NN图;贪心2-opt:遍历所有细胞对(i,j),若交换其坐标后'坐标15-NN内的表达余弦距离总和'下降,则执行交换;总交换预算B%(初值2%,搜索{1,2,4}%);达到预算或无改善交换时停止。(4) 单输入阶段退路:prev=None时跳过阶段A(α无效),阶段B仍可在锚阶段自身表达kNN上执行。(5) vec-score快筛:先查identity基线(1次)→α=0.02/B=0确认位移单独不破坏(1次)→α=0.02/B=2%完整方案(1次)→若>50则追加α×B网格(≤4次)→若首档≤50止损提交off。总查分≤8次。(6) 无视图路径/阶段名/绝对时间分支;只用manifest提供的阶段顺序与视图内数据。 |
| 风险 | 1) α≤0.03的位移可能太小,无法打破copy_last的邻域局部最优,坐标置换仍无改善(与节点10相同结局)——Engineer在首档(α=0.02, B=2%)查分后若≤50.00立即止损;2) 坐标置换过度(B>3%)可能破坏已有邻域结构使neighborhood_mmd恶化并触发结构门——先试B=1%再递增;3) clip(0)在稀疏数据上引入微小均值漂移——实现时打印std(dp)/std(dt),若≥1%则回退为不做clip改用max(X,0)后重归一化每行总和;4) 节点5的52.74仅有单种子,可能是A半噪声高估——若首档>51,用同输出再查一次确认(σ=0已验证则无需)。 |
代码改动?这个节点的程序和父节点程序的逐行差别:绿色是新增,红色是删除。
对比:父节点版本 ee234483ef。改动的文件:solution/METHOD.md +28 −31、solution/run.py +159 −75
diff --git a/solution/METHOD.md b/solution/METHOD.mdindex dd92180..61d4264 100644--- a/solution/METHOD.md+++ b/solution/METHOD.md@@ -1,45 +1,42 @@-# T2HX-03 PCA方差趋势外推(保均值调型内离散度):双向网格全劣于地板,按边界规则以机制关(VEC_ALPHA=0,逐位=copy_last)提交+# T2HX-04 微小全局位移(α=0.02)+表达引导坐标2-opt置换:位移clip伪影在α=0.02即击穿DE保护(49.10),置换仅降能量0.31%、无邻域收益(48.87),按PLAN止损以机制关(=copy_last逐位)提交 -copy_last 基座上实现 PLAN 家族 T2HX-03:在锚阶段表达 PCA 空间按两输入阶段(E8.25→E8.75,程序从 manifest 现场取倒数两条目)的逐 PC 方差比 r_j 对锚阶段 PC 得分做乘性缩放 sqrt(1+α(r_j−1)),delta 重构保均值、坐标不动。机制确认生效(缩放因子 f∈[0.963,1.036],19/20 PC 被缩放),但 A 半上 variogram 随 |α| 在**扩张(α>0)与收缩(α<0)两个方向都单调恶化**(0.0586→0.0620/0.0639/0.0665/0.0696),mmd_u 不动或更差,neighborhood_mmd 同步恶化,α=0.20 还击穿 DE 无变化保护(de_score −0.625)。PLAN go/no-go(两项同时低于 identity−3σ)全网格未过,按边界规则提交 VEC_ALPHA=0,提交态与父节点10逐位一致(预期 50.00,identity 本节点实测 3 次均 50.00)。+## 方法(PLAN 家族 T2HX-04,机制完整实现,开关默认关) -## 方法(PLAN 家族 T2HX-03,机制完整实现,开关默认关)+- 基座:`anchor_entry` 锚阶段整份输出(n=24826 ≤ max_cells=25179,无抽样),坐标点集、表达值、基因序不变;置换只重排细胞↔坐标配对。+- 阶段A(`VEC_ALPHA`):`extrap_step(manifest)` 现场取倒数两输入(E8.25_late→E8.75),v = pb(late)−pb(early)(全细胞伪批量),X ← clip(X + α·v, 0),全局统一方向(非按型)。单输入阶段自动跳过。+- 阶段B(`VEC_SWAP`=B%):坐标 15-NN(cKDTree)取并集对称图;贪心 2-opt 最小化图上表达余弦距离总和(Dirichlet 能量)。候选用快速近似 gain(i,j) = (x_j−x_i)·(N_i−N_j)(N=邻居单位向量和,批量矩阵化),每对候选先做**精确能量差验证**(含共邻/相邻修正)再执行;best-first,预算 B%·n 或无改善对或超时停止。+- 开关:`VEC_ALPHA`(默认 0=关)、`VEC_SWAP`(默认 0=关)、`VEC_EPS/ROUNDS/KNN/TIMECAP`。只用 manifest 阶段顺序与视图内数据,无视图路径、阶段名、绝对时间分支。 -- 基座:`anchor_entry` 锚阶段(n=24826 ≤ max_cells=25179 → 整份输出,无抽样),坐标、细胞数、基因序不变。-- 机制(VEC_ALPHA≠0 时):- 1. `extrap_step(manifest)` 取 (prev, last);单输入视图 prev=None → 机制自动跳过(PLAN 步骤5退路)。- 2. sklearn `PCA(n_components=min(50,n−1,G), svd_solver="full")` 拟合锚阶段 X(确定性 SVD);两阶段投影到同一载荷 V。- 3. 逐 PC 方差比 r_j = var(Z_late)/(var(Z_early)+1e-8);仅对前 K 个 PC 且 r_j∈[0.5,2.0] 的做 f_j = sqrt(1+α(r_j−1))(截断防爆炸)。- 4. **delta 重构** X_new = X + (Z·(f−1)) @ V(而非全重构),保留 off-PCA 残差结构;再 clip(0)。得分列中心化 → 重构前逐基因均值严格不变。-- 开关:`VEC_ALPHA`(默认 0=关)、`VEC_K`(默认 20)、`VEC_NPC`(默认 50)、`VEC_RLO/RHI`(默认 0.5/2.0)。只用相对时间差与视图数据,无绝对时间、无阶段名、无视图路径分支。+## 网格结果(vec-score T2:heart:val_extrap/proxy_noscale,A 半,共用 2 次查分) -## 机制生效证据(PLAN mechanism_evidence 对应项,VEC_DEBUG=1 实测)+| 配置 | 榜分 | de_score | variogram | mmd_u | neighborhood_mmd | occupancy_dice |+|---|---:|---:|---:|---:|---:|---:|+| identity(父节点实测,=copy_last) | 50.00 | 0 | 0.058616 | 0.05856 | 0.11445 | 0.8066 |+| α=0.02, B=0(只开位移) | 49.10 | −0.125 | 0.064552 | 0.05871 | 0.11463 | 0.8148 |+| α=0.02, B=2%(PLAN 首档完整方案) | **48.87** | −0.125 | 0.064552 | 0.05871 | 0.11459 | 0.8131 | -- (a) α=0.10/k=20:19/20 个 PC 被缩放(r_1=2.204>2.0 被截断),f∈[0.9983,1.0360],偏离 1 但不极端;r[:5]=[2.20,1.60,1.44,1.34,1.30](E8.25→E8.75 型内离散度整体在涨)。-- (b) 均值:delta 重构在 clip 前逐基因均值差为 0(数学恒等);clip(0) 在 ~6.25M 个条目(约 50%,稀疏零值处)生效后 max |基因均值漂移| = 1.97e-2,std(dp)=0.0041 —— 未达 PLAN 预期的 <1e-5,如实报告;但 α≤0.10 时无变化保护仍触发(de_score/de_direction 原始值均 0,expression_change 保持 50.00)。-- (c) 相对同次 identity 的原始值变化见下表;(d) 四组分变化:expression_change α≤0.10 保持 50.00、α=0.20 掉到 45.58(保护击穿,clip 伪影 dp 被当信号打分,复刻 node6 失败模式);cell_state 48.40–49.29(全劣);local_spatial/shape_scale 49.72–49.98(nb 微升触发结构门,坐标本身未动)。+## 机制生效证据(PLAN mechanism_evidence 对应项) -## 网格结果(vec-score T2:heart:val_extrap/proxy_noscale,A 半;共用 7 次查分)+1. **置换统计**:预算 497 对,3 轮扫描只找到 **75** 对精确增益 >EPS 的改善交换即收敛(无改善交换停止);能量 E0=105046.8 → E1=104718.5,**只降 0.313%** —— 位移后 copy_last 配对仍是坐标-15NN Dirichlet 能量的强局部最优,PLAN 核心假设(微小位移打破局部最优、释放置换收益)**不成立**。+2. **邻域变化**:置换使 neighborhood_mmd 0.11463→0.11459(≈0,A 半 σ=0 下真实但无意义);且 occupancy_dice 0.8148→0.8131 —— 配对重排虽不动坐标点集,仍通过行序影响评分器占据抽样,反伤 shape_scale(与节点 7/9 官方分 shape 掉到 48 的观察一致)。+3. **四组分对比**(α=0.02+B=2% vs α=0.02+B=0 vs identity):expression_change 50→47.72(两档相同,全部来自位移的 clip 伪影);cell_state 50→48.75(variogram 0.0586→0.0646,与节点 11 同族恶化);local_spatial 50→49.96;shape_scale 50→49.05(置换再扣 occupancy)。+4. **DE 保护自检**(PLAN 风险3):α=0.02 时 std(dp)=0.00452、max|dp|=0.0236、clip(0) 命中 8.10M 条目(≈65%)——PLAN 假设"α≤0.03 时 clip 伪影极小、保护不击穿"**被证伪**:de_score=−0.125、de_direction=−0.0598,保护已击穿(复刻 node6/11 失败模式,且阈值比节点 11 的 α≥0.20 低一个量级——均匀位移 v 的 std(v)=0.41 比 PCA 缩放残差大得多)。 -| 配置 | 榜分 | mmd_u | variogram | neighborhood_mmd | de_score |-|---|---:|---:|---:|---:|---:|-| **identity(提交态,=copy_last)** | **50.00** | 0.05856 | 0.058616 | 0.11445 | 0 |-| α=+0.05, k=10 | 49.81 | 0.05856 | 0.062019 | 0.11454 | 0 |-| α=+0.10, k=20(PLAN 快筛点) | 49.69 | 0.05855 | 0.063896 | 0.11476 | 0 |-| α=+0.20, k=50 | 48.41 | 0.05859 | 0.066513 | 0.11526 | −0.625 |-| α=−0.10, k=20(收缩对照) | 49.27 | 0.05948 | 0.069631 | 0.11572 | 0 |+## 机制关对照(PLAN mechanism_off_control) -- **噪声标定(PLAN 步骤1,2 次查分)**:同一份 identity 输出连续查分 2 次,全部 8 项原始值逐位相同(mmd_u 0.05856 / variogram 0.058616)→ 评分器对同一文件确定性,σ=0;父节点观察到的 0.1126 vs 0.11445 差异来自 A/B 半之分,不是逐次噪声。因此 go/no-go 阈值退化为"严格低于 identity",网格无一点达标(variogram 双向单调恶化,扩张 3 档 + 收缩 1 档)。-- 双向恶化说明:以 copy_last 的方差谱为起点,任何沿 PCA 轴的离散度扰动(无论顺趋势扩张还是逆趋势收缩)都同时推高 variogram 与 neighborhood_mmd;identity 是这 8 项指标在该扰动族下的局部最优。-- 机制关对照(PLAN mechanism_off_control):VEC_ALPHA=0 默认路径跳过 PCA,输出与父节点10/copy_last 逐位一致(X 的 sha256 前缀 eb2ca3f42ec88ed4 在 seed 0/1、真实/伪装视图上全部相同),identity 本节点 3 次查分(calib×2 + 误跑负α被 `ALPHA>0` 守卫跳过的那次)均 50.00、四组全 50.00。+VEC_ALPHA=0 且 VEC_SWAP=0(提交默认):跳过两阶段,输出与 copy_last **逐位一致**(sha256 a26c0b78ed1aa4c4…,seed 0 两次运行相同;seed 1 的 .X 与 obsm 逐位相同,仅 uns.generator_seed 字段不同)。预期分数 = 50.00(父节点/节点 1/3/6/8/10/11 提交态实测)。"位移单独开"档 49.10 < identity,证明本方案无任何一档优于机制关。++## PLAN 止损执行++PLAN 步骤(5)/风险1:首档(α=0.02, B=2%)= 48.87 ≤ 50.00 → 立即止损,提交 off,不再追加 α×B 网格(位移在 α=0.02 已击穿 DE 保护,更小 α 只会同时缩小"破局"与收益;置换独立收益已被 75/497、0.313%、nb Δ≈0 三个数判死)。 ## 验证过 / 没验证过 -- 验证过:提交态 seed 0/1 逐位一致;伪装视图(时间统一 +1 天、manifest 键序打乱、换路径)上提交态与机制开启态(α=0.10/k=20)输出均与真实视图逐位一致 → 视图无关;`vec-check` 通过;单输入阶段自动回退(prev=None 分支);CPU 运行 ~10 s、峰值内存 <1 GB(limits 28 GB/30 min 内)。-- 没验证过:真实 final 视图(3 输入,倒数两阶段的方差比可能与代理括号不同,但机制开关默认关,提交态就是 copy_last,不受影响);B 半上的表现(提交态与父节点逐位相同,无迁移风险)。-- 生物学知识来源:无外部生物学先验写入程序;机制只用视图内两输入阶段的表达统计(方差比),属 PLAN 允许的"从 manifest 输入现场计算"。external/ 的 Qiu E8.75 与锚阶段同时相、无时间方向,未使用(与 PLAN motivation 一致)。+- 验证过:提交态 `vec-check --task T2:heart:val_extrap/proxy_noscale` = ok(注意:`--data` 形式的 vec-check 在本客户端被拒 "task not allowed",需带尺子后缀的 --task);seed 0/1 的 .X、坐标逐位一致;CPU 运行提交态 ~4 s、机制开启态 ~110 s,内存 <1.5 GB(limits 28 GB/30 min 内);单输入阶段回退(prev=None 跳过位移,置换仍可跑)。+- 没验证过:B 半与伪装视图(提交态与父节点逐位相同,无迁移风险;代码只读 manifest 数据与相对顺序,无绝对时间/路径分支);真实 final 视图(3 输入时 v 取倒数两输入,机制默认关,不影响提交态);B>2% 或更小 α 的完整网格(止损规则)。 ## 给树的结论 -- T2HX-03 家族在本榜双向证伪:cell_state 组的 variogram/mmd_u 对"沿锚阶段 PCA 轴的方差缩放"在任一方向都无收益,identity 是局部最优;不要再用 |α| 更小的同族配置试探(单调性已确立)。-- α≥0.2 时 clip(0) 伪影会击穿 DE 无变化保护并反噬 expression_change(−4.4 分),任何改表达值的方案都必须先报 std(dp) 与保护是否触发。-- 至此 copy_last 基座上表达值微扰(T2HX-01 均值位移、T2HX-03 方差缩放)与坐标-表达配对重排(T2HX-04/06)三个族全部证伪;本榜剩余未试杠杆只有引入视图外信息的型内状态细化(external/ 同时相数据无方向,价值存疑)或接受地板。+- T2HX-04 在本榜**两种形态均证伪**:纯 copy_last 基座上的有界置换(节点 7/9/10:49.60/49.60/50.00)与"微小全局位移破局+置换"(本节点:48.87)。坐标-15NN 配对能量在 copy_last 处已近局部最优(可改善交换 <0.4% 细胞、能量降 0.3%),任何位移预处理都不改变这一事实;置换还会经行序扰动 occupancy_dice。+- 均匀伪批量位移的 clip 伪影击穿 DE 保护的阈值远低于 PCA 缩放族(α≈0.02 vs 0.20):std(v)=0.41 的全局方向上 α=0.02 就产生 de_score<0。改表达值方案的安全边界应按 std(dp) 而非 α 标定。+- 与节点 11 结论合并:copy_last 基座上均值位移、方差缩放、配对重排及其组合已全部证伪,本榜视图内微扰族关闭;剩余杠杆只有引入视图外时间方向信息(跨阶段配对建模),或接受地板 50.00。diff --git a/solution/run.py b/solution/run.pyindex 4734044..6ede9b6 100644--- a/solution/run.py+++ b/solution/run.py@@ -1,29 +1,34 @@ #!/usr/bin/env python3-"""PCA variance-trend extrapolation (T2 heart extrap, family T2HX-03).--copy_last base (anchor = last input stage, stratified sample to the manifest-cell range; coordinates untouched).--Mechanism: fit a PCA on the anchor stage's expression matrix. Project both-input stages (early = second-to-last, late = anchor) onto the anchor's-components and compute per-PC variance ratios r_j = var_late / var_early.-Scale the anchor's PC scores multiplicatively, Z_new[:, j] =-Z[:, j] * sqrt(1 + alpha * (r_j - 1)), for the top K PCs whose r_j lies in-[R_LO, R_HI] (extreme ratios are truncated). Reconstruction is done as a-delta, X_new = X + (Z_new - Z) @ V, so the residual (off-PCA) structure is-kept and the per-gene mean is unchanged (score columns are centred). This-extrapolates the within-population dispersion trend between the two observed-stages without moving the pseudobulk mean.--VEC_ALPHA=0 (default) skips the mechanism entirely and reproduces copy_last-bit-for-bit (mechanism-off control). With a single input stage the variance-ratio cannot be estimated and the mechanism is skipped as well.+"""T2HX-04: micro global expression shift + expression-kNN-guided coord 2-opt swap.++copy_last base (anchor = last input stage, all cells within the manifest range;+coordinate point set and expression values kept, only the cell<->coordinate+pairing may be rearranged).++Mechanism (two stages):+ A) global shift: v = pb(late) - pb(early) from the last two input stages+ (pseudobulk over ALL cells of each stage); X_i <- clip(X_i + alpha*v, 0).+ alpha is tiny (<=0.03) so the DE no-change protection still applies.+ B) coord permutation: build the coordinate 15-NN graph (fixed; the point set+ never moves); greedily swap the coordinates of cell pairs (i,j) when the+ swap lowers the total expression cosine distance over the coord-15NN+ edges (Dirichlet energy). Candidates come from the fast approximation+ gain(i,j) ~ (x_j - x_i) . (N_i - N_j)+ with N_i = sum of unit expression vectors of i's coord neighbours; each+ candidate is re-checked with the exact energy delta before executing.+ Swaps run best-first until the budget (SWAP% of cells) is reached, no+ improving swap is found, or the time cap is hit.++VEC_ALPHA=0 and VEC_SWAP=0 skip both stages and reproduce copy_last+bit-for-bit (mechanism-off control). With a single input stage the shift is+skipped; the swap still runs on the anchor's own expression. """ from __future__ import annotations import argparse import os+import time import numpy as np @@ -37,62 +42,119 @@ from src.task2_spatial.view_io import ( write_t2, ) -# Mechanism switch. Local grid (A-half): variogram degrades monotonically with-# |alpha| in BOTH directions (expand alpha>0: 0.0586 -> 0.0620/0.0639/0.0665;-# shrink alpha<0: -> 0.0696), mmd_u flat or worse, nb worse; alpha=0.20 also-# breaks the DE no-change protection (de_score -0.625). Boundary rule applies:-# default 0 = off = bit-for-bit copy_last.-ALPHA = float(os.environ.get("VEC_ALPHA", "0.0")) # 0 = mechanism off = copy_last-K_PC = int(os.environ.get("VEC_K", "20")) # number of leading PCs to rescale-N_PC = int(os.environ.get("VEC_NPC", "50")) # PCA components fitted-R_LO = float(os.environ.get("VEC_RLO", "0.5")) # variance-ratio truncation-R_HI = float(os.environ.get("VEC_RHI", "2.0"))+# Mechanism switches. Local A-half grid: alpha=0.02 shift ALONE breaks the DE+# no-change protection via clip(0) artefacts (de_score -0.125,+# expression_change 47.72) -> 49.10; adding the 2% coord swap gives 48.87+# (nb 0.11463->0.11459 negligible, occupancy_dice 0.8148->0.8131 hurt by the+# row reordering). PLAN stop-loss (first config <= 50) applies: defaults 0 =+# mechanism off = bit-for-bit copy_last.+ALPHA = float(os.environ.get("VEC_ALPHA", "0.0")) # 0 = shift off = copy_last X+SWAP = float(os.environ.get("VEC_SWAP", "0.0")) # % of cells to swap; 0 = off+EPS = float(os.environ.get("VEC_EPS", "0.002")) # min exact gain to accept a swap+ROUNDS = int(os.environ.get("VEC_ROUNDS", "3"))+KNN = int(os.environ.get("VEC_KNN", "15"))+TIME_CAP = float(os.environ.get("VEC_TIMECAP", "480"))+SEED_BATCH = 1024+TOP_CAND = 16 DEBUG = bool(os.environ.get("VEC_DEBUG")) -def variance_extrapolate(- X: np.ndarray, X_early: np.ndarray, alpha: float, k: int, seed: int-) -> np.ndarray:- """Mean-preserving per-PC variance scaling of X along the early->late trend."""- from sklearn.decomposition import PCA-- n, g = X.shape- n_comp = int(min(N_PC, n - 1, g))- if n_comp < 1 or X_early.shape[0] < 32 or alpha == 0.0:- return X- pca = PCA(n_components=n_comp, svd_solver="full", random_state=seed)- pca.fit(X)- V = pca.components_ # (n_comp, g)- mu = pca.mean_- Z = (X.astype(np.float64) - mu) @ V.T- Ze = (X_early.astype(np.float64) - mu) @ V.T- var_late = Z.var(axis=0, ddof=1)- var_early = Ze.var(axis=0, ddof=1)- r = var_late / (var_early + 1e-8)-- kk = int(min(k, n_comp))- f = np.ones(n_comp, dtype=np.float64)- mask = (r[:kk] >= R_LO) & (r[:kk] <= R_HI)- f[:kk] = np.where(mask, np.sqrt(1.0 + alpha * (r[:kk] - 1.0)), 1.0)-- if DEBUG:- nmask = int(mask.sum())- print(- f"PCs rescaled {nmask}/{kk} (ratio in [{R_LO},{R_HI}]); "- f"f range [{f.min():.4f},{f.max():.4f}]; "- f"r[:5]={np.round(r[:5], 3)} f[:5]={np.round(f[:5], 4)}"+def coord_swap(X: np.ndarray, coords: np.ndarray, budget: int, seed: int) -> tuple[np.ndarray, dict]:+ """Permute coords rows (cell<->coordinate pairing) to minimise expression+ cosine distance over the coord-15NN graph. Returns (permuted coords, stats)."""+ from scipy import sparse+ from scipy.spatial import cKDTree++ n = X.shape[0]+ rng = np.random.default_rng(seed + 12345)+ tree = cKDTree(coords)+ nbr = tree.query(coords, k=min(KNN, n - 1) + 1)[1][:, 1:]++ rows = np.repeat(np.arange(n), nbr.shape[1])+ A = sparse.coo_matrix((np.ones(rows.size), (rows, nbr.ravel())), shape=(n, n))+ U = (A + A.T).astype(bool).tocsr()+ deg = np.diff(U.indptr)+ maxdeg = int(deg.max())+ Uadj = np.full((n, maxdeg), n, dtype=np.int64) # pad -> scratch zero row+ for q in range(n):+ Uadj[q, : deg[q]] = U.indices[U.indptr[q] : U.indptr[q + 1]]++ P = X.astype(np.float64)+ P /= np.maximum(np.linalg.norm(P, axis=1, keepdims=True), 1e-12)+ P = np.ascontiguousarray(np.vstack([P, np.zeros((1, P.shape[1]))])) # scratch row n+ body = slice(0, n)++ def recompute() -> tuple[np.ndarray, np.ndarray, float]:+ N = np.ascontiguousarray(P[Uadj].sum(axis=1))+ d = np.einsum("ij,ij->i", P[body], N)+ E = 0.5 * (float(deg.sum()) - float(d.sum()))+ return N, d, E++ N, d, E0 = recompute()+ stats = {"E0": E0, "E1": E0, "swaps": 0, "rounds": 0, "gain_total": 0.0, "budget": budget}+ if budget <= 0:+ return coords[np.arange(n)], stats++ budget = int(min(budget, n // 2))+ perm = np.arange(n) # output row c gets coords[perm[c]]+ swaps_done = 0+ t0 = time.time()++ def exact_gain(a: int, b: int) -> float:+ na = Uadj[a, : deg[a]]+ nb = Uadj[b, : deg[b]]+ na = na[na != b]+ nb = nb[nb != a]+ ua, ub = P[a], P[b]+ Pa, Pb = P[na], P[nb]+ return float(+ (Pa @ ub).sum() + (Pb @ ua).sum() - (Pa @ ua).sum() - (Pb @ ub).sum() ) - dZ = Z * (f - 1.0)[None, :]- X_new = X + (dZ @ V).astype(np.float32)- X_new = np.clip(X_new, 0.0, None)-- if DEBUG:- dmean = np.abs(X_new.mean(axis=0) - X.mean(axis=0)).max()- nclip = int((X + (dZ @ V).astype(np.float32) < 0).sum())- dnorm = np.abs(X_new - X).mean()- print(f"max |gene-mean shift| = {dmean:.3e}; clipped entries = {nclip}; mean |dX| = {dnorm:.4f}")- return X_new.astype(np.float32)+ for rd in range(ROUNDS):+ stats["rounds"] = rd + 1+ if swaps_done >= budget or time.time() - t0 > TIME_CAP:+ break+ order = rng.permutation(n)+ moved = np.zeros(n, dtype=bool)+ for s in range(0, n, SEED_BATCH):+ if swaps_done >= budget or time.time() - t0 > TIME_CAP:+ break+ I = order[s : s + SEED_BATCH]+ I = I[~moved[I]]+ if I.size == 0:+ continue+ Pb_ = P[body]+ G = Pb_ @ N[I].T + N @ Pb_[I].T - d[:, None] - d[I][None, :]+ G[I, :] = -np.inf+ flat = G.ravel()+ k = min(TOP_CAND, flat.size - 1)+ top = np.argpartition(flat, -k)[-k:]+ top = top[np.argsort(flat[top])[::-1]]+ done = False+ for f in top:+ if flat[f] <= EPS:+ break+ a, t = divmod(int(f), I.size)+ b = int(I[t])+ g = exact_gain(a, b)+ if g > EPS:+ perm[[a, b]] = perm[[b, a]]+ P[[a, b]] = P[[b, a]]+ moved[a] = moved[b] = True+ N, d, _ = recompute()+ swaps_done += 1+ stats["gain_total"] += g+ if DEBUG and swaps_done % 50 == 0:+ print(f"swap {swaps_done}: gain={g:.4f} t={time.time()-t0:.0f}s", flush=True)+ done = True+ break+ if not done and flat.max() <= EPS:+ pass # no promising pair in this batch+ _, _, E1 = recompute()+ stats["E1"] = E1+ stats["swaps"] = swaps_done+ return coords[perm], stats def main() -> None:@@ -109,21 +171,43 @@ def main() -> None: rng = np.random.default_rng(args.seed) if n <= stage.n: rows = np.sort(take(stage.labels, n, rng))- else: # fewer cells than min_cells: resample with replacement+ else: rows = np.sort(rng.choice(stage.n, size=n, replace=True)) X = stage.X[rows].toarray().astype(np.float32) coords = stage.coords[rows] + # ---- stage A: global micro shift ---- if ALPHA != 0.0: prev_entry, _, _ = extrap_step(manifest) if prev_entry is not None: prev = read_stage(args.data, prev_entry, genes)- X_early = prev.X.toarray().astype(np.float32)- X = variance_extrapolate(X, X_early, ALPHA, K_PC, args.seed)+ pb_early = np.asarray(prev.X.mean(axis=0)).ravel().astype(np.float64)+ pb_late = np.asarray(stage.X.mean(axis=0)).ravel().astype(np.float64)+ v = pb_late - pb_early+ X0 = X.mean(axis=0).astype(np.float64)+ Xs = X.astype(np.float64) + ALPHA * v[None, :]+ X = np.clip(Xs, 0.0, None).astype(np.float32) if DEBUG:- print(f"VEC_ALPHA={ALPHA} VEC_K={K_PC} applied")+ dp = X.mean(axis=0).astype(np.float64) - X0+ print(+ f"alpha={ALPHA} std(v)={v.std():.4f} std(dp)={dp.std():.5f} "+ f"max|dp|={np.abs(dp).max():.4f} n_clip={int((Xs < 0).sum())}",+ flush=True,+ ) elif DEBUG:- print("single input stage: mechanism skipped, copy_last")+ print("single input stage: shift skipped", flush=True)++ # ---- stage B: coord permutation ----+ if SWAP > 0.0:+ budget = int(round(SWAP / 100.0 * X.shape[0]))+ coords, st = coord_swap(X, coords, budget, args.seed)+ if DEBUG:+ drop = st["E0"] - st["E1"]+ print(+ f"swaps={st['swaps']}/{st['budget']} rounds={st['rounds']} "+ f"E0={st['E0']:.1f} E1={st['E1']:.1f} drop={drop:.2f} ({100*drop/max(st['E0'],1e-9):.3f}%)",+ flush=True,+ ) write_t2(args.out, X, coords, genes, seed=args.seed)
调研来源?调研员查到并用到的知识条目和文献检索结果(只列标题和编号)。
用到的知识库条目
| 编号 | 标题 | 出处 |
|---|---|---|
| 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 |
| k027 | Joint expression-geometry generation with relative geometry | notes/competition/03_solution_landscape.md |
分析结果?分析员写的 ANALYSIS.json:改了什么、各组分数怎么变、假设是否成立、经验和下一步建议。
| 改了什么 | 在 copy_last 基座上实现 T2HX-04 两阶段机制(A:两输入阶段伪批量差 v 的极小全局位移 X←clip(X+αv,0),α=0.02;B:坐标 15-NN 图上表达余弦距离的 best-first 贪心 2-opt 坐标置换,预算 B=2%,含精确能量差验证)。A 半查分两档均劣于 identity(49.10 / 48.87),按 PLAN 止损规则以机制关(VEC_ALPHA=VEC_SWAP=0)提交,输出与父节点 copy_last 逐位一致。 |
|---|---|
| 各组分数的变化 | cell_state:无变化:50.00→50.00,mmd_u 0.05832→0.05832、variogram 0.058058→0.058058,八项原始值全部逐位相同 expression_change:无变化:50.00→50.00,de_score/de_direction 原始值均为 0(=地板,DE 无变化保护生效),提交态与父节点同一份文件 local_spatial:无变化:50.00→50.00,neighborhood_mmd 0.11261→0.11261;机制开启态在 A 半仅使 nb 0.11463→0.11459(Δ≈0,非收益),occupancy_dice 0.8148→0.8131 反降 shape_scale:无变化:50.00→50.00,d2_shape 0.04911、occupancy_dice 0.8066、scale_log_ratio -0.4334 均与父节点相同 |
| family_id | T2HX-04 |
| 假设是否成立 | 否 |
| 经验 |
|
| mechanism_active | 否 |
| 下一步建议 |
|
对话摘要?每个角色和大模型对话的统计:轮数、工具调用、用时、token 数和最后的回答摘录;原始记录只给路径。
只给统计和最后回答的摘录;完整对话请到原始记录位置里列出的文件看。
分析员
| 角色?调研员写计划、工程师改代码、分析员解读分数、审查员检查作弊。 | 分析员 alibaba-token-plan-cn/qwen3.8-max |
|---|---|
| 调用次数 | 1 次 |
| 轮数?大模型一共回复了几轮(每轮可以调用多个工具)。 | 8 |
| 工具调用?大模型调用读文件、执行命令等工具的次数,按工具名统计。 | 共 9 次:bash 7、write 1、read 1 |
| 用时 | 1 分 |
| token 数?输入 / 输出(含思考)的 token 数,来自接口返回的用量。 | 输入 25,295 · 输出 2,166 · 思考 1,274 |
| 任务(第一行) | 分析节点 n13 的打分结果,写 ANALYSIS.json |
| 最后的回答(摘录) | ANALYSIS.json written |
| 原始记录位置?完整对话记录在 Spark 上的文件路径;看板不复制原始内容。 | /home/spark-longxinyang/vec/runs/formal/20261003-105537-search-t2-heart-extrap-g24-D/nodes/13/analyst.jsonl 37 KB /home/spark-longxinyang/vec/runs/formal/20261003-105537-search-t2-heart-extrap-g24-D/nodes/13/analyst.stderr |
工程师
| 角色 | 工程师 alibaba-token-plan-cn/qwen3.8-max |
|---|---|
| 调用次数 | 1 次 |
| 轮数 | 28 |
| 工具调用 | 共 31 次:bash 21、edit 5、write 3、read 2 |
| 用时 | 20 分 |
| token 数 | 输入 70,694 · 输出 12,531 · 思考 18,136 |
| 任务(第一行) | 按计划修改程序:微小表达位移破局+表达kNN坐标置换(复刻节点5成功条件) |
| 最后的回答(摘录) | **完成。** 做了什么:按 PLAN 实现 T2HX-04(微小全局伪批量位移 α + 表达引导的坐标 2-opt 置换,精确能量差验证的 best-first 贪心)。 查分(2/20 次,A 半): - α=0.02, B=0(只位移)→ **49.10**:clip(0) 伪影在 α=0.02 就击穿 DE 保护(de_score −0.125,PLAN 假设 <1% 被证伪),variogram 恶化。 - α=0.02, B=2%(PLAN 首档)→ **48.87**:3 轮扫描仅找到 75/497 对改善交换、能量只降 0.313%,nb Δ≈0,occupancy 反被行序扰动扣分——"位移破局"假设不成立。 - 按 PLAN 止损规则提交机制关(VEC_ALPHA=VEC_SWAP=0),输出与 copy_last 逐位一致(sha256 a26c0b78…),vec-check ok,预期 50.00。 下一步最值得试:本榜 copy_last 基座上的视图内微扰族(均值位移、方差缩放、配对重排及其组合)已全部证伪;继续投入期望收益 <1 分噪声,建议预算转向心脏/全胚插值榜,或引入视图外时间方向信息的跨阶段状态建模。 |
| 原始记录位置 | /home/spark-longxinyang/vec/runs/formal/20261003-105537-search-t2-heart-extrap-g24-D/nodes/13/engineer.jsonl 140 KB /home/spark-longxinyang/vec/runs/formal/20261003-105537-search-t2-heart-extrap-g24-D/nodes/13/engineer.stderr |
调研员
| 角色 | 调研员 alibaba-token-plan-cn/qwen3.8-max |
|---|---|
| 调用次数 | 1 次 |
| 轮数 | 1 |
| 工具调用 | 共 0 次:— |
| 用时 | 7 分 |
| token 数 | 输入 16,385 · 输出 12,147 · 思考 8,192 |
| 任务(第一行) | 为节点 n13(改进,父节点 n11)写改进计划 PLAN.json |
| 最后的回答(摘录) | e": "微小表达位移破局+表达kNN坐标置换(复刻节点5成功条件)",
"motivation": "节点5(52.74)是全树唯一超过地板的节点,方法为表达kNN引导坐标置换,且其parent(节点4,α=0.05 damped_shift)有微小表达位移。节点10在纯copy_last上'复刻并约束node5'得50.00(机制开启仍无收益),说明纯copy_last的邻域结构是坐标置换的局部最优——微小表达位移打破该局部最优可能是节点5成功的关键前提。节点4本身49.89(α=0.05略有害),但节点5在其基础上通过坐标置换拿到52.74(+2.85)。本方案用更小α(0.01–0.03)降低位移本身损害,再叠加坐标置换。",
"approach": "步骤:(1) copy_last基座(锚阶段整份输出,坐标/基因序/细胞数不变)。(2) 阶段A表达位移:取manifest倒数两输入阶段(E8.25, E8.75),计算逐基因伪批量差 v=pb(late)−pb(early);对锚阶段每个细胞 X_i ← X_i + α·v(全局统一方向,非按型)。α初值0.02,搜索{0.01, 0.02, 0.03};位移后直接clip(0)(α≤0.03时clip伪影极小,先打印std(dp)/std(dt)确认<1%)。(3) 阶段B坐标置换:在位移后表达上建坐标15-NN图;贪心2-opt:遍历所有细胞对(i,j),若交换其坐标后'坐标15-NN内的表达余弦距离总和'下降,则执行交换;总交换预算B%(初值2%,搜索{1,2,4}%);达到预算或无改善交换时停止。(4) 单输入阶段退路:prev=None时跳过阶段A(α无效),阶段B仍可在锚阶段自身表达kNN上执行。(5) vec-score快筛:先查identity基线(1次)→α=0.02/B=0确认位移单独不破坏(1次)→α=0.02/B=2%完整方案(1次)→若>50则追加α×B网格(≤4次)→若首档≤50止损提交off。总查分≤8次。(6) 无视图路径/阶段名/绝对时间分支;只用manifest提供的阶段顺序与视图内数据。",
"expected_groups": ["local_spatial", "shape_scale"],
"risks": "1) α≤0.03的位移可能太小,无法打破copy_last的邻域局部最优,坐标置换仍无改善(与节点10相同结局)——Engineer在首档(α=0.02, B=2%)查分后若≤50.00立即止损;2) 坐标置换过度(B>3%)可能破坏已有邻域结构使neighborhood_mmd恶化并触发结构门——先试B=1%再递增;3) clip(0)在稀疏数据上引入微小均值漂移——实现时打印std(dp)/std(dt),若≥1%则回退为不做clip改用max(X,0)后重归一化每行总和;4) 节点5的52.74仅有单种子,可能是A半噪声高估——若首档>51,用同输出再查一次确认(σ=0已验证则无需)。",
"family_id": "T2HX-04",
"mechanism": "先用两阶段伪批量差做极微小全局表达位移打破copy_last邻域局部最优,再用表达kNN引导的贪心2-opt坐标置换重排细胞-坐标配对,使空间相邻细胞的表达更一致,改善neighborhood_mmd。",
"vs_constant_shift": "常数位移是对每个细胞类型加相同表达偏移(T2HX-01),只动表达值不动配对;本方案的核心收益来自坐标-细胞配对的重排(哪个细胞占哪个空间位置),表达位移仅为打破局部最优的前置步骤且幅度极小(α≤0.03),且不对不同型做差异化处理。",
"mechanism_off_control": "环境变量VEC_ALPHA=0且VEC_SWAP=0(默认)时,程序跳过位移和置换,输出与copy_last逐位一致(sha256校验);预期分数=50.00,四组全50.00。若VEC_ALPHA≠0但VEC_SWAP=0,只开位移不开置换,预期≤50(位移本身无害但也无益);这证明收益来自置换而非位移。",
"mechanism_evidence": "1) 置换统计:实际执行的交换次数/预算比、被交换细胞的空间分布;2) 邻域变化:置换前后坐标15-NN表达余弦距离总和的下降幅度;3) 四组分对比:α=0.02+SWAP=0 vs α=0.02+SWAP=2% vs identity,分离位移与置换各自贡献;4) 若local_spatial>50且expression_change≥50(std(dp)/std(dt)<1%确认DE保护未击穿),则机制生效。"
}
``` |
| 原始记录位置 | /home/spark-longxinyang/vec/runs/formal/20261003-105537-search-t2-heart-extrap-g24-D/nodes/13/researcher.jsonl 46 KB /home/spark-longxinyang/vec/runs/formal/20261003-105537-search-t2-heart-extrap-g24-D/nodes/13/researcher.stderr |