Netlogo。如何将一只海龟的变量(海龟自身)和另一只海龟求和

Netlogo。如何将一只海龟的变量(海龟自身)和另一只海龟求和,netlogo,Netlogo,在我的程序中,有一只海龟的生物量是可变的(海龟自己的生物量)。在世界上有可能有许多不同生物量的海龟。我需要: 当一只海龟在同一斑块中发现另一只海龟时,它们必须将其生物量(所有海龟的生物量之和)转移到生物量较高的海龟,然后将其生物量(斑块中除生物量较高的海龟外的所有海龟)归零。(已经有一个命令以零生物量杀死海龟) 谢谢你的关注 嘿!我试着按照你说的做我自己的代码。 但是代码只在程序开始时起作用。由于该程序将运行某些情况下的错误程序。我不知道这个虫子是从哪里来的。。。。变量开始自我求和。。。这是代码

在我的程序中,有一只海龟的生物量是可变的(海龟自己的生物量)。在世界上有可能有许多不同生物量的海龟。我需要: 当一只海龟在同一斑块中发现另一只海龟时,它们必须将其生物量(所有海龟的生物量之和)转移到生物量较高的海龟,然后将其生物量(斑块中除生物量较高的海龟外的所有海龟)归零。(已经有一个命令以零生物量杀死海龟) 谢谢你的关注

嘿!我试着按照你说的做我自己的代码。 但是代码只在程序开始时起作用。由于该程序将运行某些情况下的错误程序。我不知道这个虫子是从哪里来的。。。。变量开始自我求和。。。这是代码的一部分: 生物量是海龟>海龟自身[生物量]的变量

