Перекрытие участков в Python - PullRequest
0 голосов
/ 19 июня 2020

Я работал над этим кодом в течение некоторого времени, и его запуск приводит к тому, что эти графики создаются в формате 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 и даже изменять имена переменных, но я не могу найти в чем дело. Объяснение было бы полезно, потому что у меня есть другие функции в моем коде, которые работают таким же образом и дают те же результаты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...