Mario
Mario

Reputation: 25

How to set a probability of death for each tick

I want to set my code so that each forager (a breed of turtle) will have a 10% chance of dying for each tick it is vulnerable. I am building off of a code called Ants in the Netlogo models library.

When I use use [if random 100 > 98 [ die ]] (or anything below 98) nearly all of my turtles will die at the beginning and survive more after a hundred or so ticks have passed. However if I use [if random 100 > 98 [ die ]] no turtles will die. It's very weird.

    to go  ;; forever button
      ask foragers
      [ if who >= ticks [ stop ]
        ifelse color = red
        [ look-for-food  ]    
        [ return-to-nest ]      
        check-death
        wiggle
        fd 1 ]


    to check-death
      ask foragers [
        if vulnerable?
        [if random 100 > 99
          [ die ]]]
    end

I expected [if random 100 > 98 [ die ]] to make it so that a vulnerable turtle would only have a 2% chance of dying per tick rather than an immediate wipeout.

Upvotes: 1

Views: 395

Answers (1)

Luke C
Luke C

Reputation: 10301

The issue here is due to nested ask statements. You have an ask foragers [ ... statement that contains check-death, which contains another ask foragers statement. So, every single forager will be asking all foragers (including itself) to check-death. So, if you have 10 foragers, each forager will be running check-death 10 times per tick.

You should just be able to remove the ask foragers block from within your check-death procedure to solve your issue- have a look at this toy model example:

turtles-own [ vulnerable? ]

to setup
  ca
  crt 100 [ set vulnerable? one-of [ true false ] ]
  reset-ticks
end

to go
  ask turtles [
    rt random 61 - 30 
    fd 1
    check-death
  ]
  if not any? turtles with [ vulnerable? ] [
    print count turtles
    stop
  ]
  tick
end

to check-death 
  if vulnerable? and random-float 1 > 0.90 [
    die
  ]
end

That will randomly assign vulnerable? to the turtles, then have vulnerable turtles die if a randomly generated float value is greater than 0.90 (for the 10% chance mentioned in your question). Once there are no more turtles left, the model will stop.

Upvotes: 2

Related Questions