天赐范式第183天第一篇:让选择开始生效------育种者方程与选择生效条件
版本 V3.3.21.0 | PID: TC-183-V3.3.21.0 | 2026-10-02
摘要
从更新规则推出平衡位移公式Δ*=β·h²·S/(1-β),用种群代际循环demo验证选择生效条件为h²>0.5(σ_v>σ_e),从182-1的变异存续升级到选择生效。
一、接续182-1------从存续到生效
182-1回答了:变异会不会被β强收缩抹平?结论:不会。D*=σ_v²/(1-β²),只要σ_v>0就有稳态多样性。
但182-1的变异是每轮独立gauss噪声------无遗传。没有遗传,选择对下一代毫无作用,"选择有效"无从谈起。
183-1跨出下一步:把变异升级成可遗传的,问选择能不能把变异导向适应性。这是从"存续"跨到"演化"的一跳。
二、问题提出------收缩和选择谁赢
更新规则(写死):
- 表型 x = g + e, e ~ N(0, σ_e²)
- 选择按 fitness(x) 选,fitness峰在x*=0.8(不是TARGET=0.5!)
- 子代基因 g' = TARGET + β·(g_sel - TARGET) + v, v ~ N(0, σ_v²)
关键张力:收缩把基因拉回0.5,选择把表型拉向0.8。182-1问"收缩和变异谁赢",183-1问"收缩和选择谁赢"。平衡时表型均值停在两者之间------停在哪?这就是要定量回答的问题。
三、从更新规则推导------平衡位移公式
亲代均值μ_g,位移Δ_g = μ_g - TARGET。
选中个体基因均值μ_{g_sel} = μ_g + h²·S(S = 表型选择差, h² = Var(g)/(Var(g)+σ_e²),本文模型设定下)。
子代基因均值:
μ_g' = TARGET + β·(μ_{g_sel} - TARGET) = TARGET + β·(Δ_g + h²·S)
子代位移:
Δ_g' = μ_g' - TARGET = β·(Δ_g + h²·S)
稳态 Δ_g' = Δ_g = Δ*:
Δ* = β·(Δ* + h²·S)
Δ*·(1 - β) = β·h²·S
Δ* = β·h²·S / (1 - β)
遗传力 h² = Var(g) / (Var(g) + σ_e²)(本文模型设定下):
- 小σ_v → Var(g)小 → h²≈0 → Δ*≈0(没有可遗传方差)
- σ_v≈σ_e → h²≈0.5(选择生效阈值,半效界)
- 大σ_v → h²→1 → Δ* = β·S/(1-β)
182-1:变异存续条件 σ_v > 0。183-1:选择生效条件 σ_v ≥ σ_e(h² ≥ 0.5,σ_v=σ_e为半效界)。
四、种群代际循环------σ_v扫描
200个个体,500代,β=0.3,σ_e=0.02,选择比例0.3。
| σ_v | h²(力) | S(差) | Δ | Var(g) | 生效? |
|---|---|---|---|---|---|
| 0.001 | 0.0027 | +0.023244 | +0.000032 | 0.000001 | ❌ |
| 0.005 | 0.0634 | +0.023970 | +0.000682 | 0.000027 | ❌ |
| 0.010 | 0.2105 | +0.026049 | +0.002400 | 0.000107 | ❌ |
| 0.020 | 0.5104 | +0.033088 | +0.007455 | 0.000419 | ✅ |
| 0.050 | 0.8636 | +0.062817 | +0.023748 | 0.002555 | ✅ |
| 0.100 | 0.9617 | +0.118697 | +0.049816 | 0.010144 | ✅ |
| 0.200 | 0.9900 | +0.188016 | +0.081546 | 0.040081 | ✅ |
| 0.400 | 0.9975 | +0.198286 | +0.088300 | 0.159353 | ✅ |
| 0.800 | 0.9994 | +0.197687 | +0.091621 | 0.636995 | ✅ |
| 1.500 | 0.9998 | +0.193669 | +0.096365 | 2.237153 | ✅ |
五、遗传力曲线------h²(σ_v)的S形转折
h² = Var(g) / (Var(g) + σ_e²),σ_e=0.02。
| σ_v | h² | 生效? |
|---|---|---|
| 0.001 | 0.0027 | ❌ |
| 0.005 | 0.0634 | ❌ |
| 0.010 | 0.2105 | ❌ |
| 0.020 | 0.5104 | ✅ 阈值 |
| 0.050 | 0.8636 | ✅ |
| 0.100 | 0.9617 | ✅ |
| 0.200 | 0.9900 | ✅ |
| 0.400 | 0.9975 | ✅ |
| 0.800 | 0.9994 | ✅ |
| 1.500 | 0.9998 | ✅ |
→ h²从0到1的S形转折(模拟观测),转折点在σ_v≈σ_e=0.02。
- σ_v < σ_e:h² < 0.5,选择无效(变异信号被环境噪声淹没)
- σ_v ≥ σ_e:h² ≥ 0.5,选择生效(变异信号超过环境噪声)
六、平衡位移验证------Δ ≈ β·h²·S/(1-β)
| σ_v | Δ(实测) | β·h²·S/(1-β) | 比值 |
|---|---|---|---|
| 0.001 | +0.000032 | +0.000027 | +1.1889 |
| 0.005 | +0.000682 | +0.000651 | +1.0482 |
| 0.010 | +0.002400 | +0.002350 | +1.0212 |
| 0.020 | +0.007455 | +0.007238 | +1.0300 |
| 0.050 | +0.023748 | +0.023250 | +1.0214 |
| 0.100 | +0.049816 | +0.048923 | +1.0183 |
| 0.200 | +0.081546 | +0.079774 | +1.0222 |
| 0.400 | +0.088300 | +0.084765 | +1.0417 |
| 0.800 | +0.091621 | +0.084669 | +1.0821 |
| 1.500 | +0.096365 | +0.082986 | +1.1612 |
注:σ_v=0.001时Δ和理论值都接近0,比值无意义(分母太小)。中间段(σ_v=0.0050.200)比值1.021.05,公式验证良好。大σ_v(≥0.400)单seed比值偏高1.04~1.16------是系统偏差还是漂变?见183-2多seed验证。
七、降调声明
- 本篇是demo演示。公式从更新规则严格推导,按147-2实测定义demo是模拟不是实证。
- fitness函数是设定的(单峰高斯),不是涌现的------实际fitness景观更复杂。
- 无重组无交配(单亲继承),实际遗传机制更丰富。
- 有限种群有漂变,大种群极限下漂变消失。
- fitness峰设在x*=0.8而非TARGET=0.5,是为了让收缩和选择有张力------如果重合则同义反复。
- 基因-表型分离用环境方差σ_e=0.02实现遗传力h²<1,实际环境效应更复杂。
- 与174选择压力的benefit定义对齐:174的benefit是定性描述,183-1给出定量公式。
- Δ*公式中h²·S是线性回归近似,大σ_v单seed比值偏高------183-2将做多seed验证。
- 育种者方程Δ*=β·h²·S/(1-β)是Lush(1937)育种者方程的标准形式。本篇贡献是从更新规则推到它并验证,不是发现新公式。
- 大σ_v(如1.50)时Var(g)约2.24,std约1.5是fitness峰宽的15倍------物理图像失真,仅用于测试公式在极端参数下的行为。
八、七条前提条件------选择生效验证
- 条件1 独立性 ✅ 每个体独立变异独立被选
- 条件2 隐私性 ✅ 纯数学验证,不涉及隐私
- 条件3 繁衍性 🟡 种群代际循环是繁衍的简化模型,非完整繁衍验证
- 条件4 安全性 ✅ β有界,种群有界
- 条件5 不可篡改 --- 本demo不涉及篡改场景
- 条件6 可继承 🟡 育种者方程可移植,非系列定义的基因跨代传递
- 条件7 可终止 ✅ 有限代终止(数学语境映射,非体系达标)
结语
183-1接续182-1,从"存续"跨到"生效"。
182-1:变异不会被β强收缩抹平(D*>0)。183-1:选择能把变异导向适应性,但有条件------σ_v ≥ σ_e。
定量结果(从更新规则推导):
- 平衡位移 Δ* = β·h²·S / (1 - β)
- 遗传力 h² = Var(g) / (Var(g) + σ_e²)
- 选择生效条件:σ_v ≥ σ_e(h² ≥ 0.5,半效界)
从存续到生效,条件从"σ_v > 0"升级到"σ_v ≥ σ_e"。收缩和选择的张力:表型均值停在TARGET和fitness峰之间,位置由β和h²共同决定。
这个系列还在逐步建设中,完善也是咱们和伙伴们的努力方向。

