Python實現簡單的SI傳播模型

2021-08-21 03:55:40 字數 2522 閱讀 8461

#si疾病傳播模型的原理

在經典的傳染病模型中,種群(population)內n個個體的狀態可分為如下幾類

易感狀態(susceptible)。乙個個體在感染前是處於易感狀態的,即該個體有可能被鄰居個體感染。

易感狀態i(infected)。乙個感染上某種病毒的個體就稱為是處於感染狀態。,即該個體還會以一定概率感染其鄰居個體。

移除狀態(remove,refractory或者recovered)。也成為免疫狀態或恢復狀態,當乙個個體經歷過乙個完整的感染週期後,該個體就不再被感染,因此就可以不再考慮改革提。

提取碼:z448

'''

實驗環境python2.7.13,igraph包,cairo包,numpy包

'''# -*- coding:utf8 -*

from igraph import *

import numpy as numpy

from numpy import *

import random

def len_arr(infected_array,nodes_num):#獲取感染陣列長度

len_value=0#初始化長度

len_value=nodes_num-infected_array.count(-1)#被感染數量是結點總數減去未感染節點數(未感染的結點被標記為-1)

return len_value

g=graph.read_gml("c:\python27\e1.gml")#將本地儲存的網路資料讀入變數g(生成圖)

summary(g)

nodes_num=g.vcount()#統計圖中的結點個數

net_mat=g.get_adjacency(type=get_adjacency_both)#將網路資料轉換為鄰接矩陣儲存在變數net_mat

g.vs["color"]=["white"]#給圖的頂點序列顏色賦值白色

a=[arange(nodes_num)+1]*3#宣告乙個n行3列的陣列a

nodes_state=matrix(a).t#nodes_state通過轉置a矩陣建立,用於存放每個節點的狀態資訊以及其被感染的時間(這個是理解演算法的重中之重!!!)

#第一列是節點編號,第二列是節點狀態,感染狀態用-2表示,第三列是節點感染的時間

print(nodes_state)

infected_array=[-1]*34#用於存放本輪被感染的結點, 這些結點將參與下一次感染 34代表網路節點數

print(infected_array)

infe_rate=1#傳播率(感染率) 1代表鄰接點100%被感染

set_time=2#傳播次數(感染次數) 2次

source_seed=1#感染源位置

nodes_state[0:nodes_num,2]=-1#給所有節點初始化感染時間為-1

nodes_state[source_seed-1,1]=-2#設定第乙個感染源感染狀態 -2代表感染狀態

nodes_state[source_seed-1,2]=1#設定第乙個感染源的感染時間為1

g.vs[source_seed-1]["color"]="red"#將感染的頂點顏色標紅

infected_array[0]=source_seed#將感染源的位置存入被感染節點列表

plot(g)#繪製

stop=false#感染過程結束的標記

temp_time=0#第幾次感染

temp_len=0#本輪的感染源數量初始化

while not stop:

i=0#記錄讓每個感染源都傳播一次

if len_arr(infected_array,nodes_num)>0 and len_arr(infected_array,nodes_num)<=nodes_num:#感染可以進行

temp_len=len_arr(infected_array,nodes_num)#獲取本輪的感染源數量

while i0:#存在需要被感染的節點

t=0#讓ran_infe_arr內每個感染源都被感染

while tset_time-1:#當執行感染的次數等於設定的次數結束感染

stop=true

效果圖

python實現誤差逆傳播演算法

最近學習神經網路,自己參照源 把誤差逆傳播重新寫了一遍,其實挺簡單的,關鍵是要把逆傳播的幾個過程搞清楚以及每一步是為了得到什麼,然後知道numpy的矩陣運算操作,廢話不多說,直接上 反向傳播演算法 defbackpro weights,bs,x,y,nums 逆傳播計算引數的梯度 param wei...

python實現簡單爬蟲 Python實現簡單爬蟲

簡介 爬蟲架構 1 url管理器 3 網頁分析器 4 爬蟲呼叫器 5 價值資料使用 爬蟲實現 1 排程器實現 coding utf 8 import url manager import html import html parser import html outputer import url ...

python 排序的簡單實現

獲取最小的引數 獲取第乙個引數,並且使用分片去掉第乙個,留下剩下的引數。def min1 arg res args 0 for arg in arg 1 if arg res res arg return res 讓python自動獲取第乙個引數以及其他的引數。def min2 fist,rest ...