poisotlab / bioenergeticfoodwebs.jl Goto Github PK
View Code? Open in Web Editor NEWA unified interface for simulations of the Bio-Energetic model on food webs
Home Page: http://poisotlab.io/BioEnergeticFoodWebs.jl/latest/
License: Other
A unified interface for simulations of the Bio-Energetic model on food webs
Home Page: http://poisotlab.io/BioEnergeticFoodWebs.jl/latest/
License: Other
pT=p0exp(-(temp-topt)^2/(2s^2))
with
pT : biological rate
p0 : minimal trait value
topt : temperature at which trait is maximal
s : performance breadth
Branch temperature, script containing all thermal dependence functions
Seems like @TomClegg94 has implemented some rewiring -- do you want to submit this as a pull request here? @evadelmas was thinking about working on this too in the future.
It's throwing a bunch of redirects.
DifferentialEquations.jl is much more documented, and has the same functionalities
http://docs.juliadiffeq.org/latest/basics/common_solver_opts.html
Hello,
For an internship project I would to contribute to this package by implementing:
Ismaël Lajaaiti
x
are set to inf
in the Dictionary if body mass is supplied.julia 0.5.1
BioEnergeticFoodWebs 0.3.0
Hi @TomClegg94,
I was going through the tests today and it seems that the ADBM
function (or more probably the get_feeding_links
function) does not return the expected rewired matrix. This is true regardless of the method used (ratio, power or biomass). Would you have some time to check if there is indeed a bug in the code or if it's a problem with the tests?
Thanks
I see you are using DifferentialEquations.jl directly. For your case, you may want to use some of the specific components instead. This will reduce the size of the dependency and the associated installation time. This setup is documented here:
http://docs.juliadiffeq.org/latest/features/low_dep.html
Note that if you do this change, the automatic algorithm selection is disabled. You would have to provide the algorithm choices to the solve
command. I would recommend for your purposes Tsit5()
for non-stiff equations and CVODE_BDF()
for stiff equations, and thus depend directly on DiffEqBase, OrdinaryDiffEq, and Sundials.
Let me know if you need any help.
The consumption rates (attack and handling) in the embedded ADBM model for rewiring are different from the ones used by the BEFWm. This introduces a discrepancy, especially when using temperature scaling.
Elements of output[:p][:tmpA]
are all identical when rewire_method = :none
in simulate()
.
Elements of :tmpA
should be updated to remove extinct species. e.g. by updating the A
matrix as in the below code after each extinction:
extinct = out[:p][:extinctions]
tokeep = trues(S)
tokeep[extinct] .= false
A_i = out[:p][:A]
A_eq = A_i[tokeep, tokeep]
Example:
# Load packages
using BioEnergeticFoodWebs
using EcologicalNetworks
import Random.seed!
seed!(123)
siz = 10
con = 0.2
zed = 10.0
A_bool = EcologicalNetworks.nichemodel(siz, con) #use the niche model from Ecological Network to generate food webs
A = Int.(A_bool.A) #convert the UnipartiteNetwork object to Matrix of 1s and 0s
bm = ones(size(A, 1)) # assign biomasses of 1
p = model_parameters(A, Z = zed, rewire_method = :none)
out = simulate(p, bm, start=0, stop=500)
out[:p][:tmpA][1] == out[:p][:tmpA][4] # true
Change the productivity = :species
behavior so that K
accepts a vector of carrying capacities instead of a single value. If the vector's length is 1, then all species have the same K, otherwise, pass a vector of length S, values for consumers will be ignored (as r_consumers = 0).
When using some values of h different from 1.0 or 2.0, we get a DomainError when executing the function simulate()
. It seems to occur with the keywords :species
, :system
, :competitive
but not with :nutrients
.
Reproducible example :
A = [0 0 0 0 0; 1 0 1 0 0; 1 0 0 0 0; 0 1 0 0 0; 0 0 0 0 0] ;
p = model_parameters(A, productivity = :system, h = 1.2);
s = simulate(p, rand(p[:S]), stop=1000)
Error obtained :
ERROR: DomainError with -6.825133204115963e-9:
Exponentiation yielding a complex result requires a complex argument.
Replace x^y with (x+0im)^y, Complex(x)^y, or similar.
It seems to come from the matrix structure. When removing one link such that A = [0 0 0 0 0; 1 0 1 0 0; 0 0 0 0 0; 0 1 0 0 0; 0 0 0 0 0]
, it works.
julia --version
Pkg.status("BioEnergeticFoodWebs")
Seems that there is a problem in the ADBM's get_feeding_links
function caused by the biomass
object containing actual biomass AND nutrients concentration.
ERROR: BoundsError: attempt to access 4-element Array{Float64,1} at index [Base.LogicalIndex(Bool[false, true, false, false, false, false])]
[...] at src/rewiring/ADBM.jl:94
A = [0 1 1 0 ; 0 0 0 1 ; 0 0 0 1 ; 0 0 0 0]
p = model_parameters(A, Z = 10.0, rewire_method = :ADBM, Hmethod = :ratio, Nmethod = :biomass, h = 2.0, productivity = :nutrients)
biomass = [0.2, 0.0, 0.4, 0.7]
s = simulate(p, biomass)
measure.jl
fails because of the save
function that returns the following error ERROR: type DataType has no field mutable
] test
measures.jl
fails and return the following error: ERROR: type DataType has no field mutable
caused by the call of the function save
The issue probably comes from an incompatibility between the old version of JLD2 in the package environment and the new version of Julia. Thus, a way to solve this issue could be:
using JLD2
between JLD2: save
and BioEnergeticFoodWebs: save
, import only the macro @save
from JLD2 (that is used by BioEnergeticFoodWebs: save
) by doing using JLD2: @save
instead of using JLD2
.I implemented this solution in the branch fix-compat-julia1.7-jld2 that I submitted to a pull request.
julia --version
1.7.2Pkg.status("BioEnergeticFoodWebs")
Project BioEnergeticFoodWebs v1.2.0
Status `~/Documents/Projects/Julia/BioEnergeticFoodWebs.jl/Project.toml`
[459566f4] DiffEqCallbacks v2.22.0
[31c24e10] Distributions v0.24.18
[033835bb] JLD2 v0.3.3
[682c06a0] JSON v0.21.3
[1dea7af3] OrdinaryDiffEq v5.71.0
[295af30f] Revise v3.3.3
[2913bbd2] StatsBase v0.33.16
[37e2e46d] LinearAlgebra
[9a3f8284] Random
[10745b16] Statistics
[8dfed614] Test
nichemodel(85, 227)
should produce networks with average number of links equal to 227using EcologicalNetworks
mean_link = []
for iter in range(1,10000)
sm = sum(nichemodel(85, 227))
push!(mean_link, sm)
end
println(mean(mean_link))
pT=c*exp(b*(-1/k*T)+q*(-1/k*T)^2)
with
pT : biological rate
c, b, q : fitted parameters (Englund et al 2011)
T : temperature
k : boltzmann constant
Branch temperature, script containing all thermal dependence functions
pT=p0exp(-E/(kT))
with
pT : biological traits
p0 : scaling constant
E : activation energy
k : Boltzmann constant
T : temperature
Branch temperature, script containing all thermal dependence functions
Neither primary nor secondary extinctions are detected (and callbacks not triggered) when the primary extinction is triggered by setting the initial biomass of a species to 0.0
in simulate
.
When using the ExponentialBA
thermal dependence on both attack rate and handling time (consumption rates), with certain parameters values, it causes some biomass values to become NaN
, which causes instabilites and makes the simulation abort.
Reproducible exemple (sent by @Azenor):
A = [0 1 1 ; 0 0 0 ; 0 0 0]
tempK = 288.35
is_vertebrate = [true, true, false]
AR_E_ect_vert = -0.4 # activation energy for ectotherm vertebrates
AR_NC_ect_vert = exp(-18.77) # normalisation constant for ectotherm vertebrates
AR_β_prod = 0.25 # allometric exponent for producers
AR_β_vert = -0.8 # allometric exponent for vertebrates
HT_E_ect_vert = 1.15 # activation energy for ectotherm vertebrates
HT_NC_ect_vert = exp(4.54) # normalisation constant for ectotherm vertebrates
HT_β_prod = -0.45 # allometric exponent for producers
HT_β_vert = 0.47 # allometric exponent for vertebrates
p = model_parameters(A, productivity = :species, vertebrates = is_vertebrate, T = tempK, handlingtime = ExponentialBA(:handlingtime, parameters_tuple = (norm_constant_vertebrate = HT_NC_ect_vert*1e-6, activation_energy_vertebrate = HT_E_ect_vert, β_producer = HT_β_prod, β_vertebrate = HT_β_vert)),attackrate = ExponentialBA(:attackrate, parameters_tuple = (norm_constant_vertebrate = AR_NC_ect_vert*1e10, activation_energy_vertebrate = AR_E_ect_vert, β_producer = AR_β_prod, β_vertebrate = AR_β_vert)))
s = simulate(p, rand(p[:S]), stop=1000)
Error message:
Warning: Instability detected. Aborting
└ @ DiffEqBase ~/.julia/packages/DiffEqBase/s4c9b/src/integrator_interface.jl:162
Dict{Symbol,Any} with 3 entries:
:p => Dict{Symbol,Any}(:α=>1.0,:e_carnivore=>0.85,:Γh=>[92.3348 92.3348 92.3348; Inf Inf…
:B => [0.00688778 0.164855 0.406024; 0.0116606 0.167291 0.407942; … ; 0.136619 8.58418e-…
:t => [0.0, 0.0412915, 0.079139, 0.12853, 0.182064, 0.243794, 0.25, 0.315756, 0.387732, …
When using the same parameters with thermal dependence only on handling time or attack rate, no instabilities are detected, which siggest that the combination of both is causing the NaN
values. It could be linked to some values of max consumption rate and half saturation densities to be Inf
.
When using temperature scaling for the biological rates, the time scale of the system is per second (1 time step = 1 second), so we might want to output less than 4 time steps per second... a potential solution would be to add a keyword argument to simulate
to control tkeep
This issue is used to trigger TagBot; feel free to unsubscribe.
If you haven't already, you should update your TagBot.yml
to include issue comment triggers.
Please see this post on Discourse for instructions and more details.
If you'd like for me to do this for you, comment TagBot fix
on this issue.
I'll open a PR within a few hours, please be patient!
Installation of the package
Julia returns an error stating:
unsatisfiable package requirements detected: no feasible version could be found for package: ChunkedArrays
after this package is installed and the BEFW package is installed again it returns the same error as above for the following packages:
Parameters ResettableStacks DataStructures Iterators
After this it finally allows installation.
1.Start with clean install of Julia 0.5.1
2.Run Pkg.add("BioEnergeticFoodWebs")
3.Add the packages that are returned by the error
julia 0.5.1
Pkg.status("BioEnergeticFoodWebs")
- NAOSX 10.10.5
I have run the simulations and now want to save the output - ideally in a form where I can read it into R.
If I run BioEnergeticFoodWebs.save(filename, as = json) I don't get any error, but I also don't get any output.
If I try JSON.print(f,sim) I get the error:
ERROR: Cannot serialize type getfield(BioEnergeticFoodWebs, Symbol("##10#14"))
JSON.print used to work for me fine a year or two ago so I guess there's some issue with an update somewhere along the line?
1.using BioEnergeticFoodWebs, JSON
2.foodweb = nichemodel(10,0.3);
3.bm = rand(size(foodweb,1));
4. params = model_parameters(foodweb)
5. sim = simulate(params, bm, start = 0, stop = 1000);
6.f=open("trial.json","w")
7.JSON.print(f,sim)
julia --version
julia version 1.1.0 (but I have the same problem with 1.0.5)
Pkg.status("BioEnergeticFoodWebs")
BioEnergeticFoodWebs v1.1.2
OS and version
Ubuntu 18.04.4 LTS (Bionic Beaver)
Currently, species can change trophic classes after rewiring (carnivores become herbivores ...).
--> Add a rewiring_constraint
parameter that could be set to :trophic_class
(species cannot change trophic class) or :none
(species can change trophic class).
pT=p0exp(-E/(kT)) * (1/(1+exp(-1/(kT)(Ed-(Ed/topt+k*log(E/(Ed-E)))*T))))
with
pT : biological traits
p0 : scaling constant
E : activation energy
k : Boltzmann constant
T : temperature
topt : optimal temperature
Ed : deactivation energy
Branch temperature, script containing all thermal dependence functions
I get zombies (species that go extinct or nearly extinct and then come back). I'm not sure if this is due to the warning, or if the package doesn't have a control to avoid zombies (but it looks like you do), or if the threshold for extinctions is just lower than I think it is.
┌ Warning: Could not restrict values to domain. Iteration was canceled since
│ time step dt = = "time step dt = "
│ integrator.dt = 2.220446049250313e-16
│ could not be reduced. = " could not be reduced."
└ @ DiffEqCallbacks C:\Users\kewo0002.julia\packages\DiffEqCallbacks\rV4BA\src\domain.jl:98
julia --version
Version 1.1.0Pkg.status("BioEnergeticFoodWebs")
BioEnergeticFoodWebs v1.0.0@tpoisot @evadelmas I'm not sure who can edit this but the link to the documentation in the About section of this repo should be http://poisotlab.github.io/BioEnergeticFoodWebs.jl/latest/, not http://poisotlab.io/BioEnergeticFoodWebs.jl/latest/
Links are fine in the README
@evadelmas / @TomClegg94
please fill in the details in the zenodo.json file (on next
)
@evadelmas / @TomClegg94
I'm ready to merge next
into master
and go forth with a new release (when #40 is done) -- before we do this, the doc needs a page about extinctions.
I added an empty file at docs/src/man/extinctions.md
-- please add something short and sweet.
Great work all around.
Some ideas about how to make a general interface for temperature functions.
All function have the form
function fname(params)
return (p,t) -> something
end
So for example, with a Gaussian:
function gaussian(params)
return (x,t) -> x * exp(-((params.optimal-t)^2/(2*params.dispersal^2))
end
This means that we can have something like
params = (optimal = 20.0, dispersal = 0.4)
handling_time = gaussian(params)
and for any default value of handling time at any temperature, we can call
handling_time(default_value, temperature)
The cool thing is that if all functions (gaussian
, arrhenius
, etc) are defined in the same way, we can do something like
function simulation(...., handling::(gaussian, default, params), attack::(arrhenius, default, params), ...)
which defines the behavior of all parameters as functions and parameters. We can also have a function for no response to temperature, defined as
function no_effect(params)
return (x, t) -> x
end
(this returns the default value).
Let me know if that makes sense, but I think this is the more general approach -- it basically puts the parameterization of temperature functions outside of the model, so we can possibly get this done with minimal modifications to the internal code.
So far the model uses the functional response as presented in Williams, Brose and Martinez 2007 (multi-species version of Yodzis and Innes 1992), using species specific (vector of length S - where S is the number of species) max. consumption rates and half saturation densities.
When using temperature scaling of biological rates, we need to be able to pass interaction specific (matrix of dim. S * S) attack rates and handling times.
pT=a.*exp.(b.T).(1-((T-z)./(w/2)).^2)
with
pT : biological rate
a, b : parameters from the Eppley curve
z : temperature at which the rate is maximal
w : thermal breadth
Branch temperature, script containing all thermal dependence functions
The parameters
object stores extinctions time steps (in extinctionstime
) as well as the state of the interaction matrix before extinctions (and rewiring). When using the interval
method for ADBM we should have something similar, e.g. rewiretime
would store the time steps where we have rewiring without extinction
In the embedded ADB model, profitability should be calculated based on density but is actually based on biomass here (when Nmethod = :biomass
). Simply dividing biomass by body mass would convert it into density.
When using rewiring with the ADBM model, the whole web is rewired following extinction events, independently of the identity of the extinct species.
We could add a parameter (adbm_directlinks = true / false
) to chose whether we want only species that are directly affected by the extinction -- because they have lost a direct resource or consumer (adbm_directlinks = true
), or the whole web (adbm_directlinks = false
) to be subject to rewiring.
I can get the foodweb (A), I get a warning when I run model_parameters(A), but it works (see warning below). simulate() doesn't work at all. First I think it doesn't like the option for steps, but even when I remove that I still get an error (see below).
Warning when I try and run model_parameters(A):
Error when running > s = simulate(p, b, start=0, stop=500):
ERROR: MethodError: no method matching (::BioEnergeticFoodWebs.#f#28{Dict{Symbol,Any}})(::Array{Float64,1}, ::Void, ::Float64)
Closest candidates are:
f(::Any, ::Any) at C:\Users\kewo0002.julia\v0.6\BioEnergeticFoodWebs\src.\simulate.jl:44
Stacktrace:
[1] ode_determine_initdt(::Array{Float64,1}, ::Float64, ::Float64, ::Float64, ::Float64, ::Float64, ::DiffEqBase.#ODE_DEFAULT_NORM, ::DiffEqBase.ODEProblem{Array{Float64,1},Float64,false,Void,BioEnergeticFoodWebs.#f#28{Dict{Symbol,Any}},Void,Void,UniformScaling{Int64},DiffEqBase.StandardODEProblem}, ::OrdinaryDiffEq.ODEIntegrator{OrdinaryDiffEq.Rodas4{0,false,DiffEqBase.LinSolveFactorize{Base.LinAlg.#lufact!},DataType},Array{Float64,1},Float64,Void,Float64,Float64,Float64,Array{Array{Float64,1},1},DiffEqBase.ODESolution{Float64,2,Array{Array{Float64,1},1},Void,Void,Array{Float64,1},Array{Array{Array{Float64,1},1},1},DiffEqBase.ODEProblem{Array{Float64,1},Float64,false,Void,BioEnergeticFoodWebs.#f#28{Dict{Symbol,Any}},Void,Void,UniformScaling{Int64},DiffEqBase.StandardODEProblem},OrdinaryDiffEq.Rodas4{0,false,DiffEqBase.LinSolveFactorize{Base.LinAlg.#lufact!},DataType},OrdinaryDiffEq.InterpolationData{BioEnergeticFoodWebs.#f#28{Dict{Symbol,Any}},Array{Array{Float64,1},1},Array{Float64,1},Array{Array{Array{Float64,1},1},1},OrdinaryDiffEq.Rodas4ConstantCache{DiffEqDiffTools.TimeDerivativeWrapper{BioEnergeticFoodWebs.#f#28{Dict{Symbol,Any}},Array{Float64,1},Void},DiffEqDiffTools.UDerivativeWrapper{BioEnergeticFoodWebs.#f#28{Dict{Symbol,Any}},Float64,Void},OrdinaryDiffEq.RodasConstantCache{Float64,Float64}}}},BioEnergeticFoodWebs.#f#28{Dict{Symbol,Any}},Void,OrdinaryDiffEq.Rodas4ConstantCache{DiffEqDiffTools.TimeDerivativeWrapper{BioEnergeticFoodWebs.#f#28{Dict{Symbol,Any}},Array{Float64,1},Void},DiffEqDiffTools.UDerivativeWrapper{BioEnergeticFoodWebs.#f#28{Dict{Symbol,Any}},Float64,Void},OrdinaryDiffEq.RodasConstantCache{Float64,Float64}},OrdinaryDiffEq.DEOptions{Float64,Float64,Float64,Float64,DiffEqBase.#ODE_DEFAULT_NORM,DiffEqBase.CallbackSet{Tuple{},Tuple{}},DiffEqBase.#ODE_DEFAULT_ISOUTOFDOMAIN,DiffEqBase.#ODE_DEFAULT_PROG_MESSAGE,DiffEqBase.#ODE_DEFAULT_UNSTABLE_CHECK,DataStructures.BinaryHeap{Float64,DataStructures.LessThan},DataStructures.BinaryHeap{Float64,DataStructures.LessThan},Void,Void,Int64,Array{Float64,1},Array{Float64,1},Array{Float64,1}},Array{Float64,1}}) at C:\Users\kewo0002.julia\v0.6\OrdinaryDiffEq\src\initdt.jl:126
[2] auto_dt_reset! at C:\Users\kewo0002.julia\v0.6\OrdinaryDiffEq\src\integrators\integrator_interface.jl:250 [inlined]
[3] #init#1470(::Int64, ::Array{Float64,1}, ::Array{Float64,1}, ::Array{Float64,1}, ::Void, ::Bool, ::Bool, ::Bool, ::Bool, ::Void, ::Bool, ::Bool, ::Float64, ::Bool, ::Rational{Int64}, ::Void, ::Void, ::Int64, ::Rational{Int64}, ::Int64, ::Rational{Int64}, ::Rational{Int64}, ::Bool, ::Int64, ::Void, ::Void, ::Int64, ::Float64, ::Float64, ::DiffEqBase.#ODE_DEFAULT_NORM, ::DiffEqBase.#ODE_DEFAULT_ISOUTOFDOMAIN, ::DiffEqBase.#ODE_DEFAULT_UNSTABLE_CHECK, ::Bool, ::Bool, ::Bool, ::Bool, ::Bool, ::Bool, ::Bool, ::Bool, ::Int64, ::String, ::DiffEqBase.#ODE_DEFAULT_PROG_MESSAGE, ::Void, ::Bool, ::Bool, ::Array{Any,1}, ::DiffEqBase.#init, ::DiffEqBase.ODEProblem{Array{Float64,1},Float64,false,Void,BioEnergeticFoodWebs.#f#28{Dict{Symbol,Any}},Void,Void,UniformScaling{Int64},DiffEqBase.StandardODEProblem}, ::OrdinaryDiffEq.Rodas4{0,false,DiffEqBase.LinSolveFactorize{Base.LinAlg.#lufact!},DataType}, ::Array{Any,1}, ::Array{Any,1}, ::Array{Any,1}, ::Type{Val{true}}) at C:\Users\kewo0002.julia\v0.6\OrdinaryDiffEq\src\solve.jl:320
[4] (::DiffEqBase.#kw##init)(::Array{Any,1}, ::DiffEqBase.#init, ::DiffEqBase.ODEProblem{Array{Float64,1},Float64,false,Void,BioEnergeticFoodWebs.#f#28{Dict{Symbol,Any}},Void,Void,UniformScaling{Int64},DiffEqBase.StandardODEProblem}, ::OrdinaryDiffEq.Rodas4{0,false,DiffEqBase.LinSolveFactorize{Base.LinAlg.#lufact!},DataType}, ::Array{Any,1}, ::Array{Any,1}, ::Array{Any,1}, ::Type{Val{true}}) at .<missing>:0
[5] #solve#1469(::Array{Any,1}, ::Function, ::DiffEqBase.ODEProblem{Array{Float64,1},Float64,false,Void,BioEnergeticFoodWebs.#f#28{Dict{Symbol,Any}},Void,Void,UniformScaling{Int64},DiffEqBase.StandardODEProblem}, ::OrdinaryDiffEq.Rodas4{0,false,DiffEqBase.LinSolveFactorize{Base.LinAlg.#lufact!},DataType}, ::Array{Any,1}, ::Array{Any,1}, ::Array{Any,1}, ::Type{Val{true}}) at C:\Users\kewo0002.julia\v0.6\OrdinaryDiffEq\src\solve.jl:6
[6] (::DiffEqBase.#kw##solve)(::Array{Any,1}, ::DiffEqBase.#solve, ::DiffEqBase.ODEProblem{Array{Float64,1},Float64,false,Void,BioEnergeticFoodWebs.#f#28{Dict{Symbol,Any}},Void,Void,UniformScaling{Int64},DiffEqBase.StandardODEProblem}, ::OrdinaryDiffEq.Rodas4{0,false,DiffEqBase.LinSolveFactorize{Base.LinAlg.#lufact!},DataType}, ::Array{Any,1}, ::Array{Any,1}, ::Array{Any,1}, ::Type{Val{true}}) at .<missing>:0 (repeats 2 times)
[7] #solve#2(::Bool, ::Array{Any,1}, ::Function, ::DiffEqBase.ODEProblem{Array{Float64,1},Float64,false,Void,BioEnergeticFoodWebs.#f#28{Dict{Symbol,Any}},Void,Void,UniformScaling{Int64},DiffEqBase.StandardODEProblem}, ::Void) at C:\Users\kewo0002.julia\v0.6\DifferentialEquations\src\default_solve.jl:14
[8] (::DiffEqBase.#kw##solve)(::Array{Any,1}, ::DiffEqBase.#solve, ::DiffEqBase.ODEProblem{Array{Float64,1},Float64,false,Void,BioEnergeticFoodWebs.#f#28{Dict{Symbol,Any}},Void,Void,UniformScaling{Int64},DiffEqBase.StandardODEProblem}, ::Void) at .<missing>:0
[9] #solve#1(::Bool, ::Array{Any,1}, ::Function, ::DiffEqBase.ODEProblem{Array{Float64,1},Float64,false,Void,BioEnergeticFoodWebs.#f#28{Dict{Symbol,Any}},Void,Void,UniformScaling{Int64},DiffEqBase.StandardODEProblem}) at C:\Users\kewo0002.julia\v0.6\DifferentialEquations\src\default_solve.jl:5
[10] (::DiffEqBase.#kw##solve)(::Array{Any,1}, ::DiffEqBase.#solve, ::DiffEqBase.ODEProblem{Array{Float64,1},Float64,false,Void,BioEnergeticFoodWebs.#f#28{Dict{Symbol,Any}},Void,Void,UniformScaling{Int64},DiffEqBase.StandardODEProblem}) at .<missing>:0
[11] #simulate#27(::Int64, ::Int64, ::Symbol, ::Function, ::Dict{Symbol,Any}, ::Array{Float64,1}) at C:\Users\kewo0002.julia\v0.6\BioEnergeticFoodWebs\src.\simulate.jl:48
[12] simulate(::Dict{Symbol,Any}, ::Array{Float64,1}) at C:\Users\kewo0002.julia\v0.6\BioEnergeticFoodWebs\src.\simulate.jl:35
julia --version
Version 0.6.4 (2018-07-09 19:09 UTC)Pkg.status("BioEnergeticFoodWebs")
: 0.3.1In addition to nichemodel
create an ADBMmodel
function to generate foodwebs, based on the existing ADBM rewiring functions.
Documents are built using Documenter but not deployed online.
Setting ENV["DOCUMENTER_DEBUG"] = "true"
shows the following:
┌ Info: Deployment criteria:
│ - ✔ ENV["TRAVIS_REPO_SLUG"]="PoisotLab/BioEnergeticFoodWebs.jl" occurs in repo="github.com/PoisotLab/BioEnergeticFoodWebs.jl.git"
│ - ✔ ENV["TRAVIS_PULL_REQUEST"]="false" is "false"
│ - ✔ ENV["TRAVIS_TAG"]="" is (i) empty or (ii) a valid VersionNumber
│ - ✘ ENV["TRAVIS_BRANCH"]="next" matches devbranch="master" (if tag is empty)
│ - ✔ ENV["DOCUMENTER_KEY"] exists
└ Deploying: ✘
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.