[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 = [0]
while r <= n:
r = r + 1
count = count + 1
yList.append(dx + dx)
zList= [0]
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>
More information about the Tutor
mailing list