天赐范式第186天:让方差开始自洽——Bulmer效应的闭式验证

天赐范式第186天·第一篇:让方差开始自洽------Bulmer效应的闭式验证


摘要

Var(g)自洽方程组从(σ_v,σ_e,ω,β)纯输入迭代解出不动点------零模拟输入。18格点验证Bulmer压缩方向成立(−0%~−4.71%)。弧签名最终升级:全链先验对数值。


一、接续185-1:方差是最后一个从模拟测的量

第185-1篇交出了S闭式解:S = (x* − μ)·σ²/(σ²+ω²),从景观参数先验算出,不再从模拟测。但它留了一个尾巴(185-1降调1):

"h²里的Var(g)仍从模拟测。Bulmer效应(选择代代压缩遗传方差)是下一步的债------要真独立,Var(g)也得从输入参数算出来,不能从模拟回测。"

这就是今天第一篇的活。当时的处境是:整条链条只剩Var(g)还是模拟实测。S闭式解的两个输入------表型均值μ和表型方差σ²=Var(g)+σ_e²------μ由185-1的均值不动点处理(186-2会用),σ²里的Var(g)还在模拟里。这意味着185-1的"独立预测"还不是完全独立:h²(=Var(g)/(Var(g)+σ_e²))是从模拟稳态测出来的。

要让公式真独立,Var(g)也得从(σ_v, σ_e, ω, β)算出来。 这就是Bulmer自洽方程。


二、自洽方程组:三个方程的来历

遗传方差在什么条件下才与输入参数自洽?选择每一代都在改变遗传方差,稳态要求"选择压缩的方差 = 变异注入补回的方差"。拆成三步,每一步都有闭式依据:

2.1 选择后表型方差 V_x':高斯×高斯卷积

表型先验(环境+遗传)是高斯,fitness也是高斯(高斯加权选择的定义),选择机制等价于按fitness加权抽样------加权后的分布就是两者的乘积,仍是高斯。两个高斯的乘积方差:

V_x' = σ_x² · ω² / (σ_x² + ω²)

其中 σ_x² = Var(g) + σ_e²(表型方差),ω² = 0.01(fitness峰宽度平方)。选择把高fitness区间的个体加权放大,方差被压缩------这是Bulmer效应的第一个来源。

2.2 选择亲本的遗传方差 Var(g_sel):高斯回归精确

选择了亲本表型x,遗传值g的条件分布是高斯的(高斯×高斯回归精确,不需要弱选择近似):

  • 条件期望:Eg\|x = μ_g + h²·(x − μ_x)(回归系数=遗传力h²)
  • 条件方差:Var(g|x) = Var(g)·(1 − h²)(回归残差方差,与x无关)

