On Fri, 28 Sep 2012, Jim Apto wrote:

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:

I don't know anything about the Lotka-Volterra model, but I've definitely got some recommendation

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:"))


Woah! Stop that right now - eval is an *incredibly* dangerous function. If you want to convert these numbers to integer or float, there's the int() and float() function. Additionally, single letter variables are really horrible. You could do:

prey_growth_rate = float(input("Growth rate of prey: "))
predator_consumption_rate = #your code here
predator_death_rate = ...
predator_growth_rate = ...
initial_prey_population = ...
initial_predator_population = ...

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

I don't see where you defined deltaX or deltaY...


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.

Posting an image of what you expect, and what you got instead to imgur or some other free hosting site would be a good thing to do.

When asking a question you should always post what you wanted to happen, and what happened instead.

HTH,
Wayne
_______________________________________________
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor

Reply via email to