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

总览 · ← 返回运行 20261003-172000-search-t2-heart-extrap-chain-12h

节点 n8 在终选来历上

全局速度(末两输入伪批量差)投影到锚阶段表达 PCA 上自动选 |投影| 最大的 m 个 PC 去噪,再逐细胞按发育前沿程度 (1+β·s_i) 做非对称定向位移(T2HX-01);de_score/de_direction 未过 PLAN 阈值且全网格低于地板,按边界规则以 alpha=0(逐位=copy_last)提交。

运行?一次完整的自动搜索或 Agent 会话,有自己的锁定配置和证据包。20261003-172000-search-t2-heart-extrap-chain-12h
父节点n6
子节点n10
操作?种子:人写的起点;改进:在父节点上改;草稿:从头写;修复:修父节点的报错。改进
状态已打分
分数搜索目标分 50.00(+0.0) · proxy_noscale 50.00(+0.0)
审查通过 1 越界读取:未发现问题——run.py 仅通过 view_io(load_manifest/read_stage/panel_genes/anchor_entry)读取 --data 视图内输入阶段(run.py:81-97),无绝对路径、..、external/、prior/ 或评分器路径访问,无联网;METHOD.md:31 声明 external Qiu E8.75 未读,与代码一致。; 2 硬编码目标统计量:未发现问题——程序常量仅为方法超参(VEC_ALPHA=0、VEC_M=2、VEC_BETA=0.3,run.py:28-31),无细胞类型比例、细胞数、基因列表或表达量数值常…
用时?从运行开始到结束(或到现在)的挂钟时间。22 分
程序版本cc8596bc170c426e214744e247c1837755c8170d (programs.git)
导入自20261003-105537-search-t2-heart-extrap-g24-D#8
备注re-scored at launch (origin 20261003-105537-search-t2-heart-extrap-g24-D node 8, score there 50.00)

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

来自 programs.git cc8596bc17:solution/METHOD.md

全局速度(末两输入伪批量差)投影到锚阶段表达 PCA 上自动选 |投影| 最大的 m 个 PC 去噪,再逐细胞按发育前沿程度 (1+β·s_i) 做非对称定向位移(T2HX-01);de_score/de_direction 未过 PLAN 阈值且全网格低于地板,按边界规则以 alpha=0(逐位=copy_last)提交。

方法(PLAN 家族 T2HX-01:速度投影 PC 上的定向逐细胞位移)

  • 基座与父节点 6 相同:anchor_entry 锚阶段(外推=末输入),≤max_cells 时整份输出,否则按细胞类型分层抽到 max_cells;坐标、细胞数、组成不动。
  • 机制:v = pb(末输入) − pb(前一输入)(全局伪批量速度,不分型);对锚阶段抽样表达做 PCA(基因协方差 500×500 eigh,v_clean=V_sel V_selᵀ v 对特征向量符号不变,确定性);按 |Vᵀv| 选前 m 个 PC 重构 v_clean 并 L2 归一化;s_i=(X_i−mu)·v_clean,X_new = max(0, X + α·max(0,1+β·s_i)·v_clean),β=0.3。
  • 开关:环境变量 VEC_ALPHA(默认 0)、VEC_M(默认 2)、VEC_BETA(默认 0.3)。单输入阶段视图无速度可算,自动回退 copy_last。无阶段名/绝对时间/视图分支;输出只依赖数据与 seed(seed 0 两次运行逐位一致,已验证)。

网格结果(vec-score, T2:heart:val_extrap/proxy_noscale,A 半;地板=50.00)

配置榜分de_scorede_directionmmd_uvariogramneighborhood
alpha=0(对照,=copy_last)50.000(保护)0.0583.0581.1126
alpha=0.5, m=249.87+0.042−0.015.0583.0643.1136
alpha=2.0, m=249.58+0.042−0.015.0580.0731.1118
alpha=0.5, m=449.09−0.083−0.075—.0666—
  • de_score/de_direction 原始值对 alpha(0.5→2.0)不变:clip(0) 后的 dp 秩结构不随幅度变(与父节点 6 的教训一致)。write_t2 强制 clip≥0,"不 clip 保留负值"的对照实测输出与 clip 版逐位相同(负位移在写盘时被截断),无法绕开零膨胀基因下行被截断的非对称衰减。
  • m=4 把 PC7/PC10(|投影| 2.1/1.8)混入方向后 de_score 转负:确认父节点发现的 PC5/PC8(|投影| 3.43/3.42,本实现 0-based 索引 7/4)是速度的主要承载轴,但即使 m=2 只取这两轴,方向信号也不足以转正 de_direction。

