Skip to content
Snippets Groups Projects
Select Git revision
  • 4e876a092214445f09f32929705f5d745a7834d1
  • master default protected
  • development
  • fix-missing-weatherdata
  • fix-eichsfeld-weather
  • marco-development
  • marco/dev-aquacrop
  • precompile-statements
  • precompile-tools
  • tmp-faster-loading
  • skylark
  • testsuite
  • code-review
  • v0.7.0
  • v0.6.1
  • v0.6.0
  • v0.5.5
  • v0.5.4
  • v0.5.3
  • v0.5.2
  • v0.2
  • v0.3.0
  • v0.4.1
  • v0.5
24 results

mundialis_license.html

Blame
  • Code owners
    Assign users and groups as approvers for specific file changes. Learn more.
    lifehistory.jl 2.06 KiB
    ### Persephone - a socio-economic-ecological model of European agricultural landscapes.
    ###
    ### This file contains a set of life-history related utility functions needed by species.
    ###
    
    """
        initrandompopulation(popsize, asexual=true)
    
    A simplified version of `initpopulation()`. Creates a function that initialises
    `popsize` individuals, spread at random across the landscape. If `popsize` is less
    than 1, it is interpreted as a population density (i.e. 1 animal per `popsize` pixels).
    """
    function initrandompopulation(popsize::Float64, asexual::Bool=true)
        initfunc = function(species::Dict{String,Any}, model::AgentBasedModel)
            if popsize < 1.0
                x, y = size(model.landscape)
                popsize = Int(round(x*y*popsize))
            end
            for i in 1:popsize
                sex = asexual ? hermaphrodite : rand([male, female])
                add_agent!(Animal, model, species, sex, 0)
            end
            @debug "Initialised $(popsize) $(species["name"])s."
        end
        return initfunc
    end
    
    #TODO initpopulation
    
    """
        reproduce!(animal, model, n=1)
    
    Produce one or more offspring for the given animal at its current location.
    """
    function reproduce!(animal::Animal, model::AgentBasedModel, n::Int64=1)
        # XXX at the moment we don't have intra-specific variation, so currently we
        # don't need sexual recombination here
        for i in 1:n
            sex = animal.sex == hermaphrodite ? hermaphrodite : rand([male, female])
            add_agent!(animal.pos, Animal, model, animal.traits, sex, 0)
        end
        @debug "$(animal.traits["name"]) $(animal.id) has reproduced."
    end
    
    """
        kill(animal, model, probability=1.0, cause="")
    
    Kill this animal, optionally with a given percentage probability.
    Returns true if the animal dies, false if not.
    """
    function kill!(animal::Animal, model::AgentBasedModel, probability::Float64=1.0, cause::String="")
        if rand() < probability
            postfix = isempty(cause) ? "." : " from $cause."
            @debug "$(animal.traits["name"]) $(animal.id) has died$(postfix)"
            kill_agent!(animal, model)
            return true
        end
        return false
    end