总览 · ← 返回运行 20261003-172000-search-t2-heart-extrap-chain-12h
节点 n11 在终选来历上
T2HX-03 PCA方差趋势外推(保均值调型内离散度):双向网格全劣于地板,按边界规则以机制关(VEC_ALPHA=0,逐位=copy_last)提交
| 运行?一次完整的自动搜索或 Agent 会话,有自己的锁定配置和证据包。 | 20261003-172000-search-t2-heart-extrap-chain-12h |
|---|---|
| 父节点 | n10 |
| 子节点 | n13 |
| 操作?种子:人写的起点;改进:在父节点上改;草稿:从头写;修复:修父节点的报错。 | 改进 |
| 状态 | 已打分 |
| 分数 | 搜索目标分 50.00(+0.0) · proxy_noscale 50.00(+0.0) |
| 审查 | 未审查 |
| 用时?从运行开始到结束(或到现在)的挂钟时间。 | 20 分 |
| 程序版本 | ee234483efa9c7197782fe24db916ef3a5ad7e97 (programs.git) |
| 导入自 | 20261003-105537-search-t2-heart-extrap-g24-D#11 |
| 备注 | re-scored at launch (origin 20261003-105537-search-t2-heart-extrap-g24-D node 11, score there 50.00) |
方法说明?节点程序自带的 METHOD.md:这个程序做了什么、为什么。
来自 programs.git ee234483ef:solution/METHOD.md
T2HX-03 PCA方差趋势外推(保均值调型内离散度):双向网格全劣于地板,按边界规则以机制关(VEC_ALPHA=0,逐位=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-03,机制完整实现,开关默认关)
- 基座:
anchor_entry锚阶段(n=24826 ≤ max_cells=25179 → 整份输出,无抽样),坐标、细胞数、基因序不变。 - 机制(VEC_ALPHA≠0 时):
extrap_step(manifest)取 (prev, last);单输入视图 prev=None → 机制自动跳过(PLAN 步骤5退路)。- sklearn
PCA(n_components=min(50,n−1,G), svd_solver="full")拟合锚阶段 X(确定性 SVD);两阶段投影到同一载荷 V。 - 逐 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))(截断防爆炸)。
- 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)。只用相对时间差与视图数据,无绝对时间、无阶段名、无视图路径分支。
机制生效证据(PLAN mechanism_evidence 对应项,VEC_DEBUG=1 实测)
- (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 微升触发结构门,坐标本身未动)。
网格结果(vec-score T2:heart:val_extrap/proxy_noscale,A 半;共用 7 次查分)
| 配置 | 榜分 | 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 步骤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。
验证过 / 没验证过
- 验证过:提交态 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 一致)。
给树的结论
- 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/ 同时相数据无方向,价值存疑)或接受地板。
调研员的计划
| 名称 | PCA方差趋势外推:保均值、调型内离散度(cell_state组) |
|---|---|
| 动机 | 父节点10八项全钉地板(skill 0.500,榜分50.00)。expression_change因无变化保护DE=0;local_spatial/shape_scale已被证不可动(T2HX-04/06三预算测尽,node7下行-1.67)。唯一未试杠杆是cell_state组的mmd_u(0.05832)和variogram(0.05806)。node6的失败是沿PCA轴位移均值(触发clip伪影→de_score反预测);本方案不动均值、只缩放方差,原理上避开DE陷阱。ANALYSIS建议'external/ Qiu E8.75做型内状态细化',但外部数据与锚阶段同时相,无法提供时间方向;改用视图内两输入阶段(E8.25→E8.75)的方差变化率做外推。 |
| 做法 | 步骤: 1. 噪声标定(3次查分):对同一份copy_last输出连续调用vec-score 3次,记录mmd_u和variogram原始值的均值与标准差σ。后续任何候选必须两项同时低于均值−3σ才视为信号。 2. 实现方差外推: a. 读入两个输入阶段(anchor_entry为末阶段;另一阶段从manifest取倒数第二条目)。 b. 对锚阶段X做PCA(sklearn PCA, n_components=min(50, n-1, G)),得载荷V和均值μ。 c. 将两阶段分别投影到同一V上得Z_early、Z_late;逐PC计算方差比r_j = var(Z_late[:,j]) / (var(Z_early[:,j]) + 1e-8)。 d. 对锚阶段投影Z,缩放:Z_new[:,j] = Z[:,j] * sqrt(1 + α·(r_j − 1)),仅对r_j∈[0.5, 2.0]的PC生效(极端值截断防爆炸)。 e. 重构:X_new = Z_new @ V.T + μ,再clip(0)。 f. 坐标不变、细胞数不变、基因集不变。 3. 网格:α∈{0.05, 0.10, 0.20},PC数k∈{10, 20, 50}(取前k个PC做缩放,其余不动)。共9配置×2次查分=18次(含标定3次共21次,若超20次则标定缩为2次)。 4. Go/no-go:mmd_u和variogram原始值必须同时低于同次identity查分值−3σ(标定得出);否则以α=0提交(=copy_last)。 5. 单输入阶段退路:若manifest只有一个阶段,无法估计方差比,直接回退copy_last(VEC_ALPHA=0路径)。 6. vec-score快速筛选:先跑α=0.10/k=20单点,若mmd_u未低于identity−σ,跳过其余网格直接提交off。 |
| 风险 | 1. 方差比r_j噪声大(两阶段样本量有限),外推方向错误→mmd_u/variogram反升;Engineer应在网格第一点(α=0.10, k=20)就对比identity,若两项均劣于identity则立即止损提交off。2. clip(0)在低表达基因上引入偏差,但方差缩放幅度小(α≤0.2),预期受影响基因极少。3. 本地proxy_noscale对外推榜系统性高估(本地54.2→官网49.6),即使本地+0.5也可能官网无收益;方案定位为探索性,若本地增益<1.5分仍按no-go提交off。4. 评分器MMD计算有±0.0002噪声,3次标定可能不足以精确估σ;若σ估计不稳,放宽阈值至均值−2σ。 |
代码改动?这个节点的程序和父节点程序的逐行差别:绿色是新增,红色是删除。
对比:父节点版本 68df456772。改动的文件:solution/METHOD.md +33 −31、solution/run.py +88 −98
diff --git a/solution/METHOD.md b/solution/METHOD.mdindex bfe2fd8..dd92180 100644--- a/solution/METHOD.md+++ b/solution/METHOD.md@@ -1,43 +1,45 @@-# T2HX-04:表达kNN引导的有界2-opt坐标-细胞再配对(复刻并约束node5)+# T2HX-03 PCA方差趋势外推(保均值调型内离散度):双向网格全劣于地板,按边界规则以机制关(VEC_ALPHA=0,逐位=copy_last)提交 -copy_last 基座(锚阶段 24826≤max_cells,整份原样输出)上实现"只重排细胞↔坐标配对"的有界贪心2-opt:坐标15-NN图上,以表达余弦相似度为目标,候选取自表达kNN,预算B限制移动细胞比例;B∈{2%,5%,10%}×{平滑,锐化}全网格的 neighborhood_mmd 与 identity 地板不可区分(均≈0.114,评分器逐次调用有±0.002噪声),按PLAN no-go条款以机制关闭(VEC_SWAP=0,逐位=copy_last,实测50.00)提交。+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,机制完整实现,开关默认关) -- 基座与父节点8相同:`anchor_entry` 锚阶段(外推=末输入 E8.75,n=24826 ≤ max_cells=25179 → 整份输出,无抽样);表达矩阵与坐标点集逐位不变。-- 机制:坐标 cKDTree 15-NN 图(与评分器邻域定义一致)固定不动;目标 = 坐标NN边上表达余弦相似度之和;每细胞在表达空间 kNN(k=10,L2归一化表达)里找交换伙伴,贪心2-opt,仅当交换严格提升目标(smooth,SIGN=+1)或严格降低(sharpen,SIGN=−1,对照方向)时接受;预算 B = 移动细胞比例(每交换动2个细胞)。-- 开关:`VEC_SWAP`(默认0=关;>0=移动比例)、`VEC_SIGN`(默认+1)、`VEC_CAND`(默认10)。单输入阶段视图天然成立(只用锚阶段自身表达+坐标),n<64 或预算为0时回退 identity。-- 确定性:rng=`default_rng(seed)` 只用于遍历顺序;seed 0/1 输出逐位一致(已验证,机制关闭时输出与seed无关)。无阶段名/绝对时间/视图分支。+- 基座:`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半;6次查分)+## 机制生效证据(PLAN mechanism_evidence 对应项,VEC_DEBUG=1 实测) -| 配置 | 榜分 | neighborhood_mmd 原始 | local_spatial | shape_scale |-|---|---:|---:|---:|---:|-| **identity(提交,=copy_last)** | **50.00** | 0.11445 | 50.00 | 50.00 |-| smooth B=2% | 50.02 | 0.11433 | 50.03 | 50.00 |-| smooth B=5% | 50.02 | 0.11440 | 50.01 | 50.00 |-| smooth B=10% | 50.00 | 0.11431 | 50.03 | 50.00 |-| sharpen B=5% | 49.89 | 0.11565 | 49.74 | 49.74(门) |+- (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 微升触发结构门,坐标本身未动)。 -**关键发现(推翻本次判读基准)**:评分器原始值逐次调用有噪声——同一份 identity 输出,父节点8测得 neighborhood_mmd=0.1126、mmd_u=0.05832,本节点测得 0.11445、0.05856(skill 均恰为0.5,因地板/天花板同次重算)。所以 PLAN 的"要求<0.1126"阈值实际是和一次噪声采样比较;同尺度下 smooth 各档(0.1143)与 identity(0.1144)不可区分,sharpen 略差且触发结构门(nb skill<0.5 → shape_scale 49.74,这解释了 node7 的 48.33)。+## 网格结果(vec-score T2:heart:val_extrap/proxy_noscale,A 半;共用 7 次查分) -## 机制生效证据(按 PLAN mechanism_evidence)+| 配置 | 榜分 | 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 | -1. (a) 移动比例:B=2/5/10% 分别 499/620/1241 次交换(预算饱和),moved>0,机制确实运行。-2. (b) neighborhood_mmd:smooth 各档与 identity 差 <0.0002(噪声内),sharpen +0.0012(略差)→ **机制未产生有效信号**。-3. (c) 校验:smooth B=5% 输出与 identity 输出——坐标逐位相等、表达行多重集逐位相等(排序后 ravel 与逐行和均一致)、伪批量逐基因相等、5.0% 行改变位置;只有配对变,符合设计。-4. (d) 四组分:expression_change/cell_state/shape_scale 全部钉在 50.00(表达多重集与坐标点集不变 + noscale 下形状 skill 钉地板);local_spatial 50.00–50.03(噪声)。sharpen 例外:nb skill 掉破地板 → 结构门把 shape_scale 拉到 49.74。-5. (e) B 单调性:不存在——2%/5%/10% 的 nb 原始值平坦(0.11433/0.11440/0.11431),说明该轴上再配对对邻域分布的影响是"立即饱和的噪声级扰动",不是随预算增长的定向改善。+- **噪声标定(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。 -## 机制关闭对照(mechanism_off_control)+## 验证过 / 没验证过 -`VEC_SWAP=0`(默认):跳过全部2-opt,走与父节点8相同的 take()/write_t2 路径,输出与父节点逐位一致(本地比对 final==off==父代码路径 True);vec-check 通过;vec-score 实测 **50.00**,四组全 50.00。提交态即此对照(边界规则,与 node6/node8 先例一致):网格无档超过地板噪声,按 PLAN no-go 条款取 identity。+- 验证过:提交态 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 一致)。 -## 结论+## 给树的结论 -- node5 的 52.74(shape_scale 59.99)在 noscale 尺子下无法由纯配对置换产生(形状 skill 钉 0.5、门只减不增;local_spatial 50.98 也在噪声带上沿)——大概率是单次评分噪声/伪影,rank3 未复跑支持此判断。本族(T2HX-04/T2HX-06)两个方向、三个预算均已测尽,无信号。-- 未使用任何保留阶段/保留基因型信息;未读 external/;知识来源仅评分规则简报里的邻域定义(代码事实)。--## 下一步建议--- 该榜 copy_last 邻域结构已近局部最优:任何动配对的操作(平滑/锐化)都只能加噪声。表达位移族三度证伪、配对族两度证伪,剩下未试的杠杆只有 cell_state 组的 mmd_u/variogram(用 external/ 的 Qiu E8.75 做型内状态细化,node3 报告有苗头)——但注意 mmd_u 逐次噪声 ±0.0002,需要原始值明显低于同次 identity 才算信号,且本地对外推榜系统性高估。+- 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/ 同时相数据无方向,价值存疑)或接受地板。diff --git a/solution/run.py b/solution/run.pyindex ec77bf7..4734044 100644--- a/solution/run.py+++ b/solution/run.py@@ -1,114 +1,98 @@ #!/usr/bin/env python3-"""Expression-kNN-guided bounded 2-opt re-pairing (T2 heart extrap, family T2HX-04).--copy_last base (anchor = last input stage, stratified sample to max_cells if-needed; expression matrix and coordinate point set bit-for-bit unchanged).--Mechanism: re-pair cells to coordinate slots. On the fixed coordinate 15-NN-graph (matching the scorer's neighbourhood definition), greedily swap the-expressions of two coordinate slots when the swap strictly increases the total-cosine expression similarity over coordinate-NN edges. Candidate partners for-each cell are its expression-space kNN (cells with similar expression sitting-at far-away coordinates). A budget B (fraction of cells allowed to move)-bounds the perturbation. VEC_SWAP=0 skips everything and reproduces copy_last-bit-for-bit (mechanism-off control). Works on a single input stage view: only-the anchor's own expression + coordinates are used.+"""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. """ from __future__ import annotations import argparse import os-import time import numpy as np from src.task2_spatial.sample import take-from src.task2_spatial.view_io import anchor_entry, load_manifest, panel_genes, read_stage, write_t2--# Mechanism switch. Grid {2%,5%,10%} x {smooth,sharpen} all raised-# neighborhood_mmd above the copy_last floor (0.1126 -> >=0.1143), so the-# boundary rule applies: default 0 = off = bit-for-bit copy_last.-SWAP = float(os.environ.get("VEC_SWAP", "0.0")) # fraction of cells allowed to move; 0 = off-N_CAND = int(os.environ.get("VEC_CAND", "10")) # expression-kNN candidate partners-SIGN = float(os.environ.get("VEC_SIGN", "1")) # +1 smooth (similarity up), -1 sharpen+from src.task2_spatial.view_io import (+ anchor_entry,+ extrap_step,+ load_manifest,+ panel_genes,+ read_stage,+ 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")) DEBUG = bool(os.environ.get("VEC_DEBUG")) -def repermute(X: np.ndarray, coords: np.ndarray, budget_frac: float, seed: int):- """Greedily re-pair expression rows to fixed coordinate slots.-- Objective: maximise sum over coordinate-NN edges (i,j) of cosine similarity- between the expressions currently sitting at slots i and j. Only the pairing- changes; the multiset of expression rows and the coordinate array are- untouched. Returns (X_permuted, swaps_made).- """- n = X.shape[0]- budget = int(budget_frac * n / 2) # swaps; each swap moves 2 cells- if budget <= 0 or n < 64:- return X, 0- from scipy.spatial import cKDTree- from sklearn.neighbors import NearestNeighbors-- rng = np.random.default_rng(seed)- K = 15- ctree = cKDTree(coords)- nb = ctree.query(coords, k=K + 1)[1][:, 1:] # coordinate 15-NN, self excluded- nb = np.ascontiguousarray(nb)-- Xf = X.astype(np.float32)- Xn = Xf / (np.linalg.norm(Xf, axis=1, keepdims=True) + 1e-9)- etree = NearestNeighbors(n_neighbors=min(N_CAND + 1, n)).fit(Xn)- cand = etree.kneighbors(Xn, return_distance=False)[:, 1:]-- t0 = time.time()- S = Xn @ Xn.T # cosine similarity, float32- if DEBUG:- print(f"S built in {time.time()-t0:.1f}s")-- moved = np.zeros(n, dtype=bool)- order = rng.permutation(n)- swaps = 0- gains = []- t0 = time.time()- ar = np.arange(n)- for i in order:- i = int(i)- if swaps >= budget:- break- if moved[i]:- continue- nbi = nb[i]- base_i = S[i, nbi].sum()- best_j, best_gain = -1, 0.0- for j in cand[i]:- j = int(j)- if j == i or moved[j]:- continue- nbj = nb[j]- nbj_f = nbj[nbj != i]- nbi_f = nbi[nbi != j]- gain = SIGN * float(- (S[i, nbj_f].sum() + S[j, nbi_f].sum())- - (S[i, nbi_f].sum() + S[j, nbj_f].sum())- )- if gain > best_gain:- best_gain, best_j = gain, j- if best_j >= 0:- j = best_j- X[[i, j]] = X[[j, i]]- S[[i, j]] = S[[j, i]]- S[:, [i, j]] = S[:, [j, i]]- moved[i] = moved[j] = True- swaps += 1- gains.append(best_gain)+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:- tot = float(np.sum(gains)) if gains else 0.0+ nmask = int(mask.sum()) print(- f"2-opt done in {time.time()-t0:.1f}s swaps={swaps} moved={2*swaps} "- f"({2*swaps/n:.3%}) total_gain={tot:.2f}"+ 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)}" )- return X, swaps++ 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) def main() -> None:@@ -130,10 +114,16 @@ def main() -> None: X = stage.X[rows].toarray().astype(np.float32) coords = stage.coords[rows] - if SWAP > 0.0:- X, swaps = repermute(X, coords, SWAP, args.seed)- if DEBUG:- print(f"VEC_SWAP={SWAP} swaps={swaps}")+ 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)+ if DEBUG:+ print(f"VEC_ALPHA={ALPHA} VEC_K={K_PC} applied")+ elif DEBUG:+ print("single input stage: mechanism skipped, copy_last") 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 |
| k016 | Degenerate-solution checks for population predictions | notes/handover/02_知识学习路线.md |
| k026 | Canonicalise predicted 3D coordinates before submission | notes/pitfalls/04_scorer_invariance.md |
分析结果?分析员写的 ANALYSIS.json:改了什么、各组分数怎么变、假设是否成立、经验和下一步建议。
| 改了什么 | 把 node10 的 2-opt 配对重排代码换成 T2HX-03 的 PCA 方差趋势外推(锚阶段拟合 PCA,用两输入阶段逐 PC 方差比 r_j 对前 K 个 PC 得分做 sqrt(1+α(r_j−1)) 乘性缩放,delta 重构保均值后 clip(0),坐标不动);本地网格全档劣于 identity,按 PLAN no-go 以 VEC_ALPHA=0 提交,提交态与父节点/copy_last 逐位一致。 |
|---|---|
| 各组分数的变化 | cell_state:不变(50.00→50.00,mmd_u 0.05832、variogram 0.05806 与对照逐位相同,skill 0.500)——机制开启时的网格值(variogram 0.0586→0.0620/0.0639/0.0665,α=−0.10 收缩到 0.0696;mmd_u 0.05855–0.05948)均未提交 expression_change:不变(50.00→50.00,de_score/de_direction 原始值均为 0,skill 0.500)——提交态未改表达值,无变化保护仍触发 local_spatial:不变(50.00→50.00,neighborhood_mmd 0.1126 与对照相同)——机制开启时 nb 微升到 0.11454–0.11572,未提交 shape_scale:不变(50.00→50.00,d2_shape 0.04911、occupancy_dice 0.8066、scale_log_ratio −0.4334 与对照相同,结构门=1) |
| family_id | T2HX-03 |
| 假设是否成立 | 否 |
| 经验 |
|
| mechanism_active | 否 |
| 下一步建议 |
|
对话摘要?每个角色和大模型对话的统计:轮数、工具调用、用时、token 数和最后的回答摘录;原始记录只给路径。
只给统计和最后回答的摘录;完整对话请到原始记录位置里列出的文件看。
分析员
| 角色?调研员写计划、工程师改代码、分析员解读分数、审查员检查作弊。 | 分析员 alibaba-token-plan-cn/qwen3.8-max |
|---|---|
| 调用次数 | 1 次 |
| 轮数?大模型一共回复了几轮(每轮可以调用多个工具)。 | 4 |
| 工具调用?大模型调用读文件、执行命令等工具的次数,按工具名统计。 | 共 3 次:— |
| 用时 | 不到 1 分 |
| token 数?输入 / 输出(含思考)的 token 数,来自接口返回的用量。 | 输入 17,704 · 输出 1,456 · 思考 406 |
| 任务(第一行) | 分析节点 n11 的打分结果,写 ANALYSIS.json |
| 最后的回答(摘录) | ANALYSIS.json written |
| 原始记录位置?完整对话记录在 Spark 上的文件路径;看板不复制原始内容。 | /home/spark-longxinyang/vec/runs/formal/20261003-172000-search-t2-heart-extrap-chain-12h/nodes/11/analyst.jsonl (文件不在) |
工程师
| 角色 | 工程师 alibaba-token-plan-cn/qwen3.8-max |
|---|---|
| 调用次数 | 1 次 |
| 轮数 | 29 |
| 工具调用 | 共 30 次:— |
| 用时 | 16 分 |
| token 数 | 输入 64,034 · 输出 11,231 · 思考 14,245 |
| 任务(第一行) | 按计划修改程序:PCA方差趋势外推:保均值、调型内离散度(cell_state组) |
| 最后的回答(摘录) | **做了什么**:实现 PLAN 家族 T2HX-03(PCA 方差趋势外推,delta 重构保均值,开关 `VEC_ALPHA` 默认关);先标定评分器噪声(同一文件 2 次查分原始值逐位相同 → σ=0,父节点的"逐次噪声"实为 A/B 半差异),再跑网格:α=+0.05/+0.10/+0.20(扩张)与 α=−0.10(收缩对照)。 **查分结果**(7/20 次):identity 50.00;扩张 49.81/49.69/48.41;收缩 49.27。variogram 随 |α| 双向单调恶化(0.0586→0.0696),mmd_u 不动或更差,α=0.20 的 clip 伪影击穿 DE 保护(de_score −0.625)。PLAN go/no-go 全网格未过,按边界规则以机制关提交——提交态与父节点/copy_last 逐位一致,seed 0/1 与伪装视图(+1 天平移、乱序 manifest)逐位复现,vec-check 通过,运行 1.3 s。 **下一步最值得试**:本榜 copy_last 基座上三个扰动族(均值位移、配对重排、方差缩放)已全部证伪,identity 是八项指标的局部最优;建议停止表达值/坐标微扰方向,要么接受地板,要么探索能引入真实时间方向信息的机制(如跨阶段细胞型配对的状态过渡建模),且任何改表达的方案必须先验证 DE 无变化保护是否保持。 |
| 原始记录位置 | /home/spark-longxinyang/vec/runs/formal/20261003-172000-search-t2-heart-extrap-chain-12h/nodes/11/engineer.jsonl (文件不在) |
调研员
| 角色 | 调研员 alibaba-token-plan-cn/qwen3.8-max |
|---|---|
| 调用次数 | 1 次 |
| 轮数 | 1 |
| 工具调用 | 共 0 次:— |
| 用时 | 3 分 |
| token 数 | 输入 15,422 · 输出 1,386 · 思考 6,979 |
| 任务(第一行) | 为节点 n11(改进,父节点 n10)写改进计划 PLAN.json |
| 最后的回答(摘录) | 时间方向;改用视图内两输入阶段(E8.25→E8.75)的方差变化率做外推。",
"approach": "步骤:\n1. 噪声标定(3次查分):对同一份copy_last输出连续调用vec-score 3次,记录mmd_u和variogram原始值的均值与标准差σ。后续任何候选必须两项同时低于均值−3σ才视为信号。\n2. 实现方差外推:\n a. 读入两个输入阶段(anchor_entry为末阶段;另一阶段从manifest取倒数第二条目)。\n b. 对锚阶段X做PCA(sklearn PCA, n_components=min(50, n-1, G)),得载荷V和均值μ。\n c. 将两阶段分别投影到同一V上得Z_early、Z_late;逐PC计算方差比r_j = var(Z_late[:,j]) / (var(Z_early[:,j]) + 1e-8)。\n d. 对锚阶段投影Z,缩放:Z_new[:,j] = Z[:,j] * sqrt(1 + α·(r_j − 1)),仅对r_j∈[0.5, 2.0]的PC生效(极端值截断防爆炸)。\n e. 重构:X_new = Z_new @ V.T + μ,再clip(0)。\n f. 坐标不变、细胞数不变、基因集不变。\n3. 网格:α∈{0.05, 0.10, 0.20},PC数k∈{10, 20, 50}(取前k个PC做缩放,其余不动)。共9配置×2次查分=18次(含标定3次共21次,若超20次则标定缩为2次)。\n4. Go/no-go:mmd_u和variogram原始值必须同时低于同次identity查分值−3σ(标定得出);否则以α=0提交(=copy_last)。\n5. 单输入阶段退路:若manifest只有一个阶段,无法估计方差比,直接回退copy_last(VEC_ALPHA=0路径)。\n6. vec-score快速筛选:先跑α=0.10/k=20单点,若mmd_u未低于identity−σ,跳过其余网格直接提交off。",
"expected_groups": ["cell_state"],
"risks": "1. 方差比r_j噪声大(两阶段样本量有限),外推方向错误→mmd_u/variogram反升;Engineer应在网格第一点(α=0.10, k=20)就对比identity,若两项均劣于identity则立即止损提交off。2. clip(0)在低表达基因上引入偏差,但方差缩放幅度小(α≤0.2),预期受影响基因极少。3. 本地proxy_noscale对外推榜系统性高估(本地54.2→官网49.6),即使本地+0.5也可能官网无收益;方案定位为探索性,若本地增益<1.5分仍按no-go提交off。4. 评分器MMD计算有±0.0002噪声,3次标定可能不足以精确估σ;若σ估计不稳,放宽阈值至均值−2σ。",
"family_id": "T2HX-03",
"mechanism": "在表达PCA空间中,利用两个输入阶段间各PC方差的变化率(r_j),对锚阶段PC得分做乘性缩放(sqrt(1+α(r_j−1))),外推型内离散度趋势;均值逐位不变,只改分布形状。",
"vs_constant_shift": "常数位移对每个基因加同一偏移,改变均值、不改变方差;本方案对每个细胞在PCA空间的得分做逐PC乘性缩放,均值不变(重构后逐基因均值与锚阶段相同),只改变各主成分方向的离散程度。效果是调整细胞间的相对位置(分布形状),而非整体平移。",
"mechanism_evidence": "Engineer应报告:(a) α=0.10时各PC缩放因子sqrt(1+α(r_j−1))的分布(应偏离1但不极端);(b) 重构后X_new与X的逐基因均值差(应<1e-5,证明均值不变);(c) mmd_u和variogram原始值相对同次identity的变化量(必须同时低于−3σ);(d) 四组分各自变化:expression_change应保持50.00(均值未动→无变化保护仍触发),local_spatial和shape_scale应保持50.00(坐标未动)。",
"mechanism_off_control": "环境变量VEC_ALPHA=0(默认):缩放因子全部为1,Z_new=Z,重构后X_new=X(浮点精确),输出与copy_last逐位一致。预期:榜分50.00,四组全50.00,与父节点10无差异。若VEC_ALPHA>0但输出仍与copy_last逐位相同,说明机制未运行(检查PCA是否实际执行、r_j是否全为1)。",
"sources": []
}
``` |
| 原始记录位置 | /home/spark-longxinyang/vec/runs/formal/20261003-172000-search-t2-heart-extrap-chain-12h/nodes/11/researcher.jsonl (文件不在) |