计算标题的加权平均值



我有每个补丁持有两个列表:directionsmagnitudes。两个列表都包含基于附近海龟计算的值:

  • directions包含从补丁到各种海龟的标题(所以基本上它只是海龟的标题旋转了180°);
  • magnitudes的值与海龟的质量成正比,与斑块与海龟之间的距离成反比;
  • 两个列表的项按顺序耦合,即directions的第一个项和magnitudes的第一个项基于同一只海龟计算,第二个两个项基于另一只海龟计算,以此类推。

我想要实现的是提出两个单独的补丁自己的值,my-directionmy-magnitude,以某种方式表示directions的加权平均值,其中权重为magnitudes。换句话说,我是从矢量的角度来考虑这个问题的:海龟在补丁上施加一个力,这个力可以用矢量来表示,总是指向海龟的方向,并且有一定的强度(大小)。结果向量(由my-directionmy-magnitude表示)应该是这些力的平均值。

我看过这个问题。它不解决加权的问题。平均;然而,它提到了循环均值的概念。我已经深入研究了一下,但我不确定如何将它应用到我的例子中,即使应用它,它仍然适用于用向量表示的问题的公式吗?

我在SE数学上看到过这个问题/答案,据说平均向量可以通过平均初始向量的x坐标和y坐标来找到。在我的情况下,理想情况下,两个列表中的所有值对形成一个不同的矢量,其原点在问题补丁中,标题在directions中找到,长度在magnitude中找到。我怀疑我可以通过将其正弦和余弦乘以其大小来找到每个向量的坐标,但是在这一点上,我会使用一些指导,因为我可能会使事情过于复杂(从数学角度或NetLogo角度)。

下面这个是代码的简化版本,target-patches(不关注所有补丁,为了使它更快)填充了两个列表。

globals [
target-patches 
]
turtles-own [
mass
reach
]
patches-own [
my-direction
my-magnitude
directions-list
magnitudes-list 
]
to setup
clear-all

set target-patches n-of 10 patches
ask target-patches [
set directions-list (list)
set magnitudes-list (list)
set pcolor yellow + 3
]

create-turtles 10 [
move-to one-of patches with [(not any? turtles-here) AND (not member? self target-patches)]
set mass (random 11) + 5
set reach (mass * 0.8)
set size (mass / 8)
set shape "circle"
]

populate-lists
end
to populate-lists
ask turtles [
let relevant-targets (target-patches in-radius reach)
ask relevant-targets [
set directions-list lput (towards myself) (directions-list)
set magnitudes-list lput (magnitude-based-on-distance) (magnitudes-list)
]
]
end
to-report magnitude-based-on-distance
report [mass] of myself / (distance myself * 1.2)
end

你最初的直觉是对的。你可以这样写

LET my-dx mean (map direction magnitude [ theta scalar -> scalar * sin theta ])

(我可能有地图和匿名语法错误,请编辑)

对my-dy做同样的操作,使用cos(编辑:或者可能是负cos?)

patch-at my-dx my-dy是获取补丁的一种方式。

您也可以执行(atan my-dx my-dy)以获得新的方向和distancexy my-dx my-dy来得到数量级

不记得补丁是否可以使用distancexypatch-at,但希望如此。否则,您必须使用辅助海龟,并自己进行计算。

我想我曾经做过一个轨道力学玩具模型,做过类似的事情。它藏在turtlezero.com上。

最新更新