NetLogo:从到特定补丁的距离创建变量
NetLogo: Creating Variable from Distance to Specific Patch
我在 Netlogo 中遇到了一个问题,它为代理提供了到所选水块的距离变量(以块为单位)。
代理人应该根据他们与水的距离采取行动。
我希望代理找到最近的 water = true 的补丁,计算到该补丁的距离并将该特定距离保存在变量中,如果代理移动,该变量可能会改变。
所以我的处理方式如下:
turtles-own
[
next-river-patch
distance-to-river
]
to go
ask turtles
;find closest patch that has water = true
;calculate distance to that patch and save it in the turtles-own variable "distance-to-river"
set next-river-patch (min-one-of patches in-radius 100 with [water = true] [distance myself])
set distance-to-river distance next-river-patch
;check whether there is water in peception radius
;and whether directed walk is initiated
ifelse random-float 1 > water-directedness
and
patches with [water = true] in-radius 300 = true
[walk-directed]
[walk-undirected]
tick
end
to walk-directed
;deviation of random normal is smaller, the further from next 1st order river and is raised by a high pioneering rate
;with half the distance of the perception radius of 300 resulting in a deviation of 45 degrees and
;a pioneering rate of 0.5 leading to no influence onto the final deivation and a pioneering rate of 1 doubling the deviation.
let deviation 90 * ( 1 - distance-to-river / 300) * ( 2 * pioneering-along-rivers)
face min-one-of patches with [ water = true][distance myself]
rt random-normal 0 (1 * deviation)
fd 1
end
to walk-undirected
ask turtles [
rt random-normal 0 (2.25 * descision-randomness * 100)
fd 1
;it turns into a cumulated normal direction (with the chance of moving straight ahead being highest) and the standard
;deviation being defined by the descision-randomness-slider, with default being 45° and max being 225°
]
end
所以我遇到的问题是行
"设置下一条河流补丁(半径为 100 的最小补丁之一 [water = true] [distance myself])"
returns 一个变量包含
下一块水的坐标。无论如何,我不想要坐标,而是到那个补丁的距离,这样我就可以在我的累积方向上使用它。
设置到河流的距离 next-river-patch 不起作用。
有人知道为什么会这样吗?我对 NetLogo 比较陌生,所以答案可能看起来很明显。
非常感谢!
P.S.:另一个可能与我的模型无关的问题是,代理在每次滴答之前转了几十次,而不是每个代理在前进 1 之前转了一个转。
所以如果你碰巧通过查看代码看到了解决方案,我也将永远感激不已。
最简单的问题优先:
为什么有些海龟每刻移动不止一次?
walk-undirected
被海龟调用,它确实ask turtles
。所以每只乌龟都在做每只乌龟这样的动作。它应该像其他程序一样,只是执行该操作,没有 ask
.
补丁......=真
这是一个错误。您正在将 patches with ...
生成的代理集与布尔值 true
进行比较。代理集永远不可能为真或为假。代理集可以为空,也可以包含一个或多个代理。 any?
报告器用于确定代理集是否有 any 成员。
主要问题
看起来你已经在做你要求的事情了。以 set nearest-river-patch
开头的行获取最近的水域,而 set distance-to-river
行计算到该域的距离。并不是说如果半径 100 内没有任何水,下一个河流补丁将是 nobody
.
我没有看到任何可以为您提供坐标的信息(作为列表?)。也许尝试一些括号以确保以正确的顺序评估记者:
set next-river-patch (min-one-of ((patches in-radius 100) with [water = true]) [distance myself])
您也可以使用 with-min
set next-river-patch one-of ( ( ( patches in-radius 100 ) with [ water = true ] ) with-min [distance myself] )
否则,请更正其他错误,看看会发生什么。
我在 Netlogo 中遇到了一个问题,它为代理提供了到所选水块的距离变量(以块为单位)。 代理人应该根据他们与水的距离采取行动。 我希望代理找到最近的 water = true 的补丁,计算到该补丁的距离并将该特定距离保存在变量中,如果代理移动,该变量可能会改变。
所以我的处理方式如下:
turtles-own
[
next-river-patch
distance-to-river
]
to go
ask turtles
;find closest patch that has water = true
;calculate distance to that patch and save it in the turtles-own variable "distance-to-river"
set next-river-patch (min-one-of patches in-radius 100 with [water = true] [distance myself])
set distance-to-river distance next-river-patch
;check whether there is water in peception radius
;and whether directed walk is initiated
ifelse random-float 1 > water-directedness
and
patches with [water = true] in-radius 300 = true
[walk-directed]
[walk-undirected]
tick
end
to walk-directed
;deviation of random normal is smaller, the further from next 1st order river and is raised by a high pioneering rate
;with half the distance of the perception radius of 300 resulting in a deviation of 45 degrees and
;a pioneering rate of 0.5 leading to no influence onto the final deivation and a pioneering rate of 1 doubling the deviation.
let deviation 90 * ( 1 - distance-to-river / 300) * ( 2 * pioneering-along-rivers)
face min-one-of patches with [ water = true][distance myself]
rt random-normal 0 (1 * deviation)
fd 1
end
to walk-undirected
ask turtles [
rt random-normal 0 (2.25 * descision-randomness * 100)
fd 1
;it turns into a cumulated normal direction (with the chance of moving straight ahead being highest) and the standard
;deviation being defined by the descision-randomness-slider, with default being 45° and max being 225°
]
end
所以我遇到的问题是行
"设置下一条河流补丁(半径为 100 的最小补丁之一 [water = true] [distance myself])"
returns 一个变量包含 下一块水的坐标。无论如何,我不想要坐标,而是到那个补丁的距离,这样我就可以在我的累积方向上使用它。 设置到河流的距离 next-river-patch 不起作用。
有人知道为什么会这样吗?我对 NetLogo 比较陌生,所以答案可能看起来很明显。
非常感谢!
P.S.:另一个可能与我的模型无关的问题是,代理在每次滴答之前转了几十次,而不是每个代理在前进 1 之前转了一个转。 所以如果你碰巧通过查看代码看到了解决方案,我也将永远感激不已。
最简单的问题优先:
为什么有些海龟每刻移动不止一次?
walk-undirected
被海龟调用,它确实ask turtles
。所以每只乌龟都在做每只乌龟这样的动作。它应该像其他程序一样,只是执行该操作,没有 ask
.
补丁......=真
这是一个错误。您正在将 patches with ...
生成的代理集与布尔值 true
进行比较。代理集永远不可能为真或为假。代理集可以为空,也可以包含一个或多个代理。 any?
报告器用于确定代理集是否有 any 成员。
主要问题
看起来你已经在做你要求的事情了。以 set nearest-river-patch
开头的行获取最近的水域,而 set distance-to-river
行计算到该域的距离。并不是说如果半径 100 内没有任何水,下一个河流补丁将是 nobody
.
我没有看到任何可以为您提供坐标的信息(作为列表?)。也许尝试一些括号以确保以正确的顺序评估记者:
set next-river-patch (min-one-of ((patches in-radius 100) with [water = true]) [distance myself])
您也可以使用 with-min
set next-river-patch one-of ( ( ( patches in-radius 100 ) with [ water = true ] ) with-min [distance myself] )
否则,请更正其他错误,看看会发生什么。