机制生效证据与失效判定(按 PLAN mechanism_evidence)

  1. 位移非常数:per-cell 调制 max(0,1+0.3·s_i),dp 范数 0.295(alpha=0.5),500 个基因 dp 全非零——机制确实改变了表达。
  2. dp 方向沿 v_clean(构造保证,clip 前逐位平行)。
  3. de_score 原始值 +0.042 < PLAN 阈值 0.05,且 de_direction 为负(−0.015) → 按 PLAN 判定标准机制方向信号不足:E8.25→E8.75 速度在 PC5/PC8 上的去噪投影与 E8.75→E9.5 真值变化的秩相关≈0 或略负;零膨胀下行基因的 clip 衰减进一步压低 de_direction。
  4. 任何 alpha>0 都损伤 variogram(.058→.064–.073,clip 对共变结构的非线性破坏),损失(−0.13~−0.29 分)超过 de 组收益(+0.14 分),全网格低于地板。
  5. 对照(mechanism_off_control):VEC_ALPHA=0 跳过全部速度计算与位移,输出走与父节点 6 相同的 take()/write_t2 路径,逐位等于 copy_last;本地双跑逐位一致,vec-check --task T2:heart:val_extrap/proxy_noscale 通过。

结论与提交

按 PLAN 风险条款 1 与边界规则(网格单调劣于地板时取边界)提交 alpha=0(=copy_last,对照实测 50.00)。未使用任何由已发布/保留阶段尺寸或保留信息算出的常数;未用外部数据(external/ 的 Qiu E8.75 未读)。知识来源:仅通用线性外推/PCA 去噪方法学,无阶段特异性生物学先验。

下一步最值得试:(a) expression_change 族在本地代理上已三度证伪(顶部 PC、速度投影 PC、per-type damped_shift),E8.25→E8.75 速度对 E8.75→E9.5 的秩预测力≈0,建议该榜放弃表达位移族,转向 node 5 已证明有效的坐标-表达配对重排(shape_scale +10)与外部 Qiu E8.75 型内状态细化(mmd_u 苗头)。

调研员的计划

名称速度投影PC上的定向逐细胞位移(PC5/8方向,非对称放大)
动机父节点6证明:(1)顶部PC是型间分离轴,沿其对称放大dp≈0,仅clip伪影产生反预测de_score(−0.58);(2)真实速度投影在PC5/PC8(幅度3.4);(3)收缩方差崩分(37.72)但放大方向mmd_u略优(0.0577<地板0.0583)。节点2-4的damped_shift用原始per-type伪批量+α=0.05,触发无变化保护或低于地板。本方案用速度在特定PC上的投影做定向位移,修复'方向错误'这一结构问题,针对expression_change组(当前de_score/de_direction=0,仅靠保护拿地板分)。
做法步骤:(1)加载E8.25和E8.75(视图内两个输入阶段),计算全局速度v=mean(E8.75)−mean(E8.25)(逐基因,不分型,避免小样本噪声);(2)对E8.75表达做PCA(同父节点6的SVD流程),将v投影到PC空间,取|投影|最大的2-4个PC(父节点已确认PC5/PC8,但程序应自动选择:按|V^T v|排序取前m个,m∈{2,3,4});(3)重构去噪速度v_clean=V_sel@(V_sel^T@v),归一化为单位向量;(4)逐细胞位移:对每个细胞计算其在速度方向上的投影s_i=(X_i−mu)·v_clean/||v_clean||²,位移量=alpha(1+betas_i)*v_clean,beta=0.3固定(使发育上更前沿的细胞位移更大,打破对称性);(5)负值处理:X_new=max(0, X+displacement),但记录clip比例——若>5%基因被clip,改用softplus(X+disp)−softplus(0)近似;(6)网格:alpha∈{0.2,0.5,1.0}×m∈{2,4},共4配置+1对照;(7)快速筛选:先跑alpha=0.5/m=2,检查de_score原始值——若<0则直接放弃该族(父节点教训:秩不变则无法救回);若≥0.05再跑其余配置。单输入阶段退路:若视图只有一个输入阶段(无E8.25),无法算速度,回退alpha=0输出copy_last。vec-score查分:每个配置1次,最多5次(含对照),重点看de_score原始值和de_direction符号。
风险1) E8.25→E8.75速度方向与E8.75→E9.5真实变化方向相关性可能不足(发育非线性),de_score仍为负——Engineer应在第一次查分后立即检查de_score原始值,若<0直接终止并提交alpha=0;2) 全局速度混合了多个细胞型的变化方向,可能不如per-type精确,但per-type在节点2-4已证明噪声大——若全局版失败,不建议再试per-type;3) alpha过大会使mmd_u/variogram恶化(分布偏离锚阶段太远),网格上限1.0应足够保守;4) 本地尺子对外推榜高估(历史本地54.2→官网49.6),即使本地+1也不可信,需de_score原始值≥0.05才视为真实信号。

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

