首页 > 解决方案 > Netlogo:邻里之和

问题描述

我需要一些帮助。我的问题如下

我想解决以下公式

sum (Zi - Zj)^2 其中 Zi 是个体 i 的常数,Zj 是个体 i 的半径 = 1 的邻域内的通用个体 j 的值。因此,我想要一个常数值与该半径内每个个体的 Z 值之间距离的平方和。

抱歉没有我的代码,但我不知道如何解决这个问题

我会写一个例子

Zi = 1 个体 i 的邻域由 2 个代理组成,假设 a 和 b,其中 Za = 3 和 Zb = 5

我想要以下结果

(1-3)^2 + (1-5)^2 = 20

谢谢

标签: netlogoneighbours

解决方案


我想你想做一个常数和一个数字列表之间的平方差之和,其中数字列表是几只海龟的 Z 值。如果这是正确的,那么以下是一个完整的模型,可以满足您的需求。

turtles-own [ varZ ]

to setup
  clear-all
  create-turtles 40
  [ setxy random-xcor random-ycor
    set varZ random 10
    set color blue
  ]
  testme
end

to testme
  ask one-of turtles
  [ set color red
    let friends other turtles in-radius 4
    ask friends [ set color yellow ]
    type "my varZ is: " print varZ
    type "sum of squared differences is: " print sum-sq-diff varZ [varZ] of friends
  ]
end

to-report sum-sq-diff [#constant #listvals]
  report reduce + (map [ thisval -> (thisval - #constant) ^ 2 ] #listvals)
end

过程 sum-sq-diff 有两个输入:一个常量和一个值列表。它计算常数和列表中每个值之间的差的平方和。计算map差异的平方并创建这些值的列表,然后是列表中的reduce总和。您可以通过简单地sum-sq-diff 1 [ 2 3 4 ]在命令中心输入来测试,您将得到 14(即 (2-1)^2 + (3-1)^2 + (4-1)^2)。

其余代码是一个示例,说明如何在我认为您想要的上下文中使用此过程,拉出某个半径内的海龟并使用它们的变量值作为列表。


推荐阅读