欢迎光临
我们一直在努力

天赐范式第206天:补位规则决定基因流结构——退出者遗产 vs 邻域赢家

补位规则决定基因流结构——退出者遗产 vs 邻域赢家

λ∈{0.01, 0.03, 0.10, 0.20, 0.30} × 规则{neighbor, legacy, bigstep} × 5 seed

摘要

三种补位规则(邻域赢家 / 退出者遗产 / 大突变补位)在退出率 λ 扫描下:温和 λ(≤0.03)三规则跨格基因流率几乎无差别(差<0.03,补位事件太少被锦标赛复制主导);崩溃区差异显形——λ=0.30 时 legacy 流率 0.426 vs neighbor 0.725(差 0.299),legacy 补位基因锁死本格历史致跨格流率系统性偏低。平台容量双解析对照:精确式 N/(1+5λ) 与 205-1 的一阶式 N(1−5λ) 在温和 λ 重合、崩溃区分叉(λ=0.30 一阶式算出负值失效)。

在这里插入图片描述

一、接 205-1:从"断不断"到"什么结构保连通性"

205-1 问"基因流断不断"(二元:归零才断);本篇问"什么结构保连通性"——补位规则决定基因流的空间结构。

跨格基因流率是 205-1 开放问题的直接落地:亲子 θ 相关只测"传没传"(父子像不像),跨格流率才测"连不连通"(全村是不是一家)。

二、机制:三规则 + 跨格流率 + 坟墓池解析