对比:父节点版本 4dbc7c917e。改动的文件:solution/METHOD.md +21 −21、solution/run.py +61 −26

diff --git a/solution/METHOD.md b/solution/METHOD.mdindex 8801be3..a256a67 100644--- a/solution/METHOD.md+++ b/solution/METHOD.md@@ -1,33 +1,33 @@-逐细胞沿锚阶段表达PCA前k轴放大位移(alpha开关);网格{−0.5,0.1,0.25}全低于地板(clip伪影dp反预测de_score),按边界规则提交alpha=0(=copy_last,对照实测50.00)。+全局速度(末两输入伪批量差)投影到锚阶段表达 PCA 上自动选 |投影| 最大的 m 个 PC 去噪,再逐细胞按发育前沿程度 (1+β·s_i) 做非对称定向位移(T2HX-01);de_score/de_direction 未过 PLAN 阈值且全网格低于地板,按边界规则以 alpha=0(逐位=copy_last)提交。 -## 方法+## 方法(PLAN 家族 T2HX-01:速度投影 PC 上的定向逐细胞位移) -- 基座与 copy_last 相同:`anchor_entry` 锚阶段(本代理=末输入 E8.75,24,826 ≤ max_cells,整份输出),分层抽样仅在超过 `max_cells` 时触发;坐标、细胞数、组成不动。-- 机制(PLAN 指定):`X_new = X + alpha·((X−mu)V_k)V_kᵀ`,V_k = 锚阶段样本表达(按基因方差>0过滤)的前 k 个主成分(`np.linalg.svd`,确定性;符号翻转在 score×loading 中相消)。逐细胞位移随 PC 得分变化,非常数位移(实测与均值位移的余弦均值 0.44,型内位移 std>0)。-- 开关:环境变量 `VEC_ALPHA`(默认 0.0)、`VEC_NPC`(默认 10)。alpha=0 时跳过 SVD,输出逐位等于 copy_last(机制关闭对照)。-- 无阶段名/时间/视图分支;不读绝对时间;输出只依赖表达数据与 seed。+- 基座与父节点 6 相同:`anchor_entry` 锚阶段(外推=末输入),≤max_cells 时整份输出,否则按细胞类型分层抽到 max_cells;坐标、细胞数、组成不动。+- 机制:v = pb(末输入) − pb(前一输入)(全局伪批量速度,不分型);对锚阶段抽样表达做 PCA(基因协方差 500×500 `eigh`,v_clean=V_sel V_selᵀ v 对特征向量符号不变,确定性);按 |Vᵀv| 选前 m 个 PC 重构 v_clean 并 L2 归一化;s_i=(X_i−mu)·v_clean,X_new = max(0, X + α·max(0,1+β·s_i)·v_clean),β=0.3。+- 开关:环境变量 `VEC_ALPHA`(默认 0)、`VEC_M`(默认 2)、`VEC_BETA`(默认 0.3)。单输入阶段视图无速度可算,自动回退 copy_last。无阶段名/绝对时间/视图分支;输出只依赖数据与 seed(seed 0 两次运行逐位一致,已验证)。 -## 网格结果(vec-score, T2:heart:val_extrap/proxy_noscale,A 半)+## 网格结果(vec-score, T2:heart:val_extrap/proxy_noscale,A 半;地板=50.00)  | 配置 | 榜分 | de_score | de_direction | mmd_u | variogram | neighborhood | |---|---:|---:|---:|---:|---:|---:|-| alpha=0(对照=copy_last) | **50.00** | 0(保护) | 0 | .0583 | .0581 | .1126 |-| alpha=0.1, k=10, pb 迭代回中 | 49.09 | −0.583 | +0.187 | .0577 | .0625 | .1131 |-| alpha=0.25, k=10, pb 回中 | 48.37 | −0.597 | +0.193 | .0577 | .0736 | .1156 |-| alpha=0.25, k=10(无回中) | 47.05 | −0.597 | +0.169 | .0602 | .0856 | .1216 |-| alpha=−0.5, k=10, pb 回中(收缩) | 37.72 | −0.458 | −0.022 | .1125 | .1283 | .1977 |+| alpha=0(对照,=copy_last) | **50.00** | 0(保护) | 0 | .0583 | .0581 | .1126 |+| alpha=0.5, m=2 | 49.87 | +0.042 | −0.015 | .0583 | .0643 | .1136 |+| alpha=2.0, m=2 | 49.58 | +0.042 | −0.015 | .0580 | .0731 | .1118 |+| alpha=0.5, m=4 | 49.09 | −0.083 | −0.075 | — | .0666 | — | -## 机制生效证据(alpha>0 时)与失效原因+- de_score/de_direction 原始值对 alpha(0.5→2.0)不变:clip(0) 后的 dp 秩结构不随幅度变(与父节点 6 的教训一致)。`write_t2` 强制 clip≥0,"不 clip 保留负值"的对照实测输出与 clip 版逐位相同(负位移在写盘时被截断),无法绕开零膨胀基因下行被截断的非对称衰减。+- m=4 把 PC7/PC10(|投影| 2.1/1.8)混入方向后 de_score 转负:确认父节点发现的 PC5/PC8(|投影| 3.43/3.42,本实现 0-based 索引 7/4)是速度的主要承载轴,但即使 m=2 只取这两轴,方向信号也不足以转正 de_direction。 -1. 位移非常数:与均值位移余弦 0.44;per-cell 位移均值幅度 0.05(alpha=0.25)。-2. 分布确有改变:variance ratio 1.014(alpha=0.1)–1.083(alpha=0.25);收缩版 0.70 → mmd/variogram 崩到 37.7 分,说明真实 E9.5 的型内方差高于锚阶段,放大方向对 mmd_u 略有益(0.0577 < 地板 0.0583),local_spatial 也略升(50.3)。-3. 致命伤:对称放大的伪批量位移≈0,唯一的 dp 来自 clip(0) 对零膨胀基因的非对称抬升;该 dp 排序对 de_score 的上调命中是反预测的(−0.58~−0.60,且秩标度不变,减小 alpha 不改变符号),de_direction 的 +0.58 分不足以抵 −1.5 分。pb 回中只能减小幅度、不能改变排序。-4. 前一步(E8.25→E8.75)速度在 PC 上的投影主要落在 PC5/PC8(3.4),不在顶部 PC——顶部 PC 是型间分离轴,不是发育时间轴;这解释了为什么沿顶部 PC 放大得不到正确方向(与方法卡 damped_shift 网格单调低于地板一致)。+## 机制生效证据与失效判定(按 PLAN mechanism_evidence) -## 结论与提交+1. 位移非常数:per-cell 调制 max(0,1+0.3·s_i),dp 范数 0.295(alpha=0.5),500 个基因 dp 全非零——机制确实改变了表达。+2. dp 方向沿 v_clean(构造保证,clip 前逐位平行)。+3. **de_score 原始值 +0.042 < PLAN 阈值 0.05,且 de_direction 为负(−0.015)** → 按 PLAN 判定标准机制方向信号不足:E8.25→E8.75 速度在 PC5/PC8 上的去噪投影与 E8.75→E9.5 真值变化的秩相关≈0 或略负;零膨胀下行基因的 clip 衰减进一步压低 de_direction。+4. 任何 alpha>0 都损伤 variogram(.058→.064–.073,clip 对共变结构的非线性破坏),损失(−0.13~−0.29 分)超过 de 组收益(+0.14 分),全网格低于地板。+5. 对照(mechanism_off_control):VEC_ALPHA=0 跳过全部速度计算与位移,输出走与父节点 6 相同的 take()/write_t2 路径,逐位等于 copy_last;本地双跑逐位一致,`vec-check --task T2:heart:val_extrap/proxy_noscale` 通过。 -网格对 alpha 单调劣于地板,按方法卡对 damped_shift 的同一决策规则取边界 alpha=0 提交(=copy_last,50.00);未用任何由已发布阶段尺寸/保留阶段推出的常数。已验证:seed 0 输出通过 vec-check;对照与提交逐位一致。未验证:alpha<0.1 且逐基因 pb 精确复原(dp=0 触发 DE 保护)的组合,估计 ≈49.9–50.1(变差组 variogram 仍在),不超过噪声。+## 结论与提交 -## 知识来源+按 PLAN 风险条款 1 与边界规则(网格单调劣于地板时取边界)提交 alpha=0(=copy_last,对照实测 50.00)。未使用任何由已发布/保留阶段尺寸或保留信息算出的常数;未用外部数据(external/ 的 Qiu E8.75 未读)。知识来源:仅通用线性外推/PCA 去噪方法学,无阶段特异性生物学先验。 -未使用外部生物学知识;仅用视图内输入数据(E8.25/E8.75 表达、外部 Qiu E8.75 未使用)与评分规则公开说明。+下一步最值得试:(a) expression_change 族在本地代理上已三度证伪(顶部 PC、速度投影 PC、per-type damped_shift),E8.25→E8.75 速度对 E8.75→E9.5 的秩预测力≈0,建议该榜放弃表达位移族,转向 node 5 已证明有效的坐标-表达配对重排(shape_scale +10)与外部 Qiu E8.75 型内状态细化(mmd_u 苗头)。diff --git a/solution/run.py b/solution/run.pyindex 0888afa..06e8daf 100644--- a/solution/run.py+++ b/solution/run.py@@ -1,16 +1,18 @@ #!/usr/bin/env python3-"""PCA-axis extrapolation (T2 heart extrap, PLAN family "other").+"""Velocity-projected PC displacement (T2 heart extrap, family T2HX-01). -copy_last base (stratified sample of the anchor stage, coordinates untouched),-then each cell is displaced along the top-k principal axes of the sampled-anchor-stage expression covariance:+copy_last base (stratified sample of the anchor = last input stage, coordinates,+cell count and composition untouched), then a directed per-cell displacement: -    X_new[i] = X[i] + alpha * ((X[i] - mu) V_k) V_k^T+  v        = pseudobulk(anchor) - pseudobulk(previous input)      # global velocity+  V_sel    = top-m anchor-sample PCs by |V^T v|                   # denoising subspace+  v_clean  = V_sel (V_sel^T v), L2-normalised+  s_i      = (X_i - mu) . v_clean                                 # developmental lead+  X_new[i] = max(0, X_i + alpha * max(0, 1 + beta * s_i) * v_clean) -The displacement is cell-specific (proportional to the cell's own PC scores),-not a constant pseudobulk shift. alpha = 0 reproduces copy_last bit-for-bit-(mechanism-off control). Expression only; coordinates, cell count and-composition are copied from the anchor sample.+alpha = 0 (default / VEC_ALPHA=0) skips everything and reproduces copy_last+bit-for-bit (mechanism-off control). If the view has a single input stage,+velocity is undefined and the program falls back to copy_last. """  from __future__ import annotations@@ -24,25 +26,49 @@ from src.task2_spatial.sample import take from src.task2_spatial.view_io import anchor_entry, load_manifest, panel_genes, read_stage, write_t2  ALPHA = float(os.environ.get("VEC_ALPHA", "0.0"))-N_PC = int(os.environ.get("VEC_NPC", "10"))+M_PC = int(os.environ.get("VEC_M", "2"))+BETA = float(os.environ.get("VEC_BETA", "0.3"))+CLIP = os.environ.get("VEC_CLIP", "1") != "0"  -def pca_axis_displace(X: np.ndarray, alpha: float, k: int) -> np.ndarray:-    """X (n_cells x n_genes, float64) -> X + alpha * rank-k centered reconstruction."""-    mu = X.mean(axis=0)-    var = X.var(axis=0)+def velocity_direction(Xa: np.ndarray, v: np.ndarray, m: int) -> np.ndarray | None:+    """Project global velocity v onto the top-m PCs of anchor sample Xa; return unit vector.++    PCs via eigendecomposition of the gene covariance (500x500); v_clean =+    V_sel V_sel^T v is invariant to eigenvector sign, hence deterministic.+    """+    mu = Xa.mean(axis=0)+    var = Xa.var(axis=0)     keep = var > 0-    Xc = X[:, keep] - mu[keep]-    kk = int(min(k, Xc.shape[1] - 1, Xc.shape[0] - 1))+    Xc = Xa[:, keep] - mu[keep]+    kk = int(min(max(m, 1), Xc.shape[1] - 1, Xc.shape[0] - 1))     if kk < 1:-        return X-    # deterministic thin SVD (LAPACK); sign flips cancel in score @ loading-    _, _, Vt = np.linalg.svd(Xc, full_matrices=False)-    Vk = Vt[:kk]-    dev = (Xc @ Vk.T) @ Vk-    out = X.copy()-    out[:, keep] = X[:, keep] + alpha * dev-    return out+        return None+    C = Xc.T @ Xc+    C = 0.5 * (C + C.T)+    w, V = np.linalg.eigh(C)  # ascending eigenvalues+    Vt = V[:, ::-1].T  # descending+    vk = v[keep]+    proj = Vt @ vk+    sel = np.argsort(-np.abs(proj))[:kk]+    Vsel = Vt[sel]+    v_clean = np.zeros_like(v)+    v_clean[keep] = Vsel.T @ (Vsel @ vk)+    nrm = np.linalg.norm(v_clean)+    if not np.isfinite(nrm) or nrm <= 0:+        return None+    return v_clean / nrm+++def displace(X: np.ndarray, v_unit: np.ndarray, alpha: float, beta: float) -> tuple[np.ndarray, float]:+    mu = X.mean(axis=0)+    s = (X - mu) @ v_unit  # developmental lead along the velocity direction+    fac = np.maximum(0.0, 1.0 + beta * s)+    Xn = X + alpha * fac[:, None] * v_unit[None, :]+    if not CLIP:+        return Xn, float("nan")+    clipped = float((Xn < 0).mean())+    return np.maximum(Xn, 0.0), clipped   def main() -> None:@@ -54,6 +80,7 @@ def main() -> None:      manifest = load_manifest(args.data)     genes = panel_genes(args.data, manifest)+    inputs = sorted(manifest["inputs"], key=lambda e: float(e["time"]))     stage = read_stage(args.data, anchor_entry(manifest), genes)     n = int(np.clip(stage.n, manifest["min_cells"], manifest["max_cells"]))     rng = np.random.default_rng(args.seed)@@ -64,8 +91,16 @@ def main() -> None:     X = stage.X[rows].toarray().astype(np.float32)     coords = stage.coords[rows] -    if ALPHA != 0.0:-        X = np.clip(pca_axis_displace(X.astype(np.float64), ALPHA, N_PC), 0.0, None).astype(np.float32)+    if ALPHA != 0.0 and len(inputs) >= 2:+        prev = read_stage(args.data, inputs[-2], genes)+        anchor_full = read_stage(args.data, inputs[-1], genes)+        v = np.asarray(anchor_full.X.mean(axis=0)).ravel() - np.asarray(prev.X.mean(axis=0)).ravel()+        v_unit = velocity_direction(X.astype(np.float64), v.astype(np.float64), M_PC)+        if v_unit is not None:+            X64, clip_frac = displace(X.astype(np.float64), v_unit, ALPHA, BETA)+            if os.environ.get("VEC_DEBUG"):+                print(f"clip_frac={clip_frac:.4f} ||v||={np.linalg.norm(v):.4f}")+            X = X64.astype(np.float32)      write_t2(args.out, X, coords, genes, seed=args.seed) 

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

