netlogo - 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
谢谢
解决方案
我想你想做一个常数和一个数字列表之间的平方差之和,其中数字列表是几只海龟的 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)。
其余代码是一个示例,说明如何在我认为您想要的上下文中使用此过程,拉出某个半径内的海龟并使用它们的变量值作为列表。
推荐阅读
- laravel - 注册时如何让用户保持在同一页面?(拉拉维尔)
- ffmpeg - 使用 ffmpeg 和 raspi 相机的低 FPS 输出
- c - 在 num2 中找到 num1 的索引
- java - 为什么 stream().map() 可以接受像 map(Student::getName) 这样的参数
- javascript - 网页包。具有相似测试掩码的不同入口点的不同规则
- windows - 尝试了解 Windows Server 2016 故障转移群集中的网络
- postgresql - Heroku Postgres 连接限制?
- c# - 在另一个解决方案 C# 中引用一个解决方案
- c - 在 C 中使用 GPGME 进行加密
- excel - Excel错误-2147319767(80028029)突然弹出