 Application Center - Maplesoft

# Simulating the Spread of an Infection

You can switch back to the summary page by clicking here.

 > restart;

Douglas E. Lewit

Mathematics major at Northeastern Illinois University

Secondary Education major at National-Louis University

Proud member of the Maple community!

In the problem below I take advantage of Maple's Graph Theory package to simulate how an infection might spread throughout a small community of 15 individuals.  To make the problem simpler I had to make certain assumptions.  First of all, I am not taking into account the recovery or death of infected individuals.  Such a consideration would definitely make the problem much more challenging.  Secondly, I am assuming, as can be seen from my zeroorone procedure below, that there is a 25% probability that any individual in the community is connected to any other individual in the community.  (In other words, we do not have a situation here where every person is connected to every other person.  In such an event the infection would obviously spread much faster than it does here.)  Also, using my algorithm there is the possibility of reinfection, which isn't an unrealistic expectation at all.  In any infected population, there is always the possibility that two infected individuals will interact with each other, hence reinfection is at least statistically possible even if it's biologically impossible in the case of a specific illness or disease.  And just for clarification, in the graphs below yellow vertices represent healthy, uninfected individuals while red vertices represent infected individuals.  The infection being analyzed is strictly hypothetical and mathematical in nature.  This is a computer simulation project rather than a biology project!  For example, the infection may not be a biological infection at all.  The 15 vertices could represent 15 different computers, and the "infection" that spreads could be interpreted as a computer virus rather than a biological virus.

 > with(GraphTheory); (1)
 > interface(rtablesize=15); (2)
 > A:=Matrix(15,fill=0); (3)
 > zeroorone:=proc() local r: r:=rand()/1e12: if r<=0.25 then 1: else 0: end if: end proc:
 > for i to 15 do for j from i+1 to 15 do A[i,j]:=zeroorone(): A[j,i]:=A[i,j]: end do: end do:
 > A; (4)
 > V:=Graph(A); (5)
 > DrawGraph(V);
 > plot0:=DrawGraph(V); (6)
 > Random:=proc(n)
 > global RandSEQ;
 > local a, i, k, A, P;
 > A:=[seq(k,k=1..n)]:
 > RandSEQ:=[]:
 > while numelems(RandSEQ)
 > a:=nops(A):
 > P:=rand(1..a):
 > i:=P():
 > RandSEQ:=[op(RandSEQ),A[i]]:
 > A:=subsop(i=NULL,A):
 > end do:
 > RandSEQ;
 > end proc; (7)
 > Neighborhood(V,1);   ###### just doing an example and checking my algorithm. (8)
 > b:=Neighborhood(V,1); (9)
 > a:=[]; (10)
 > Random(3); (11)
 > for n to 3 do a:=[op(a),b[RandSEQ[n]]]: end do: a; (12)
 > n:=1: HighlightVertex(V,1,red): plot1:=DrawGraph(V,style=circle): C:=[]: for k from 2 to 200 do b:=Neighborhood(V,n): K:=numelems(b): Random(K): a:=[]: a:=[op(a),b[RandSEQ]]: C:=[op(C),n]:n:=a: HighlightEdges(V,{n,op(nops(C),C)},green): plot||k:=DrawGraph(V,style=circle): HighlightVertex(V,n,red): plot||(k+1):=DrawGraph(V,style=circle): od:
 > with(plots):
 > display(plot0);