Я работал над этим кодом в течение некоторого времени, и его запуск приводит к тому, что эти графики создаются в формате pdf. Однако в одном из PDF-файлов рядом с ним нанесены данные из предыдущего графика. Я думаю, что это как-то связано с объектом SweepSeries, хранящим несколько значений, но я не уверен.
from modsim import *
x = int(input("Enter the no. of people susceptible:"))
y = int(input("Enter the no. of people infected:"))
z = int(input("Enter the no. of people who have recovered:"))
tc =int(input("Enter the time between contacts of people in days:")) # time between contacts in days
tr =int(input("Enter the time for recovery in days:")) # recovery time in days
days = int(input("Enter the no. of days to simulate:"))
beta = 1 / tc # contact rate in per day
gamma = 1 / tr # recovery rate in per day
#-------------------common functions---------------------
def make_system(beta, gamma):
init = State(S=x, I=y, R=z)
init /= sum(init)
t0 = 0
t_end = days
return System(init=init, t0=t0, t_end=t_end,
beta=beta, gamma=gamma)
def update_func(state, t, system):
s, i, r = state
infected = system.beta * i * s
recovered = system.gamma * i
s -= infected
i += infected - recovered
r += recovered
return State(S=s, I=i, R=r)
def run_simulation(system, update_func):
frame = TimeFrame(columns=system.init.index)
frame.row[system.t0] = system.init
for t in linrange(system.t0, system.t_end):
frame.row[t+1] = update_func(frame.row[t], t, system)
return frame
def calc_total_infected(results):
return get_first_value(results.S) - get_last_value(results.S)
def sweep_beta(beta_array, gamma):
sweep = SweepSeries()
for beta in beta_array:
system = make_system(beta, gamma)
results = run_simulation(system, update_func)
sweep[system.beta] = calc_total_infected(results)
return sweep
def sweep_parameters(beta_array, gamma_array):
frame = SweepFrame(columns=gamma_array)
for gamma in gamma_array:
frame[gamma] = sweep_beta(beta_array, gamma)
return frame
beta_array = [0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0 , 1.1]
gamma_array = [0.2, 0.4, 0.6, 0.8]
frame = sweep_parameters(beta_array, gamma_array)
frame.head()
for gamma in gamma_array:
label = 'gamma = ' + str(gamma)
plot(frame[gamma], label=label)
decorate(xlabel='Contact rate (beta)',
ylabel='Fraction infected',
title='',
loc='upper left')
savefig('contact rate vs. fraction infected for gamma values.pdf')
frame2 = sweep_parameters(beta_array, gamma_array)
frame2.head()
contour(frame2)
decorate(xlabel='Recovery rate (gamma)',
ylabel='Contact rate (beta)',
title='Fraction infected, contour plot')
savefig('fraction infected contour plot.pdf')
Я пробовал даже редактировать пакет и создавать несколько версий объекта SweepSeries и даже изменять имена переменных, но я не могу найти в чем дело. Объяснение было бы полезно, потому что у меня есть другие функции в моем коде, которые работают таким же образом и дают те же результаты.