用到的知识库条目

编号标题出处
k007Interval staging and held-out-window filtering of external datanotes/official/来件/virtualembryo.ai/rules.md
k026Canonicalise predicted 3D coordinates before submissionnotes/pitfalls/04_scorer_invariance.md
k016Degenerate-solution checks for population predictionsnotes/handover/02_知识学习路线.md

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

改了什么实现了 T2HX-01:全局速度 v=pb(E8.75)−pb(E8.25) 投影到锚阶段表达 PCA 上按 |Vᵀv| 自动选 m 个 PC 去噪,逐细胞按发育前沿程度 (1+β·s_i) 非对称定向位移(run.py 重写位移逻辑,新增 VEC_M/VEC_BETA/VEC_CLIP 开关)。网格里所有 alpha>0 配置均低于地板,最终按边界规则以 alpha=0 提交,输出逐位等于父节点 6 的 copy_last。
各组分数的变化cell_state:噪声内(50.00→50.00):mmd_u 0.05832、variogram 0.05806 与对照完全一致,坐标/组成未动
expression_change:噪声内(50.00→50.00,+0.00):提交即 alpha=0 对照,de_score/de_direction 原始值为 0(无变化保护),与父节点逐位相同
local_spatial:噪声内(50.00→50.00):neighborhood_mmd 0.1126 与对照一致
shape_scale:噪声内(50.00→50.00):d2_shape 0.04911、occupancy_dice 0.8066、scale_log_ratio −0.4334 与对照一致
family_idT2HX-01
假设是否成立否
经验
  1. 在 T2 heart 外推榜上,E8.25→E8.75 全局速度经 PC5/PC8(|投影| 3.4)去噪后做定向位移,de_score 原始值仅 +0.042(低于 PLAN 阈值 0.05)、de_direction −0.015:前一区间的速度方向对下一区间真值变化的秩预测力≈0,线性外推方向在该榜不成立。
  2. clip(0)(含 write_t2 写盘时的强制截断)后 dp 的秩结构不随 alpha 变:alpha 0.5→2.0 时 de_score/de_direction 原始值完全不变,调幅度救不了方向错误,只有改方向/改排序才可能变分。
  3. m=4 把 PC7/PC10(|投影| 2.1/1.8)混入方向后 de_score 由 +0.042 转负 −0.083:速度的主要承载轴(PC5/PC8)之外的 PC 携带的是反预测噪声,PC 去噪子空间不是越大越好。
  4. 任何 alpha>0 都损伤 variogram(0.058→0.064–0.073),该损失(约 −0.13~−0.29 分)超过 DE 组收益(约 +0.14 分):定向位移对共变结构的破坏是这类方法的固定成本,DE 收益必须显著大于它才划算。
  5. expression_change 位移族在该榜已三度证伪(顶部 PC 对称放大、per-type damped_shift、速度投影 PC 定向位移),三者共同瓶颈是外推方向信号不足,而非位移构造方式。
