总览 · ← 返回运行 20261003-004922-search-t2-embryo-interp-g24
节点 n19 在终选来历上
实现联合距离 softmax 供体抽样(d_coord+λ·d_expr,σ=型内第K近距中位数);代理 8 档全败于父14 均匀抽样(60.46–60.97 vs 61.14),按放弃条款提交 λ=0,逐位=父14。
| 运行?一次完整的自动搜索或 Agent 会话,有自己的锁定配置和证据包。 | 20261003-004922-search-t2-embryo-interp-g24 |
|---|---|
| 父节点 | n17 |
| 子节点 | n21 |
| 操作?种子:人写的起点;改进:在父节点上改;草稿:从头写;修复:修父节点的报错。 | 改进 |
| 状态 | 已打分 |
| 分数 | 搜索目标分 61.73(+0.0) · proxy 61.73(+0.0) · 3 次复测均分 61.14 |
| 审查 | 通过 检查1(越界读取):未发现问题——run.py 仅通过 src.task2_spatial.view_io 的 load_manifest/read_stage/panel_genes/interp_bracket(run.py:406-416)读取 manifest['inputs'] 给的阶段文件,无绝对路径、无 ..、无 /mnt//home/data/raw/downloads、无网络访问,也不读目标阶段文件。; 检查2(硬编码目标统计量):未发现问题——常量只有算法超参(PARAMS scale_damp=0.5、T_DRAW_FRAC=0.5、COMPOS_ADJ=0、MIX_R… |
| 用时?从运行开始到结束(或到现在)的挂钟时间。 | 17 分 |
| 程序版本 | 1c1a760995ceb83eb56baac44fea292ca9e3ee9c (programs.git) |
方法说明?节点程序自带的 METHOD.md:这个程序做了什么、为什么。
来自 programs.git 1c1a760995:solution/METHOD.md
实现联合距离 softmax 供体抽样(d_coord+λ·d_expr,σ=型内第K近距中位数);代理 8 档全败于父14 均匀抽样(60.46–60.97 vs 61.14),按放弃条款提交 λ=0,逐位=父14。
方法族与实现的机制
family T2EI-01(型内配对规则),父14(randK3,A半 61.14 / B半 61.73)基座。按 PLAN
在 MIX 配对循环内把 rng.integers(0,K)(均匀抽 K=3 近供体之一)改为按联合距离的
softmax 加权抽样:p ∝ exp(-(d_coord + λ·d_expr)/σ)。
d_coord:对齐+缩放帧内坐标细胞到各近邻供体的欧氏距离(cKDTree,同一 K 近邻集合);d_expr:坐标细胞自身表达向量到供体表达向量的欧氏距离(498 基因 log1p 空间,λ=0 时关闭);σ = SMX_SIGMA · median(该型坐标细胞到第 K 近供体的 d_coord),逐型计算,不逐细胞调参;- 抽样用逆变换(
u~U(0,1)对比 cumsum),给定 seed 完全确定; - 坐标路、组成插值池(ADJ=0)、补齐规则一律未动 → shape_scale 逐位不变(69.09/68.53)。
不是常数位移、也不是均值平滑:每个坐标细胞独立计算近邻集合与概率分布,输出表达仍是 被抽中真实供体的原始向量(逐位复制),型内方差由抽样天然保持。
机制生效证据(proxy,seed 0,A 半)
- 有效供体数
1/Σp²(护栏 >1.8):λ=0.5→2.38、λ=1→2.18、λ=2→1.97、λ=4→1.81、λ=8→1.63(仅 λ=8 违例); 纯空间 σ=0.5→2.19。介于 1 与 3 之间、逐细胞不同 → 机制确实触发且未退化为确定性 1-NN。 - 型内 SD 收缩率(护栏 <10%,父17 教训):逐基因 SD 均值相对父14 的比值 0.981–0.996, 收缩 <2% → 与父17 均值机制(0.693)本质不同,方差保持。
- 逐位差异:66.7–67.2% 细胞表达与父14 不同(
frac_donors_changed0.29–0.45 为相对 1-NN 基底的改动率),逐细胞异质。
扫描结果(A 半,seed 0)——机制净负
| 配置 | 榜分 | ec | cs | ss | ls |
|---|---|---|---|---|---|
| 父14(均匀 randK3,SOFTMAX=0) | 61.14 | 61.55 | 56.49 | 68.53 | 57.97 |
| λ=0.5(联合距离) | 60.83 | 61.02 | 56.33 | 68.53 | 57.43 |
| λ=1 | 60.84 | 61.15 | 56.24 | 68.53 | 57.43 |
| λ=2 | 60.71 | 60.98 | 56.18 | 68.53 | 57.13 |
| λ=4 | 60.46 | 60.24 | 56.06 | 68.53 | 56.99 |
| λ=8 | 60.64 | 60.88 | 56.07 | 68.53 | 57.06 |
| 纯空间 λ=0,σ=0.5×median | 60.88 | 61.18 | 55.86 | 68.53 | 57.94 |
| 纯空间 σ=1× | 60.71 | 60.98 | 55.74 | 68.53 | 57.57 |
| 纯空间 σ=2× | 60.97 | 61.80 | 56.07 | 68.53 | 57.49 |
8 档全部低于基线 0.17–0.68 分,且 cs 一律下降(哪怕 ESS 仍高达 2.4)、ls 没有回收 (唯一持平的是纯空间 σ=0.5 的 57.94≈57.97,但 cs 掉 0.63)。触发 PLAN 步骤3/4 放弃条款: 无候选在 seed 0 超基线 → 不做三 seed 配对检验,直接提交 λ=0。σ→∞ 时 softmax→均匀=父14, 分数从下方单调逼近 61.14,说明该族在此方向无头部空间。
机制关闭对照
SOFTMAX=0(提交默认):保留父14 的 rng.integers(0,K) 原路径(RNG 流不变),已验证
seed 0 输出与父14 逐位一致(X 与 spatial_3D np.array_equal=True),榜分 61.14(A半,
本次实测,与父17 记录一致)。λ=0 且 SOFTMAX=1 时退化为纯空间加权(非均匀),不等于对照,
故对照用 SOFTMAX 开关而非 λ=0。
结论与教训
- 均匀 randK3 是供体选择熵的局部最优:任何朝近邻的距离偏置(空间或表达、软或硬)都同时 损失 cs 与(多数情况下)ls。cs 对供体熵极其敏感——ESS 从 3.0 降到 2.4 就掉 0.15–0.6 分, 与父17(均值→熵 1)崩塌方向一致,是同一条"供体多样性"轴的温和端。
- ls 由坐标路几何主导(本次坐标路未动,ls 只在 57.0–57.97 间随供体偏置波动),供体加权 不是回收 ls 的杠杆;节点12 的 1-NN ls=59.32 说明 ls 要的是"最近供体",但那必牺牲 cs。 ec/cs/ls 在配对规则族内是三角互斥,后续应改表达池本身(父17 建议 #2)或坐标路几何。
- 带放弃条款+逐位对照的模式再次零成本回退(连续第三个节点验证有效)。
已验证 / 未验证
- 已验证:proxy seed 0/1 跑通;同 seed 逐位确定、seed1≠seed0;默认输出逐位=父14;
vec-checkok;伪装视图一致性(全部时间 +1 天、输入文件改名、manifest 键序打乱、 路径更换后 seed 0 输出 X 与坐标逐位一致);护栏两件套(ESS、SD 收缩)先算后查分; 单输入阶段 fallback 路径未触碰(softmax 支路只在双阶段解耦配对内)。 - 未验证:B 半分数(提交逐位=父14,预期 61.73±0);真实 final 视图(机制已否决,未再测)。
- 生物学知识来源:无新增;仅复用视图内 celltype 标签与帧内几何。
- 查分用量:9/20(λ 扫描 5 + 纯空间 3 + 基线确认 1)。
调研员的计划
| 名称 | 空间-表达联合距离加权供体抽样(父14 randK3 的保方差加权版) |
|---|---|
| 动机 | 父17 确认均值类平滑必崩(型内 SD 收缩 −30.7% → cs 56.5→20-30),父14(randK3,A半 61.14 / B半 61.73)是当前最优但 ec/cs/ls 全部在噪声内互相拉扯:节点12(K=1 最近邻)ls=59.32 但 cs=57.12、ec=60.68;节点14(K=3 均匀随机)cs=57.70、ec=61.44 但 ls 降到 58.69(mmd_u 0.055)。说明 K=3 的均匀随机抽样牺牲了局部空间耦合换取供体多样性。ANALYSIS next_suggestion #1 明确建议保方差的局部供体扰动。本方案在 randK3 上把均匀随机改为按空间+表达联合距离的软加权随机抽样:仍从真实供体中抽样(方差天然保持),但近邻供体被抽中概率更高,预期在保住 cs(K=3 多样性)的同时把 ls 拉回接近节点12 水平。 |
| 做法 | 步骤:1) 在父14 的 MIX 配对循环内,把 rng.choice(K, uniform) 改为 rng.choice(K, p=softmax(-d_comb/σ)),其中 d_comb = d_coord + λ·d_expr,两者均为对齐+缩放帧内的欧氏距离,σ 固定为该型坐标细胞到其第 K 近供体距离的中位数(避免逐细胞调参)。λ=0 即父14。2) 护栏(先算再查分):逐基因型内 SD 收缩率必须 <10%(父17 教训:>30% 即否决);有效供体数 1/Σp² 必须 >1.8(防止退化为确定性最近邻)。3) seed 0 快速扫 λ∈{0.5,1,2,4,8}(vec-score 每次约 1-2 s,30 min 足够);若全部 λ≤0 的榜分,退回尝试 suggestion #1 的纯空间加权(λ 固定=1 只加空间项)扫 σ∈{0.5,1,2}×中位数。4) 选 seed 0 榜分最高的 λ,再跑 seed 1/2,做同 seed 配对差值:要求榜分均值差 >0.3 且三 seed 同号(ANALYSIS 教训:单次 A 半不可靠,父14 的 +0.26 在 B 半缩为 0)。若 |差|<0.3 或符号不一致,按失败条款提交 λ=0(逐位=父14)。5) 单阶段退路:本机制只在双阶段解耦配对路径内生效;单输入阶段时走种子原有 fallback,机制自然不触发。6) 提交前跑 vec-check 与伪装视图一致性(机制只依赖帧内距离,不读 manifest 路径,天然 view-independent)。 |
| 风险 | 1) λ 过大 → 退化为确定性 1-NN(节点12 已证 1-NN 的 ls 好但 ec 低),用有效供体数 >1.8 护栏尽早发现;2) 表达距离在稀疏高维空间噪声大,加权可能无效甚至略负——若 seed 0 全部 λ 不超父,立即切纯空间加权备选,不恋战;3) 增益可能 <T2 噪声(~1 分):严格执行三 seed 同号 + |均值差|>0.3 才提交,否则零成本回退;4) 30 min 时限:实现只改配对循环一处(约 15 行),扫描用 seed 0 单跑,控制查分 ≤12 次。 |
代码改动?这个节点的程序和父节点程序的逐行差别:绿色是新增,红色是删除。
对比:父节点版本 1d420b6e54。改动的文件:solution/METHOD.md +55 −53、solution/run.py +58 −10
diff --git a/solution/METHOD.md b/solution/METHOD.mdindex 3f6a86e..fc82837 100644--- a/solution/METHOD.md+++ b/solution/METHOD.md@@ -1,68 +1,70 @@-实现 PLAN 的 K 近邻供体均值配对:均值使型内 SD 收缩到父14 的 69%、cell_state 从 56 崩到 30,触发放弃条款,回退父14(MEAN_K=0,逐位一致)。+实现联合距离 softmax 供体抽样(d_coord+λ·d_expr,σ=型内第K近距中位数);代理 8 档全败于父14 均匀抽样(60.46–60.97 vs 61.14),按放弃条款提交 λ=0,逐位=父14。 ## 方法族与实现的机制 -family **T2EI-01**(型内配对规则)。按 PLAN 在父14 代码里新增 `mean_k` 支路:-对每个坐标细胞,在对齐+缩放帧内取同型池的 `MEAN_K` 个最近供体,用它们表达向量的-**算术均值**作为该细胞的表达(不再从 K 近邻里随机抽一个供体)。`MIX_R=1.0`(全部-坐标细胞走此路径),`MEAN_K` 由 `VEC_MEAN_K` 控制,默认 0(=父14 随机路径)。-坐标路、组成插值池(ADJ=0)、补齐规则一律未动,故 shape_scale 逐位不变。+family **T2EI-01**(型内配对规则),父14(randK3,A半 61.14 / B半 61.73)基座。按 PLAN+在 MIX 配对循环内把 `rng.integers(0,K)`(均匀抽 K=3 近供体之一)改为按联合距离的+softmax 加权抽样:`p ∝ exp(-(d_coord + λ·d_expr)/σ)`。 -这不是常数位移:均值对每个坐标细胞独立计算(各自 K 近邻集合不同),表达修改是-空间异质、逐细胞不同的;验证见下(frac cells changed vs 父14 = 1.0,即全部细胞-表达都被改写,且逐型不同)。+- `d_coord`:对齐+缩放帧内坐标细胞到各近邻供体的欧氏距离(cKDTree,同一 K 近邻集合);+- `d_expr`:坐标细胞自身表达向量到供体表达向量的欧氏距离(498 基因 log1p 空间,λ=0 时关闭);+- `σ = SMX_SIGMA · median(该型坐标细胞到第 K 近供体的 d_coord)`,逐型计算,不逐细胞调参;+- 抽样用逆变换(`u~U(0,1)` 对比 cumsum),给定 seed 完全确定;+- 坐标路、组成插值池(ADJ=0)、补齐规则一律未动 → shape_scale 逐位不变(69.09/68.53)。 -## 机制生效证据(proxy,seed 0,A 半)--- **供体集合大小 = MEAN_K**:诊断 `mean_k_avg` 实测 3.0 / 5.0 / 7.0(未退化为 1),- `n_mean_cells=5000`(全部细胞走均值路径)。-- **型内表达 SD(过度平滑诊断)**:逐基因 SD 均值 p12(1nn)=0.7741、p14(randK3)=0.7710、- **mean3=0.5340**。mean3/p14 = **0.693**(SD 收缩 −30.7%),超过 PLAN 风险#1 的- 30% 过度平滑阈值 → 确认均值把型内所有细胞拉向型均值。-- **逐位与父14 不同**:`frac cells changed mean3 vs p14 = 1.0`,每型表达均值也被改写- (非退化到位移),符合"逐细胞空间异质修改"。--## 扫描结果(A 半,seed 0)——机制失败+**不是常数位移、也不是均值平滑**:每个坐标细胞独立计算近邻集合与概率分布,输出表达仍是+被抽中真实供体的原始向量(逐位复制),型内方差由抽样天然保持。 -| 配置 | 榜分 | ec | cs | ss | ls | mmd_u |-|---|---:|---:|---:|---:|---:|---:|-| 父14(randK3,A半) | 61.14 | 61.55 | 56.49 | 68.53 | 57.97 | 0.055 |-| **MEAN_K=3** | 53.70 | 61.51 | **30.25** | 68.53 | 54.52 | 0.041 |-| MEAN_K=5 | 51.54 | 61.44 | 23.47 | 68.53 | 52.74 | 0.055 |-| MEAN_K=7 | 50.65 | 61.70 | 20.58 | 68.53 | 51.78 | 0.063 |+## 机制生效证据(proxy,seed 0,A 半) -均值把 **cell_state 从 56.5 砸到 20–30**(收缩型内方差 → 单细胞分布塌向型均值,-mmd_u 反而降低是因为分布变窄,但细胞"不像真实中间态细胞"),**local_spatial 也更差**-(54.5 < 57.97,均值破坏了表达-空间的局部耦合,neighborhood_mmd 从 0.055 升到 0.064)。-只有 expression_change 微动(±0.1,噪声内)。三档 MEAN_K 全部 ls 无改善、cs 崩塌 →-**触发 PLAN 步骤4 放弃条款**。+- 有效供体数 `1/Σp²`(护栏 >1.8):λ=0.5→2.38、λ=1→2.18、λ=2→1.97、λ=4→1.81、λ=8→1.63(仅 λ=8 违例);+ 纯空间 σ=0.5→2.19。介于 1 与 3 之间、逐细胞不同 → 机制确实触发且未退化为确定性 1-NN。+- 型内 SD 收缩率(护栏 <10%,父17 教训):逐基因 SD 均值相对父14 的比值 0.981–0.996,+ 收缩 <2% → 与父17 均值机制(0.693)本质不同,方差保持。+- 逐位差异:66.7–67.2% 细胞表达与父14 不同(`frac_donors_changed` 0.29–0.45 为相对 1-NN 基底的改动率),逐细胞异质。++## 扫描结果(A 半,seed 0)——机制净负++| 配置 | 榜分 | ec | cs | ss | ls |+|---|---:|---:|---:|---:|---:|+| **父14(均匀 randK3,SOFTMAX=0)** | **61.14** | 61.55 | 56.49 | 68.53 | 57.97 |+| λ=0.5(联合距离) | 60.83 | 61.02 | 56.33 | 68.53 | 57.43 |+| λ=1 | 60.84 | 61.15 | 56.24 | 68.53 | 57.43 |+| λ=2 | 60.71 | 60.98 | 56.18 | 68.53 | 57.13 |+| λ=4 | 60.46 | 60.24 | 56.06 | 68.53 | 56.99 |+| λ=8 | 60.64 | 60.88 | 56.07 | 68.53 | 57.06 |+| 纯空间 λ=0,σ=0.5×median | 60.88 | 61.18 | 55.86 | 68.53 | 57.94 |+| 纯空间 σ=1× | 60.71 | 60.98 | 55.74 | 68.53 | 57.57 |+| 纯空间 σ=2× | 60.97 | 61.80 | 56.07 | 68.53 | 57.49 |++8 档全部低于基线 0.17–0.68 分,且 **cs 一律下降**(哪怕 ESS 仍高达 2.4)、**ls 没有回收**+(唯一持平的是纯空间 σ=0.5 的 57.94≈57.97,但 cs 掉 0.63)。触发 PLAN 步骤3/4 放弃条款:+无候选在 seed 0 超基线 → 不做三 seed 配对检验,直接提交 λ=0。σ→∞ 时 softmax→均匀=父14,+分数从下方单调逼近 61.14,说明该族在此方向无头部空间。 ## 机制关闭对照 -`VEC_MEAN_K=1`:均值退化为单个最近邻供体表达。已验证 seed 0 输出与父12(nn 配对、-MIX_R=0)**逐位一致**(X 与 spatial_3D `np.array_equal`=True)。`VEC_MEAN_K=0`(默认)-走父14 随机 K=3 支路,诊断 `frac_donors_changed=0.6738`、`n_mix_total=5000`、-`mean_k_avg=0`,与父14 完全一致。--## 附带验证(父14 next_suggestion #2)--同时扫描坐标路 `T_DRAW_FRAC`(唯一未动、有独立头部空间的旋钮,决定 ss/ls 几何项),-机制固定为父14(randK3):0.35→59.62、0.55→60.51、0.6→61.02、0.65→60.98,**全部-≤ 父14 的 61.14**。确认 T_DRAW_FRAC=0.5 已是最优,坐标路无头部空间。+`SOFTMAX=0`(提交默认):保留父14 的 `rng.integers(0,K)` 原路径(RNG 流不变),已验证+seed 0 输出与父14 **逐位一致**(X 与 spatial_3D `np.array_equal`=True),榜分 61.14(A半,+本次实测,与父17 记录一致)。λ=0 且 SOFTMAX=1 时退化为纯空间加权(非均匀),不等于对照,+故对照用 SOFTMAX 开关而非 λ=0。 -## 最终提交:回退父14(MEAN_K=0)+## 结论与教训 -PLAN 机制与其备选建议均不胜出,按 PLAN 步骤4 回退。提交配置默认值即父14:-`PARAMS={"align":"procrustes3d","scale_damp":0.5}`、`DECOUPLE=True`、`COMPOS_ADJ=0.0`、-`T_DRAW_FRAC=0.5`、`VEC_PAIR=nn`、`MIX_R=1.0`、`MIX_K=3`、**`MEAN_K=0`**。-默认输出与父14 逐位一致,预期正式分 ≈ 父14(61.73 B 半 / 61.14 A 半)。代码保留-mean_k 支路(默认关闭)供后续节点复用。+1. **均匀 randK3 是供体选择熵的局部最优**:任何朝近邻的距离偏置(空间或表达、软或硬)都同时+ 损失 cs 与(多数情况下)ls。cs 对供体熵极其敏感——ESS 从 3.0 降到 2.4 就掉 0.15–0.6 分,+ 与父17(均值→熵 1)崩塌方向一致,是同一条"供体多样性"轴的温和端。+2. ls 由坐标路几何主导(本次坐标路未动,ls 只在 57.0–57.97 间随供体偏置波动),供体加权+ 不是回收 ls 的杠杆;节点12 的 1-NN ls=59.32 说明 ls 要的是"最近供体",但那必牺牲 cs。+ ec/cs/ls 在配对规则族内是三角互斥,后续应改表达池本身(父17 建议 #2)或坐标路几何。+3. 带放弃条款+逐位对照的模式再次零成本回退(连续第三个节点验证有效)。 ## 已验证 / 未验证 -- 已验证:proxy seed 0/1 跑通、同 seed 逐位确定、seed1≠seed0、vec-check ok、- MEAN_K=1 逐位=父12(关闭对照)、默认逐位=父14;诊断三件套(mean_k_avg、型内SD、- frac_changed)合起来把榜分崩塌归因到"均值过度平滑"这一所声称的机制。-- 未验证:真实 final 视图(E8.5→E9.5,类型更多、n 更大);B 半分数。均值机制在- proxy 上已确认净负,未在 final 上再测(预期同样过度平滑)。-- 生物学知识来源:无新增外部知识;仅复用视图内谱系类型标签。+- 已验证:proxy seed 0/1 跑通;同 seed 逐位确定、seed1≠seed0;默认输出逐位=父14;+ `vec-check` ok;**伪装视图一致性**(全部时间 +1 天、输入文件改名、manifest 键序打乱、+ 路径更换后 seed 0 输出 X 与坐标逐位一致);护栏两件套(ESS、SD 收缩)先算后查分;+ 单输入阶段 fallback 路径未触碰(softmax 支路只在双阶段解耦配对内)。+- 未验证:B 半分数(提交逐位=父14,预期 61.73±0);真实 final 视图(机制已否决,未再测)。+- 生物学知识来源:无新增;仅复用视图内 celltype 标签与帧内几何。+- 查分用量:9/20(λ 扫描 5 + 纯空间 3 + 基线确认 1)。diff --git a/solution/run.py b/solution/run.pyindex ff69051..8ec2f91 100644--- a/solution/run.py+++ b/solution/run.py@@ -26,13 +26,18 @@ from *different* draws, paired within each cell type. Expression values are copied verbatim from the donor cells; coordinates are copied verbatim (after the shared alignment/rescaling) from the coordinate cells.-- Mixed pairing (this node, MIX_R/MIX_K): for round(MIX_R*c_T) coordinate cells+- Mixed pairing (parent 14, MIX_R/MIX_K): for round(MIX_R*c_T) coordinate cells per type, the donor is drawn uniformly at random among the MIX_K spatially- nearest same-type pool donors in the aligned frame (MIX_K=1 with MIX_R>0 is- the fully random pool donor of the original plan). Submitted: MIX_R=1.0,- MIX_K=3 — recovers part of the expression_change diluted by strict 1-nn- pairing while keeping the local spatial coupling (ls loss 0.33 < 1).- MIX_R=0 is the mechanism-off control, bit-identical to parent node 12.+ nearest same-type pool donors in the aligned frame. Submitted: MIX_R=1.0,+ MIX_K=3. MIX_R=0 is the mechanism-off control, bit-identical to parent node 12.+- Softmax-weighted donor pick (this node, SOFTMAX/SMX_LAMBDA/SMX_SIGMA): donor+ choice among the K nearest is drawn with p ∝ exp(-(d_coord + λ·d_expr)/σ),+ σ = SMX_SIGMA · median d_coord to the K-th nearest donor per type, d_expr the+ Euclidean distance between coordinate-cell and donor expression vectors+ (λ=0: spatial-only). SOFTMAX=0 (submitted default) keeps the parent-14+ uniform pick and is bit-identical to it; on the proxy all λ∈{0.5..8} and all+ spatial-only σ∈{0.5,1,2} scored below the uniform baseline (60.46–60.97 vs+ 61.14), so the PLAN failure clause submits SOFTMAX=0. Rationale: parent node 10 showed ADJ=0 compositional interpolation reliably gains expression_change (+2.04) but, because it also changed which cells@@ -70,6 +75,9 @@ T_DRAW_FRAC = 0.5 # coordinate-path later-stage fraction MIX_R = 1.0 # fraction of coordinate cells per type re-paired (0 = off control, bit-identical to parent 12) MIX_K = 3 # 1: donor uniform over the whole type pool (PLAN literal); K>1: donor uniform over the K nearest pool donors MEAN_K = 0 # >0: replace random donor choice with the arithmetic mean of the MEAN_K nearest same-type pool donors (0 = parent-14 random path)+SOFTMAX = 0.0 # >0: donor pick among the K nearest is softmax-weighted by combined distance (0 = parent-14 uniform pick, off control)+SMX_LAMBDA = 1.0 # d_comb = d_coord + SMX_LAMBDA * d_expr (0 = spatial-only weighting)+SMX_SIGMA = 1.0 # sigma = SMX_SIGMA * median(d_coord to K-th nearest donor) per type def _compos_mix(labels_a, labels_b, tt: float, n: int, rng: np.random.Generator, adj: float, diag: dict | None = None):@@ -187,7 +195,7 @@ 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", mix_r: float = 0.0, rng_mix: np.random.Generator | None = None,- mix_k: int = 5, mean_k: int = 0):+ mix_k: int = 5, mean_k: int = 0, softmax: float = 0.0, smx_lambda: float = 1.0, smx_sigma: float = 1.0): """Rebuild the expression matrix: per-type pools from _compos_mix(adj), paired with the coordinate-path cells of the same type. @@ -213,6 +221,8 @@ def _decoupled_expr(stage_a, stage_b, ia, ib, tt: float, adj: float, rng: np.ran idx = np.zeros(n_out, dtype=np.int64) fill_late = fill_early = overlap_num = overlap_den = 0 n_mixed_changed = n_mix_total = 0+ smx_ess_sum = 0.0+ smx_n = 0 mean_records: list = [] n_mean_cells = 0 n_mean_k_sum = 0@@ -276,15 +286,45 @@ def _decoupled_expr(stage_a, stage_b, ia, ib, tt: float, adj: float, rng: np.ran tree = cKDTree(pts_don) use_k = mix_r > 0.0 and rng_mix is not None kq = int(max(1, min(mix_k, don_idx.size))) if use_k else 1- _, sel = tree.query(pts_coord, k=kq)+ dist, sel = tree.query(pts_coord, k=kq) sel = np.asarray(sel, dtype=np.int64)+ dist = np.asarray(dist, dtype=np.float64).reshape(len(pts_coord), kq) if use_k and kq > 1: k_mix = int(round(float(mix_r) * need)) k_mix = int(min(max(k_mix, 0), min(need, don_idx.size))) base = sel[:, 0].copy() if k_mix > 0: mix_pos = rng_mix.choice(need, k_mix, replace=False)- pick_col = rng_mix.integers(0, kq, size=k_mix)+ if softmax > 0.0:+ sigma = float(np.median(dist[:, -1])) * float(smx_sigma)+ d_comb = dist[mix_pos]+ if smx_lambda > 0.0:+ xa_c = as_dense(stage_a.X, coordA) if len(coordA) else np.zeros((0, n_genes), np.float32)+ xb_c = as_dense(stage_b.X, coordB) if len(coordB) else np.zeros((0, n_genes), np.float32)+ d0 = don_idx[don_side == 0]+ d1 = don_idx[don_side == 1]+ xa_d = as_dense(stage_a.X, d0) if d0.size else np.zeros((0, n_genes), np.float32)+ xb_d = as_dense(stage_b.X, d1) if d1.size else np.zeros((0, n_genes), np.float32)+ xc = np.vstack([xa_c, xb_c]).astype(np.float64)[mix_pos]+ xd = np.vstack([xa_d, xb_d]).astype(np.float64)+ d_expr = np.empty((k_mix, kq), dtype=np.float64)+ for j in range(kq):+ diff = xc - xd[sel[mix_pos, j]]+ d_expr[:, j] = np.sqrt((diff * diff).sum(axis=1))+ d_comb = d_comb + float(smx_lambda) * d_expr+ if sigma > 1e-12:+ logit = -d_comb / sigma+ else:+ logit = np.zeros_like(d_comb)+ logit -= logit.max(axis=1, keepdims=True)+ p = np.exp(logit)+ p /= p.sum(axis=1, keepdims=True)+ smx_ess_sum += float((1.0 / (p * p).sum(axis=1)).sum())+ smx_n += int(k_mix)+ u = rng_mix.random((k_mix, 1))+ pick_col = np.minimum((u >= np.cumsum(p, axis=1)).sum(axis=1), kq - 1).astype(np.int64)+ else:+ pick_col = rng_mix.integers(0, kq, size=k_mix) rand_don = sel[mix_pos, pick_col] n_mixed_changed += int((base[mix_pos] != rand_don).sum()) n_mix_total += k_mix@@ -344,6 +384,7 @@ def _decoupled_expr(stage_a, stage_b, ia, ib, tt: float, adj: float, rng: np.ran diag["fill_early"] = int(fill_early) diag["donor_overlap_frac"] = float(overlap_num / max(overlap_den, 1)) diag["n_mix_total"] = int(n_mix_total)+ diag["smx_ess_mean"] = float(smx_ess_sum / max(smx_n, 1)) diag["frac_donors_changed"] = float(n_mixed_changed / max(n_out, 1)) diag["n_mean_cells"] = int(n_mean_cells) diag["mean_k_avg"] = float(n_mean_k_sum / max(n_mean_cells, 1))@@ -406,6 +447,9 @@ def main() -> None: mix_r = float(os.environ.get("VEC_MIX_R", MIX_R)) mix_k = int(os.environ.get("VEC_MIX_K", MIX_K)) mean_k = int(os.environ.get("VEC_MEAN_K", MEAN_K))+ softmax = float(os.environ.get("VEC_SOFTMAX", SOFTMAX))+ smx_lambda = float(os.environ.get("VEC_SMX_LAMBDA", SMX_LAMBDA))+ smx_sigma = float(os.environ.get("VEC_SMX_SIGMA", SMX_SIGMA)) aligned_a, aligned_b, _ = align_pair(stage_a.coords, stage_b.coords, stage_a.labels, stage_b.labels, str(params.get("align", "procrustes"))) target_rms = log_interp(rms_radius(stage_a.coords), rms_radius(stage_b.coords), t, float(params.get("scale_damp", 1.0))) ca = scale_to_rms(aligned_a, target_rms)@@ -413,11 +457,15 @@ def main() -> None: rng_e = np.random.default_rng([int(args.seed), 20261003]) rng_mix = np.random.default_rng([int(args.seed), 31337, int(round(mix_r * 10000))]) expr = _decoupled_expr(stage_a, stage_b, holder["ia"], holder["ib"], t, adj, rng_e, diag, ca=ca, cb=cb, pair=pair,- mix_r=mix_r, rng_mix=rng_mix, mix_k=mix_k, mean_k=mean_k)+ mix_r=mix_r, rng_mix=rng_mix, mix_k=mix_k, mean_k=mean_k,+ softmax=softmax, smx_lambda=smx_lambda, smx_sigma=smx_sigma) diag["pair"] = pair diag["mix_r"] = mix_r diag["mix_k"] = mix_k diag["mean_k"] = mean_k+ diag["softmax"] = softmax+ diag["smx_lambda"] = smx_lambda+ diag["smx_sigma"] = smx_sigma keep = {k: info.get(k) for k in ("t", "n", "rms_a", "rms_b", "out_rms", "n_shared_types", "z_dot", "z_flipped", "align")} print(json.dumps({"bracket": [a["stage"], b["stage"]], **keep, **diag}, default=float), file=sys.stderr)
调研来源?调研员查到并用到的知识条目和文献检索结果(只列标题和编号)。
用到的知识库条目
| 编号 | 标题 | 出处 |
|---|---|---|
| k007 | Interval staging and held-out-window filtering of external data | notes/official/来件/virtualembryo.ai/rules.md |
| k021 | Low-rank covariance residuals to avoid mean collapse | notes/guides/modeling_and_evaluation_guide.html |
| k024 | World-model evaluation dimensions for state-transition predictors | notes/competition/07_biomedical_world_models.md |
分析结果?分析员写的 ANALYSIS.json:改了什么、各组分数怎么变、假设是否成立、经验和下一步建议。
| 改了什么 | 在父14 randK3 配对循环内实现了空间+表达联合距离的 softmax 加权供体抽样(SOFTMAX/SMX_LAMBDA/SMX_SIGMA 三旋钮,σ=型内第K近距中位数),但代理扫描 8 档全部败于均匀基线,按 PLAN 放弃条款提交 SOFTMAX=0,最终输出与父14 逐位一致(榜分 +0.00)。 |
|---|---|
| 各组分数的变化 | cell_state:噪声内:57.70 → 57.70(+0.00,同上) expression_change:噪声内:61.44 → 61.44(+0.00,提交逐位=父14,机制未进入提交输出) local_spatial:噪声内:58.69 → 58.69(+0.00,同上) shape_scale:噪声内:69.09 → 69.09(+0.00,坐标路未动,预期逐位不变) |
| family_id | T2EI-01 |
| 假设是否成立 | 否 |
| 经验 |
|
| mechanism_active | 否 |
| 下一步建议 |
|
对话摘要?每个角色和大模型对话的统计:轮数、工具调用、用时、token 数和最后的回答摘录;原始记录只给路径。
只给统计和最后回答的摘录;完整对话请到原始记录位置里列出的文件看。
分析员
| 角色?调研员写计划、工程师改代码、分析员解读分数、审查员检查作弊。 | 分析员 alibaba-token-plan-cn/qwen3.8-max |
|---|---|
| 调用次数 | 1 次 |
| 轮数?大模型一共回复了几轮(每轮可以调用多个工具)。 | 2 |
| 工具调用?大模型调用读文件、执行命令等工具的次数,按工具名统计。 | 共 1 次:write 1 |
| 用时 | 不到 1 分 |
| token 数?输入 / 输出(含思考)的 token 数,来自接口返回的用量。 | 输入 10,705 · 输出 1,098 · 思考 421 |
| 任务(第一行) | 分析节点 n19 的打分结果,写 ANALYSIS.json |
| 最后的回答(摘录) | ANALYSIS.json written |
| 原始记录位置?完整对话记录在 Spark 上的文件路径;看板不复制原始内容。 | /home/spark-longxinyang/vec/runs/formal/20261003-004922-search-t2-embryo-interp-g24/nodes/19/analyst.jsonl 5 KB /home/spark-longxinyang/vec/runs/formal/20261003-004922-search-t2-embryo-interp-g24/nodes/19/analyst.stderr |
工程师
| 角色 | 工程师 alibaba-token-plan-cn/qwen3.8-max |
|---|---|
| 调用次数 | 1 次 |
| 轮数 | 25 |
| 工具调用 | 共 32 次:bash 21、edit 8、read 2、write 1 |
| 用时 | 15 分 |
| token 数 | 输入 61,989 · 输出 10,828 · 思考 9,792 |
| 任务(第一行) | 按计划修改程序:空间-表达联合距离加权供体抽样(父14 randK3 的保方差加权版) |
| 最后的回答(摘录) | **做了什么**:按 PLAN 在父14 randK3 配对循环里实现空间+表达联合距离的 softmax 加权供体抽样(σ=型内第K近距中位数,逐型),带 ESS>1.8 与 SD 收缩<10% 双护栏(均通过:ESS 1.6–2.4、SD 收缩<2%)。机制确认触发(67% 细胞供体改变、方差保持),但代理上 8 档配置(λ∈{0.5..8} 联合 + 纯空间 σ∈{0.5,1,2})全部低于基线,按放弃条款提交 SOFTMAX=0,输出与父14 逐位一致(已验证 X/坐标 `array_equal`、伪装视图 +1 天平移逐位一致、vec-check ok)。
**查分**(9/20):基线 61.14;λ=0.5→60.83、λ=1→60.84、λ=2→60.71、λ=4→60.46、λ=8→60.64;纯空间 σ=0.5/1/2→60.88/60.71/60.97。cs 一律降、ls 未回收——均匀 randK3 是供体熵的局部最优,σ→∞ 时从下方单调逼近基线,该族无头部空间。
**下一步最值得试**:配对规则族内 ec/cs/ls 已证三角互斥(节点12/14/17/19 四连证据),应改表达池本身——父17 建议 #2:组成插值池内对共享型细胞做逐细胞轻度中间态化(向 A/B 表达均值方向 α=0.1–0.2,保方差扰动而非收缩),配对仍用 randK3;或攻坐标路几何(ls 的真正主导项)。 |
| 原始记录位置 | /home/spark-longxinyang/vec/runs/formal/20261003-004922-search-t2-embryo-interp-g24/nodes/19/engineer.jsonl 183 KB /home/spark-longxinyang/vec/runs/formal/20261003-004922-search-t2-embryo-interp-g24/nodes/19/engineer.stderr |
调研员
| 角色 | 调研员 alibaba-token-plan-cn/qwen3.8-max |
|---|---|
| 调用次数 | 1 次 |
| 轮数 | 1 |
| 工具调用 | 共 0 次:— |
| 用时 | 1 分 |
| token 数 | 输入 12,893 · 输出 1,366 · 思考 1,751 |
| 任务(第一行) | 为节点 n19(改进,父节点 n17)写改进计划 PLAN.json |
| 最后的回答(摘录) | 最近邻)ls=59.32 但 cs=57.12、ec=60.68;节点14(K=3 均匀随机)cs=57.70、ec=61.44 但 ls 降到 58.69(mmd_u 0.055)。说明 K=3 的均匀随机抽样牺牲了局部空间耦合换取供体多样性。ANALYSIS next_suggestion #1 明确建议保方差的局部供体扰动。本方案在 randK3 上把均匀随机改为按空间+表达联合距离的软加权随机抽样:仍从真实供体中抽样(方差天然保持),但近邻供体被抽中概率更高,预期在保住 cs(K=3 多样性)的同时把 ls 拉回接近节点12 水平。",
"approach": "步骤:1) 在父14 的 MIX 配对循环内,把 `rng.choice(K, uniform)` 改为 `rng.choice(K, p=softmax(-d_comb/σ))`,其中 d_comb = d_coord + λ·d_expr,两者均为对齐+缩放帧内的欧氏距离,σ 固定为该型坐标细胞到其第 K 近供体距离的中位数(避免逐细胞调参)。λ=0 即父14。2) 护栏(先算再查分):逐基因型内 SD 收缩率必须 <10%(父17 教训:>30% 即否决);有效供体数 1/Σp² 必须 >1.8(防止退化为确定性最近邻)。3) seed 0 快速扫 λ∈{0.5,1,2,4,8}(vec-score 每次约 1-2 s,30 min 足够);若全部 λ≤0 的榜分,退回尝试 suggestion #1 的纯空间加权(λ 固定=1 只加空间项)扫 σ∈{0.5,1,2}×中位数。4) 选 seed 0 榜分最高的 λ,再跑 seed 1/2,做同 seed 配对差值:要求榜分均值差 >0.3 且三 seed 同号(ANALYSIS 教训:单次 A 半不可靠,父14 的 +0.26 在 B 半缩为 0)。若 |差|<0.3 或符号不一致,按失败条款提交 λ=0(逐位=父14)。5) 单阶段退路:本机制只在双阶段解耦配对路径内生效;单输入阶段时走种子原有 fallback,机制自然不触发。6) 提交前跑 vec-check 与伪装视图一致性(机制只依赖帧内距离,不读 manifest 路径,天然 view-independent)。",
"expected_groups": ["local_spatial", "cell_state"],
"risks": "1) λ 过大 → 退化为确定性 1-NN(节点12 已证 1-NN 的 ls 好但 ec 低),用有效供体数 >1.8 护栏尽早发现;2) 表达距离在稀疏高维空间噪声大,加权可能无效甚至略负——若 seed 0 全部 λ 不超父,立即切纯空间加权备选,不恋战;3) 增益可能 <T2 噪声(~1 分):严格执行三 seed 同号 + |均值差|>0.3 才提交,否则零成本回退;4) 30 min 时限:实现只改配对循环一处(约 15 行),扫描用 seed 0 单跑,控制查分 ≤12 次。",
"family_id": "T2EI-01",
"mechanism": "型内混合配对的供体选择分布从均匀改为按空间+表达联合距离的 softmax 加权抽样:每个坐标细胞独立计算其 K=3 近邻供体的加权概率并随机抽一个真实供体,近且表达相似的供体更可能被选中,从而在保持供体多样性(保方差)的前提下恢复表达-坐标的局部耦合。",
"vs_constant_shift": "不是常数位移:每个坐标细胞的近邻集合、联合距离和抽样结果都独立计算,表达修改逐细胞异质;输出仍是真实供体的原始表达向量(不合成、不平滑、不整体平移),型内分布宽度由抽样随机性天然保持。",
"mechanism_evidence": "Engineer 记录:1) 每细胞抽样概率分布的熵 / 有效供体数 1/Σp²(λ>0 时应介于 1 和 3 之间且逐细胞不同);2) λ>0 与父14 的逐位差异率(应 >0 且非全细胞同一位移);3) 型内逐基因 SD 收缩率(必须 <10%,这是与父17 均值机制的本质区别);4) 四组分各自变化 + mmd_u,确认 ls 改善不是靠分布变窄的假象(父17 教训)。",
"mechanism_off_control": "λ=0 时 softmax 退化为均匀分布,与父14 的 `rng.choice(K)` 同分布;用相同 seed 验证输出与父14 逐位一致(`np.array_equal` on X 与 spatial_3D)。预期差别:λ=0 榜分 = 父14(61.73),λ>0 时榜分应 ≥ 父14 且 ls 上升、cs 不降。",
"sources": []}
``` |
| 原始记录位置 | /home/spark-longxinyang/vec/runs/formal/20261003-004922-search-t2-embryo-interp-g24/nodes/19/researcher.jsonl 5 KB /home/spark-longxinyang/vec/runs/formal/20261003-004922-search-t2-embryo-interp-g24/nodes/19/researcher.stderr |
审查员
| 角色 | 审查员 alibaba-token-plan-cn/qwen3.8-max |
|---|---|
| 调用次数 | 1 次 |
| 轮数 | 7 |
| 工具调用 | 共 9 次:read 6、bash 2、write 1 |
| 用时 | 2 分 |
| token 数 | 输入 29,061 · 输出 1,424 · 思考 5,252 |
| 任务(第一行) | 审查节点 n19 的程序是否越界读取、写死目标、钻评分器漏洞 |
| 最后的回答(摘录) | REVIEW.json written |
| 原始记录位置 | /home/spark-longxinyang/vec/runs/formal/20261003-004922-search-t2-embryo-interp-g24/nodes/19/reviewer.jsonl 119 KB /home/spark-longxinyang/vec/runs/formal/20261003-004922-search-t2-embryo-interp-g24/nodes/19/reviewer.stderr |