while [any? Other turtles-here]
[
    Let maximum max[biomass] of turtles-here
    Let auxi  sum[biomass]of turtles-here
    Let higher turtles-here with-max[biomass]
    Let otherhigher count other turtles-here with-max [ biomass]
    If (otherhigher>0)
    [set higher turtles-here with-max[headling] ; (I PUT THIS IN CASE THE TURTLE HAS THE SAME BIOMASS]
     Ask higher [ set biomas (aux) ]
     Let lower turtles-here with [biomass< maximum]  ; (LOWER CAN BE MORE THAN ONE)
     Ask lower [set biomass (0)]
     Ask turtles-here with [biomass<=0] [die]
    ]
    end
while[这里还有其他海龟吗]
[
让这里的海龟达到最大[生物量]
让auxi在这里计算海龟的[生物量]
让更高的海龟在这里与最大[生物量]
让其他更高的人用max[生物量]计算其他海龟
如果(其他更高值>0)
[将更高的海龟放在这里,用max[头饰];(我把这个放在海龟生物量相同的情况下)
询问更高级别[设置生物标志(辅助)]
让较低的海龟在此具有[生物量<最大值];(较低的海龟可以不止一只)
询问下限[设定生物量(0)]

问这里的海龟[生物量这里有一个可能的解决方案,它遵循与您不同的逻辑。它不会主动地将生物量从一只海龟转移到另一只海龟,而是一次处理同一块地上的所有海龟。但是,从您的问题来看,如果一块地上有多只海龟的生物量最大,则不清楚应该发生什么。这里我ost两种解决方案。在第一次尝试中,将随机选择其中一只生物量最大的海龟,该斑块上的所有其他海龟将其生物量设置为0。在第二次尝试中,所有生物量最大的海龟将共享同一斑块上生物量较低的海龟的生物量

变体1:在一个有多只海龟的补丁上只有一个幸存者

ask turtles
[
 ;...
 ;some movement
 ;...

 if (any? other turtles-here)
 [
   ;; Only one turtle with max biomass would be chosen randomly, even if there is more than one
   ask max-one-of turtles-here [biomass]
   [
     set biomass (biomass + sum [biomass] of other turtles-here)

     ask other turtles-here
     [
       set biomass 0
     ]
    ]
  ]
]
变体2:所有生物量最大的海龟都能生存并分享资源

ask turtles
[
 ;...
 ;some movement
 ;...

 if (any? other turtles-here)
 [
   ;We create two temporary agentsets, one with the surviving turtles and one with the consumed turtles
   let max-biomass-turtles turtles-here with-max [biomass]
   let low-biomass-turtles turtles-here with [not member? self max-biomass-turtles]

   ;Only if there are turtles to consume, calculate the share each max biomass turtle gets
   if (any? low-biomass-turtles)
   [
     let biomass-share (sum [biomass] of low-biomass-turtles / count max-biomass-turtles)

     ask max-biomass-turtles
     [
       set biomass (biomass + biomass-share)
     ]
     ask low-biomass-turtles
     [
       set biomass 0
     ]
    ]
  ]
]

这里有一个可能的解决方案,它遵循与您不同的逻辑。它不会主动地将生物量从一只海龟转移到另一只海龟,而是一次处理同一块地上的所有海龟。但是,从您的问题来看,不清楚如果一块地上有多只海龟的生物量最大,该怎么办。这里我发布了两个解决方案。在第一次尝试中,将随机选择其中一只生物量最大的海龟,该斑块上的所有其他海龟将其生物量设置为0。在第二次尝试中,所有生物量最大的海龟将共享同一斑块上生物量较低的海龟的生物量

变体1:在一个有多只海龟的补丁上只有一个幸存者

ask turtles
[
 ;...
 ;some movement
 ;...

 if (any? other turtles-here)
 [
   ;; Only one turtle with max biomass would be chosen randomly, even if there is more than one
   ask max-one-of turtles-here [biomass]
   [
     set biomass (biomass + sum [biomass] of other turtles-here)

     ask other turtles-here
     [
       set biomass 0
     ]
    ]
  ]
]
变体2:所有生物量最大的海龟都能生存并分享资源

ask turtles
[
 ;...
 ;some movement
 ;...

 if (any? other turtles-here)
 [
   ;We create two temporary agentsets, one with the surviving turtles and one with the consumed turtles
   let max-biomass-turtles turtles-here with-max [biomass]
   let low-biomass-turtles turtles-here with [not member? self max-biomass-turtles]

   ;Only if there are turtles to consume, calculate the share each max biomass turtle gets
   if (any? low-biomass-turtles)
   [
     let biomass-share (sum [biomass] of low-biomass-turtles / count max-biomass-turtles)

     ask max-biomass-turtles
     [
       set biomass (biomass + biomass-share)
     ]
     ask low-biomass-turtles
     [
       set biomass 0
     ]
    ]
  ]
]

也许你想先自己找到一个解决方案。这里有一些你需要的有用的原语。我建议你在NetLogo字典中查找它们:“如果,有吗?”其他,海龟在这里,max one of,sum。如果你需要进一步的帮助,我也可以发布一个解决方案,但我认为你学到的东西比自己开发要少得多。嘿,我我在问题中发布了我的代码!但是stlil不起作用你当然可以使用while循环,但是在NetLogo中有更优雅的方式。我假设问题在于while循环和在同一补丁上有两个海龟的情况,但是你的“其他更高”变量变为零。然后您就陷入了无限循环。要调试它,您必须检查这些情况何时以及为什么会发生,并尝试从逻辑上解决问题。在调试循环时,
show
原语是您的朋友,因为您可以将当前变量值,包括当前海龟id写入命令居中(例如,
显示其他更高的
)。作为一个更优雅的解决方案的建议,我根本不会使用while循环。我将我的解决方案作为答案发布在下面。您可以使用它或尝试使用自己的解决方案。两者都应该有效。也许您想先尝试自己找到解决方案。以下是一些您需要的有用原语。我建议您在NetLogo中查找它们dictionary:“if,any?”其他,turtles在这里,max one of,sum。如果你需要进一步的帮助,我也可以发布一个解决方案,但我认为你会学到比自己开发要少得多的东西。嘿,我在问题中发布了我的代码!但是STIL不起作用你当然可以使用while循环,但在NetLogo中有更优雅的方法。我假设这个问题在while循环中,在同一个补丁上有2只海龟,但是你的“其他更高”的情况下变量变为零。然后您就陷入了无限循环。要调试它,您必须检查这些情况何时以及为什么会发生,并尝试从逻辑上解决问题。在调试循环时,
show
原语是您的朋友,因为您可以将当前变量值,包括当前海龟id写入命令中心(例如,
显示其他更高的
)。作为对更优雅解决方案的建议,我根本不会使用while循环。我将我的解决方案作为答案发布在下面。您可以使用它或尝试使用您自己的解决方案。两者都应该有效。