[Tutor] Lotka-Volterra Model Simulation Questions

Jim Apto jimmyapt0 at gmail.com
Fri Sep 28 22:32:23 CEST 2012

```Hello folks,

I'm relatively new to python, and was asked to program a lotka-volterra
model (predator and prey relation) simulator.  The program basically will
basically have a menu that takes user input, collect data, and then create
a graph.  Currently i've been working on the simulator section; I can't
seem to get the lists right.  I've assigned the following variables and
parameters to the model for the program:

x represents prey population
y represents predator population
dy/dt and dx/dt represents growth rate of the two populations over time
t represents time

a is the growth rate of prey
b is the rate at which predators kill prey
g is the death rate of predators
d is the rate at which the predators population increases by consuming prey

The equation:
dx/dt = x(a-by)
dy/dt = -y(g-dx)

The code I have for this section is:
def deltaX(a,b,x,y):
dx = x*(a-b*y)

def deltaY(g,d,x,y):
dy = -y*(g-d*x)

The simulation function is where I am having trouble.

For the simulation function, I need to ask the user for the number of runs
and then save it in a variable, create a list for prey and predator.  For
each run, i need to calculate the increment of change in prey and predator
populations by calling the deltaX and deltaY functions, then save these in
a variable, and then update the population information.  The newly
calculated populations then need to be added to the existing lists.  After
this is completed, a function for the graph is called.

The following is my current simulation function:

def simulation():
a=eval(input("Growth rate of prey:"))
b=eval(input("Rate at which predators eat prey:"))
g=eval(input("Death rate of predators:"))
d=eval(input("Rate at which predators increase by consuming prey:"))
x=eval(input("Current prey population:"))
y=eval(input("Current predator population:"))

deltaX(a,b,x,y)
deltaY(g,d,x,y)

n=eval(input("Number of runs:")
r = 0
count=0
yList = 
while r <= n:
r = r + 1
count = count + 1
yList.append(dx + dx)

zList= 
while r <= n:
r = r + 1
count = count +1
zList.append(dy + dy)

It seems terribly wrong.  The following is my graph function:

def drawCurve(yList,zList,n):
x = pylab.arange(n)
pylab.title("Foxes and Rabbits")
pylab.ylabel("Number of predator (Foxes)")
pylab.xlabel("\nNumber of prey  (Rabbits)")
pylab.plot(x, yList, 'b')
pylab.plot(x, zList, 'r')
pylab.legend(('Rabbits','Foxes'),loc='upper left')
pylab.show()

The issue i'm having is the logic in the lists.  How can I create the
simulation function using lists and make it perform the expected task of
creating a graph?  I can't seem to get the logic right.

Thanks,
Jim
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/tutor/attachments/20120928/7b72c30c/attachment-0001.html>
```