* Your assessment is very important for improving the work of artificial intelligence, which forms the content of this project
Download Predator-prey-code
Survey
Document related concepts
Transcript
The hare birth rate is constant, as their food supply is
unlimited. Hares only die when eaten by a lynx, and the
number of hares eaten is proportional to how often hares
& lynxes meet, i.e., the chance of a lynx catching a hare.
The lynx birth rate is also proportional to how often hares
& lynxes meet, i.e., the food available for each lynx family.
Lynxes only die from natural causes, and their death rate is
constant.
Computational Thinking
Relevant
input
Automation
Abstraction
Problem description
Computational goal
Information extraction
Algorithm design
Algorithm implementation
Recipe (Algorithm)
Answer
1. Generate population data.
a.
Repeatedly, generate next population.
2. Display population data.
Given β0 , π0 , βππππ΅πππ‘β, βπππππππππ‘πππ, ππ¦ππ₯π΅πππ‘β,
ππ¦ππ₯π·πππ‘β, π¦ππππ .
Repeat these steps for π¦ = 0, β¦ , π¦ππππ β 1:
βπ¦+1 = βπ¦ + βπ¦ β βππππ΅πππ‘β β βπππππππππ‘πππ β ππ¦
ππ¦+1 = ππ¦ + ππ¦ β ππ¦ππ₯π΅πππ‘β β βπ¦ β ππ¦ππ₯π·πππ‘β
Plot π¦, βπ¦ for π¦ = 0, β¦ , π¦ππππ .
Plot π¦, ππ¦ for π¦ = 0, β¦ , π¦ππππ .
Improve Algorithm
β’ Separate parts
β’ Generalize
β’ Articulate goals
1. Generate population data.
a.
Repeatedly, generate next population.
2. Display population data.
Given β0 , π0 , βππππ΅πππ‘β, βπππππππππ‘πππ, ππ¦ππ₯π΅πππ‘β,
ππ¦ππ₯π·πππ‘β, π¦ππππ .
Repeat these steps for π¦ = 0, β¦ , π¦ππππ β 1:
βπ¦+1 = βπ¦ + βπ¦ β βππππ΅πππ‘β β βπππππππππ‘πππ β ππ¦
ππ¦+1 = ππ¦ + ππ¦ β ππ¦ππ₯π΅πππ‘β β βπ¦ β ππ¦ππ₯π·πππ‘β
Plot π¦, βπ¦ for π¦ = 0, β¦ , π¦ππππ .
Plot π¦, ππ¦ for π¦ = 0, β¦ , π¦ππππ .
Given β0 , π0 , βππππ΅πππ‘β, βπππππππππ‘πππ, ππ¦ππ₯π΅πππ‘β,
ππ¦ππ₯π·πππ‘β, π¦ππππ .
Repeat these steps for π¦ = 0, β¦ , π¦ππππ β 1:
βπ¦+1 = βπ¦ + βπ¦ β βππππ΅πππ‘β β βπππππππππ‘πππ β ππ¦
ππ¦+1 = ππ¦ + ππ¦ β ππ¦ππ₯π΅πππ‘β β βπ¦ β ππ¦ππ₯π·πππ‘β
Return π and π.
Why Separate Parts?
β’ Simpler
β’ Independently useful
Generalize beyond Hares & Lynxes
Given ππππ¦0 , ππππ0 , ππππ€π‘β, ππππππ‘πππ, ππππ£πππ πππ,
ππππ‘β, π¦ππππ .
Repeat these steps for π¦ = 0, β¦ , π¦ππππ β 1:
ππππ¦π¦+1 = ππππ¦π¦ + ππππ¦π¦ β ππππ€π‘β β ππππππ‘πππ β
Articulate Goals
Populations:
Given ππππ¦0 , ππππ0 , ππππ€π‘β, ππππππ‘πππ, ππππ£πππ πππ, ππππ‘β,
π¦ππππ .
Returns the predicted populations of two species, given their
initial populations, the preyβs growth rate, the predation rate,
the predatorβs food conversion rate, the predatorβs death rate,
and the number of years to predict.
Repeat these steps for π¦ = 0, β¦ , π¦ππππ β 1:
ππππ¦π¦+1 = ππππ¦π¦ + ππππ¦π¦ β ππππ€π‘β β ππππππ‘πππ β πππππ¦
πππππ¦+1 = πππππ¦ + πππππ¦ β ππππ£πππ πππ β ππππ¦π¦ β ππππ‘β
Return ππππ¦ and ππππ.
Express as Python Code
Use What Kinds of Python Data?
Populations:
Given ππππ¦0 , ππππ0 , ππππ€π‘β, ππππππ‘πππ, ππππ£πππ πππ, ππππ‘β,
π¦ππππ .
Returns the predicted populations of two species, given their
initial populations, the preyβs growth rate, the predation rate,
the predatorβs food conversion rate, the predatorβs death rate,
and the number of years to predict.
Repeat these steps for π¦ = 0, β¦ , π¦ππππ β 1:
ππππ¦π¦+1 = ππππ¦π¦ + ππππ¦π¦ β ππππ€π‘β β ππππππ‘πππ β πππππ¦
πππππ¦+1 = πππππ¦ + πππππ¦ β ππππ£πππ πππ β ππππ¦π¦ β ππππ‘β
Return ππππ¦ and ππππ.
ππππ¦ and ππππ as Lists
ππππ¦ = ππππ¦0 ππππ¦1 ππππ¦2 ππππ¦3 ππππ¦4
β¦
ππππ = ππππ0 ππππ1 ππππ2 ππππ3 ππππ4
β¦
Translate Piece by Piece
Populations:
Given ππππ¦0 , ππππ0 , ππππ€π‘β, ππππππ‘πππ, ππππ£πππ πππ, ππππ‘β,
π¦ππππ .
Returns the predicted populations of two species, given their
initial populations, the preyβs growth rate, the predation rate,
the predatorβs food conversion rate, the predatorβs death rate,
and the number of years to predict.
def populations(prey0,pred0,growth,predation,conversion,death,years):
"""Returns the predicted populations of two species, given their
initial populations, the prey's growth rate, the predation
rate, the predator's food conversion rate, the predator's
death rate, and the number of years to predict."""
prey = [prey0]
pred = [pred0]
Translate Piece by Piece
Repeat these steps for π¦ = 0, β¦ , π¦ππππ β 1:
for y in range(years):
Translate Piece by Piece
ππππ¦π¦+1 = ππππ¦π¦ + ππππ¦π¦ β ππππ€π‘β β ππππππ‘πππ β πππππ¦
πππππ¦+1 = πππππ¦ + πππππ¦ β ππππ£πππ πππ β ππππ¦π¦ β ππππ‘β
prey.append( prey[y] + prey[y] * (growth-predation*pred[y]) )
pred.append( pred[y] + pred[y] * (conversion*prey[y]-death) )
Translate Piece by Piece
Return ππππ¦ and ππππ.
return prey , pred
Put the Functionβs Pieces Together
def populations(prey0,pred0,growth,predation,conversion,death,years):
"""Returns the predicted populations of two species, given their
initial populations, the prey's growth rate, the predation
rate, the predator's food conversion rate, the predator's
death rate, and the number of years to predict."""
prey = [prey0]
pred = [pred0]
for y in range(years):
prey.append(prey[y] + prey[y] * (growth-predation*pred[y]))
pred.append(pred[y] + pred[y] * (conversion*prey[y]-death))
return prey, pred
How to Use The Code?
pred, prey = populations(100,50,.4,.003,.004,.2,10)
A Useful Aside
def populations(prey0,pred0,growth,predation,conversion,death,years):
"""Returns the predicted populations of two species, given their
initial populations, the prey's growth rate, the predation
rate, the predator's food conversion rate, the predator's
death rate, and the number of years to predict."""
prey = [prey0]
pred = [pred0]
for y in range(years):
print "y = ", y
print "prey = ", prey
print "pred = ", pred
prey.append(prey[y] + prey[y] * (growth-predation*pred[y]))
pred.append(pred[y] + pred[y] * (conversion*prey[y]-death))
return prey, pred
Plotting
import matplotlib.pyplot as plt
def plotPopulations(times,prey,pred,preyName,predName):
"""Displays a plot of two populations over the given times."""
# Prey use circles connected by solid line.
preyPlot = plt.plot(times, prey, 'o-' )
# Predators use squares connected by dotted line.
predPlot = plt.plot(times, pred, 's:' )
# Place legend box in "best" location.
plt.legend((preyPlot, predPlot), (preyName, predName), 'best')
plt.xlabel('Years')
plt.ylabel('Population')
plt.title('Predator-Prey Model')
plt.show()
Putting Everything Together
import matplotlib.pyplot as plt
def populations(β¦):
β¦
def plotPopulations(β¦):
β¦
prey, pred = populations(100,50,.4,.003,.004,.2,10)
times = range(len(prey))
plotPopulations(times,prey,pred,"Hare","Lynx")