module Numeric.Probability.Example.Predator where
import Numeric.Probability.Visualize (
Vis, Color(Green, Red),
figP, figure, title,
showParams, xLabel, yLabel, plotL, color, label,
)
g, d, s, e :: Float
g :: Float
g = Float
1.02
d :: Float
d = Float
0.98
s :: Float
s = Float
0.01
e :: Float
e = Float
0.01
v0 :: Float
v0 :: Float
v0 = Float
1
p0 :: Float
p0 :: Float
p0 = Float
1
dv :: (Float,Float) -> Float
dv :: (Float, Float) -> Float
dv (Float
v,Float
p) = (Float
gFloat -> Float -> Float
forall a. Num a => a -> a -> a
*Float
v Float -> Float -> Float
forall a. Num a => a -> a -> a
- Float
sFloat -> Float -> Float
forall a. Num a => a -> a -> a
*Float
vFloat -> Float -> Float
forall a. Num a => a -> a -> a
*Float
p) Float -> Float -> Float
forall a. Ord a => a -> a -> a
`max` Float
0
dp :: (Float,Float) -> Float
dp :: (Float, Float) -> Float
dp (Float
v,Float
p) = (Float
dFloat -> Float -> Float
forall a. Num a => a -> a -> a
*Float
p Float -> Float -> Float
forall a. Num a => a -> a -> a
+ Float
eFloat -> Float -> Float
forall a. Num a => a -> a -> a
*Float
vFloat -> Float -> Float
forall a. Num a => a -> a -> a
*Float
p) Float -> Float -> Float
forall a. Ord a => a -> a -> a
`max` Float
0
dvp :: (Float, Float) -> (Float, Float)
dvp :: (Float, Float) -> (Float, Float)
dvp (Float, Float)
vp' = ((Float, Float) -> Float
dv (Float, Float)
vp', (Float, Float) -> Float
dp (Float, Float)
vp')
vp :: [(Float, Float)]
vp :: [(Float, Float)]
vp = (Float
v0,Float
p0)(Float, Float) -> [(Float, Float)] -> [(Float, Float)]
forall a. a -> [a] -> [a]
:((Float, Float) -> (Float, Float))
-> [(Float, Float)] -> [(Float, Float)]
forall a b. (a -> b) -> [a] -> [b]
map (Float, Float) -> (Float, Float)
dvp [(Float, Float)]
vp
vs :: [Float]
vs :: [Float]
vs = ((Float, Float) -> Float) -> [(Float, Float)] -> [Float]
forall a b. (a -> b) -> [a] -> [b]
map (Float, Float) -> Float
forall a b. (a, b) -> a
fst [(Float, Float)]
vp
ps :: [Float]
ps :: [Float]
ps = ((Float, Float) -> Float) -> [(Float, Float)] -> [Float]
forall a b. (a -> b) -> [a] -> [b]
map (Float, Float) -> Float
forall a b. (a, b) -> b
snd [(Float, Float)]
vp
fig1 :: Int -> Vis
fig1 :: Int -> Vis
fig1 Int
n = FigureEnv -> [Plot] -> Vis
figP FigureEnv
figure{title="Predator/Prey Simulation "++
showParams [g,d,s,e] ["g","d","s","e"],
xLabel="Time (generation)",
yLabel="Population"}
[([Float] -> Plot
forall a. ToFloat a => [a] -> Plot
plotL (Int -> [Float] -> [Float]
forall a. Int -> [a] -> [a]
take Int
n [Float]
vs)){color=Green,label="Victim"},
([Float] -> Plot
forall a. ToFloat a => [a] -> Plot
plotL (Int -> [Float] -> [Float]
forall a. Int -> [a] -> [a]
take Int
n [Float]
ps)){color=Red,label="Prey"}]