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

netlogo中基于距离的死亡率模型,netlogo,Netlogo,我正在计算netlogo中的累积海龟死亡率,作为海龟(其中100只)从netlogo界面世界中的原点(start patch)移动距离的函数。在下面的代码中,“Pass Away”程序链接到一个名为“space death”的全局接口开关,当该开关打开时,将产生由名为“Pass Away space”的程序执行的所述基于距离的死亡率,否则将保持每个时间步长的规则(勾选)通过名为“死亡时间”的程序造成的死亡率: 我在执行此操作时遇到两个错误,都可能是由于“传递空间”过程的编码问题造成的。第一个是只

我正在计算netlogo中的累积海龟死亡率,作为海龟(其中100只)从netlogo界面世界中的原点(
start patch
)移动距离的函数。在下面的代码中,“
Pass Away
”程序链接到一个名为“space death”的全局接口开关,当该开关打开时,将产生由名为“
Pass Away space
”的程序执行的所述基于距离的死亡率,否则将保持每个时间步长的规则(
勾选
)通过名为“死亡时间”的程序造成的死亡率:


我在执行此操作时遇到两个错误,都可能是由于“
传递空间
”过程的编码问题造成的。第一个是只有观察者可以询问所有海龟的集合。然后,当我移动
让机会1-exp(-1*海龟的死亡率*[距离开始补丁])
询问海龟[]
括号之外时,这个错误得到解决,只会产生另一个错误,即**预期输入是一个数字,但得到了列表*,后面是一系列数字。可能是因为死亡率方程中读到的海龟的
*[distance start patch]
部分被调用用于多只海龟(这正是我想要实现的——让每只随机行走的海龟使用其与原点的距离来计算其每一步的累积死亡率,并在阈值以上死亡——对于不同距离的不同海龟,这是一个在不同时间发生的事件)。你有没有想过如何解决这个问题?

第一个错误是因为你让所有海龟都问所有海龟。从你的
传递
过程开始,假设
空间死亡
设置为真。会发生什么事?你让所有海龟都运行
传递空间
过程。也就是说,每个海龟都会运行该pro这一过程的第一步是询问海龟[]
。因此,海龟要求所有海龟做一些事情。因此出现了错误

要解决此问题,您需要重写
传递空间
过程,以便它可以为一只海龟运行任何需要运行的代码(同样地,对于
传递时间
),您可能需要这样的代码:

to Pass-Away-Space
  if exp( -1 * mortality * [distance start-patch]) < 0
  [ die
    set dead-count dead-count + 1
  ]
end
传递空间
如果exp(-1*死亡率*[distance start patch])<0
[死
设置无效计数无效计数+1
]
结束

因此,这里的第一个问题是嵌套使用
ask turtles[…]
命令,我们可以通过从
to Pass way
过程中删除它,或者从嵌套在其中的其他两个(前面)函数中删除它来消除歧义,如下所示(演示了后面提到的方法)

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

第二个错误可以通过切换
中注释的代码行(
)来解决,该代码行与紧接着的下一行一起通过空格
过程,这样当每只海龟尝试执行
机会时,每一距离(从原点)累积死亡率不是使用海龟的
[distance start patch]命令以海龟机会数组的形式计算的,而是使用
(distance start patch)的每只海龟的死亡率
每当嵌套调用该过程来传递
过程时。

感谢您的想法,我能够理解这一点,因此我重写了传递空间和传递时间,而不询问海龟。这消除了第一个错误(只有观察者可以询问所有海龟的集合)在我的问题中指出,但第二个错误仍然是一个问题(**预期输入是一个数字,但得到了列表**)。以下代码行的问题:
让海龟的几率1-exp(-1*死亡率*[distance start patch])
。您将此代码行更改为
if exp(-1*死亡率*[distance start patch])<0
。为了正确理解您的意思,您是否指出该更改解决了问题,并使每只海龟计算其与原点的距离(
start patch
),然后用它来计算它的死亡率?不,我不知道你的代码中的起始补丁是什么。我重写代码只是为了修复我讨论的关于嵌套询问海龟的错误。所以协议是针对多个问题单独提问,因为该网站旨在帮助其他有类似问题的人,而不仅仅是修复你的问题。所以请创建一个标题专门针对您的问题的问题,并显示您现在拥有的代码。这就是我拥有的所有代码…开始修补程序是世界上的原点(点(x,y)-(0,0)。我发布了这两个问题(必须使用相同的代码)在我最初的问题中。在我看来,您可能已经回答了其中一个问题,而忘记了另一个问题,或者没有看到另一个问题!那么,您想让我们回答一个您不必费心写的问题吗?您现在已经声明,您提供的代码不是有问题的代码。而且,这是不可能完成的,因为
start patch
在您的代码中没有定义。请编写一个适当的问题,其中包含您遇到问题的代码和产生的错误。这样,我们就不必猜测了。
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