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

总览 · ← 返回运行 20261003-155751-search-t2-heart-extrap-g40-s030

节点 n1 终选程序?按该运行锁定的规则最终选出的程序;可能是候选节点,也可能由护栏回退到基线。在终选来历上

seed scale_only

运行?一次完整的自动搜索或 Agent 会话,有自己的锁定配置和证据包。20261003-155751-search-t2-heart-extrap-g40-s030
父节点(种子,没有父节点)
子节点—
操作?种子:人写的起点;改进:在父节点上改;草稿:从头写;修复:修父节点的报错。种子
状态已打分
分数搜索目标分 50.00 · proxy_noscale 50.00 · 3 次复测均分 50.00
审查通过 seed (human-written, locked)
用时?从运行开始到结束(或到现在)的挂钟时间。不到 1 分
程序版本5bf4f6fe76fb6d0a58278e6394655e46454df501 (programs.git)

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

没有 METHOD.md。

调研员的计划

名称seed scale_only
做法seed scale_only: G40.3 尺度扫描的一个点:表达与细胞 = copy_last(最后输入,按类型分层抽到榜上限;同一 --seed 下细胞与 copy_last 完全相同),坐标形状不变,RMS 半径 = 最后输入(全部细胞)的 RM

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

对比:这个提交的上一版(种子程序:相对空仓库)。改动的文件:solution/EXECUTION.json +1 −0、solution/README.md +6 −0、solution/params.json +1 −0、solution/run.py +73 −0

diff --git a/solution/EXECUTION.json b/solution/EXECUTION.jsonnew file mode 100644index 0000000..9d5125c--- /dev/null+++ b/solution/EXECUTION.json@@ -0,0 +1 @@+{"gpu": false}diff --git a/solution/README.md b/solution/README.mdnew file mode 100644index 0000000..dfec7a4--- /dev/null+++ b/solution/README.md@@ -0,0 +1,6 @@+# scale_only(T2:heart:val_extrap)++G40.3 尺度扫描的一个点:表达与细胞 = copy_last(最后输入,按类型分层抽到榜上限;同一 --seed 下细胞与 copy_last 完全相同),坐标形状不变,RMS 半径 = 最后输入(全部细胞)的 RMS × exp(LOG_S)。`params.json`:LOG_S = 0.30(×1.35),COMP_TREND = 0(组成趋势开关,>0 时按上一步的类型比例变化 f_last + c·(f_last − f_prev) 抽细胞,默认关)。+`scale_only`、`scale_only_s015`、`scale_only_s045` 的 run.py 逐字相同,只有 params.json 不同(harness 没有按配置改种子参数的入口,所以每个扫描点是一个种子目录)。+本地尺子测不到这个旋钮:目标 proxy_noscale 把尺寸项固定在 copy_last 的值,而其余七项对整体缩放不变,所以本种子在 proxy_noscale 上与 copy_last 逐项相同(VM 实测:四组都是 50.00)。LOG_S 不在任何本地分数上选,由官网配额扫描(decisions.tsv 2026-10-03 第 115 行,预注册 0.15 / 0.30 / 0.45)。+final:n = 榜上限,纯 CPU,约 3 s;`vec_check` 通过。各阶段的尺寸不在这里给出(2026-10-03 泄漏审计)。diff --git a/solution/params.json b/solution/params.jsonnew file mode 100644index 0000000..79dcdd6--- /dev/null+++ b/solution/params.json@@ -0,0 +1 @@+{"LOG_S": 0.30, "COMP_TREND": 0.0}diff --git a/solution/run.py b/solution/run.pynew file mode 100644index 0000000..57ca043--- /dev/null+++ b/solution/run.py@@ -0,0 +1,73 @@+#!/usr/bin/env python3+"""scale_only (T2 extrapolation): copy_last's cells and expression, the cloud's shape unchanged, its RMS radius+multiplied by exp(LOG_S).++Expression and cell draw are copy_last's (the last input, stratified by cell type to the board cap; same rng use, so+at the same --seed the cells are identical to copy_last's). Coordinates: the drawn cells' own coordinates, centred and+rescaled so that the RMS radius = RMS(last input, all cells) * exp(LOG_S). Optional composition trend (COMP_TREND > 0,+default 0 = off): type fractions f_last + COMP_TREND * (f_last - f_prev) over the last step, drawn without replacement+(src.task2_spatial.shift.damped_fractions / sample.allocate). LOG_S and COMP_TREND come from params.json next to this+file (G40.3: one pre-registered LOG_S per locked run; the local rulers cannot measure the size term, so LOG_S is chosen+by official-quota sweep, not on any local score). With one input the composition trend is skipped.+"""++from __future__ import annotations++import argparse+import json+import sys+from pathlib import Path++import numpy as np++from src.task2_spatial.frame import rms_radius, scale_to_rms+from src.task2_spatial.sample import allocate, take+from src.task2_spatial.shift import damped_fractions+from src.task2_spatial.view_io import anchor_entry, extrap_step, load_manifest, panel_genes, read_stage, write_t2++PARAMS_FILE = Path(__file__).resolve().parent / "params.json"+++def load_params() -> dict:+    p = {"LOG_S": 0.0, "COMP_TREND": 0.0}+    if PARAMS_FILE.is_file():+        p.update(json.loads(PARAMS_FILE.read_text(encoding="utf-8")))+    bad = set(p) - {"LOG_S", "COMP_TREND", "note"}+    if bad:+        raise SystemExit(f"params.json: unknown keys {sorted(bad)}")+    return p+++def main() -> None:+    parser = argparse.ArgumentParser()+    parser.add_argument("--data", required=True)+    parser.add_argument("--out", required=True)+    parser.add_argument("--seed", type=int, default=0)+    args = parser.parse_args()+    p = load_params()+    log_s, comp = float(p["LOG_S"]), float(p["COMP_TREND"])++    manifest = load_manifest(args.data)+    genes = panel_genes(args.data, manifest)+    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)+    prev, _last, _ratio = extrap_step(manifest)+    if comp != 0.0 and prev is not None and n <= stage.n:+        stage_prev = read_stage(args.data, prev, genes)+        types, fracs = damped_fractions(stage_prev.labels, stage.labels, comp)+        rows = np.sort(allocate(stage.labels, types, fracs, n, rng))+    elif n <= stage.n:  # exactly copy_last's draw+        rows = np.sort(take(stage.labels, n, rng))+    else:  # fewer cells than min_cells: resample with replacement (as copy_last)+        rows = np.sort(rng.choice(stage.n, size=n, replace=True))+    rms_full = rms_radius(stage.coords)+    target = rms_full * float(np.exp(log_s))+    coords = scale_to_rms(stage.coords[rows], target)+    print(json.dumps({"log_s": log_s, "comp_trend": comp, "n": int(len(rows)), "rms_last": rms_full,+                      "out_rms": rms_radius(coords)}), file=sys.stderr)+    write_t2(args.out, stage.X[rows].toarray(), coords, genes, seed=args.seed)+++if __name__ == "__main__":+    main()

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

没有记录调研来源。

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

没有分析结果(ANALYSIS.json)。

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

只给统计和最后回答的摘录;完整对话请到原始记录位置?完整对话记录在 Spark 上的文件路径;看板不复制原始内容。里列出的文件看。

这个节点没有大模型对话记录。