netlogo中基于距离的死亡率模型

时间:2017-05-23 23:34:49

标签: netlogo

我正在计算netlogo中的累积海龟死亡率,作为netlogo界面世界中来自海龟(其中100个)的原始距离(start-patch)移动的距离的函数。在下面的代码中,'Pass-Away'过程链接到一个名为“space-death”的全局接口开关,当接通时,会产生由称为“Pass-Away-Space”的过程所带来的基于距离的死亡率,否则通过名为“tick”的程序维持定期的每时间步长(Pass-Away-Time):

    to Pass-Away-Time
  ask turtles [
    let chances 1 - exp( -1 * mortality * ticks )
    if chances >= 1 [die
      set dead-count dead-count + 1
    ]
  ]
end

to Pass-Away-Space
  ask turtles [
  let chances 1 - exp( -1 * mortality * [distance start-patch] of turtles)
    if chances >= 1 [die
      set dead-count dead-count + 1
    ]
  ]
end

to Pass-Away
  ask turtles [
     ifelse space-death [
     Pass-Away-Space][ 
     Pass-Away-Time
     ]
   ]
end

我这样做有两个错误,可能是由于“Pass-Away-Space”程序编码问题。第一个是只有观察者可以询问所有海龟的集合。然后当我移动let chances 1 - exp( -1 * mortality * [distance start-patch] of turtles)括号之外的ask turtles[]时,这个错误得到解决只会产生另一个说* *预期输入为数字,但得到列表*后跟一系列数字。也许是因为读取* [distance start-patch] of turtles的死亡方程的部分被调用为多只乌龟(这正是我想要实现的 - 让每只随机行走的乌龟使用它与原点的距离来计算它的累积每步死亡率和死亡率高于阈值 - 在不同时间对不同距离的不同海龟发生的事件)。有关如何解决此问题的任何想法?

2 个答案:

答案 0 :(得分:1)

第一个错误是因为你要求所有海龟都要问所有海龟。从您的Pass-Away程序开始,假设space-death设置为TRUE。怎么了?您要求所有海龟运行Pass-Away-Space程序。也就是说,每只乌龟将依次运行该程序。该程序的第一步是ask turtles [ ]。所以乌龟要求所有乌龟做点什么。因此错误。

要修复它,您需要重写Pass-Away-Space过程,以便它运行需要为SINGLE龟运行的任何代码(类似于Pass-Away-Time)。你可能想要这样的东西:

to Pass-Away-Space
  if exp( -1 * mortality * [distance start-patch]) < 0
  [ die
    set dead-count dead-count + 1
  ]
end

答案 1 :(得分:0)

所以这里的第一个问题是嵌套使用ask turtles [ ... ]命令,我们可以通过从to Pass-Away过程中删除它,或者从嵌套的其他两个(前面)函数中删除它来消除歧义。在其中,如下所示(证明了上述方法的后期。

let start-patch patch 0 0
to Pass-Away-Time
  ask turtles [
    let chances 1 - exp( -1 * mortality * ticks )
    if chances >= 1 [die
      set dead-count dead-count + 1
    ]
  ]
end

to Pass-Away-Space
  ask turtles [
  ; let chances 1 - exp( -1 * mortality * [distance start-patch] of turtles)
  let chances 1 - exp( -1 * mortality * (distance start-patch))
    if chances >= 1 [die
      set dead-count dead-count + 1
    ]
  ]
end

to Pass-Away
   ifelse space-death [
     Pass-Away-Space][ 
     Pass-Away-Time
  ]
end

第二个错误可以通过在;过程中用直接后续行切换注释的代码行(to Pass-Away-Space)来解决,这样当每个turtle尝试执行chances时,累计每距离(来自原点)的死亡率不是使用[distance start-patch] of turtles命令计算的一系列乌龟机会,而是每当具有(distance start-patch)的单个乌龟时,只要嵌套调用该程序to Pass-Away程序。