mechanism_active否
下一步建议
  1. 该榜放弃表达位移族(expression_change 组):三种构造均低于地板且方向信号≈0,继续调 alpha/beta/m 只会在噪声内打转。
  2. 转向 local_spatial/shape_scale:复用 node 5 已证明有效的坐标-表达配对重排思路(曾 +10),针对 neighborhood_mmd(当前 0.1126 在地板,权重 25+结构门)。
  3. 针对 cell_state 组的 mmd_u(0.05832 在地板):试外部 Qiu E8.75 数据做型内状态细化(Engineer 报告的苗头),注意本地尺子对外推榜高估,需 mmd_u 原始值明显低于 0.0583 才算信号。

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

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

分析员

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

工程师

角色工程师 alibaba-token-plan-cn/qwen3.8-max
调用次数1 次
轮数25
工具调用共 28 次:—
用时19 分
token 数输入 60,374 · 输出 9,230 · 思考 13,990
任务(第一行)按计划修改程序:速度投影PC上的定向逐细胞位移(PC5/8方向,非对称放大)
最后的回答(摘录)
完成。总结:

- **做了什么**:按 PLAN(T2HX-01)实现"全局速度投影 PC 去噪 + 逐细胞非对称定向位移"(v=pb(E8.75)−pb(E8.25),按 |Vᵀv| 自动选 m 个 PC,β=0.3 前沿调制),环境变量开关,单输入视图自动回退 copy_last。
- **查分结果**(4 次,proxy_noscale):alpha=0.5/m=2 → 49.87(de_score +0.042 < PLAN 阈值 0.05,de_direction −0.015);alpha=2.0/m=2 → 49.58(DE 秩不变);m=4 → 49.09(de_score 转负)。全网格低于地板,且 `write_t2` 强制 clip≥0,无法绕开零膨胀基因的下行截断衰减。按边界规则提交 alpha=0(对照实测 50.00,逐位=copy_last,双跑确定、vec-check 通过)。
- **下一步最值得试**:该榜表达位移族已三度证伪(顶部 PC / 速度投影 PC / per-type),E8.25→E8.75 速度对 E9.5 变化秩预测力≈0;建议转向 node 5 已证明的坐标-表达配对重排(shape_scale +10)或外部 Qiu E8.75 型内状态细化(mmd_u 苗头)。
原始记录位置/home/spark-longxinyang/vec/runs/formal/20261003-172000-search-t2-heart-extrap-chain-12h/nodes/8/engineer.jsonl (文件不在)

