NetLogo水族馆藻类生长代码报错:ASK期望Agent/Agentset却得NOBODY
NetLogo藻类生长代码报错解决方法
报错原因
当绿色斑块周围没有蓝色邻居时,one-of neighbors with [pcolor = blue]会返回NOBODY,而ask命令要求输入必须是智能体或智能体集合,无法作用于NOBODY,这就是报错的根源。
解决方案
修改代码时先检查当前绿色斑块是否存在符合条件的蓝色邻居,仅当存在时才执行后续生长逻辑;同时确保周围藻类数量的计算是针对当前斑块的真实值,避免全局变量可能带来的偏差。
修改后的完整代码:
ask patches [ if pcolor = green [ ; 直接计算当前斑块周围的藻类数量,替代原%omringing变量 let omringing count neighbors with [pcolor = green] if omringing = 100 [set pcolor blue] ; 筛选当前斑块的蓝色邻居集合 let blue-neighbors neighbors with [pcolor = blue] ; 仅当存在蓝色邻居时执行生长操作 if any? blue-neighbors [ ask one-of blue-neighbors [ if random 100 > omringing [set pcolor green] ] ] ] ] end``` ### 逻辑说明 1. 用`let omringing count neighbors with [pcolor = green]`直接计算当前绿色斑块周边的藻类数量,确保每个斑块的数值都是自身周边的真实情况,避免全局变量可能导致的错误。 2. 通过`any? blue-neighbors`判断蓝色邻居集合是否非空,从根本上避免`ask NOBODY`的报错。 3. `random 100 > omringing`的逻辑完美实现需求:周围藻类数量`omringing`越大,随机数大于它的概率越低,藻类生长的可能性就越小。 内容的提问来源于stack exchange,提问作者Idor
相关产品推荐
相关产品推荐

