Добавление графа в Python - PullRequest
0 голосов
/ 01 июня 2018

Я пытаюсь сгенерировать эту цифру в симуляции малых сетей мира in small world networks simulation

, которая похожа на фигуру в статье МАЛЫЙ МИР И БЕСПЛАТНАЯ МОДЕЛЬ ПЕРЕДАЧИ ОРВИ, доступной на стр. 1752 ссылка на бумагу с использованием этого кода

import matplotlib
import matplotlib.pyplot as plt
import numpy as np
import networkx as nx
import random
#defining a function for near neigbours
def near_neighbours(node, N):
    res = []
    x, y = node
    if x !=0: res.append((x-1, y))
    if x !=N: res.append((x+1,y))
    if y !=0: res.append((x,y-1))
    if y !=N: res.append((x,y+1))
    return res

status = {}
for node in G.nodes(): status[node] = 'S'
# Infecting a random node
status[random.choice(G.nodes())] ='I'
#N the size of the lattice
N =10

#=================================================================
p2 = 0.0
p1 = 0.1293
#the value for p1 and p2 can be varied
#=========================================================
r0 = 1/11.2
r1 = 1/17.4
S = N *N-1
E = 0
I = 1
R = 0
s = []
e = []
i = []
r = []
t = 0
time=[]
graphs_in_time =[]

while I > 0:
    t+=1
    newI=0
    newR=0
    newE=0
    for node in G.nodes():
        if status[node] == 'I':
            for nei in G.neighbors(node):
                if status[nei] == 'S':
                    if nei in near_neighbours(node,N):
                        if random.random() < p1:
                            newE+=1
                            status[nei] = 'E'
                    else:
                        if random.random() < p2:
                            newE+=1
                            status[nei] = 'E'
            if random.random() <r1:
                newR+=1
                status[node] = 'R'
        elif status[node] == 'E':
            if random.random() <r0:
                newI+=1
                status[node] = 'I'
    S-=newE
    E+=(newE - newI)
    I+=(newI - newR)
    R+=newR

    if t% 20 == 0:
        print('t=', t, 'S, E, I, R, N =', S, E, I, R, S+E+I+R)
        graphs_in_time.append({k: v for k, v in status.items()})
    s.append(S)
    i.append(I)
    r.append(R)
    e.append(E)
    time.append(t)

Но он дает мне этот вывод только без графиков

t= 20 S, E, I, R, N = 84 5 8 3 100
t= 40 S, E, I, R, N = 75 2 9 14 100
t= 60 S, E, I, R, N = 68 5 4 23 100
t= 80 S, E, I, R, N = 57 4 10 29 100
t= 100 S, E, I, R, N = 52 5 8 35 100
t= 120 S, E, I, R, N = 46 4 9 41 100
t= 140 S, E, I, R, N = 37 5 10 48 100
t= 160 S, E, I, R, N = 31 4 5 60 100
t= 180 S, E, I, R, N = 19 4 10 67 100
t= 200 S, E, I, R, N = 5 9 8 78 100
t= 220 S, E, I, R, N = 3 2 11 84 100
t= 240 S, E, I, R, N = 2 1 3 94 100
t= 260 S, E, I, R, N = 2 0 3 95 100

Может ли кто-нибудь помочь мне закончить рисование графика?

...