Netlogo,如何捕获海龟变量的值,并添加每个海龟值,映射它们,并将它们简化为单个海龟#

Netlogo,如何捕获海龟变量的值,并添加每个海龟值,映射它们,并将它们简化为单个海龟#,netlogo,Netlogo,我试图写一个程序,某个品种的海龟在一定距离内询问同一品种的海龟某个变量的值。然后提问的海龟将捕获这些值并将它们添加到自己的值中,映射+它们,然后将+减少为单个数字。这是密码 ask Teams [ if AsgnE = "E 1" [ ask Teams with [ distance myself < 25] [ ; assuming that there are no more then 2 teams wit

我试图写一个程序,某个品种的海龟在一定距离内询问同一品种的海龟某个变量的值。然后提问的海龟将捕获这些值并将它们添加到自己的值中,映射+它们,然后将+减少为单个数字。这是密码

 ask Teams
  [ if AsgnE = "E 1"
    [
      ask Teams with [ distance myself < 25]
      [
         ; assuming that there are no more then 2 teams within distance
        let Val1 []
        let Val2 []
        let Val3 []
        set Val1 Value 
        set Val2 Value 
        set Val3 [Value] of self
        let Val4 (map + Val1 Val2 Val3) 
        set Val4 (reduce + Val4)
      set Storys1 [Stories] of Epic 0
     if Storys1 > 0 [ set TotValue1 Val4 ]
     ]
   ]
 ]

询问团队
[如果AsgnE=“E 1”
[
询问[距离自己<25]的团队
[
;假设距离内不超过2个团队
让Val1[]
让Val2[]
让Val3[]
设置Val1值
设置Val2值
设置自身的Val3[值]
设Val4(map+Val1 Val2 Val3)
设置Val4(减少+Val4)
设置史诗0的故事1[故事]
如果故事1>0[设置为TotValue1值4]
]
]
]
只要按下go按钮,每个团队的值就会不断更新。问题是,结果数字永远不会与所有值的总和匹配。随着数字的更新,他们永远不会与单独团队的总数相匹配。有时,在返回到更高的数字之前,数字会下降到一个较低的数字(我假设它代表一个团队值)

你知道怎么解决这个问题吗

谢谢


鲁迪

我猜这是一个同步性问题。
ask
将(以随机顺序)遍历所有海龟。假设它以turtle 1开始-turtle 1将其值更新为其旧值和附近turtle的所有值之和。然后问到海龟2,海龟2正好在海龟1附近。这意味着海龟2会再次将所有数字相加,海龟1会调整其值。只有这两个海龟,海龟2的值会增加两次,因为海龟1的新值中也隐藏了海龟2的值

如果这不是您想要的行为,那么最简单的方法是使用一个名为next value之类的额外变量。计算每只海龟的下一个值作为适当的总和。然后,在一个新的
ask
中,让每只海龟
设置下一个值
以同时更新它们

此外,您的map和reduce看起来不必要地复杂。如果您试图实现的是将一个变量的值添加到一堆海龟上,那么您只需在构建相关海龟代理集后对变量进行求和即可。但可能是为了问题的目的而简化了,在这种情况下,请忽略这一点

更新----添加了完整的模型示例

turtles-own
[ team
  myval
  nextval
]

to setup
  clear-all
  create-turtles 20
  [ setxy random-xcor random-ycor
    set team one-of ["A" "B"]
    set myval 1
  ]
  reset-ticks
end

to go
  ask turtles
  [ let myteam turtles with [team = [team] of myself]
    set nextval sum [myval] of myteam
  ]
  type "total before: " print sum [myval] of turtles
  ask turtles
  [ set myval nextval
  ]
  type "total after: " print sum [myval] of turtles
end  

谢谢JenB这么快的回复。如何计算每个海龟的下一个值,如何分离每个海龟的输入以计算它们的值?参见我添加的示例-通过使用不同的变量存储计算结果来进行分离,并且在所有计算完成之前不要将其移回主变量中。我没有更快地响应,我在旅行。明天我将尝试代码。嗨,JenB,如果我使用“1”作为myval变量的值,代码会起作用,但是我的代码要求myval的值(或者在我的情况下,变量“value”代替“myval”)是来自另一个Netlogo模型(通过Levelspace连接)的连续输入。当我这样做时,我得到运行时错误:“LPUT期望输入是一个列表,但得到的是数字0。”我知道Levelspace连接模型正在提供信息,但由于某种原因,利用您的代码,无法识别信息。有什么想法或解决办法吗?谢谢我根本没有和levelspace合作过对不起。但也许您可以尝试打印来自levelspace的信息,以确保其格式符合您的想法。这听起来像是一个单独的问题,如果能看到使用levelspace信息(并生成错误)的代码就好了