|
|
以下是修改后的代码,它会绘制杂交代数(0到100)与平均相似度的关系图:
- import random
- import matplotlib.pyplot as plt
- # 参数设置
- n_genes = 100 # 基因座数量
- n_generations = 100 # 杂交代数
- n_repeats = 100 # 重复实验次数
- # 初始化存储每代平均相似度的列表
- avg_similarities = [0.0] * (n_generations + 1)
- for _ in range(n_repeats):
- # 初始染色体:全部为0(表示来自A的等位基因)
- chrom = [0] * n_genes
-
- # 进行n_generations代回交
- for gen in range(n_generations + 1):
- # 计算当前代的相似度
- similarity = (n_genes + sum(chrom)) / (2 * n_genes)
- avg_similarities[gen] += similarity
-
- if gen < n_generations: # 如果不是最后一代,准备下一代
- new_chrom = [0] * n_genes
- for i in range(n_genes):
- # 以1/2的概率从上一代chrom中继承,1/2的概率从B继承(即变为1)
- if random.random() < 0.5:
- new_chrom[i] = chrom[i] # 继承上一代的等位基因
- else:
- new_chrom[i] = 1 # 从B继承,等位基因为1
- chrom = new_chrom
- # 计算平均值
- for gen in range(n_generations + 1):
- avg_similarities[gen] /= n_repeats
- # 计算理论值
- theoretical_similarities = []
- for gen in range(n_generations + 1):
- theoretical = 1 - (0.5) ** (gen + 1)
- theoretical_similarities.append(theoretical)
- # 绘制图像
- generations = list(range(n_generations + 1))
- plt.figure(figsize=(10, 6))
- # 绘制模拟结果
- plt.plot(generations, avg_similarities, 'b-', linewidth=2, label='模拟结果')
- # 绘制理论曲线
- plt.plot(generations, theoretical_similarities, 'r--', linewidth=2, label='理论曲线')
- # 设置图表属性
- plt.xlabel('杂交代数', fontsize=12)
- plt.ylabel('平均相似度', fontsize=12)
- plt.title('杂交代数与基因型相似度的关系', fontsize=14)
- plt.grid(True, alpha=0.3)
- plt.legend(fontsize=12)
- plt.ylim(0.4, 1.05)
- # 显示图表
- plt.show()
- # 输出最后几代的结果对比
- print("最后10代的模拟结果与理论值对比:")
- print("代数\t模拟相似度\t理论相似度")
- for gen in range(90, n_generations + 1, 1):
- print(f"{gen}\t{avg_similarities[gen]:.8f}\t{theoretical_similarities[gen]:.8f}")
复制代码
代码主要修改:
1. 创建 avg_similarities 列表来存储每一代的平均相似度
2. 在模拟过程中直接计算每一代的相似度并累加
3. 计算理论相似度曲线
4. 使用matplotlib绘制两条曲线:
- 蓝色实线:模拟结果
- 红色虚线:理论曲线
5. 图表显示了杂交代数(0到100)与平均相似度的关系
6. 输出最后10代的结果对比,验证模拟与理论的匹配程度
运行此代码后,您将看到:
- 图像显示相似度随代数增加而迅速上升,接近1但不完全达到1
- 前几代相似度增长较快,后面逐渐趋缓
- 模拟结果与理论曲线高度吻合
- 100代后相似度接近0.999999...,但理论上永远不会达到1(因为总有极小的概率某个等位基因从未被B的等位基因替换)
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 |
|