代码附录
python
# -*- coding: utf-8 -*-
"""
天赐范式第183天:让选择开始生效 V3.3.21.0
接续182-1变异存续条件,问下一步:选择能不能把变异导向适应性?
模型(更新规则):
表型 x = g + e, e ~ N(0, sigma_e^2)
选择按 fitness(x) 选,fitness 峰在 x* = 0.8
子代基因 g' = TARGET + beta*(g_sel - TARGET) + v, v ~ N(0, sigma_v^2)
从更新规则推导平衡位移:
mu_g' = TARGET + beta*(mu_{g_sel} - TARGET)
由回归 mu_{g_sel} = mu_g + h^2 * S (S = 表型选择差)
Delta_g' = beta*(Delta_g + h^2 * S)
稳态 Delta* = beta * h^2 * S / (1 - beta)
遗传力 h^2 = Var(g) / (Var(g) + sigma_e^2)
小 sigma_v -> Var(g) 小 -> h^2 小 -> 选择无效
sigma_v > sigma_e -> h^2 > 0.5 -> 选择开始生效
大 sigma_v -> h^2 -> 1 -> 选择完全主导
核心结论:
182-1:变异存续条件 sigma_v > 0
183-1:选择生效条件 sigma_v > sigma_e(h^2 > 0.5)
平衡位移 Delta* = beta * h^2 * S / (1 - beta)
"""
import sys
import random
import math
import numpy as np
if hasattr(sys.stdout, 'reconfigure'):
sys.stdout.reconfigure(encoding='utf-8')
PID = "TC-183-V3.3.21.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
SELECT_FRAC = 0.3
SIGMA_GRID = [0.001, 0.005, 0.01, 0.02, 0.05, 0.10, 0.20, 0.40, 0.80, 1.50]
def bar(title):
print("=" * 72)
print(" " + title)
print("=" * 72)
print()
def sub(title):
print("【" + title)
print("-" * 72)
def fitness(x):
return math.exp(-(x - FITNESS_PEAK) ** 2 / (2 * FITNESS_WIDTH ** 2))
def run_generation(genes, sigma_v, sigma_e, beta, rng):
phenos = [g + rng.gauss(0, sigma_e) for g in genes]
n_select = max(2, int(len(genes) * SELECT_FRAC))
fits = [fitness(x) for x in phenos]
ranked = sorted(range(len(genes)), key=lambda i: fits[i], reverse=True)
selected_idx = ranked[:n_select]
mean_parents_x = float(np.mean(phenos))
mean_selected_x = float(np.mean([phenos[i] for i in selected_idx]))
S = mean_selected_x - mean_parents_x
offspring = []
for _ in range(len(genes)):
parent_g = genes[rng.choice(selected_idx)]
child_g = TARGET + beta * (parent_g - TARGET) + rng.gauss(0, sigma_v)
offspring.append(child_g)
mean_offspring_x = float(np.mean(offspring))
var_g = float(np.var(genes))
h2 = var_g / (var_g + sigma_e ** 2) if (var_g + sigma_e ** 2) > 1e-15 else 0.0
return offspring, S, h2, mean_offspring_x, var_g
def run_evolution(sigma_v, n_pop, n_gen, beta, sigma_e, warmup=100):
rng = random.Random(42)
genes = [TARGET + rng.gauss(0, 0.1) for _ in range(n_pop)]
Ss, h2s, means_x, var_gs = [], [], [], []
for gen in range(n_gen):
genes, S, h2, mean_x, var_g = run_generation(genes, sigma_v, sigma_e, beta, rng)
if gen >= warmup:
Ss.append(S)
h2s.append(h2)
means_x.append(mean_x)
var_gs.append(var_g)
return {
'S_mean': float(np.mean(Ss)),
'h2_mean': float(np.mean(h2s)),
'mean_stable': float(np.mean(means_x)),
'var_g': float(np.mean(var_gs)),
}
def main():
bar("天赐范式第183天:让选择开始生效 V3.3.21.0")
print(" PID: {}".format(PID))
print()
sub("步骤0】接续182-1------从存续到生效")
print(" 182-1回答了:变异会不会被beta强收缩抹平?")
print(" 结论:不会。D* = sigma_v^2/(1-beta^2),只要sigma_v>0就有稳态多样性。")
print()
print(" 但182-1的变异是每轮独立gauss噪声------无遗传。")
print(" 没有遗传,选择对下一代毫无作用,'选择有效'无从谈起。")
print()
print(" 183-1跨出下一步:把变异升级成可遗传的,问选择能不能把变异导向适应性。")
print(" 这是从'存续'跨到'演化'的一跳。")
print()
sub("步骤1】问题提出------收缩和选择谁赢")
print(" 更新规则(写死):")
print(" (1) 表型 x = g + e, e ~ N(0, sigma_e^2)")
print(" (2) 选择按 fitness(x) 选,fitness峰在x*={}(不是TARGET={}!)".format(FITNESS_PEAK, TARGET))
print(" (3) 子代基因 g' = TARGET + beta*(g_sel - TARGET) + v, v ~ N(0, sigma_v^2)")
print()
print(" 关键张力:收缩把基因拉回{},选择把表型拉向{}。".format(TARGET, FITNESS_PEAK))
print(" 182-1问'收缩和变异谁赢',183-1问'收缩和选择谁赢'。")
print(" 平衡时表型均值停在两者之间------停在哪?这就是要定量回答的问题。")
print()
sub("步骤2】从更新规则推导------平衡位移公式")
print(" 亲代均值 mu_g,位移 Delta_g = mu_g - TARGET")
print(" 选中个体基因均值 mu_{g_sel} = mu_g + h^2 * S")
print(" (S = 表型选择差, h^2 = Var(g)/(Var(g)+sigma_e^2),本文模型设定下)")
print(" 子代基因均值 mu_g' = TARGET + beta*(mu_{g_sel} - TARGET)")
print(" = TARGET + beta*(Delta_g + h^2 * S)")
print(" 子代位移 Delta_g' = mu_g' - TARGET = beta*(Delta_g + h^2 * S)")
print()
print(" 稳态 Delta_g' = Delta_g = Delta*:")
print(" Delta* = beta*(Delta* + h^2 * S)")
print(" Delta*(1 - beta) = beta * h^2 * S")
print(" Delta* = beta * h^2 * S / (1 - beta)")
print()
print(" 遗传力 h^2 = Var(g) / (Var(g) + sigma_e^2)(本文模型设定下)")
print(" 小 sigma_v -> Var(g) 小 -> h^2 ~ 0 -> Delta* ~ 0(没有可遗传方差)")
print(" sigma_v ~ sigma_e -> h^2 ~ 0.5(选择生效阈值,半效界)")
print(" 大 sigma_v -> h^2 -> 1 -> Delta* = beta * S / (1 - beta)")
print()
print(" 182-1:变异存续条件 sigma_v > 0")
print(" 183-1:选择生效条件 sigma_v >= sigma_e(h^2 >= 0.5,sigma_v=sigma_e为半效界)")
print()
sub("步骤3】种群代际循环------sigma_v扫描")
print(" {}个个体,{}代,beta={},sigma_e={},选择比例{}".format(
N_POP, N_GENERATIONS, BETA, SIGMA_E, SELECT_FRAC))
print()
print(" | sigma_v | h^2(力) | S(差) | Delta | Var(g) | 生效? |")
print(" |---------|---------|---------|---------|---------|-------|")
results = []
for sigma_v in SIGMA_GRID:
res = run_evolution(sigma_v, N_POP, N_GENERATIONS, BETA, SIGMA_E)
results.append((sigma_v, res))
delta = res['mean_stable'] - TARGET
effective = "✅" if res['h2_mean'] > 0.5 else "❌"
print(" | {:.3f} | {:.4f} | {:+.6f}| {:+.6f}| {:.6f}| {} |".format(
sigma_v, res['h2_mean'], res['S_mean'], delta, res['var_g'], effective))
print()
sub("步骤4】遗传力曲线------h^2(sigma_v)的S形转折")
print(" h^2 = Var(g) / (Var(g) + sigma_e^2),sigma_e={}".format(SIGMA_E))
print()
print(" h^2(sigma_v)曲线:")
for sigma_v, res in results:
h2 = res['h2_mean']
bar_len = int(50 * h2)
marker = " <- 阈值" if abs(h2 - 0.5) < 0.15 else ""
print(" sigma_v={:.3f} h^2={:.4f} {}{}".format(
sigma_v, h2, "#" * bar_len, marker))
print()
print(" -> h^2从0到1的S形转折(模拟观测),转折点在sigma_v ~ sigma_e = {}".format(SIGMA_E))
print(" -> sigma_v < sigma_e:h^2 < 0.5,选择无效(变异信号被环境噪声淹没)")
print(" -> sigma_v >= sigma_e:h^2 >= 0.5,选择生效(变异信号超过环境噪声)")
print()
sub("步骤5】平衡位移验证------Delta ≈ beta * h^2 * S / (1 - beta)")
print(" | sigma_v | Delta(实测) | β·h^2·S/(1-β) | 比值 |")
print(" |---------|-----------|------------|--------|")
for sigma_v, res in results:
delta = res['mean_stable'] - TARGET
delta_theory = BETA * res['h2_mean'] * res['S_mean'] / (1 - BETA)
ratio = delta / delta_theory if abs(delta_theory) > 1e-8 else 0
print(" | {:.3f} | {:+.6f} | {:+.6f} | {:+.4f} |".format(
sigma_v, delta, delta_theory, ratio))
print()
print(" 注:sigma_v=0.001时Delta和理论值都接近0,比值无意义(分母太小)。")
print(" 中间段(sigma_v=0.005~0.200)比值1.02~1.05,公式验证良好。")
print(" 大sigma_v(>=0.400)单seed比值偏高1.04~1.16------是系统偏差还是漂变?见183-2多seed验证。")
print()
sub("步骤6】降调声明")
print(" 1. 本篇是demo演示。公式从更新规则严格推导,按147-2实测定义demo是模拟不是实证。")
print(" 2. fitness函数是设定的(单峰高斯),不是涌现的------实际fitness景观更复杂。")
print(" 3. 无重组无交配(单亲继承),实际遗传机制更丰富。")
print(" 4. 有限种群有漂变,大种群极限下漂变消失。")
print(" 5. fitness峰设在x*=0.8而非TARGET=0.5,是为了让收缩和选择有张力------如果重合则同义反复。")
print(" 6. 基因-表型分离用环境方差sigma_e={}实现遗传力h^2<1,实际环境效应更复杂。".format(SIGMA_E))
print(" 7. 与174选择压力的benefit定义对齐:174的benefit是定性描述,183-1给出定量公式。")
print(" 8. Delta*公式中h^2*S是线性回归近似,大sigma_v单seed比值偏高------183-2将做多seed验证。")
print(" 9. 育种者方程Delta*=beta*h^2*S/(1-beta)是Lush(1937)育种者方程的标准形式。")
print(" 本篇贡献是从更新规则推到它并验证,不是发现新公式。")
print(" 10. 大sigma_v(如1.50)时Var(g)约2.24,std约1.5是fitness峰宽的15倍------")
print(" 物理图像失真,仅用于测试公式在极端参数下的行为。")
print()
sub("步骤7】七条前提条件------选择生效验证")
print(" 条件1 独立性 ✅ 每个体独立变异独立被选")
print(" 条件2 隐私性 ✅ 纯数学验证,不涉及隐私")
print(" 条件3 繁衍性 🟡 种群代际循环是繁衍的简化模型,非完整繁衍验证")
print(" 条件4 安全性 ✅ beta有界,种群有界")
print(" 条件5 不可篡改 --- 本demo不涉及篡改场景")
print(" 条件6 可继承 🟡 育种者方程可移植,非系列定义的基因跨代传递")
print(" 条件7 可终止 ✅ 有限代终止(数学语境映射,非体系达标)")
print()
bar("结语")
print(" 183-1接续182-1,从'存续'跨到'生效'。")
print()
print(" 182-1:变异不会被beta强收缩抹平(D*>0)。")
print(" 183-1:选择能把变异导向适应性,但有条件------sigma_v >= sigma_e。")
print()
print(" 定量结果(从更新规则推导):")
print(" 平衡位移 Delta* = beta * h^2 * S / (1 - beta)")
print(" 遗传力 h^2 = Var(g) / (Var(g) + sigma_e^2)")
print(" 选择生效条件:sigma_v >= sigma_e(h^2 >= 0.5,半效界)")
print()
print(" 从存续到生效,条件从'sigma_v > 0'升级到'sigma_v >= sigma_e'。")
print(" 收缩和选择的张力:表型均值停在TARGET和fitness峰之间,位置由beta和h^2共同决定。")
print()
print(" 这个系列还在逐步建设中,完善也是咱们和伙伴们的努力方向。")
print("=" * 72)
if __name__ == "__main__":
main()