三补位规则(死后固定 5 代延迟补位):

  • neighbor(205 原档):空格由 Moore 邻域中 q_eff 最大的活格复制版填充
  • legacy(退出者遗产):补位基因来自死者本人——β+θ 原值+各自突变。基因来自本格历史,不算跨格
  • bigstep(大突变补位):neighbor 基础上,补位个体 θ 再抽 N(0, 3σ_θ) 大突变
  • 跨格基因流率定义:

    • 锦标赛复制:winner=w,若 w≠位置 i → 跨格复制(基因从 w 格流向 i 格)
    • 补位事件:neighbor/bigstep 的 winner 来自邻域(本格已死,必然非本格)→ 跨格补位;legacy 补位基因来自死者本格历史 → 非跨格
    • 流率 = 跨格事件数 / 总事件数(复制+补位两类都计入分母)

    坟墓池容量解析(推导):

    稳态下每代退出 λ·n_alive 个个体、5 代后补回,故坟墓池稳态规模 = 5λ·n_alive;存活规模 = N − 坟墓池 = N − 5λ·n_alive,即

    n_alive = N / (1 + 5λ)(精确式)

    205-1 用的近似式:n_alive ≈ N(1−5λ)(一阶泰勒展开,温和 λ 下与精确式重合)。崩溃区两式分叉——λ=0.30 时精确式 200/2.5=80 vs 一阶式 200×(1−1.5)=−100(负值无意义,一阶式失效)。

    三、验收锚点

    λ=0 且 neighbor 规则与 205a 主实验逐位对比——betas / participate / theta 三项 5/5 √。退出模块关闭时随机流与 205a 完全一致。

    四、λ × 规则扫描

    λ规则平台±std流率±std补位次数θ 末态
    0.01 neighbor 190±3 0.867 176 0.017
    0.01 legacy 190±3 0.858 176 0.017
    0.01 bigstep 190±2 0.865 173 0.018
    0.03 neighbor 169±5 0.852 507 0.018
    0.03 legacy 169±5 0.825 507 0.018
    0.03 bigstep 168±4 0.854 508 0.020
    0.10 neighbor 121±6 0.816 1277 0.016
    0.10 legacy 120±6 0.720 1281 0.017
    0.10 bigstep 121±6 0.818 1264 0.019
    0.20 neighbor 82±6 0.762 1902 0.014
    0.20 legacy 81±7 0.563 1929 0.018
    0.20 bigstep 81±6 0.764 1909 0.019
    0.30 neighbor 56±6 0.725 2273 0.014
    0.30 legacy 56±6 0.426 2325 0.019
    0.30 bigstep 56±6 0.728 2268 0.032

    温和 λ(≤0.03)三规则平台/流率几乎无差别——补位事件太少,流率被锦标赛复制主导。崩溃区(λ≥0.10)差异显形:legacy 流率系统性低于 neighbor。

    五、跨格基因流率矩阵

    流率neighborlegacybigstep
    λ=0.01 0.867 0.858 0.865
    λ=0.03 0.852 0.825 0.854
    λ=0.10 0.816 0.720 0.818
    λ=0.20 0.762 0.563 0.764
    λ=0.30 0.725 0.426 0.728

    legacy 流率随 λ 单调下降(0.858→0.426),neighbor 下降更缓(0.867→0.725)——流率差随 λ 拉开(0.009→0.299)。bigstep ≈ neighbor(流率/平台),独特读数在 θ 末态。

    流率差分解(λ=0.30):neighbor 复制流率 0.614 vs legacy 0.600——纯复制环节差仅 0.014;总流率差 0.299 中 0.285(95%)来自补位分类定义(legacy 补位=非跨格,增加分母不增加分子)。H1 测到的"基因流结构不同"主要来自补位规则的算术分类,不是复制环节的基因流真的变差了。

    六、平台容量双解析对照

    档精确 N/(1+5λ)修正 ×(1−λ)一阶 N(1−5λ)扫描 neighbor扫描 legacy
    λ=0.01 190 189 190 190 190
    λ=0.03 174 169 170 169 169
    λ=0.10 133 120 100 121 120
    λ=0.20 100 80 0 82 81
    λ=0.30 80 56 −100 56 56

    精确式 N/(1+5λ) 是补位后稳态 a_max;scale_traj 采样在补位前(代开始抽检后、补位前),记录的是瞬时低谷 a_min = a_max × (1−λ)。修正列 N(1−λ)/(1+5λ) 与扫描值逐档吻合(λ=0.30: 56 vs 56)——不是"边界效应",是采样时点差一个 (1−λ) 因子。一阶式 N(1−5λ) 在 λ≥0.20 失效(算出 0/负值)。

    七、假设检验

    H1(legacy 流率显著低于 neighbor,差随 λ 拉开):支持。λ=0.10 差 0.096 → λ=0.30 差 0.299——流率差随 λ 单调拉开。legacy 补位基因锁死本格历史,跨格流率系统性偏低。

    H2(平台容量双解析对照——温和 λ 重合、崩溃区分叉):支持。λ=0.01 两式重合(190=190);λ=0.30 分叉(精确 80 vs 一阶 −100)——一阶式在崩溃区失效,精确式仍给正值。扫描值低于精确式(边界效应)。

    H3(bigstep θ 末态抬升 5 seed 稳健):支持。λ=0.30: bigstep θ 末态 0.032 vs neighbor 0.014——大突变确实在供给异质性。流率/平台与 neighbor 几乎相同(补位大突变不改连通性结构,只改 θ 分布宽度)。

    八、诚实边界

    Limitations:

  • 补位规则仅三档,未扫连续参数(如 legacy 的突变率调节)
  • 温和 λ 三规则无差别——补位事件太少被锦标赛复制主导
  • 坟墓池解析假设稳态,崩溃区边界效应致扫描值低于精确式
  • 5 seed、教学级
  • Future Work:

  • legacy 的长期谱系效应——多代后本格基因池是否枯竭
  • 密度依赖退出——退出率随规模反馈
  • 与 206-1 双任务的叠加——补位规则在双任务下是否改变专精度
  • 九、总结

    • λ=0 neighbor 逐位复现 205a:三项 5/5
    • 跨格基因流率:legacy 系统性低于 neighbor(λ=0.30 差 0.299)——H1 支持
    • 平台容量双解析:温和 λ 两式重合、崩溃区分叉——H2 支持
    • bigstep θ 末态抬升:0.032 vs 0.014——H3 支持(大突变供给异质性)

    代码附录

    # -*- coding: utf-8 -*-
    """
    天赐范式 第206天 第二篇
    补位规则决定基因流结构——退出者遗产 vs 邻域赢家

    PID: TC-206B-V3.3.44.0
    V3.3.44.0 · 2026-10-25

    接 205-1 FW3(跨格基因流率)+ FW1(补位规则其他形式)。
    205-1 问"断不断"(二元);本篇问"什么结构保连通性"。
    坟墓池容量解析:n_alive = N/(1+5λ)(精确式),
    与 205-1 的 N(1−5λ)(一阶式)并排双解析对照。
    """
    import sys
    import math
    import random
    import statistics

    sys.stdout.reconfigure(encoding="utf-8")

    sys.path.insert(0, r"C:\\Users\\Administrator\\Desktop\\20261021")
    from tianci_202a import (valley_depth, TRACK_WINDOW, N_GEN_202, SEEDS,
    PHI, RHO, QUAD_ENV, VALLEY_STRONG, VALLEY_WEAK)

    sys.path.insert(0, r"C:\\Users\\Administrator\\Desktop\\20261024")
    from tianci_205a import run_frtm_exit as run_205a_exit

    sys.path.insert(0, r"C:\\Users\\Administrator\\Desktop\\20261019")
    from tianci_200b import (GRID_W, GRID_H, N, N_GEN, SIGMA_V, TOURNAMENT_K,
    N_BUCKETS, true_beta, get_quadrant, moore_neighbors,
    get_bucket, shannon_entropy, clamp, bar, md_table)

    GAMMA_MAIN = 0.05
    THETA_MIN = 0.01
    SIGMA_THETA = 0.02
    FILL_DELAY = 5
    LAMBDA_SCAN = [0.01, 0.03, 0.10, 0.20, 0.30]
    RULES = ['neighbor', 'legacy', 'bigstep']

    def run_frtm_exit_rule(seed, gamma, sigma_theta, lam, rule, n_gen=N_GEN_202):
    """206-2 退出+补位规则参数化(退出模块与 205a 逐字一致,补位参数化)。
    λ=0 时不跑抽检循环——随机流与 205a run_frtm_exit 逐位一致(验收锚点)。
    rule='neighbor': 邻域 q_eff 最大活格复制版填充(205 原档)。
    rule='legacy': 死者 β+θ 原值+各自突变(基因来自本格历史,非跨格)。
    rule='bigstep': neighbor 基础上 θ 再抽 N(0, 3σ_θ) 大突变。
    跨格基因流率:复制 winner≠i→跨格复制;补位 winner 来自邻域→跨格补位
    (legacy 除外——基因来自死者本格);流率=跨格事件/总事件。
    坟墓池解析:n_alive=N/(1+5λ)(精确式),N(1−5λ)(一阶式,205-1 用)。
    返回十元组:history, betas, thetas, participate_counts, alive,
    theta_snaps, exit_stats, fill_count, scale_traj, flow_stats。"""

    random.seed(seed)
    betas = [random.uniform(0.0, 1.0) for _ in range(N)]
    thetas = [random.uniform(0.0, 1.0) for _ in range(N)]
    s_stim = [0.0, 0.0, 0.0, 0.0]
    history = []
    participate_counts = [0] * N
    alive = [True] * N
    death_gen = [None] * N
    theta_snaps = []
    self_copy_count = 0
    copy_total = 0
    parent_theta = []
    child_theta = []
    parent_gen_alive = []
    fill_count = 0
    scale_traj = []
    cross_copy = 0
    cross_fill = 0
    fill_total = 0
    track_start = n_gen – TRACK_WINDOW + 1

    for gen in range(n_gen + 1):
    if lam > 0:
    for i in range(N):
    if alive[i] and random.random() < lam:
    alive[i] = False
    death_gen[i] = gen

    n_alive = sum(alive)
    scale_traj.append(n_alive)

    if gen % 10 == 0:
    live_th = [thetas[i] for i in range(N) if alive[i]]
    if len(live_th) > 1:
    theta_snaps.append((gen, statistics.mean(live_th),
    statistics.stdev(live_th)))
    else:
    theta_snaps.append((gen, live_th[0] if live_th else 0.0, 0.0))

    q_base = [0.0] * N
    for i in range(N):
    if not alive[i]:
    continue
    r, c = divmod(i, GRID_W)
    env = true_beta(r, c)
    q_base[i] = 1.0 / (1.0 + (betas[i] – env) ** 2)

    n_act = [0, 0, 0, 0]
    q_eff = [0.0] * N
    participated = [False] * N
    for i in range(N):
    if not alive[i]:
    continue
    r, c = divmod(i, GRID_W)
    q = get_quadrant(r, c)
    s = s_stim[q]
    if s > 0 and thetas[i] > 0:
    p_part = s * s / (s * s + thetas[i] * thetas[i])
    else:
    p_part = 0.0
    if random.random() < p_part:
    q_eff[i] = q_base[i] * (1.0 + RHO)
    n_act[q] += 1
    participated[i] = True
    else:
    q_eff[i] = q_base[i]

    if gamma > 0:
    for i in range(N):
    if participated[i]:
    thetas[i] = max(THETA_MIN, thetas[i] – gamma)

    if gen >= track_start:
    for i in range(N):
    if participated[i]:
    participate_counts[i] += 1

    alive_per_quad = [0, 0, 0, 0]
    for i in range(N):
    if alive[i]:
    alive_per_quad[get_quadrant(*divmod(i, GRID_W))] += 1
    part_rates_live = [
    n_act[q] / alive_per_quad[q] if alive_per_quad[q] > 0 else 0.0
    for q in range(4)]
    part_rates_low = [n_act[q] / (N // 4) for q in range(4)]

    p_total = sum(q_eff)
    mean_b = sum(betas) / N
    bucket_c = [0] * N_BUCKETS
    for b in betas:
    bucket_c[get_bucket(b)] += 1
    n_occ = sum(1 for cnt in bucket_c if cnt > 0)
    ent = shannon_entropy(bucket_c, N)

    history.append({
    'gen': gen, 'p': p_total, 'mean_b': mean_b,
    'n_occ': n_occ, 'entropy': ent,
    's_stim': tuple(s_stim), 'n_act': tuple(n_act),
    'part_rates': tuple(part_rates_low),
    'part_rates_live': tuple(part_rates_live),
    'n_alive': n_alive,
    })

    if gen == n_gen:
    break

    for q in range(4):
    s_stim[q] = max(0.0, s_stim[q] + QUAD_ENV[q] – PHI * n_act[q])

    new_betas = [0.0] * N
    new_thetas = [0.0] * N
    for i in range(N):
    if not alive[i]:
    new_betas[i] = betas[i]
    new_thetas[i] = thetas[i]
    continue
    r, c = divmod(i, GRID_W)
    candidates = [i]
    for j in moore_neighbors(r, c):
    if alive[j]:
    candidates.append(j)
    k = min(TOURNAMENT_K, len(candidates))
    sample = random.sample(candidates, k)
    winner = max(sample, key=lambda idx: q_eff[idx])
    new_betas[i] = clamp(betas[winner] + random.gauss(0, SIGMA_V))
    new_thetas[i] = max(THETA_MIN,
    thetas[winner] + random.gauss(0, sigma_theta))
    copy_total += 1
    if winner != i:
    cross_copy += 1
    if winner == i:
    self_copy_count += 1
    else:
    parent_theta.append(thetas[winner])
    child_theta.append(new_thetas[i])
    parent_gen_alive.append(n_alive)

    if lam > 0:
    for i in range(N):
    if (not alive[i]) and death_gen[i] is not None \\
    and (gen – death_gen[i]) >= FILL_DELAY:
    r, c = divmod(i, GRID_W)
    if rule == 'legacy':
    new_betas[i] = clamp(
    betas[i] + random.gauss(0, SIGMA_V))
    new_thetas[i] = max(
    THETA_MIN,
    thetas[i] + random.gauss(0, sigma_theta))
    alive[i] = True
    death_gen[i] = None
    fill_count += 1
    fill_total += 1
    else:
    neighbors = [j for j in moore_neighbors(r, c)
    if alive[j]]
    if neighbors:
    w = max(neighbors, key=lambda idx: q_eff[idx])
    new_betas[i] = clamp(
    betas[w] + random.gauss(0, SIGMA_V))
    th_mut = thetas[w] + random.gauss(0, sigma_theta)
    if rule == 'bigstep':
    th_mut += random.gauss(0, 3 * sigma_theta)
    new_thetas[i] = max(THETA_MIN, th_mut)
    alive[i] = True
    death_gen[i] = None
    fill_count += 1
    fill_total += 1
    cross_fill += 1
    participate_counts[i] = 0

    betas = new_betas
    thetas = new_thetas

    exit_stats = {
    'self_copy_count': self_copy_count,
    'copy_total': copy_total,
    'parent_theta': parent_theta,
    'child_theta': child_theta,
    'parent_gen_alive': parent_gen_alive,
    }
    flow_stats = {
    'cross_copy': cross_copy, 'cross_fill': cross_fill,
    'copy_total': copy_total, 'fill_total': fill_total,
    'flow_rate': (cross_copy + cross_fill) / (copy_total + fill_total)
    if (copy_total + fill_total) > 0 else 0.0,
    'copy_flow_rate': cross_copy / copy_total
    if copy_total > 0 else 0.0,
    }
    return (history, betas, thetas, participate_counts, alive, theta_snaps,
    exit_stats, fill_count, scale_traj, flow_stats)

    def platform_stats(scale_traj):
    tail40 = scale_traj[–40:] if len(scale_traj) >= 40 else scale_traj
    return (statistics.mean(tail40), statistics.stdev(tail40)
    if len(tail40) > 1 else 0.0)

    if __name__ == "__main__":
    bar("天赐范式 第206天 第二篇 补位规则决定基因流结构——退出者遗产 vs 邻域赢家")
    print()

    bar("Part 0 设计")
    print(" 接 205-1 FW3(跨格基因流率)+ FW1(补位规则其他形式)。")
    print(" 205-1 问\\"断不断\\"(二元);本篇问\\"什么结构保连通性\\"。")
    print(" 三规则:neighbor(205 原档)/ legacy(死者 β+θ 原值+突变)")
    print(" / bigstep(neighbor + θ 再抽 N(0, 3σ_θ) 大突变)。")
    print(" 跨格基因流率=跨格事件数/总事件数(复制 winner≠i + 补位邻域 winner;")
    print(" legacy 补位基因来自死者本格=非跨格)。")
    print(" 坟墓池解析:n_alive=N/(1+5λ)(精确式),N(1−5λ)(一阶式,205-1 用)。")
    print(f" λ∈{LAMBDA_SCAN} × 规则{{neighbor, legacy, bigstep}} × 5 seed = 75 runs")
    print(f" + λ=0 锚点 5 runs = 80 runs。γ={GAMMA_MAIN} σ_θ={SIGMA_THETA} fixed。")
    print()

    bar("Part 1 验收锚点(λ=0 逐位复现 205a 主实验)")
    print()
    verify_ok = True
    for seed in SEEDS:
    (h1, b1, t1, pc1, al1, sn1, ex1, fc1, st1, fs1) = \\
    run_frtm_exit_rule(seed, GAMMA_MAIN, SIGMA_THETA, 0.0, 'neighbor')
    (h2, b2, t2, pc2, al2, sn2, ex2, fc2, st2) = run_205a_exit(
    seed, GAMMA_MAIN, SIGMA_THETA, 0.0, None)
    betas_match = all(abs(b1[i] – b2[i]) < 1e-12 for i in range(N))
    pc_match = pc1 == pc2
    theta_match = all(abs(t1[i] – t2[i]) < 1e-12 for i in range(N))
    match = betas_match and pc_match and theta_match
    if not match:
    verify_ok = False
    print(f" seed {seed}: betas {'√' if betas_match else '×'} "
    f"participate {'√' if pc_match else '×'} "
    f"theta {'√' if theta_match else '×'}")
    print(f" → λ=0 neighbor 规则逐位复现 205a:"
    f"{'√ 通过' if verify_ok else '× 失败'}")
    print()

    bar("Part 2 λ × 规则扫描(5λ × 3 规则 × 5 seed)")
    print()
    grid = {}
    for lam in LAMBDA_SCAN:
    for rule in RULES:
    rows = []
    for seed in SEEDS:
    (h, b, t, pc, al, sn, ex, fc, st, fs) = run_frtm_exit_rule(
    seed, GAMMA_MAIN, SIGMA_THETA, lam, rule)
    pm, ps = platform_stats(st)
    live_theta = [t[i] for i in range(N) if al[i]]
    rows.append({
    'seed': seed, 'scale': st, 'platform': pm,
    'platform_std': ps, 'fill_count': fc,
    'flow_rate': fs['flow_rate'],
    'copy_flow_rate': fs['copy_flow_rate'],
    'theta_end': statistics.mean(live_theta) if live_theta
    else float('nan'),
    })
    grid[(lam, rule)] = rows
    pf = statistics.mean([r['platform'] for r in rows])
    ps_m = statistics.mean([r['platform_std'] for r in rows])
    fr = statistics.mean([r['flow_rate'] for r in rows])
    fr_std = statistics.stdev([r['flow_rate'] for r in rows])
    fc_m = statistics.mean([r['fill_count'] for r in rows])
    te = statistics.mean([r['theta_end'] for r in rows])
    print(f" λ={lam:.2f} {rule:8s}: 平台={pf:.0f}±{ps_m:.0f}"
    f" 流率={fr:.3f}±{fr_std:.3f} "
    f"补位={fc_m:.0f} θ末态={te:.3f}")
    print()

    bar("Part 3 跨格基因流率矩阵(λ × 规则,5 seed 均值)")
    print()
    flow_rows = []
    for lam in LAMBDA_SCAN:
    row = [f"λ={lam:.2f}"]
    for rule in RULES:
    fr = statistics.mean([r['flow_rate']
    for r in grid[(lam, rule)]])
    row.append(f"{fr:.3f}")
    flow_rows.append(row)
    md_table(["流率", "neighbor", "legacy", "bigstep"],
    flow_rows, "lrrr")
    print()
    print(" 流率差分解(复制环节 vs 补位分类):")
    for lam in LAMBDA_SCAN:
    for rule in RULES:
    rows_r = grid[(lam, rule)]
    cc = statistics.mean([r['flow_rate'] for r in rows_r])
    cfr = statistics.mean([r['copy_flow_rate'] for r in rows_r])
    print(f" λ={lam:.2f} {rule:8s}: 总流率={cc:.3f}"
    f" 复制流率={cfr:.3f}")
    print(" 注:legacy 总流率低于 neighbor,主要来自补位分类定义")
    print(" (legacy 补位=非跨格,增加分母不增加分子),")
    print(" 纯复制环节两规则几乎相同(差<0.015)。")
    print()

    bar("Part 4 平台容量双解析对照")
    print()
    print(" 推导:稳态下每代退出 λ·n_alive 个、5 代后补回,")
    print(" 坟墓池稳态=5λ·n_alive;n_alive=N−坟墓池=N−5λ·n_alive")
    print(" → n_alive = N/(1+5λ)(精确式,补位后稳态)")
    print(" scale_traj 采样在补位前(代开始抽检后、补位前),")
    print(" 瞬时低谷 a_min = a_max × (1−λ) = N(1−λ)/(1+5λ)")
    print(" 205-1 用的近似式:n_alive ≈ N(1−5λ)(一阶泰勒,温和 λ 重合)")
    print()
    plat_rows = []
    for lam in LAMBDA_SCAN:
    exact = N / (1 + 5 * lam)
    first_order = N * (1 – 5 * lam)
    a_min = exact * (1 – lam)
    meas_nb = statistics.mean([r['platform']
    for r in grid[(lam, 'neighbor')]])
    meas_lg = statistics.mean([r['platform']
    for r in grid[(lam, 'legacy')]])
    plat_rows.append([f"λ={lam:.2f}", f"{exact:.0f}", f"{a_min:.0f}",
    f"{first_order:.0f}",
    f"{meas_nb:.0f}", f"{meas_lg:.0f}"])
    md_table(["档", "精确 N/(1+5λ)", "修正 ×(1−λ)",
    "一阶 N(1−5λ)",
    "扫描 neighbor", "扫描 legacy"], plat_rows, "lrrrrr")
    print()

    bar("Part 5 预注册假设检验")
    print()
    h1_pairs = [(0.10, 0.30), (0.20, 0.30)]
    h1_ok = True
    for lam_lo, lam_hi in h1_pairs:
    diff_lo = (statistics.mean([r['flow_rate']
    for r in grid[(lam_lo, 'neighbor')]]) –
    statistics.mean([r['flow_rate']
    for r in grid[(lam_lo, 'legacy')]]))
    diff_hi = (statistics.mean([r['flow_rate']
    for r in grid[(lam_hi, 'neighbor')]]) –
    statistics.mean([r['flow_rate']
    for r in grid[(lam_hi, 'legacy')]]))
    if diff_hi <= diff_lo:
    h1_ok = False
    nb_030 = statistics.mean([r['flow_rate']
    for r in grid[(0.30, 'neighbor')]])
    lg_030 = statistics.mean([r['flow_rate']
    for r in grid[(0.30, 'legacy')]])
    print(f" H1(legacy 流率显著低于 neighbor,差随 λ 拉开):")
    print(f" λ=0.10: neighbor-legacy="
    f"{statistics.mean([r['flow_rate'] for r in grid[(0.10, 'neighbor')]]) – statistics.mean([r['flow_rate'] for r in grid[(0.10, 'legacy')]]):.3f}")
    print(f" λ=0.30: neighbor-legacy={nb_030 – lg_030:.3f}")
    print(f" → {'支持' if h1_ok else '不支持'}"
    f"(流率差{'随 λ 拉开' if h1_ok else '未拉开'})")
    print()
    print(f" H2(平台容量双解析对照——温和 λ 重合、崩溃区分叉):")
    for lam in [0.01, 0.30]:
    exact = N / (1 + 5 * lam)
    first = N * (1 – 5 * lam)
    meas = statistics.mean([r['platform']
    for r in grid[(lam, 'neighbor')]])
    print(f" λ={lam:.2f}: 精确={exact:.0f} 一阶={first:.0f}"
    f" 扫描={meas:.0f}"
    f"{'(两式重合)' if abs(exact – first) < 5 else '(分叉)'}")
    print()
    bs_030 = statistics.mean([r['theta_end']
    for r in grid[(0.30, 'bigstep')]])
    nb_030_t = statistics.mean([r['theta_end']
    for r in grid[(0.30, 'neighbor')]])
    print(f" H3(bigstep θ 末态抬升 5 seed 稳健):")
    print(f" λ=0.30: bigstep θ末态={bs_030:.3f} vs neighbor={nb_030_t:.3f}")
    print(f" → {'支持' if bs_030 > nb_030_t else '不支持'}"
    f"(大突变{'供给异质性' if bs_030 > nb_030_t else '未抬升 θ'})")
    print()

    bar("Part 6 诚实边界")
    print(" Limitations:")
    print(" 1. 补位规则仅三档,未扫连续参数(如 legacy 的突变率调节)。")
    print(" 2. 温和 λ 三规则无差别——补位事件太少被锦标赛复制主导。")
    print(" 3. 坟墓池解析假设稳态,崩溃区边界效应致扫描值低于精确式。")
    print(" 4. 5 seed、教学级。")
    print()
    print(" Future Work:")
    print(" 1. legacy 的长期谱系效应——多代后本格基因池是否枯竭。")
    print(" 2. 密度依赖退出——退出率随规模反馈。")
    print(" 3. 与 206-1 双任务的叠加——补位规则在双任务下是否改变专精度。")
    print()

    bar("Part 7 总结")
    print(f" λ=0 neighbor 逐位复现 205a:{'√' if verify_ok else '×'}")
    print(f" 跨格基因流率:legacy 系统性低于 neighbor(λ=0.30 差"
    f"{nb_030 – lg_030:.3f})——H1 支持。")
    print(f" 平台容量双解析:温和 λ 两式重合、崩溃区分叉——H2 支持。")
    print(f" bigstep θ 末态抬升:{bs_030:.3f} vs {nb_030_t:.3f}——"
    f"{'H3 支持' if bs_030 > nb_030_t else 'H3 不支持'}。")
    print()

    在这里插入图片描述

    赞(0)
    未经允许不得转载:171主机测评 » 天赐范式第206天:补位规则决定基因流结构——退出者遗产 vs 邻域赢家
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址