调研员

角色调研员 alibaba-token-plan-cn/qwen3.8-max
调用次数1 次
轮数1
工具调用共 0 次:—
用时3 分
token 数输入 13,378 · 输出 1,387 · 思考 6,280
任务(第一行)为节点 n8(改进,父节点 n6)写改进计划 PLAN.json
最后的回答(摘录)
PC8(幅度3.4);(3)收缩方差崩分(37.72)但放大方向mmd_u略优(0.0577<地板0.0583)。节点2-4的damped_shift用原始per-type伪批量+α=0.05,触发无变化保护或低于地板。本方案用速度在特定PC上的投影做定向位移,修复'方向错误'这一结构问题,针对expression_change组(当前de_score/de_direction=0,仅靠保护拿地板分)。",
  "approach": "步骤:(1)加载E8.25和E8.75(视图内两个输入阶段),计算全局速度v=mean(E8.75)−mean(E8.25)(逐基因,不分型,避免小样本噪声);(2)对E8.75表达做PCA(同父节点6的SVD流程),将v投影到PC空间,取|投影|最大的2-4个PC(父节点已确认PC5/PC8,但程序应自动选择:按|V^T v|排序取前m个,m∈{2,3,4});(3)重构去噪速度v_clean=V_sel@(V_sel^T@v),归一化为单位向量;(4)逐细胞位移:对每个细胞计算其在速度方向上的投影s_i=(X_i−mu)·v_clean/||v_clean||²,位移量=alpha*(1+beta*s_i)*v_clean,beta=0.3固定(使发育上更前沿的细胞位移更大,打破对称性);(5)负值处理:X_new=max(0, X+displacement),但记录clip比例——若>5%基因被clip,改用softplus(X+disp)−softplus(0)近似;(6)网格:alpha∈{0.2,0.5,1.0}×m∈{2,4},共4配置+1对照;(7)快速筛选:先跑alpha=0.5/m=2,检查de_score原始值——若<0则直接放弃该族(父节点教训:秩不变则无法救回);若≥0.05再跑其余配置。单输入阶段退路:若视图只有一个输入阶段(无E8.25),无法算速度,回退alpha=0输出copy_last。vec-score查分:每个配置1次,最多5次(含对照),重点看de_score原始值和de_direction符号。",
  "expected_groups": ["expression_change"],
  "risks": "1) E8.25→E8.75速度方向与E8.75→E9.5真实变化方向相关性可能不足(发育非线性),de_score仍为负——Engineer应在第一次查分后立即检查de_score原始值,若<0直接终止并提交alpha=0;2) 全局速度混合了多个细胞型的变化方向,可能不如per-type精确,但per-type在节点2-4已证明噪声大——若全局版失败,不建议再试per-type;3) alpha过大会使mmd_u/variogram恶化(分布偏离锚阶段太远),网格上限1.0应足够保守;4) 本地尺子对外推榜高估(历史本地54.2→官网49.6),即使本地+1也不可信,需de_score原始值≥0.05才视为真实信号。",
  "family_id": "T2HX-01",
  "mechanism": "将两输入阶段的全局伪批量速度投影到锚阶段表达协方差的特定主成分(速度投影最大的2-4个PC)上,重构去噪方向向量,逐细胞按其在速度方向上的发育前沿程度做非对称定向位移。",
  "vs_constant_shift": "三重区别:(1)位移方向经PC投影去噪,约束在表达协方差结构内,而非原始伪批量差(噪声大);(2)逐细胞调幅(1+beta*s_i)使发育前沿细胞位移更大,非均匀常数;(3)PC选择由速度投影幅度自动决定,而非预设全部基因同权。关闭调幅(beta=0)且用全部PC时退化为常数位移,但默认配置不是。",
  "mechanism_evidence": "Engineer应检查:(1)位移后伪批量dp与v_clean的余弦相似度>0.9(证明方向正确传递);(2)逐细胞位移幅度的变异系数>0.1(证明非常数);(3)de_score原始值≥0.05(父节点设定的真实收益阈值);(4)de_direction原始值>0;(5)对照配置(alpha=0)逐位等于copy_last。若de_score<0且随alpha符号不变,判定机制方向错误,不提交。",
  "mechanism_off_control": "环境变量VEC_ALPHA=0时跳过整个速度计算和位移步骤,输出逐位等于copy_last(与父节点6相同的边界规则)。预期差别:对照得分50.00(地板),机制开启后expression_change组分数变化(目标>50),其余三组在噪声内不变(坐标/组成/细胞数未动)。",
  "sources": []
}
```
原始记录位置/home/spark-longxinyang/vec/runs/formal/20261003-172000-search-t2-heart-extrap-chain-12h/nodes/8/researcher.jsonl (文件不在)

审查员

角色审查员 alibaba-token-plan-cn/qwen3.8-max
调用次数1 次
轮数6
工具调用共 10 次:—
用时1 分
token 数输入 18,427 · 输出 1,354 · 思考 1,887
任务(第一行)审查节点 n8 的程序是否越界读取、写死目标、钻评分器漏洞
最后的回答(摘录)
REVIEW.json written
原始记录位置/home/spark-longxinyang/vec/runs/formal/20261003-172000-search-t2-heart-extrap-chain-12h/nodes/8/reviewer.jsonl (文件不在)