Я кодировал симулятор gillespie для эволюционной симметричной игры 2x2.
Моя проблема в том, что я не уверен, как включить несколько прогонов игры на графике? Как и каждый раз, когда я запускаю его, всегда появляется новый график и один прогон по нему.
Кроме того, я изо всех сил пытаюсь выяснить, как сделать несколько итераций, например, 1000 итераций кода. Поскольку я хочу записать, сколько раз код достигает i = 0 или i = N из кода, который у меня есть:
# -*- coding: utf-8 -*-
"""
@author: matthew
"""
import random as random
import math as math
import matplotlib.pyplot as plt
def function(N):
t = float(0)
prop_C=0.5
i = prop_C*N
S = float(0.01)
pay_c = ((0.5 * ((i - 1)/(N - 1))) + (0.1 * ((N - i)/(N - 1))))
pay_d = (i / (N - 1))
fd = 1 - (S + (S * pay_d))
fc = 1 - (S + (S * pay_c))
avg = ((i / N) * fc) + ((1 - (i / N)) * fd)
lami = (i / N) * ((N - i) / N) * (fc / avg)
mui = ((i / N) * (N - (i / N)) * (fd / avg))
i_list = []
t_list = []
X_list = []
lami_list=[]
mui_list=[]
counter = float(0)
counterlist=[]
while i <= N:
if i==0:
break
if i ==N:
break
r2 = random.uniform(0,1)
if 0<= r2 <= lami/(lami + mui):
i=i+1
i_list.append(i)
counter = counter +1
counterlist.append(counter)
X = (i/N)
X_list.append(X)
pay_c = ((0.5 * ((i - 1)/(N - 1))) + (0.1 * ((N - i)/(N - 1))))
pay_d = (i / (N - 1))
fd = 1 - S + (S * pay_d)
fc = 1 - S + (S * pay_c)
avg = ((i / N) * fc) + ((1 - (i / N)) * fd)
r1 = random.uniform(0,1)
tau = - (1/(lami + mui)) * math.log(r1)
lami = (i / N) * ((N - i) / N) * (fc / avg)
mui = (i / N) * ((N - i) / N) * (fd / avg)
t = t + tau
t_list.append(t)
mui_list.append(mui)
lami_list.append(lami)
else:
i=i-1
i_list.append(i)
counter = counter +1
counterlist.append(counter)
X = (i/N)
X_list.append(X)
pay_c = ((0.5 * ((i - 1)/(N - 1))) + (0.1 * ((N - i)/(N - 1))))
pay_d = (i / (N - 1))
fd = 1 - S + (S * pay_d)
fc = 1 - S + (S * pay_c)
avg = ((i / N) * fc) + ((1 - (i / N)) * fd)
r1 = random.uniform(0,1)
tau = - (1/(lami + mui)) * math.log(r1)
lami = (i / N) * ((N - i) / N) * (fc / avg)
mui = (i / N) * ((N - i) / N) * (fd / avg)
t = t + tau
t_list.append(t)
mui_list.append(mui)
lami_list.append(lami)
continue
plt.title("Gillespie algorithm for Hawk Dove Game")
plt.plot(t_list, X_list, color = 'red')
plt.show(plt.plot)
return(X_list, t_list)
function(250)