我正在尝试扩大动物区域,以便通过某些标准评估动物现有区域周围的邻近斑块(即食物质量和其他动物的领土是否存在),然后在每个时间步骤添加到总大小。使用以下帖子作为模板(http://netlogo-users.18673.x6.nabble.com/What-is-more-efficient-to-acquire-patches-by-expanding-search-radius-or-moving-td5003711.html)我能够让动物评估他们各自位置周围的邻居,并确定邻居是否被任何人占用(即,只是真/假不是动物的身份与领土)并进入一个没有采取最高“质量”的网格单元格。相反,我希望动物能够评估它的整个区域并扩展到符合标准的任何网格单元。此外,我希望将动物身份分配给属于其领土内的补丁,以便例如动物不能进入优势动物的领土,但可以进入下属。我试图利用洪水填充的想法,但不能完全正确。任何建议或帮助都会很棒。以下是我到目前为止的情况。
breed [animals]
animals-own [ orig territory food status] ; turtle's original patch, patch-set of territory, status (higher number more dominant) of the animal to other competitors (is not incorporated currently)
patches-own [ taken? hsi] ; true if patch is in territory of a turtle
to setup
clear-all
ask patches [ set taken? false
set hsi random 5
set pcolor scale-color (black) hsi 1 4]
let $colors [red pink yellow blue orange brown gray violet sky lime]
ask n-of 10 patches
[ sprout-animals 1
[ set orig patch-here
set territory patch-set orig
set status random 4
set color item who $colors
set pcolor color
]
set taken? true
]
reset-ticks
end
to go
if all? animals [food >= 150] [ stop ]
if ticks = 50 [ stop ]
ask animals [ expand ]
tick
end
to expand
if food < 150
[
let $p neighbors of [territory] with ([not taken?] and [hsi > 2]) ; expects agentset but territory is a patch-set
set territory (patch-set territory $p)
set pcolor [pcolor] of myself
set food sum [hsi] of territory
]
end
答案 0 :(得分:1)
对我而言,正如你所说,每个补丁应该知道它所属的领土,这似乎是明智的。因此,patches-own [taken?]
不是taken?
而是patches-own [owner]
是真还是假,我建议ask patches [ set owner nobody ]
。
在您的设置过程中,您执行set owner self
,然后当乌龟获得补丁的所有权时,它会将该补丁的所有者设置为自己。因此,在您的设置过程中,您需要添加expand
(以更改修补程序的所有者),并在ask $p [ set owner myself ]
程序中执行territory
。
您必须小心保持存储在海龟中的owner
信息与修补程序中存储的let target patch-ahead 1
let defender [owner] of target
if not is-turtle? owner or [status] of owner < status [
...
]
信息同步,但假设您做到了这一点,那么诸如“一只动物不能进入优势动物的领地“变得容易,因为当动物正在考虑踩到一个补丁时,它可以轻易地看到该补丁的拥有者是谁,代码如下:
{{1}}