如何设置每个tick的死亡概率

时间:2019-05-09 02:05:18

标签: netlogo

我想设置代码,以便每个觅食者(一种乌龟)在脆弱的每一个tick上都有10%的死亡几率。我在Netlogo模型库中建立了一个称为Ants的代码。

当我使用[如果随机100> 98 [死亡]](或98以下的任何东西)时,几乎我所有的海龟都将在开始时死亡,并在经过大约一百次tick虫后存活更多。但是,如果使用[如果随机100> 98 [死亡]],则不会有乌龟死亡。很奇怪。

    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

我希望[如果随机100> 98 [死亡]]会做到这一点,这样一只脆弱的乌龟每只per虫死亡的机会只有2%,而不是立即消失。

1 个答案:

答案 0 :(得分:1)

此处的问题归因于嵌套的ask语句。您有一个包含ask foragers [ ...的{​​{1}}语句,其中还包含另一个check-death语句。因此,每个觅食者都会向所有觅食者(包括其自身)询问ask foragers。因此,如果您有10个觅食者,则每个觅食者每tick将运行check-death 10次。

您应该只需要从check-death程序中删除ask foragers块即可解决您的问题,请查看以下玩具模型示例:

check-death

这将随机地将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 分配给乌龟,然后如果随机生成的浮点值大于0.90(对于您的问题中提到的机会为10%),则脆弱的乌龟会死亡。一旦没有更多的海龟了,模型就会停止。