选择后(x的分布方差从σ_x²变为V_x'):

Var(g_sel) = h⁴·V_x' + Var(g)·(1 − h²)

第一项是条件期望的方差(回归预测项,h⁴放大选择后方差),第二项是条件残差方差(回归漏掉的遗传方差,选择不改变它)。两项都是精确的,没有近似。

2.3 遗传方差更新:变异注入

更新规则 g' = TARGET + β(g_sel − TARGET) + v,v ~ N(0, σ_v²) 独立于亲本:

Var(g)' = β²·Var(g_sel) + σ_v²

β²=0.09 是压缩因子(反正则化),σ_v² 是每代注入的新变异。

**不动点条件:**稳态要求 Var(g)' = Var(g)。把这句写进去:

Var(g)* = β²·h⁴·V_x' + Var(g)\*(1 − h²) + σ_v²

右侧的h²和V_x'都依赖Var(g)自己------这就是自洽:不动点同时出现在方程两侧。变量:

  • h² = Var(g)/(Var(g)+σ_e²)
  • V_x' = (Var(g)+σ_e²)·ω²/(Var(g)+σ_e²+ω²)

三、收敛性:定点迭代,3--8步到TOL=1e-12

把不动点方程写成迭代映射 f(V):

V ← β²·h⁴·V_x' + V·(1−h²) + σ_v²

收敛性三个观察:

  1. 中性启动。 初值取无选择时的中性期望 V₀ = σ_v²/(1−β²)(σ_v=0.02时=0.000440)。不加选择压力时这就是零代稳态,是自然的启动点。
  2. 单调压缩。 f是V的单调增函数,且 β²=0.09 强压缩:无论启动点在哪,第一次迭代就把V拉到噪声注入水平附近,之后每步收缩到不动点。
  3. 实测3--8步收敛。 18个格点全部在8步内到达TOL=1e-12(σ_v=0.002端最快3步,σ_v=0.025--0.060段最慢8步,σ_v=0.100为7步),无振荡、无发散。压缩映射性质在全部参数区成立。

四、实验设计

模型与185完全一致(x = g + e,g' = TARGET + β(g_sel − TARGET) + v),选择机制高斯加权(与185-1一致)。

固定:β=0.3, σ_e=0.02, N=200, gen=500, seeds=20, x*=0.8, ω=0.1, TARGET=0.5;扫描σ_v从0.002到0.100共18个格点(与185-1同一网格)。

对照三方:Var(g)*自洽 (纯输入迭代,零模拟)vs Var(g)模拟 (500代稳态实测均值)vs 中性期望 σ_v²/(1−β²)(无选择时的理论值,仅供压缩量级参照)。


五、结果:自洽不动点 vs 模拟稳态

σ_v Var(g)*自洽 Var(g)模拟 中性期望 偏差% 压缩%
0.002 0.000004 0.000004 0.000004 +5.90% -0.00%
0.004 0.000018 0.000017 0.000018 +5.67% -0.02%
0.006 0.000040 0.000038 0.000040 +5.13% -0.07%
0.008 0.000070 0.000066 0.000070 +5.91% -0.19%
0.010 0.000109 0.000103 0.000110 +6.71% -0.36%
0.012 0.000157 0.000149 0.000158 +5.26% -0.57%
0.014 0.000214 0.000206 0.000215 +3.97% -0.80%
0.016 0.000278 0.000269 0.000281 +3.64% -1.02%
0.018 0.000352 0.000341 0.000356 +3.20% -1.21%
0.020 0.000434 0.000418 0.000440 +3.67% -1.37%
0.025 0.000675 0.000660 0.000687 +2.29% -1.66%
0.030 0.000971 0.000943 0.000989 +2.96% -1.84%
0.035 0.001320 0.001269 0.001346 +3.97% -1.97%
0.040 0.001721 0.001648 0.001758 +4.46% -2.11%
0.050 0.002680 0.002597 0.002747 +3.21% -2.45%
0.060 0.003843 0.003656 0.003956 +5.11% -2.87%
0.080 0.006765 0.006474 0.007033 +4.48% -3.82%
0.100 0.010472 0.009951 0.010989 +5.24% -4.71%

压缩方向成立:Var(g)* 全部低于中性期望,−0.00%~−4.71%(中位−1.29%)。 选择确实在代代压缩遗传方差,且压缩随σ_v单调加深------变异注入越多、选择越有的压。这是Bulmer效应在闭式层面的直接兑现:不经模拟,纯输入迭代就把"选择压缩方差"这个机制算出来了。

自洽 vs 模拟偏差中位 +4.47%、最大 +6.71%。 自洽解系统性略高于模拟稳态,所有格点同号。这不是随机噪声,是有偏差来源的------见下节。


六、偏差 +4.47% 的账:多项式抽样 vs 精确高斯变换

为什么自洽解系统性高于模拟?两个原因:

  1. 仿真器的选择是多项式抽样,不是精确高斯变换。 高斯×高斯卷积给出的是"加权后分布=高斯"的精确解,但Numpy的rng.choice按fitness概率做多项式抽样------有限种群中加权分布按多项式逼近高斯乘积,抽样噪声和有限代数使稳态方差略低于精确闭式值。185-1的S比值(模拟/闭式,0.932--0.982,中段最低)是同一个来源:低h²端模拟方差被抽样噪声吃掉一点,闭式解按精确高斯算,系统性偏高2%~7%,和这里+4.47%的偏差量级完全同源。
  2. 有限种群+有限代数的稳态残余。 N=200、gen=500不是无穷代极限,稳态方差仍有种子间波动(σ_v=0.002格点方差仅0.000004,绝对量小,相对偏差被放大到+5.90%,与185-1的"小量比值"问题同源)。

偏差方向、量级、格点分布都与185-1的S比值偏差一致------这是同一套近似误差在方差通路上的再现,不是新的机制错误。三个量(S、Δ*、Var(g))现在共享同一个误差账本。


七、结论与弧签名动作

问题 答案
Var(g)能从输入算出来吗? 能。自洽方程组从(σ_v,σ_e,ω,β)纯输入迭代,3--8步收敛,零模拟输入
选择压缩方向的证据? 18/18格点Var(g)* < 中性期望,压缩−0.00%~−4.71%(中位−1.29%),随σ_v单调加深
自洽 vs 模拟差多少? 中位+4.47%、最大+6.71%,多项式抽样vs精确高斯变换的近似误差,与185-1的S偏差同源
全链还差什么? 均值不动点μ*(185-1闭式S先验,下一篇用)

叙事弧:

  • 183-2:S和h²从同一模拟测出,ratio≈1构造上注定
  • 185-1:S从景观先验算出,独立预测对数值成立(弧签名动作第一次升级)
  • 186-1:Var(g)从输入参数自洽算出,全链只剩均值不动点待显式化
  • 弧签名动作最终升级:独立预测对数值 → 全链先验对数值

降调:

  1. 偏差+4.47%是近似误差,不是闭式解错。 来源=多项式抽样vs精确高斯变换,与185-1的S比值偏差(0.932--0.982)同源同量级。要消除需把抽样换成精确高斯变换或加大N、加长代数,这是工程精度问题不是理论问题。

  2. h⁴V_x'项用了高斯回归的精确性,但有限种群下h²本身是估计值。 回归系数h²=Var(g)/(Var(g)+σ_e²)在模拟里从稳态方差算出,受抽样噪声影响,184-2已发现低h²端边界会互相污染。

  3. 均值不动点μ*本篇未显式化。 S闭式解里的μ由185-1的均值收支处理,Var(g)*自洽后μ*的全链解在186-2给出------那是整条链闭合的最后一块。

  4. 单位点模型。 多位点、上位效应、连锁不平衡待后续。

系列还在逐步建设中,完善是和伙伴们的努力方向。


附录:完整代码

python 复制代码
# -*- coding: utf-8 -*-
"""
天赐范式 第186天 第一篇
让方差开始自洽------Bulmer效应的闭式验证

PID: TC-186-V3.3.24.0
V3.3.24.0 · 2026-10-05

还185-1降调1的债:h²里的Var(g)不再从模拟测。
自洽方程组(纯输入σ_v, σ_e, ω, β迭代解出Var(g)*):
  1) V_x'   = σ_x²·ω²/(σ_x²+ω²)                 # 高斯×高斯卷积
  2) Var(g_sel) = h⁴·V_x' + Var(g)·(1-h²)       # 高斯回归精确
  3) Var(g)' = β²·Var(g_sel) + σ_v²             # 更新规则
稳态不动点:Var(g)* 同时出现在方程两侧。

预期:选择代代压缩方差,Var(g)* 系统性低于中性期望 σ_v²/(1-β²)。
弧签名动作最终升级:独立预测对数值 → 全链先验对数值。

模型(与185一致):x=g+e, g'=TARGET+β(g_sel-TARGET)+v
选择机制:高斯加权(按fitness加权抽样,非截尾)
"""

import sys
import math
import numpy as np

if hasattr(sys.stdout, "reconfigure"):
    sys.stdout.reconfigure(encoding="utf-8")

PID = "TC-186-V3.3.24.0"

TARGET = 0.5
FITNESS_PEAK = 0.8
FITNESS_WIDTH = 0.10
BETA = 0.3
SIGMA_E = 0.02
N_POP = 200
N_GENERATIONS = 500
N_SEEDS = 20
TOL = 1e-12
MAX_ITER = 5000

SIGMA_V_GRID = [
    0.002, 0.004, 0.006, 0.008, 0.010,
    0.012, 0.014, 0.016, 0.018, 0.020,
    0.025, 0.030, 0.035, 0.040, 0.050,
    0.060, 0.080, 0.100,
]


def bar(title):
    print("=" * 72)
    print("  " + title)
    print("=" * 72)
    print()


def sub(title):
    print("【" + title)
    print("-" * 72)


def fitness(x):
    return np.exp(-(x - FITNESS_PEAK) ** 2 / (2 * FITNESS_WIDTH ** 2))


def solve_self_consistent(sigma_v):
    """定点迭代解自洽不动点 Var(g)*。返回 (Var_g_star, iterations)."""
    # 中性值做初始猜测
    var_g = sigma_v ** 2 / (1 - BETA ** 2)
    var_g_neutral = var_g
    for it in range(MAX_ITER):
        sigma_x2 = var_g + SIGMA_E ** 2
        h2 = var_g / sigma_x2
        v_x_sel = sigma_x2 * FITNESS_WIDTH ** 2 / (sigma_x2 + FITNESS_WIDTH ** 2)
        var_g_sel = h2 ** 4 * v_x_sel + var_g * (1 - h2 ** 2)
        var_g_new = BETA ** 2 * var_g_sel + sigma_v ** 2
        step = abs(var_g_new - var_g)
        var_g = var_g_new
        if step < TOL:
            return var_g, it + 1, var_g_neutral
    return var_g, MAX_ITER, var_g_neutral


def run_one(sigma_v, seed):
    rng = np.random.RandomState(seed)
    genes = rng.normal(TARGET, 0.01, N_POP)

    for gen in range(N_GENERATIONS):
        phenos = genes + rng.normal(0, SIGMA_E, N_POP)
        fits = fitness(phenos)
        probs = fits / fits.sum()
        sel_idx = rng.choice(N_POP, size=N_POP, p=probs)
        parent_genes = genes[sel_idx]
        genes = TARGET + BETA * (parent_genes - TARGET) + rng.normal(0, sigma_v, N_POP)

    var_g = float(np.var(genes))
    mean_g = float(np.mean(genes))
    h2 = var_g / (var_g + SIGMA_E ** 2)
    return var_g, h2, mean_g


def main():
    bar(f"{PID}  让方差开始自洽------Bulmer效应闭式验证")
    print(f"模型: x=g+e, g'=TARGET+β(g_sel-TARGET)+v")
    print(f"选择机制: 高斯加权(按fitness加权抽样,非截尾top30%)")
    print(f"参数: β={BETA}, σ_e={SIGMA_E}, N={N_POP}, gen={N_GENERATIONS}, seeds={N_SEEDS}")
    print(f"fitness峰: x*={FITNESS_PEAK}, ω={FITNESS_WIDTH}, TARGET={TARGET}")
    print(f"自洽方程组(纯输入迭代,零模拟输入):")
    print(f"  V_x' = σ_x²ω²/(σ_x²+ω²)")
    print(f"  Var(g_sel) = h⁴·V_x' + Var(g)(1-h²)")
    print(f"  Var(g)' = β²·Var(g_sel) + σ_v²")
    print(f"中性期望(无选择时):σ_v²/(1-β²) = {0.02 ** 2 / (1 - BETA ** 2):.6f} @σ_v=0.02")
    print()

    sub("自洽不动点 vs 模拟稳态 Var(g)")
    print(f"{'σ_v':>8s}  {'Var(g)*自洽':>14s}  {'Var(g)模拟':>14s}  {'中性期望':>12s}  {'偏差%':>8s}  {'压缩%':>8s}")
    print("-" * 72)

    results = []
    for sigma_v in SIGMA_V_GRID:
        var_g_star, n_iter, neutral = solve_self_consistent(sigma_v)
        var_g_list = []
        for seed in range(N_SEEDS):
            var_g, h2, mean_g = run_one(sigma_v, seed)
            var_g_list.append(var_g)
        var_g_sim = float(np.mean(var_g_list))
        bias_pct = (var_g_star - var_g_sim) / var_g_sim * 100.0
        compress_pct = (var_g_star - neutral) / neutral * 100.0
        results.append({
            'sigma_v': sigma_v, 'var_star': var_g_star, 'var_sim': var_g_sim,
            'neutral': neutral, 'bias_pct': bias_pct, 'compress_pct': compress_pct,
            'iterations': n_iter,
        })
        print(f"{sigma_v:>8.3f}  {var_g_star:>10.6f}    {var_g_sim:>10.6f}    {neutral:>10.6f}  {bias_pct:>+7.2f}%  {compress_pct:>+7.2f}%")

    print()

    sub("收敛与偏差量级核查")
    iters = [r['iterations'] for r in results]
    biases = [abs(r['bias_pct']) for r in results]
    print(f"不动点迭代步数范围:{min(iters)} - {max(iters)}(TOL={TOL})")
    print(f"自洽 vs 模拟偏差:最大 {max(biases):.2f}%,中位 {np.median(biases):.2f}%")
    print()

    sub("结论")
    print(f"185-1降调1:'h²里的Var(g)仍从模拟测...要真独立,Var(g)也得从输入参数算出来'")
    print(f"186-1:自洽方程组从(σ_v, σ_e, ω, β)纯输入迭代解出Var(g)*,零模拟输入")
    print(f"       选择代代压缩方差 → Var(g)* 系统性低于中性期望 σ_v²/(1-β²)")
    print()
    compress_all = [r['compress_pct'] for r in results]
    print(f"       实测压缩量级:中位 {np.median(compress_all):.2f}%,range {min(compress_all):.2f}% ~ {max(compress_all):.2f}%")
    print()
    print(f"  弧签名动作最终升级:独立预测对数值 → 全链先验对数值")
    print(f"  风险预登记:加权抽样是多项式抽样非精确高斯变换,自洽解有近似误差,偏差如实报")


if __name__ == "__main__":
    main()

天赐范式 V3.3.24.0 · 2026-10-05

相关推荐
泡茶喝茶写代码1 小时前
A股量化数据工程:从 REST 接口到策略信号(第 8 篇):成长能力因子:营收与利润增速
java·python·股票数据api·股票数据api接口·股票量化数据api·股票量化数据接口·股票数据api数据
Είναι η κοπέλα2 小时前
显存计算与模型选择:你的显卡能跑多大的模型
人工智能·pytorch·python·开源·conda
ROSF68682 小时前
2026 仿石漆乳液供应商:市场布局与行业发展态势梳理
大数据·人工智能·python
青少儿编程课堂2 小时前
AC自动机多模式串匹配精讲:校园关键词巡检实战解析
c++·python·算法·bfs·信息学竞赛
hhzz2 小时前
【YOLO 入门到精通 04】理解任务与模型家族:7 大 CV 任务与 YOLO26 选型指南
人工智能·python·深度学习·yolo·计算机视觉
Escalating_xu2 小时前
【Python】使用库:标准库、第三方库、pip、项目实战与程序打包
java·python·pip
水獭比特2 小时前
Agent 工具审批不止一个按钮:用 v0.22.1 复盘入口、恢复和副作用
人工智能·python
苦瓜打怪兽3 小时前
leetcode 热题100(11. 盛最多水的容器)
python·算法·leetcode
砚底藏山河3 小时前
量化实战:回测数据底座快照与版本管理进阶
java·大数据·python·金融·maven