总览 · ← 返回运行 20261003-043412-search-t2-embryo-interp-g24-D-s1
节点 n8
在mix+κ=0.5+radial分层+damp0.455上测试PLAN的b细胞向a型均值逐细胞收缩、FPS覆盖采样、z切片分层与κ重扫;全部在代理上被否证或在噪声内,提交态=父节点配置(默认开关全关/radial)。
| 运行?一次完整的自动搜索或 Agent 会话,有自己的锁定配置和证据包。 | 20261003-043412-search-t2-embryo-interp-g24-D-s1 |
|---|---|
| 父节点 | n6 |
| 子节点 | n12 |
| 操作?种子:人写的起点;改进:在父节点上改;草稿:从头写;修复:修父节点的报错。 | 改进 |
| 状态 | 已打分 |
| 分数 | 搜索目标分 61.15(+0.0) · proxy 61.15(+0.0) |
| 审查 | 未审查 |
| 用时?从运行开始到结束(或到现在)的挂钟时间。 | 13 分 |
| 程序版本 | e83ed9f11a1a4615dac605d6b5ee9544b08acf5f (programs.git) |
方法说明?节点程序自带的 METHOD.md:这个程序做了什么、为什么。
来自 programs.git e83ed9f11a:solution/METHOD.md
在mix+κ=0.5+radial分层+damp0.455上测试PLAN的b细胞向a型均值逐细胞收缩、FPS覆盖采样、z切片分层与κ重扫;全部在代理上被否证或在噪声内,提交态=父节点配置(默认开关全关/radial)。
方法
提交态与父节点(node 6)逐位一致:κ=0.5 组成阻尼、radial 等频分层、scale_damp=0.455、procrustes3d。新增 4 个环境变量开关的机制,全部按 PLAN/父节点建议实现并在代理上检验,均未进入默认:
- T2EI_SHRINK(PLAN 机制,b 细胞逐细胞收缩):
x_b ← (1−λ)x_b + λ·mu_a(type),λ=SHRINK·t,只对保留的 b 细胞、只对 stage-a 该型细胞数 ≥5 的型生效(a 细胞、坐标、类型配额均不动)。结果 clip≥0。SHRINK=0 时不调用该代码路径。 - T2EI_SPATIAL_MODE=cover(父节点建议的覆盖贪心):类型内最远点采样(FPS,确定性起点=离质心最远点)替代 radial 等频 bin。
- T2EI_SPATIAL_MODE=rz(z 切片感知分层):z 是离散切片,类型配额先按切片内细胞数比例分配(最大余数法),切片内再做径向等频 bin。
- κ 重扫(radial 分层 + damp 0.455 下):κ∈{0.4, 0.45, 0.55}。
机制对照(vec-score,proxy E6.75+E8.0→E7.25,t=0.4,A 半;查询 10/20)
| 配置 | 榜分 | 表达 | 状态 | 形状 | 邻域 | occupancy |
|---|---|---|---|---|---|---|
| SHRINK=0(=父节点,复现 60.32) | 60.32 | 59.93 | 52.78 | 70.51 | 58.04 | 0.8065 |
| SHRINK=0.05 / 0.15 / 0.30 | 60.22 / 60.14 / 59.88 | ~59.9/59.4 | 52.48/52.26/52.04 | 70.51 | ~57.8 | 0.8065 |
| SHRINK=−0.15 / −0.30(外扩) | 60.33 / 60.33 | 59.88/59.82 | 52.68/52.56 | 70.51 | 58.25/58.45 | 0.8065 |
| cover(FPS) | 60.03 | 60.04 | 53.13 | 69.65 | 57.30 | 0.7890 |
| rz, seed 0 / seed 1 | 60.54 / 60.15 | 60.0/60.3 | 52.7/52.9 | 70.8/69.7 | 58.6/57.7 | 0.800/0.781 |
| radial(提交), seed 1 | 60.47 | 60.36 | 53.26 | 70.86 | 57.41 | 0.8131 |
| κ=0.4 / 0.45 / 0.55 | 59.64 / 59.56 / 59.94 | 59.3/59.5/60.5 | 54.3/52.8/51.5 | 68.6/69.3/69.6 | 56.4/56.7/58.2 | – |
结论与证据
- PLAN 机制(收缩)被否证:cell_state 随 SHRINK 单调下降(52.78→52.04,剂量-效应方向与假设相反),expression_change 在 SHRINK=0.30 时也降(59.93→59.36),de_score 0.25→0.214。机制证据:型内表达方差比 0.884(λ=0.06,520/1000 个 b 细胞被收缩,26 型中 a 侧 <5 细胞的型跳过 480 个细胞)——方差确实下降了,但评分器不把"b 细胞表达向 a 型均值靠拢"当作目标中间态,与父节点 ALPHA(平移)证伪一致:mix 家族里任何对真实细胞表达的系统性改写(平移或收缩)在代理上都单调有害,cell_state 的瓶颈不在 b 细胞的表达谱位置。
- 负 λ(沿 a→b 方向外扩,测 de_direction)中性(60.33,de_direction 0.3356<0.3383),否证。
- FPS 覆盖采样被否证:occupancy_dice 反降(0.8065→0.789),FPS 把 b 细胞推到类型簇外围,超出参考占位。
- rz 在噪声内:seed 0 +0.22、seed 1 −0.32,两种子均值 base 60.39 vs rz 60.34,不采用。
- κ 峰值在 radial+damp0.455 下仍在 0.5:κ=0.4 cell_state +1.5 但 shape −2.0(occupancy 损失),净 −0.68;父节点"occupancy 修复后 κ 峰值左移"的猜想不成立。
已验证 / 未验证
- 已验证:SHRINK=0 默认输出与父节点逐位一致且复现父节点查分(60.3156 vs 父记录 60.32);两次运行输出 h5 逐字节相同(确定性);vec-check 通过;无绝对时间/视图分支(新代码只用类型标签、坐标和数据本身),伪装视图安全;CPU、~2s、~0.3GB。
- 未验证:B 半分数;final 视图(方法与父节点相同,父节点也未在 final 验证 damp=0.455 的 RMS 外推行为);收缩/rz 在多输入阶段视图(proxy2 类)上的行为——单输入退路无 b 细胞,收缩自然不生效。
- 生物学知识来源:无(未用外部数据、文献数值、保留阶段信息;收缩/分层均为通用统计操作)。
下一步建议
- cell_state 的表达侧杠杆在 mix 家族内已被系统性排除(平移、收缩、外扩均有害);剩余方向是生成中间态细胞(如类型内 a/b 细胞配对插值表达+坐标,OT 配对已被方法卡否证但类型内近邻配对未试)或放弃 cell_state、把 shape_scale 从 71 推向更高(occupancy_dice 是剩余差距,rz/cover 已排除,可试体素级覆盖贪心直接对 occupancy_dice 的体素定义优化)。
- 本节点证明父配置(κ=0.5+radial+damp0.455)是该家族的一个稳健局部最优:6 个正交扰动全部 ≤0 或在噪声内。
调研员的计划
| 名称 | b细胞表达向a型均值收缩(contraction)改善cell_state |
|---|---|
| 动机 | cell_state是最弱组(54.18),比expression_change(60.05)和shape_scale(71.10)低6-17分。κ=0.5已将cell_state从37.49提升到53.88,但剩余b细胞仍携带晚端表达谱,与目标中间时间不匹配。T2EI_ALPHA(型均值平移)已证伪(单调有害),但其失败原因是均匀平移破坏了型内结构;改用逐细胞向a型均值的收缩(contraction)是不同操作:平移对所有细胞施加相同向量,收缩则按细胞到a型均值的距离比例拉回,保留型内方差结构。 |
| 做法 | 在父节点run.py的mix_damped中,对抽到的b细胞表达做逐细胞收缩:x_b_new = (1-λ)·x_b + λ·mu_a(type),其中mu_a(c)是a阶段该型的表达均值(已有type_means工具)。λ = SHRINK * t,SHRINK为环境变量T2EI_SHRINK,初始0.15,搜索范围{0.05, 0.10, 0.15, 0.20, 0.30}。仅修改b细胞表达,a细胞不动,坐标不动,类型配额不动。实现步骤:(1) 在mix_damped返回前,对b细胞子集按型计算a型均值(用as_dense + type_means);(2) 逐细胞线性插值;(3) 环境变量T2EI_SHRINK=0时逐位复现父节点。单输入阶段退路:无括号时fallback到最近输入,此时无b细胞,收缩自然不生效。vec-score快筛:先跑SHRINK=0确认复现60.32,再跑0.15看cell_state方向,若cell_state提升>1且其他组不降>1再扫其余值。 |
| 风险 | 1) 收缩可能同时降低expression_change(b细胞表达被拉平,评分器可能期望保留晚端变化信号);Engineer应在第一次查分时同时看四组,若expression_change降>1.5即停止。2) 改善可能在噪声内(T2约1分);需至少2次查分(seed 0/1)确认方向一致。3) mu_a对小类型不稳定(<5个细胞);对型内细胞数<5的型跳过收缩(保持原表达)。 |
代码改动?这个节点的程序和父节点程序的逐行差别:绿色是新增,红色是删除。
对比:父节点版本 59873a0a56。改动的文件:solution/METHOD.md +28 −24、solution/run.py +89 −1
diff --git a/solution/METHOD.md b/solution/METHOD.mdindex 1ea2385..1f51e47 100644--- a/solution/METHOD.md+++ b/solution/METHOD.md@@ -1,37 +1,41 @@-mix+组成阻尼κ=0.5 不变;晚端细胞改为类型内径向等频分层抽样(占位+),scale_damp 0.5→0.455 使输出 RMS 对准参考(形状+)。+在mix+κ=0.5+radial分层+damp0.455上测试PLAN的b细胞向a型均值逐细胞收缩、FPS覆盖采样、z切片分层与κ重扫;全部在代理上被否证或在噪声内,提交态=父节点配置(默认开关全关/radial)。 ## 方法 -基础 = 父节点(node 5):括号 a<b procrustes3d 对齐、缩放到 log 线性 RMS、按 t_comp=κ·t(κ=0.5)类型分层混抽 4000a+1000b、表达和坐标一起走、jitter、重缩放到目标 RMS。本节点在抽样与尺度两处改动(均为环境变量开关,可关):+提交态与父节点(node 6)逐位一致:κ=0.5 组成阻尼、radial 等频分层、scale_damp=0.455、procrustes3d。新增 4 个环境变量开关的机制,全部按 PLAN/父节点建议实现并在代理上检验,均**未**进入默认: -1. **T2EI_SPATIAL_STRAT / T2EI_SPATIAL_MODE(默认开、radial)**:晚端 b 细胞的类型配额与父节点完全相同(allocation 逻辑逐位一致,类型组成不变),仅类型内选择改为——按细胞到云质心的径向距离做 k 个等频 bin(k=该类型配额;k<4 退化为随机),每 bin 随机取 1 个。使保留的 1000 个 b 细胞均匀覆盖径向范围,弥补 κ 阻尼造成的 occupancy 损失。-2. **T2EI_DAMP=0.455(原 0.5)**:代理上 scale_log_ratio 随 damp 单调(0.4→−0.023、0.5→+0.0162、0.65→+0.075),说明 shape_scale 组在此区间几乎只由 RMS 失配驱动(d2_shape、occupancy_dice 不随 damp 变)。取使 |scale_log_ratio|≈0 的 0.455(实测 −0.0014,参考 RMS≈146.7,父节点输出 149.2 偏大 1.6%)。-3. T2EI_ALPHA(父节点的型均值位移)保持 0(已证伪);κ 保持 0.5(父节点扫描的单峰)。+1. **T2EI_SHRINK(PLAN 机制,b 细胞逐细胞收缩)**:`x_b ← (1−λ)x_b + λ·mu_a(type)`,λ=SHRINK·t,只对保留的 b 细胞、只对 stage-a 该型细胞数 ≥5 的型生效(a 细胞、坐标、类型配额均不动)。结果 clip≥0。SHRINK=0 时不调用该代码路径。+2. **T2EI_SPATIAL_MODE=cover(父节点建议的覆盖贪心)**:类型内最远点采样(FPS,确定性起点=离质心最远点)替代 radial 等频 bin。+3. **T2EI_SPATIAL_MODE=rz(z 切片感知分层)**:z 是离散切片,类型配额先按切片内细胞数比例分配(最大余数法),切片内再做径向等频 bin。+4. **κ 重扫**(radial 分层 + damp 0.455 下):κ∈{0.4, 0.45, 0.55}。 -## 机制对照(vec-score,proxy E6.75+E8.0→E7.25,A 半;父节点复现 59.88)+## 机制对照(vec-score,proxy E6.75+E8.0→E7.25,t=0.4,A 半;查询 10/20) -| 配置 | 榜分 | 表达 | 状态 | 形状 | 邻域 | occupancy | scale_log_ratio |-|---|---:|---:|---:|---:|---:|---:|---:|-| 关闭(=父节点,逐位一致) | 59.88 | 60.2 | 52.6 | 68.5 | 58.3 | 0.8019 | +0.0162 |-| PCA1 分层(PLAN 原方案), damp 0.5 | 59.87 | 59.4 | 53.0 | 68.5 | 58.5 | 0.7981 | +0.0162 |-| radial 分层, damp 0.5 | 59.94 | 59.9 | 52.8 | 69.0 | 58.0 | 0.8065 | +0.0162 |-| damp 0.4 / 0.65(分层关) | 59.41 / 58.09 | ~60 | 52.6 | 66.7 / 61.4 | ~58 | 0.8019 | −0.023 / +0.075 |-| damp 0.455, 分层关 | 60.26 | 60.2 | 52.6 | 70.0 | 58.3 | 0.8019 | −0.0014 |-| **damp 0.455 + radial(提交)** | **60.32(seed1: 60.47)** | 59.9 | 52.8 | 70.5 | 58.0 | 0.8065 | −0.0014 |+| 配置 | 榜分 | 表达 | 状态 | 形状 | 邻域 | occupancy |+|---|---:|---:|---:|---:|---:|---:|+| SHRINK=0(=父节点,复现 60.32) | 60.32 | 59.93 | 52.78 | 70.51 | 58.04 | 0.8065 |+| SHRINK=0.05 / 0.15 / 0.30 | 60.22 / 60.14 / 59.88 | ~59.9/59.4 | 52.48/52.26/52.04 | 70.51 | ~57.8 | 0.8065 |+| SHRINK=−0.15 / −0.30(外扩) | 60.33 / 60.33 | 59.88/59.82 | 52.68/52.56 | 70.51 | 58.25/58.45 | 0.8065 |+| cover(FPS) | 60.03 | 60.04 | 53.13 | 69.65 | 57.30 | 0.7890 |+| rz, seed 0 / seed 1 | 60.54 / 60.15 | 60.0/60.3 | 52.7/52.9 | 70.8/69.7 | 58.6/57.7 | 0.800/0.781 |+| radial(提交), seed 1 | 60.47 | 60.36 | 53.26 | 70.86 | 57.41 | 0.8131 |+| κ=0.4 / 0.45 / 0.55 | 59.64 / 59.56 / 59.94 | 59.3/59.5/60.5 | 54.3/52.8/51.5 | 68.6/69.3/69.6 | 56.4/56.7/58.2 | – | -- **PLAN 原机制(PCA1 等频 bin)被否证**:榜分 −0.01、shape_scale −0.07、occupancy_dice 0.7981<0.8019,按 PLAN 放弃判据(shape 回升<1.5)放弃;代码保留(T2EI_SPATIAL_MODE=pca1)。诊断:随机抽样时 b 细胞 bbox 覆盖已达 90%,PCA1 一维展开没有增加三维占位。-- **radial 变体有效但小**:occupancy_dice +0.005/+0.011(seed 0/1),shape +0.5,方向与 PLAN 机制假设一致(空间均匀覆盖→占位),b 细胞最近邻最大间隙 46→38。-- **主要增益来自 RMS 对准**:shape +1.5,机制清楚(scale_log_ratio→0),且在 seed 1 上复现。-- 两改动作用在 shape_scale 的不同子指标上(occupancy vs scale),可叠加;cell_state / expression_change / local_spatial 在噪声内不动(±0.5),证明组成与表达未被改动(b 细胞类型配额逐位相同)。+## 结论与证据++- **PLAN 机制(收缩)被否证**:cell_state 随 SHRINK 单调下降(52.78→52.04,剂量-效应方向与假设相反),expression_change 在 SHRINK=0.30 时也降(59.93→59.36),de_score 0.25→0.214。机制证据:型内表达方差比 0.884(λ=0.06,520/1000 个 b 细胞被收缩,26 型中 a 侧 <5 细胞的型跳过 480 个细胞)——方差确实下降了,但评分器不把"b 细胞表达向 a 型均值靠拢"当作目标中间态,与父节点 ALPHA(平移)证伪一致:**mix 家族里任何对真实细胞表达的系统性改写(平移或收缩)在代理上都单调有害**,cell_state 的瓶颈不在 b 细胞的表达谱位置。+- 负 λ(沿 a→b 方向外扩,测 de_direction)中性(60.33,de_direction 0.3356<0.3383),否证。+- **FPS 覆盖采样被否证**:occupancy_dice 反降(0.8065→0.789),FPS 把 b 细胞推到类型簇外围,超出参考占位。+- **rz 在噪声内**:seed 0 +0.22、seed 1 −0.32,两种子均值 base 60.39 vs rz 60.34,不采用。+- **κ 峰值在 radial+damp0.455 下仍在 0.5**:κ=0.4 cell_state +1.5 但 shape −2.0(occupancy 损失),净 −0.68;父节点"occupancy 修复后 κ 峰值左移"的猜想不成立。 ## 已验证 / 未验证 -- 已验证:关闭态(STRAT=0, DAMP=0.5, ALPHA=0)与父节点输出逐位一致且复现父节点查分 59.8837;提交态 seed 0 两次运行逐位一致;seed 1 查分 60.47;vec-check 通过;程序只依赖时间差与数据,无绝对时间/视图分支(伪装视图安全);耗时 ~2s、内存 ~0.3GB。-- 未验证:final 视图(E7.25+E8.0→E7.5,t=1/3)——damp 0.455 比 0.5 把目标 RMS 压低约 0.5%(该括号 Δlog rms 较小),方法卡曾担心 final 上 RMS 偏小,此调整方向与之相反、幅度很小;B 半分数;κ 与 radial 分层的交互扫描。-- 生物学知识来源:无(纯几何/采样改动,未用外部数据、文献数值或保留阶段信息)。径向分层假设"细胞到质心距离的分布应被抽样保持",是通用采样知识。+- 已验证:SHRINK=0 默认输出与父节点逐位一致且复现父节点查分(60.3156 vs 父记录 60.32);两次运行输出 h5 逐字节相同(确定性);vec-check 通过;无绝对时间/视图分支(新代码只用类型标签、坐标和数据本身),伪装视图安全;CPU、~2s、~0.3GB。+- 未验证:B 半分数;final 视图(方法与父节点相同,父节点也未在 final 验证 damp=0.455 的 RMS 外推行为);收缩/rz 在多输入阶段视图(proxy2 类)上的行为——单输入退路无 b 细胞,收缩自然不生效。+- 生物学知识来源:无(未用外部数据、文献数值、保留阶段信息;收缩/分层均为通用统计操作)。 ## 下一步建议 -- shape_scale 剩余差距在 occupancy_dice(0.807 vs κ=1 时更高)与 d2_shape:可试 b 细胞配额不减、改为把多余 b 细胞的**表达**向 a 近邻混合(若评分允许)或 κ 与 radial 的联合细扫;或覆盖贪心(voxel coverage greedy)替代等频 bin。-- cell_state(52.6–53.3)仍是最低组:κ=0.3 时 cell_state 55.9 但 shape 掉;radial 分层下重扫 κ∈{0.4,0.45,0.55} 可能移动峰值。-- damp 的最优值本质是"RMS 随时间的对数增长曲线"的局部拟合,可用 external/(若有允许的外部阶段)拟合更平滑的 RMS(t) 先验替代常数 damp。+- cell_state 的表达侧杠杆在 mix 家族内已被系统性排除(平移、收缩、外扩均有害);剩余方向是**生成中间态细胞**(如类型内 a/b 细胞配对插值表达+坐标,OT 配对已被方法卡否证但类型内近邻配对未试)或放弃 cell_state、把 shape_scale 从 71 推向更高(occupancy_dice 是剩余差距,rz/cover 已排除,可试体素级覆盖贪心直接对 occupancy_dice 的体素定义优化)。+- 本节点证明父配置(κ=0.5+radial+damp0.455)是该家族的一个稳健局部最优:6 个正交扰动全部 ≤0 或在噪声内。diff --git a/solution/run.py b/solution/run.pyindex 8093c32..5c56bfd 100644--- a/solution/run.py+++ b/solution/run.py@@ -29,6 +29,15 @@ reproduce the parent, node 5, bit-for-bit): x_a += ALPHA*t*d(c), x_b -= ALPHA*(1-t)*d(c), d(c)=mu_b(c)-mu_a(c). Measured monotone harmful on the proxy (alpha 0.2/0.5/1.0 -> 54.6/52.8/48.5 vs 56.4 at 0), kept off; code retained for the record.+5. T2EI_SHRINK (per-cell contraction of b-cells toward stage-a type means,+ default 0 = OFF, refuted): x_b <- (1-SHRINK*t)*x_b + SHRINK*t*mu_a(type),+ types with <5 stage-a cells skipped. Proxy seed 0, monotone harmful:+ SHRINK 0/0.05/0.15/0.30 -> board 60.32/60.22/60.14/59.88, cell_state+ 52.78/52.48/52.26/52.04. Negative lam (expansion) neutral (60.33).+6. T2EI_SPATIAL_MODE extras: "cover" (farthest-point sampling within type)+ lowers occupancy_dice 0.8065->0.789 (board 60.03), refuted; "rz"+ (z-slice-proportional quotas + radial bins within slice) wins seed 0+ (60.54) but loses seed 1 (60.15 vs 60.47) -> noise, radial kept default. If the target is not bracketed, falls back to the latest input before it. """@@ -54,6 +63,42 @@ ALPHA = float(os.environ.get("T2EI_ALPHA", "0.0")) KAPPA = float(os.environ.get("T2EI_KAPPA", "0.5")) SPATIAL_STRAT = os.environ.get("T2EI_SPATIAL_STRAT", "1") != "0" SPATIAL_MODE = os.environ.get("T2EI_SPATIAL_MODE", "radial")+SHRINK = float(os.environ.get("T2EI_SHRINK", "0.0"))+++def contract_b(expr, labels_a, labels_b_sel, mu_a, lam: float, n_a: int, min_cells: int = 5):+ """Per-cell contraction of retained b-cell expression toward stage-a type means.++ x_b_new = (1-lam)*x_b + lam*mu_a(type). lam = SHRINK * t. Types whose stage-a+ population has < min_cells cells are skipped (unstable mean). Coordinates,+ type quotas and a-cells untouched; SHRINK=0 leaves expr bit-identical.+ """+ xb = expr[n_a:]+ labs = np.asarray(labels_b_sel).astype(str)+ counts_a = {}+ la = np.asarray(labels_a).astype(str)+ for lab in np.unique(la):+ counts_a[lab] = int((la == lab).sum())+ var_before = var_after = 0.0+ moved = skipped = 0+ for lab in np.unique(labs):+ mb = labs == lab+ k = int(mb.sum())+ if counts_a.get(lab, 0) < min_cells or lab not in mu_a:+ skipped += k+ continue+ block = xb[mb]+ var_before += float(((block - block.mean(axis=0)) ** 2).sum())+ new = np.clip(np.float32(1.0 - lam) * block + np.float32(lam) * mu_a[lab].astype(np.float32), 0.0, None)+ xb[mb] = new+ var_after += float(((new - new.mean(axis=0)) ** 2).sum())+ moved += k+ ev = {+ "applied": True, "lam": lam, "cells_contracted": moved, "cells_skipped": skipped,+ "n_types": int(len(np.unique(labs))),+ "var_ratio": float(var_after / var_before) if var_before > 0 else 1.0,+ }+ return ev def _type_alloc(labels: np.ndarray, n: int):@@ -78,6 +123,19 @@ def _type_alloc(labels: np.ndarray, n: int): return types, alloc +def _fps(pts: np.ndarray, k: int, centroid: np.ndarray) -> np.ndarray:+ """Deterministic farthest-point sampling: maximises spatial coverage."""+ d0 = np.linalg.norm(pts - centroid, axis=1)+ first = int(np.argmax(d0))+ sel = [first]+ dmin = np.linalg.norm(pts - pts[first], axis=1)+ for _ in range(k - 1):+ nxt = int(np.argmax(dmin))+ sel.append(nxt)+ dmin = np.minimum(dmin, np.linalg.norm(pts - pts[nxt], axis=1))+ return np.asarray(sel)++ def spatial_take(labels: np.ndarray, coords: np.ndarray, n: int, rng: np.random.Generator, centroid=None) -> np.ndarray: """Type-stratified draw, within type equal-frequency PCA1 bins pick one cell. @@ -101,6 +159,32 @@ def spatial_take(labels: np.ndarray, coords: np.ndarray, n: int, rng: np.random. picks.append(rng.choice(idx, k, replace=False)) continue pts = np.asarray(coords[idx], dtype=np.float64)+ if SPATIAL_MODE == "cover":+ picks.append(idx[_fps(pts, k, np.asarray(centroid, dtype=np.float64))])+ continue+ if SPATIAL_MODE == "rz":+ zc = np.asarray(centroid, dtype=np.float64)+ slices = np.round(pts[:, 2]).astype(int)+ us, scounts = np.unique(slices, return_counts=True)+ raw = scounts / scounts.sum() * k+ alloc = np.floor(raw).astype(int)+ rem = k - int(alloc.sum())+ for i in np.argsort(-(raw - alloc))[:max(rem, 0)]:+ alloc[i] += 1+ for s, ks in zip(us, alloc):+ ks = int(ks)+ if ks <= 0:+ continue+ sub = np.flatnonzero(slices == s)+ if ks >= sub.size:+ picks.append(idx[sub])+ continue+ proj = np.linalg.norm(pts[sub, :2] - zc[:2], axis=1)+ order = np.argsort(proj, kind="stable")+ bins = np.array_split(order, ks)+ sel = np.fromiter((bb[rng.integers(len(bb))] for bb in bins if len(bb)), dtype=np.intp, count=ks)+ picks.append(idx[sub[sel]])+ continue if SPATIAL_MODE == "radial": proj = np.linalg.norm(pts - np.asarray(centroid, dtype=np.float64), axis=1) else:@@ -201,8 +285,12 @@ def main() -> None: ev = {"applied": False, "reason": "alpha=0"} if ALPHA != 0: ev = type_shift(expr, stage_a, stage_b, t, ALPHA, ia, ib)+ cev = {"applied": False, "reason": "shrink=0"}+ if SHRINK != 0 and ib.size:+ mu_a = type_means(stage_a.X, stage_a.labels)+ cev = contract_b(expr, stage_a.labels, stage_b.labels[ib], mu_a, float(SHRINK * t), int(ia.size)) keep = {k: info.get(k) for k in ("t", "t_comp", "n", "rms_a", "rms_b", "out_rms", "n_shared_types", "z_dot", "z_flipped", "align", "n_from_a", "n_from_b", "spatial_strat", "b_bbox_frac", "b_rms_frac")}- print(json.dumps({"bracket": [a["stage"], b["stage"]], **keep, "shift": ev}, default=float), file=sys.stderr)+ print(json.dumps({"bracket": [a["stage"], b["stage"]], **keep, "shift": ev, "contract": cev}, default=float), file=sys.stderr) write_t2(args.out, expr, 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:改了什么、各组分数怎么变、假设是否成立、经验和下一步建议。
| 改了什么 | 实现了 PLAN 的 b 细胞向 a 型均值逐细胞收缩(T2EI_SHRINK)及 3 个附加变体(FPS 覆盖采样、z 切片分层 rz、κ 重扫),全部在代理上证伪或落在噪声内,提交态默认开关全关,输出与父节点 node 6 逐位一致。 |
|---|---|
| 各组分数的变化 | cell_state:噪声内(+0.00,54.18 vs 54.18)——提交态与父节点逐位相同 expression_change:噪声内(+0.00,60.05 vs 60.05)——提交态与父节点逐位相同 local_spatial:噪声内(+0.00,59.26 vs 59.26)——提交态与父节点逐位相同 shape_scale:噪声内(+0.00,71.10 vs 71.10)——提交态与父节点逐位相同 |
| family_id | T2EI-01 |
| 假设是否成立 | 否 |
| 经验 |
|
| mechanism_active | 否 |
| 下一步建议 |
|
对话摘要?每个角色和大模型对话的统计:轮数、工具调用、用时、token 数和最后的回答摘录;原始记录只给路径。
只给统计和最后回答的摘录;完整对话请到原始记录位置里列出的文件看。
分析员
| 角色?调研员写计划、工程师改代码、分析员解读分数、审查员检查作弊。 | 分析员 alibaba-token-plan-cn/qwen3.8-max |
|---|---|
| 调用次数 | 1 次 |
| 轮数?大模型一共回复了几轮(每轮可以调用多个工具)。 | 3 |
| 工具调用?大模型调用读文件、执行命令等工具的次数,按工具名统计。 | 共 3 次:bash 1、read 1、write 1 |
| 用时 | 不到 1 分 |
| token 数?输入 / 输出(含思考)的 token 数,来自接口返回的用量。 | 输入 12,696 · 输出 1,201 · 思考 356 |
| 任务(第一行) | 分析节点 n8 的打分结果,写 ANALYSIS.json |
| 最后的回答(摘录) | ANALYSIS.json written |
| 原始记录位置?完整对话记录在 Spark 上的文件路径;看板不复制原始内容。 | /home/spark-longxinyang/vec/runs/formal/20261003-043412-search-t2-embryo-interp-g24-D-s1/nodes/8/analyst.jsonl 10 KB /home/spark-longxinyang/vec/runs/formal/20261003-043412-search-t2-embryo-interp-g24-D-s1/nodes/8/analyst.stderr |
工程师
| 角色 | 工程师 alibaba-token-plan-cn/qwen3.8-max |
|---|---|
| 调用次数 | 1 次 |
| 轮数 | 24 |
| 工具调用 | 共 26 次:bash 16、edit 7、read 2、write 1 |
| 用时 | 10 分 |
| token 数 | 输入 46,065 · 输出 8,994 · 思考 7,364 |
| 任务(第一行) | 按计划修改程序:b细胞表达向a型均值收缩(contraction)改善cell_state |
| 最后的回答(摘录) | **完成**:实现了 PLAN 的 b 细胞向 a 型均值逐细胞收缩(T2EI_SHRINK)及 3 个父节点建议的变体(FPS 覆盖、z 切片分层、κ 重扫)。 **查分**(10/20 次,代理 A 半):收缩单调有害(cell_state 52.78→52.04 @SHRINK=0.30,PLAN 机制被否证);负 λ 外扩、FPS、rz、κ≠0.5 均 ≤0 或在噪声内。SHRINK=0 基线逐位复现父节点(60.3156 vs 60.32)。提交态 = 父配置 + 4 个全关的开关(已证伪代码留档),vec-check 通过、确定性验证通过。 **下一步最值得试**:cell_state 的表达侧杠杆在 mix 家族内已系统性排除(平移/收缩/外扩均有害),建议改试类型内 a/b 近邻配对生成中间态细胞,或直接对 occupancy_dice 的体素定义做覆盖贪心推 shape_scale;父配置(κ=0.5+radial+damp0.455)经 6 个正交扰动验证为稳健局部最优。 |
| 原始记录位置 | /home/spark-longxinyang/vec/runs/formal/20261003-043412-search-t2-embryo-interp-g24-D-s1/nodes/8/engineer.jsonl 130 KB /home/spark-longxinyang/vec/runs/formal/20261003-043412-search-t2-embryo-interp-g24-D-s1/nodes/8/engineer.stderr |
调研员
| 角色 | 调研员 alibaba-token-plan-cn/qwen3.8-max |
|---|---|
| 调用次数 | 1 次 |
| 轮数 | 1 |
| 工具调用 | 共 0 次:— |
| 用时 | 2 分 |
| token 数 | 输入 10,784 · 输出 940 · 思考 4,650 |
| 任务(第一行) | 为节点 n8(改进,父节点 n6)写改进计划 PLAN.json |
| 最后的回答(摘录) | {
"name": "b细胞表达向a型均值收缩(contraction)改善cell_state",
"motivation": "cell_state是最弱组(54.18),比expression_change(60.05)和shape_scale(71.10)低6-17分。κ=0.5已将cell_state从37.49提升到53.88,但剩余b细胞仍携带晚端表达谱,与目标中间时间不匹配。T2EI_ALPHA(型均值平移)已证伪(单调有害),但其失败原因是均匀平移破坏了型内结构;改用逐细胞向a型均值的收缩(contraction)是不同操作:平移对所有细胞施加相同向量,收缩则按细胞到a型均值的距离比例拉回,保留型内方差结构。",
"approach": "在父节点run.py的mix_damped中,对抽到的b细胞表达做逐细胞收缩:x_b_new = (1-λ)·x_b + λ·mu_a(type),其中mu_a(c)是a阶段该型的表达均值(已有type_means工具)。λ = SHRINK * t,SHRINK为环境变量T2EI_SHRINK,初始0.15,搜索范围{0.05, 0.10, 0.15, 0.20, 0.30}。仅修改b细胞表达,a细胞不动,坐标不动,类型配额不动。实现步骤:(1) 在mix_damped返回前,对b细胞子集按型计算a型均值(用as_dense + type_means);(2) 逐细胞线性插值;(3) 环境变量T2EI_SHRINK=0时逐位复现父节点。单输入阶段退路:无括号时fallback到最近输入,此时无b细胞,收缩自然不生效。vec-score快筛:先跑SHRINK=0确认复现60.32,再跑0.15看cell_state方向,若cell_state提升>1且其他组不降>1再扫其余值。",
"expected_groups": ["cell_state"],
"risks": "1) 收缩可能同时降低expression_change(b细胞表达被拉平,评分器可能期望保留晚端变化信号);Engineer应在第一次查分时同时看四组,若expression_change降>1.5即停止。2) 改善可能在噪声内(T2约1分);需至少2次查分(seed 0/1)确认方向一致。3) mu_a对小类型不稳定(<5个细胞);对型内细胞数<5的型跳过收缩(保持原表达)。",
"family_id": "T2EI-01",
"mechanism": "对保留的b细胞表达做逐细胞向a阶段同型均值的线性收缩(contraction),收缩强度与插值时间t成正比,使b细胞表达谱向目标中间时间靠拢,改善细胞状态匹配。",
"vs_constant_shift": "T2EI_ALPHA是对型内所有细胞施加相同平移向量(translation),本方案是按每个细胞到a型均值的距离做比例收缩(contraction):偏离越远的细胞被拉回越多,靠近均值的几乎不动。平移改变型心位置,收缩改变型内方差结构;平移对所有细胞一视同仁,收缩是自适应的。且本方案只动b细胞,不动a细胞。",
"mechanism_evidence": "1) 收缩后b细胞型内表达方差应下降(可计算收缩前后每型方差比);2) cell_state分组分应提升而shape_scale/local_spatial在噪声内不动(因为只改表达不改坐标);3) 若SHRINK=0.3时cell_state比0.15时进一步升,说明剂量-效应关系存在,机制在起作用。",
"mechanism_off_control": "设T2EI_SHRINK=0(环境变量),此时λ=0,x_b_new = x_b,程序输出应与父节点逐位一致。预期差别:关闭时四组分数与父节点相同(61.15附近),开启后cell_state应提升≥1分而其余组在噪声内。",
"sources": []
} |
| 原始记录位置 | /home/spark-longxinyang/vec/runs/formal/20261003-043412-search-t2-embryo-interp-g24-D-s1/nodes/8/researcher.jsonl 4 KB /home/spark-longxinyang/vec/runs/formal/20261003-043412-search-t2-embryo-interp-g24-D-s1/nodes/8/researcher.stderr |