모집단 고정 방법을 시뮬레이션하기 위해 노력하고 있습니다. 모집단은 1s (또는 p)와 0s (또는 q)로 구성되며 각 개체에는 2 개의 요소 (1-1, 1-0 또는 0-0)가 있습니다.파이썬을 사용하여 가중치 적용 선택에 따른 인구 고정
N은 모집단 및 인구의 각 부재는 2 개 요소를 갖고 있기 때문에, 인구 풀은 2 * N은
가 1의초기 주파수가 0.1 디폴트로 (여기서는 20) q는 1 것 - 0.1 = 0.9
초기 인구는 [1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
다음 인구를 위해 나는 빈도 (p_freq 및 q_freq)에 따라 무작위로 (가중치 적용)를 선택하고 모집단이 모두 1 또는 모두 0으로 고정 될 때까지 반복합니다. 일단 수정하면 p_fix 또는 q_fix 목록에 고정되는 세대를 기록하려고합니다.
그래서 한 가지 시뮬레이션을 위해이 작업을 수행했지만이 작업을 위해 노력하고 있습니다.
p []
q [3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
: N = 100 시뮬레이션과 나는 p_fix을 채우기 위해 계속하는 루프를 얻기 위해 그것을 구조와 내가 p_fix 및 q_fix을 인쇄 할 때 q_fix가 제대로
#!/usr/bin/env python2.7
import random
N= 10
n= 100
p_freq= 0.1
q_freq= 1 - p_freq
simulation= 0
p_fix= []
q_fix= []
for sim in range(n):
generation= 0
#Current population
p_alleles= int(p_freq * 2*N)*[1]
q_alleles= int(q_freq * 2*N)*[0]
population= p_alleles + q_alleles
while (sum(population) != 2*N) and (sum(population) != 0):
#Checking current population for fixation
#Next generation
next_population= []
for i in range(2*N): next_population.append(random.choice(population))
#Resetting parameters
p_freq= float(sum(next_population))/(2*N)
q_freq= 1 - p_freq
population= next_population
#Counts
generation += 1
if sum(population) == 2*N:
p_fix.append(generation)
if sum(population) == 0:
q_fix.append(generation)
simulation += 1
내 결과를 나열하는 방법을 알아낼 질수
첫 번째 이후 모든 시뮬레이션에 대해 0 번째 세대가 아닙니다. 시뮬레이션. 그러나 원래 인구의 90 %가 q (즉, 0)이기 때문에 인구가 q로 고정되어 있다는 것이 합리적입니다. 주파수는 각 모집단마다 바뀌므로 (왜 내가 다시 설정했는지) 고정이 필요합니다. 인구의 크기는 동일하게 유지됩니다.
여러 시뮬레이션을 수행하려면 어떻게해야합니까?
감사합니다. @gerrat! –