总览 · ← 返回运行 20261003-004922-search-t2-embryo-interp-g24
节点 n20
父18解耦基座上,把统一 blend α=−0.10 换成按型方差自适应 α_T=−min(d(T)·γ, α_max):d(T)=max(0, σ_late(T)/σ_donor(T)−1)(winsorize 2.0),γ=1.0、α_max=0.15,只扩展型内离散不足的型。
| 运行?一次完整的自动搜索或 Agent 会话,有自己的锁定配置和证据包。 | 20261003-004922-search-t2-embryo-interp-g24 |
|---|---|
| 父节点 | n18 |
| 子节点 | n22 |
| 操作?种子:人写的起点;改进:在父节点上改;草稿:从头写;修复:修父节点的报错。 | 改进 |
| 状态 | 已打分 |
| 分数 | 搜索目标分 61.98(+0.0) · proxy 61.98(+0.0) · 3 次复测均分 61.33 |
| 审查 | 通过 检查1(越界读取)未发现问题:run.py仅经load_manifest/panel_genes/read_stage从args.data读取,导入的是src.task2_spatial框架(非src/common/evaluation打分器),无绝对路径/`..`//mnt//home/data/raw/downloads,无联网下载(全文grep无open()/http/urllib/requests)。; 检查2(硬编码目标统计量)未发现问题:run.py仅含标量算法参数(PARAMS、BLEND_ALPHA=-0.10、BLEND_MIN_CELLS=5、GAMMA、ALPHA_MA… |
| 用时?从运行开始到结束(或到现在)的挂钟时间。 | 16 分 |
| 程序版本 | 6987e53199749eb6a31d7ac7d8e4c0e9291df97e (programs.git) |
方法说明?节点程序自带的 METHOD.md:这个程序做了什么、为什么。
来自 programs.git 6987e53199:solution/METHOD.md
父18解耦基座上,把统一 blend α=−0.10 换成按型方差自适应 α_T=−min(d(T)·γ, α_max):d(T)=max(0, σ_late(T)/σ_donor(T)−1)(winsorize 2.0),γ=1.0、α_max=0.15,只扩展型内离散不足的型。
方法(family T2EI-01,PLAN 的按型方差自适应扩展)
基座与父 18 完全相同:mix(procrustes3d,scale_damp=0.5)+ 解耦(坐标=均匀分层抽取 frac=0.5;表达池=组成插值 ADJ=0;型内对齐帧 nn 配对)。
新机制:配对后、写出前,对每型 T 计算
- σ_donor(T):配对后该型输出池的表达 RMS std(blend 前);
- σ_late(T):晚阶段(B 侧)全部同型细胞的表达 RMS std;
- 方差赤字 d(T)=max(0, σ_late/σ_donor−1),winsorize 上限 2.0;
- α_T=−min(d(T)·GAMMA, ALPHA_MAX),GAMMA=1.0、ALPHA_MAX=0.15(提交值,即 PLAN 初值);
- x_out=(1−α_T)·x_d+α_T·μ_T^interp,μ 为型的时间插值型心(同父 18);
- 任一侧该型细胞数 < BLEND_MIN_CELLS(=5) 跳过;B-only / A-only 型 d=0 → α_T=0(无时间方向信息,不扩展);
- 单阶段退路(无括号):走 copy_last 抽样,不 blend;ADAPTIVE_BLEND=0 时全部型统一 α=−0.10, 与父 18 逐位一致(uniform 路径的算式、顺序、clip 均未改动;α_T≠0 时执行与父 18 相同的
(1−α)x+αμ[None,:],浮点运算逐位相同)。
与 PLAN 的偏离:另实现了 BLEND_BASE(统一扩展底噪 + 赤字增量)作探索,代理上更差,提交 BASE=0(即 PLAN 原式)。
机制生效证据(seed 0,代理 E6.75+E8.0→E7.25)
- 33 个型全部参与 blend(0 跳过);d_mean=0.080,d=0 的型占 67%(<80%,未触发回退条款);
- 33% 的型 α_T<−0.05(满足 PLAN 证据条款 (a) ≥30%);α_T 均值 −0.044、最小 −0.15(触 cap);
- blend 后型内 RMS std 0.956→0.985:只有赤字型被扩展,充足型不动(父 18 统一扩展到 1.026);
- 差异化:α_T 逐型不同(非全局常数),组成与坐标路径未动(shape_scale 逐位不变 68.53)。
查分结果(A 半,seed 0 九宫格 + seed 1 复核,共 15 次)
| 配置 | board | ec | cs | ls |
|---|---|---|---|---|
| off=父18(α=−0.10 统一) | 61.22 | 60.06 | 56.62 | 59.67 |
| γ=1.0, max=0.15(提交) | 61.25 | 59.92 | 56.77 | 59.78 |
| γ=1.0, max=0.20 | 61.09 | 59.14 | 56.68 | 60.00 |
| γ=2.0, max=0.20 | 61.10 | 59.15 | 56.67 | 60.05 |
| base0.10+γ1.0, max0.25 | 60.33 | 56.91 | 55.79 | 60.09 |
| γ=1.0, max=0.25 | 61.05 | 59.07 | 56.56 | 60.05 |
| seed 1:off / 提交配置 | 60.49 / 60.52 | 58.85/58.74 | 55.49/55.66 | 58.69/58.78 |
seed 1 复核方向一致:cs +0.17、ls +0.09、ec −0.11、board +0.03。总分差在噪声(~1)内, 但 cs(PLAN 目标最弱组)与 ls 两个 seed 均为正、ec 损失小于父 18 统一扩展。按 PLAN 条款(无组合 ≤ 父−1,方向一致)提交 γ=1.0/max=0.15。
验证过 / 未验证
- 验证过:确定性(同 seed 两次运行 .X/indices/indptr/obsm 逐位相同);vec-check ok; ADAPTIVE_BLEND=0 路径算式与父 18 逐位一致(代码级);9 组 γ×max 网格 + 4 组 base 变体 + seed 1 复核。
- 未验证:真实括号(E7.25+E8.0→E7.75,共有类型更多、d 分布可能不同);GAMMA/max 更细的网格; 与 VEC_COMPOS_ADJ 补偿 ec 的组合(未试,查分额度用尽)。
知识来源
未使用任何保留阶段/基因型信息;σ_late 只来自视图内输入阶段 B 的现场计算。方法为纯统计 (按型二阶矩匹配),无外部生物学先验。
调研员的计划
| 名称 | 按型方差自适应扩展替代统一α=−0.10 |
|---|---|
| 动机 | 父18统一α=−0.10扩展使ls+1.52但ec−0.72(59.96),cell_state 57.99仍为最弱组。ANALYSIS指出'型内表达离散扩展以0.7~1.5分代价压低ec',原因是统一α对已有充足离散的型过度扩展、对离散不足的型扩展不够。node 17证明收缩型内离散致cs崩塌(56→30),说明离散方向正确但幅度需按型调节。 |
| 做法 | 在父18代码的blend步骤中,将全局BLEND_ALPHA=−0.10替换为按型计算的α_T:(1)对每型T,计算供体池表达RMS标准差σ_donor(T)(配对后、blend前)和晚阶段(B侧)同型细胞RMS标准差σ_late(T);(2)计算方差赤字d(T)=max(0, σ_late(T)/σ_donor(T)−1);(3)α_T=−min(d(T)·GAMMA, ALPHA_MAX),GAMMA初值1.0、搜索{0.5,1.0,2.0},ALPHA_MAX初值0.15、搜索{0.10,0.15,0.20};(4)细胞数<BLEND_MIN_CELLS(=5)的型跳过(保持父18逻辑);(5)B-only型σ_late=σ_donor(无赤字,α=0);单阶段退路:无晚阶段数据时d(T)=0、全部α=0,等价跳过blend。vec-score筛选:先seed 0跑GAMMA×ALPHA_MAX共9组,取榜分前2组再seed 1复核方向;若所有组合≤父18−1则回退。查分预算≤14次(9+2复核+3余量)。 |
| 风险 | 1) 晚阶段σ_late估计不稳(小样本型),导致α_T噪声大→用BLEND_MIN_CELLS=5过滤+对d(T)做winsorize(cap at 2.0);2) 大部分型σ_donor已≥σ_late(nn配对未压缩离散),则α≈0、机制无效→Engineer先打印d(T)分布,若>80%型d=0则直接回退;3) 净增益仍在噪声(~1分)内→必须seed 0+1双查分确认方向一致;4) 30分钟时限:代码改动仅~30行(替换标量α为向量α_T),无新依赖。 |
代码改动?这个节点的程序和父节点程序的逐行差别:绿色是新增,红色是删除。
对比:父节点版本 015eddc189。改动的文件:solution/METHOD.md +41 −64、solution/run.py +46 −8
diff --git a/solution/METHOD.md b/solution/METHOD.mdindex 588ffe1..cbd8a8d 100644--- a/solution/METHOD.md+++ b/solution/METHOD.md@@ -1,77 +1,54 @@-父12解耦基座上,nn 配对后将每个细胞表达沿 (供体−时间插值型心) 移动 α=−0.10(背离型心扩展型内离散);PLAN 的正 α 向型心收缩被代理双向否决。+父18解耦基座上,把统一 blend α=−0.10 换成按型方差自适应 α_T=−min(d(T)·γ, α_max):d(T)=max(0, σ_late(T)/σ_donor(T)−1)(winsorize 2.0),γ=1.0、α_max=0.15,只扩展型内离散不足的型。 -## 方法+## 方法(family T2EI-01,PLAN 的按型方差自适应扩展) -基座与父12完全相同:mix(procrustes3d,scale_damp=0.5)+ 解耦(坐标=父8 tau=0-frac=0.5 均匀分层抽取;表达池=父10 组成插值 ADJ=0;型内对齐帧 nn 配对)。+基座与父 18 完全相同:mix(procrustes3d,scale_damp=0.5)+ 解耦(坐标=均匀分层抽取+frac=0.5;表达池=组成插值 ADJ=0;型内对齐帧 nn 配对)。 -新增机制(family T2EI-01,PLAN 的 blend 旋钮,提交为**符号反转侧**):配对完成、-写出表达之前,对每个输出细胞 i(型 T、供体表达 x_d):+新机制:配对后、写出前,对每型 T 计算+- σ_donor(T):配对后该型输出池的表达 RMS std(blend 前);+- σ_late(T):晚阶段(B 侧)全部同型细胞的表达 RMS std;+- 方差赤字 d(T)=max(0, σ_late/σ_donor−1),winsorize 上限 2.0;+- α_T=−min(d(T)·GAMMA, ALPHA_MAX),GAMMA=1.0、ALPHA_MAX=0.15(提交值,即 PLAN 初值);+- x_out=(1−α_T)·x_d+α_T·μ_T^interp,μ 为型的时间插值型心(同父 18);+- 任一侧该型细胞数 < BLEND_MIN_CELLS(=5) 跳过;B-only / A-only 型 d=0 → α_T=0(无时间方向信息,不扩展);+- 单阶段退路(无括号):走 copy_last 抽样,不 blend;ADAPTIVE_BLEND=0 时全部型统一 α=−0.10,+ 与父 18 逐位一致(uniform 路径的算式、顺序、clip 均未改动;α_T≠0 时执行与父 18 相同的+ `(1−α)x+αμ[None,:]`,浮点运算逐位相同)。 - x_out = (1−α)·x_d + α·μ_T^interp, μ_T^interp = (1−t)·mean_early_T + t·mean_late_T+与 PLAN 的偏离:另实现了 BLEND_BASE(统一扩展底噪 + 赤字增量)作探索,代理上更差,提交 BASE=0(即 PLAN 原式)。 -- μ 用该型在**整个阶段**(非仅池内)的细胞均值,比池均值稳定;-- B-only 型 μ=mean_late_T,A-only 型 μ=mean_early_T(无时间方向修正,只有离散缩放);-- 任一侧该型细胞数 < 5(`BLEND_MIN_CELLS`)则跳过(PLAN 风险条款 2);代理上 0 个型被跳过;-- α>0 = 向型心收缩(PLAN 原文方向);α<0 = 背离型心扩展;blend 后 clip 到 ≥0;-- 单阶段退路(无括号):不 blend,等价 α=0;α=0 时该步整体跳过。+## 机制生效证据(seed 0,代理 E6.75+E8.0→E7.25) -## 与 PLAN 的偏离(如实报告)+- 33 个型全部参与 blend(0 跳过);d_mean=0.080,d=0 的型占 67%(<80%,未触发回退条款);+- 33% 的型 α_T<−0.05(满足 PLAN 证据条款 (a) ≥30%);α_T 均值 −0.044、最小 −0.15(触 cap);+- blend 后型内 RMS std 0.956→0.985:只有赤字型被扩展,充足型不动(父 18 统一扩展到 1.026);+- 差异化:α_T 逐型不同(非全局常数),组成与坐标路径未动(shape_scale 逐位不变 68.53)。 -PLAN 的正 α 扫描 {0.05, 0.10, 0.15, 0.20} 已实现并全部查分:**cell_state 崩塌且单调**-(A 半 proxy,seed 0):+## 查分结果(A 半,seed 0 九宫格 + seed 1 复核,共 15 次) -| α | 榜均 | ec | cs | ss | ls |-|---|---:|---:|---:|---:|---:|-| 0(关闭,=父12 逐位) | 60.88 | 60.83 | 55.87 | 68.53 | 58.30 |-| +0.05 | 57.00 | 60.87 | 41.27 | 68.53 | 57.31 |-| +0.10 | 55.34 | 60.91 | 35.71 | 68.53 | 56.19 |-| +0.15 | 53.81 | 60.22 | 31.53 | 68.53 | 54.97 |-| +0.20 | 52.62 | 60.23 | 28.03 | 68.53 | 53.67 |+| 配置 | board | ec | cs | ls |+|---|---:|---:|---:|---:|+| off=父18(α=−0.10 统一) | 61.22 | 60.06 | 56.62 | 59.67 |+| **γ=1.0, max=0.15(提交)** | **61.25** | 59.92 | **56.77** | 59.78 |+| γ=1.0, max=0.20 | 61.09 | 59.14 | 56.68 | 60.00 |+| γ=2.0, max=0.20 | 61.10 | 59.15 | 56.67 | 60.05 |+| base0.10+γ1.0, max0.25 | 60.33 | 56.91 | 55.79 | 60.09 |+| γ=1.0, max=0.25 | 61.05 | 59.07 | 56.56 | 60.05 |+| seed 1:off / 提交配置 | 60.49 / 60.52 | 58.85/58.74 | 55.49/55.66 | 58.69/58.78 | -向型心收缩 5% 就令 cs −14.6:评分对型内表达离散极度敏感,PLAN 预期(cs↑)方向相反,-触发风险条款,正 α 全否。同一旋钮的**负侧**(扩展型内离散)在 −0.10 处出现净峰:+seed 1 复核方向一致:cs +0.17、ls +0.09、ec −0.11、board +0.03。总分差在噪声(~1)内,+但 cs(PLAN 目标最弱组)与 ls 两个 seed 均为正、ec 损失小于父 18 统一扩展。按 PLAN+条款(无组合 ≤ 父−1,方向一致)提交 γ=1.0/max=0.15。 -| α | 榜均 | ec | cs | ss | ls |-|---|---:|---:|---:|---:|---:|-| −0.05 | 61.07 | 60.20 | 56.44 | 68.53 | 59.12 |-| **−0.10(提交)** | **61.22** | 60.06 | 56.62 | 68.53 | 59.67 |-| −0.15 | 61.00 | 59.12 | 56.38 | 68.53 | 59.95 |-| −0.20 | 60.44 | 57.53 | 55.71 | 68.53 | 59.97 |+## 验证过 / 未验证 -seed 1 复核:关闭 60.40 → α=−0.10 60.49(cs +0.53、ls +1.34、ec −1.53、ss 持平),-组级方向与 seed 0 完全一致。**净增益 +0.34/+0.09(seed 0/1,A 半)在 T2 噪声(~1)内**,-如实报告:这是方向一致但幅度不显著的改进;ec 降幅在 seed 1 超过 PLAN 的 <1 标准。-选 α=−0.10 而非 α=0 的理由:两个 seed 净方向一致、cs/ls 组级增益一致、无护栏风险-(不会低于 copy_last);ss 坐标路完全不动。+- 验证过:确定性(同 seed 两次运行 .X/indices/indptr/obsm 逐位相同);vec-check ok;+ ADAPTIVE_BLEND=0 路径算式与父 18 逐位一致(代码级);9 组 γ×max 网格 + 4 组 base 变体 + seed 1 复核。+- 未验证:真实括号(E7.25+E8.0→E7.75,共有类型更多、d 分布可能不同);GAMMA/max 更细的网格;+ 与 VEC_COMPOS_ADJ 补偿 ec 的组合(未试,查分额度用尽)。 -生物学解读(机制知识,非保留阶段信息):nn 配对从池中拷贝单细胞表达,向插值型心-收缩会抹平真实的型内异质性;负 α 保留并适度放大供体相对该型"典型插值状态"的偏差,-使邻域内表达对比与局部结构(ls)更接近目标。来源:仅通用scRNA 离散度概念,无外部数据。+## 知识来源 -## 机制生效证据(proxy,seed 0)--- blend_cells=5000(全部输出细胞),skipped_types=0;-- 型内表达 RMS std:0.9561 → 1.0255(×1.073 ≈ (1−α)=1.10,差异来自 ≥0 clip),- 正 α 侧精确按 (1−α) 缩放(0.95/0.90/0.85/0.80),代码路径确认生效;-- 四组分相对关闭对照:cs↑(+0.75)、ls↑(+1.37)、ec 微降(−0.77)、ss 逐位不变(坐标未动)。--## 机制关闭对照--`T2_BLEND_ALPHA=0`:输出与父12 逐位一致(np.array_equal 对 .X 与 obsm 验证 True,-seed 0);A 半 60.88(=父12 记录的 60.88)。开启(−0.10)61.22,差 +0.34。--## 已验证 / 未验证--- 已验证:proxy seed 0/1 跑通(~1.3s,<0.4GB)、vec-check ok、同 seed 逐位确定、- 代码默认值(BLEND_ALPHA=−0.10)与环境变量运行逐位一致;仅依赖视图内数据与相对- 时间差 t,时间平移/路径无关;单阶段退路不触发 blend。-- 未验证:真实 final 视图(括号 E7.25↔E8.0、共有类型 11、n=5000,型心更稳定,- 预期行为相同);B 半分数;净增益是否在噪声之上(A 半两 seed 均 +0.1~0.3)。-- 查分消耗:16/20。--## 参数--`PARAMS={"align":"procrustes3d","scale_damp":0.5}`;`DECOUPLE=True`、`COMPOS_ADJ=0.0`、-`T_DRAW_FRAC=0.5`、`VEC_PAIR=nn`、**`BLEND_ALPHA=−0.10`**、`BLEND_MIN_CELLS=5`-(环境变量 T2_BLEND_ALPHA 仅本地测试用,默认值即提交配置)。+未使用任何保留阶段/基因型信息;σ_late 只来自视图内输入阶段 B 的现场计算。方法为纯统计+(按型二阶矩匹配),无外部生物学先验。diff --git a/solution/run.py b/solution/run.pyindex a054575..9cd8855 100644--- a/solution/run.py+++ b/solution/run.py@@ -63,6 +63,10 @@ COMPOS_ADJ = 0.0 # later-stage share of a shared type's expression quota: t * C T_DRAW_FRAC = 0.5 # coordinate-path later-stage fraction BLEND_ALPHA = -0.10 # expand donor expression away from the time-interpolated type centroid (T2EI-01, sign-flipped; positive alpha rejected on proxy) BLEND_MIN_CELLS = 5 # skip the blend for types measured on fewer cells (unstable mean)+ADAPTIVE_BLEND = True # per-type variance-deficit alpha (T2EI-01); ADAPTIVE_BLEND=0 -> uniform BLEND_ALPHA (node 18, bit-identical)+BLEND_GAMMA = 1.0 # alpha_T = -min(d(T)*GAMMA, ALPHA_MAX)+BLEND_ALPHA_MAX = 0.15 # cap on per-type expansion magnitude+BLEND_BASE = 0.0 # uniform expansion floor applied to every blended type before the deficit term def _compos_mix(labels_a, labels_b, tt: float, n: int, rng: np.random.Generator, adj: float, diag: dict | None = None):@@ -179,7 +183,9 @@ def _uniform_mix(labels_a, labels_b, tt, n: int, frac: float, rng: np.random.Gen def _decoupled_expr(stage_a, stage_b, ia, ib, tt: float, adj: float, rng: np.random.Generator, diag: dict,- ca=None, cb=None, pair: str = "order", alpha: float = 0.0, min_cells: int = 5):+ ca=None, cb=None, pair: str = "order", alpha: float = 0.0, min_cells: int = 5,+ adaptive: bool = False, gamma: float = 1.0, alpha_max: float = 0.15, d_cap: float = 2.0,+ base: float = 0.0): """Rebuild the expression matrix: per-type pools from _compos_mix(adj), paired with the coordinate-path cells of the same type. @@ -271,8 +277,9 @@ def _decoupled_expr(stage_a, stage_b, ia, ib, tt: float, adj: float, rng: np.ran if mB.any(): expr[mB] = as_dense(stage_b.X, idx[mB]).astype(np.float32) np.clip(expr, 0.0, None, out=expr)- if alpha != 0.0:- blend_pos, blend_mu, skipped, std_pre_vals = [], [], 0, []+ if alpha != 0.0 or adaptive:+ blend_pos, blend_mu, blend_at, skipped, std_pre_vals = [], [], [], 0, []+ d_vals = [] for T in np.unique(coord_types): rowsA = np.flatnonzero(la == T) rowsB = np.flatnonzero(lb == T)@@ -298,13 +305,31 @@ def _decoupled_expr(stage_a, stage_b, ia, ib, tt: float, adj: float, rng: np.ran continue pos = np.flatnonzero(coord_types == T) bl = expr[pos]+ a_t = float(alpha) if bl.shape[0] > 1:- std_pre_vals.append(float(np.sqrt(np.mean((bl - bl.mean(axis=0)) ** 2))))+ sd = float(np.sqrt(np.mean((bl - bl.mean(axis=0)) ** 2)))+ std_pre_vals.append(sd)+ else:+ sd = 0.0+ if adaptive:+ # per-type variance deficit: expand only types whose donor pool+ # dispersion falls short of the late-stage same-type dispersion+ d = 0.0+ if rowsA.size and rowsB.size >= int(min_cells) and sd > 0.0:+ Xb = as_dense(stage_b.X[rowsB]).astype(np.float64)+ sl = float(np.sqrt(np.mean((Xb - Xb.mean(axis=0)) ** 2)))+ d = min(max(sl / sd - 1.0, 0.0), float(d_cap))+ d_vals.append(d)+ a_t = -min(float(base) + d * float(gamma), float(alpha_max)) blend_pos.append(pos) blend_mu.append(np.asarray(mu, dtype=np.float32))+ blend_at.append(a_t) n_blend = 0- for pos, mu in zip(blend_pos, blend_mu):- expr[pos] = (1.0 - float(alpha)) * expr[pos] + float(alpha) * mu[None, :]+ for pos, mu, a_t in zip(blend_pos, blend_mu, blend_at):+ if a_t == 0.0:+ n_blend += int(len(pos))+ continue+ expr[pos] = (1.0 - float(a_t)) * expr[pos] + float(a_t) * mu[None, :] n_blend += int(len(pos)) np.clip(expr, 0.0, None, out=expr) std_post_vals = []@@ -313,10 +338,18 @@ def _decoupled_expr(stage_a, stage_b, ia, ib, tt: float, adj: float, rng: np.ran if bl.shape[0] > 1: std_post_vals.append(float(np.sqrt(np.mean((bl - bl.mean(axis=0)) ** 2)))) diag["blend_alpha"] = float(alpha)+ diag["blend_adaptive"] = bool(adaptive) diag["blend_cells"] = n_blend diag["blend_skipped_types"] = skipped diag["blend_std_pre"] = float(np.mean(std_pre_vals)) if std_pre_vals else 0.0 diag["blend_std_post"] = float(np.mean(std_post_vals)) if std_post_vals else 0.0+ if adaptive and d_vals:+ at_arr = np.asarray(blend_at, dtype=np.float64)+ diag["d_mean"] = float(np.mean(d_vals))+ diag["d_frac_zero"] = float(np.mean(np.asarray(d_vals) == 0.0))+ diag["alpha_t_mean"] = float(at_arr.mean())+ diag["alpha_t_min"] = float(at_arr.min())+ diag["alpha_t_frac_lt_m005"] = float(np.mean(at_arr < -0.05)) diag["expr_from_b"] = int(mB.sum()) diag["coord_from_b"] = int(len(ib)) diag["fill_late"] = int(fill_late)@@ -337,6 +370,10 @@ def main() -> None: adj = float(os.environ.get("VEC_COMPOS_ADJ", COMPOS_ADJ)) t_draw_frac = float(os.environ.get("VEC_T_DRAW_FRAC", T_DRAW_FRAC)) blend_alpha = float(os.environ.get("T2_BLEND_ALPHA", BLEND_ALPHA))+ adaptive = os.environ.get("ADAPTIVE_BLEND", "1" if ADAPTIVE_BLEND else "0") not in ("0", "", "false")+ gamma = float(os.environ.get("BLEND_GAMMA", BLEND_GAMMA))+ alpha_max = float(os.environ.get("BLEND_ALPHA_MAX", BLEND_ALPHA_MAX))+ base = float(os.environ.get("BLEND_BASE", BLEND_BASE)) manifest = load_manifest(args.data) genes = panel_genes(args.data, manifest)@@ -351,7 +388,7 @@ def main() -> None: stage_b = read_stage(args.data, b, genes) params = board_params(manifest, "mix", PARAMS, args.seed) - diag: dict = {"decouple": bool(decouple), "compos_only": bool(compos_only), "adj": adj, "t_draw_frac": t_draw_frac, "blend_alpha": blend_alpha}+ diag: dict = {"decouple": bool(decouple), "compos_only": bool(compos_only), "adj": adj, "t_draw_frac": t_draw_frac, "blend_alpha": blend_alpha, "adaptive": adaptive, "gamma": gamma, "alpha_max": alpha_max} holder: dict = {} orig_mix = methods_mod.mix_indices @@ -385,7 +422,8 @@ def main() -> None: cb = scale_to_rms(aligned_b, target_rms) rng_e = np.random.default_rng([int(args.seed), 20261003]) expr = _decoupled_expr(stage_a, stage_b, holder["ia"], holder["ib"], t, adj, rng_e, diag, ca=ca, cb=cb,- pair=pair, alpha=blend_alpha, min_cells=BLEND_MIN_CELLS)+ pair=pair, alpha=blend_alpha, min_cells=BLEND_MIN_CELLS,+ adaptive=adaptive, gamma=gamma, alpha_max=alpha_max, base=base) diag["pair"] = pair keep = {k: info.get(k) for k in ("t", "n", "rms_a", "rms_b", "out_rms", "n_shared_types", "z_dot", "z_flipped", "align")}
调研来源?调研员查到并用到的知识条目和文献检索结果(只列标题和编号)。
用到的知识库条目
| 编号 | 标题 | 出处 |
|---|---|---|
| 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 |
| k008 | Navigo: iterative rectified flow matching on snapshot time series | 10.64898/2026.06.18.733286 |
分析结果?分析员写的 ANALYSIS.json:改了什么、各组分数怎么变、假设是否成立、经验和下一步建议。
| 改了什么 | 在父18的blend步骤把统一α=−0.10替换为按型方差自适应α_T=−min(d(T)·γ, α_max)(d=供体池vs晚阶段离散赤字,winsorize 2.0),提交γ=1.0、α_max=0.15、BASE=0;ADAPTIVE_BLEND=0回退到父18逐位一致路径。 |
|---|---|
| 各组分数的变化 | cell_state:噪声内,+0.16(57.99→58.15) expression_change:噪声内,−0.17(59.96→59.79),PLAN预期的ec≥60.5未达成 local_spatial:噪声内,+0.07(60.84→60.91) shape_scale:不变,+0.00(69.09→69.09,坐标路径未动) |
| family_id | T2EI-01 |
| 假设是否成立 | unclear |
| 经验 |
|
| mechanism_active | 是 |
| 下一步建议 |
|
对话摘要?每个角色和大模型对话的统计:轮数、工具调用、用时、token 数和最后的回答摘录;原始记录只给路径。
只给统计和最后回答的摘录;完整对话请到原始记录位置里列出的文件看。
分析员
| 角色?调研员写计划、工程师改代码、分析员解读分数、审查员检查作弊。 | 分析员 alibaba-token-plan-cn/qwen3.8-max |
|---|---|
| 调用次数 | 1 次 |
| 轮数?大模型一共回复了几轮(每轮可以调用多个工具)。 | 3 |
| 工具调用?大模型调用读文件、执行命令等工具的次数,按工具名统计。 | 共 2 次:bash 1、write 1 |
| 用时 | 不到 1 分 |
| token 数?输入 / 输出(含思考)的 token 数,来自接口返回的用量。 | 输入 12,298 · 输出 847 · 思考 1,478 |
| 任务(第一行) | 分析节点 n20 的打分结果,写 ANALYSIS.json |
| 最后的回答(摘录) | ANALYSIS.json written |
| 原始记录位置?完整对话记录在 Spark 上的文件路径;看板不复制原始内容。 | /home/spark-longxinyang/vec/runs/formal/20261003-004922-search-t2-embryo-interp-g24/nodes/20/analyst.jsonl 6 KB /home/spark-longxinyang/vec/runs/formal/20261003-004922-search-t2-embryo-interp-g24/nodes/20/analyst.stderr |
工程师
| 角色 | 工程师 alibaba-token-plan-cn/qwen3.8-max |
|---|---|
| 调用次数 | 1 次 |
| 轮数 | 25 |
| 工具调用 | 共 29 次:bash 15、edit 12、read 1、write 1 |
| 用时 | 13 分 |
| token 数 | 输入 55,976 · 输出 8,495 · 思考 8,488 |
| 任务(第一行) | 按计划修改程序:按型方差自适应扩展替代统一α=−0.10 |
| 最后的回答(摘录) | 完成。做了什么:在父 18 基座上把统一 blend α=−0.10 替换为 PLAN 的按型方差自适应 α_T=−min(d(T)·γ, α_max)(d=型内供体池 vs 晚阶段的离散赤字,winsorize 2.0),提交 γ=1.0、α_max=0.15、BASE=0;ADAPTIVE_BLEND=0 关闭对照与父 18 逐位一致。 查分(15/20 次):提交配置 seed 0 board 61.25 vs off 61.22;seed 1 复核 60.52 vs 60.49,方向一致——cs +0.17、ls +0.09、ec −0.11,机制证据达标(33% 型 α_T<−0.05,d_frac_zero=0.67)。base 变体与更强扩展(max≥0.20)均更差。总分差在噪声内,靠组间一致性提交。 下一步最值得试:(1) 在提交配置上叠加 VEC_COMPOS_ADJ 0.1~0.2 补偿 ec;(2) 对 d=0 的充足型试小正 α(轻收缩)而非 0,检验 cs/ec 权衡;(3) 真实括号上共有类型更多,d 分布可能不同,值得在 X 尺子上验证迁移性。 |
| 原始记录位置 | /home/spark-longxinyang/vec/runs/formal/20261003-004922-search-t2-embryo-interp-g24/nodes/20/engineer.jsonl 151 KB /home/spark-longxinyang/vec/runs/formal/20261003-004922-search-t2-embryo-interp-g24/nodes/20/engineer.stderr |
调研员
| 角色 | 调研员 alibaba-token-plan-cn/qwen3.8-max |
|---|---|
| 调用次数 | 1 次 |
| 轮数 | 1 |
| 工具调用 | 共 0 次:— |
| 用时 | 2 分 |
| token 数 | 输入 13,240 · 输出 1,022 · 思考 4,406 |
| 任务(第一行) | 为节点 n20(改进,父节点 n18)写改进计划 PLAN.json |
| 最后的回答(摘录) | ```json
{
"name": "按型方差自适应扩展替代统一α=−0.10",
"motivation": "父18统一α=−0.10扩展使ls+1.52但ec−0.72(59.96),cell_state 57.99仍为最弱组。ANALYSIS指出'型内表达离散扩展以0.7~1.5分代价压低ec',原因是统一α对已有充足离散的型过度扩展、对离散不足的型扩展不够。node 17证明收缩型内离散致cs崩塌(56→30),说明离散方向正确但幅度需按型调节。",
"approach": "在父18代码的blend步骤中,将全局BLEND_ALPHA=−0.10替换为按型计算的α_T:(1)对每型T,计算供体池表达RMS标准差σ_donor(T)(配对后、blend前)和晚阶段(B侧)同型细胞RMS标准差σ_late(T);(2)计算方差赤字d(T)=max(0, σ_late(T)/σ_donor(T)−1);(3)α_T=−min(d(T)·GAMMA, ALPHA_MAX),GAMMA初值1.0、搜索{0.5,1.0,2.0},ALPHA_MAX初值0.15、搜索{0.10,0.15,0.20};(4)细胞数<BLEND_MIN_CELLS(=5)的型跳过(保持父18逻辑);(5)B-only型σ_late=σ_donor(无赤字,α=0);单阶段退路:无晚阶段数据时d(T)=0、全部α=0,等价跳过blend。vec-score筛选:先seed 0跑GAMMA×ALPHA_MAX共9组,取榜分前2组再seed 1复核方向;若所有组合≤父18−1则回退。查分预算≤14次(9+2复核+3余量)。",
"expected_groups": ["cell_state", "expression_change"],
"risks": "1) 晚阶段σ_late估计不稳(小样本型),导致α_T噪声大→用BLEND_MIN_CELLS=5过滤+对d(T)做winsorize(cap at 2.0);2) 大部分型σ_donor已≥σ_late(nn配对未压缩离散),则α≈0、机制无效→Engineer先打印d(T)分布,若>80%型d=0则直接回退;3) 净增益仍在噪声(~1分)内→必须seed 0+1双查分确认方向一致;4) 30分钟时限:代码改动仅~30行(替换标量α为向量α_T),无新依赖。",
"family_id": "T2EI-01",
"mechanism": "按型计算供体池与晚阶段的表达离散比值(方差赤字),仅对离散不足的型施加背离型心扩展,幅度与赤字成正比,避免对已充足型的过度扩展。",
"vs_constant_shift": "常数位移对所有细胞加同一向量,不改变型内离散结构;本机制按型测量方差赤字、只扩展不足型、幅度与赤字成比例,型间和型内离散谱被差异化调整。全局组成重加权改的是型间比例,本机制不改比例、只改型内表达分布的展幅。",
"mechanism_evidence": "Engineer打印每型的d(T)、α_T、σ_donor、σ_late(写入diag),并验证:(a)至少30%型α_T<−0.05(机制有区分度);(b)blend后型内RMS std按型与σ_late的比值更接近1(相比父18的统一比值);(c)四组分中ec≥父18(不再被过度扩展压低)且cs≥父18。若所有型α_T=0,机制未生效,回退。",
"mechanism_off_control": "环境变量ADAPTIVE_BLEND=0时,所有型统一使用BLEND_ALPHA=−0.10(父18默认),输出与父18逐位一致(np.array_equal验证.X与obsm)。预期差别:关闭后ec回到~59.96、cs~57.99;开启后ec应≥60.5、cs应≥58.0。"
}
``` |
| 原始记录位置 | /home/spark-longxinyang/vec/runs/formal/20261003-004922-search-t2-embryo-interp-g24/nodes/20/researcher.jsonl 4 KB /home/spark-longxinyang/vec/runs/formal/20261003-004922-search-t2-embryo-interp-g24/nodes/20/researcher.stderr |
审查员
| 角色 | 审查员 alibaba-token-plan-cn/qwen3.8-max |
|---|---|
| 调用次数 | 1 次 |
| 轮数 | 9 |
| 工具调用 | 共 13 次:read 7、bash 5、write 1 |
| 用时 | 1 分 |
| token 数 | 输入 26,268 · 输出 1,814 · 思考 3,794 |
| 任务(第一行) | 审查节点 n20 的程序是否越界读取、写死目标、钻评分器漏洞 |
| 最后的回答(摘录) | REVIEW.json written |
| 原始记录位置 | /home/spark-longxinyang/vec/runs/formal/20261003-004922-search-t2-embryo-interp-g24/nodes/20/reviewer.jsonl 110 KB /home/spark-longxinyang/vec/runs/formal/20261003-004922-search-t2-embryo-interp-g24/nodes/20/reviewer.stderr |