【问题标题】:Netlogo: Set patch variable value to neighboring patch variable valueNetlogo:将补丁变量值设置为相邻补丁变量值
【发布时间】:2021-05-24 19:56:48
【问题描述】:

我是 NetLogo 的新手,并试图在反复暴雨后模拟洪水。该模型每 20 个刻度在随机斑块上生成洪水龟,并具有随机生成的地形。补丁变量包括[水位] [海拔] [容量]。

高程是随机生成的,[water-level] = [elevation] + [flood_no],或高程加上每个补丁顶部的洪水龟的数量。到目前为止,我已经能够让洪水龟下坡了。我的问题是,一旦达到每个补丁的 [容量],我希望它们汇集在一起​​,然后溢出到适当的相邻补丁。

我试图通过将每个补丁等同于其邻居中发现的最低水位值来确定其容量。但是,当我运行模型时,NetLogo 会为我提供具有最低水位值的相邻块的块坐标,而不是实际水位值本身:

patches-own [elevation water-level capacity]
breed [floods flood]
floods-own [flood_no]

ask patches [set capacity min-one-of neighbors [water-level]] ;this gives me the patch coordinates with the lowest water-level out of each patches' neighbors 

有什么办法可以改变它,让它给我补丁变量值,而不仅仅是补丁位置?

【问题讨论】:

  • 如果我理解正确,你想要邻居的最低水位:set capacity min [water-level] of neighbors

标签: variables netlogo patch nearest-neighbor flood-fill


【解决方案1】:

min-one-of 是关于识别补丁的,所以你可以分两步完成:

ask patches
[ let low-patch set min-one-of neighbors [water-level]
  set capacity [water-level] of low-patch
]

但更直接的,你可以使用min找到变量的最小值:

ask patches [set capacity min [water-level] of neighbors ]

在内部,NetLogo 使用of 原语为相邻补丁创建一个水位值列表,然后min 只取该列表中的最小值。所以分两步,它看起来像:

ask patches
[ let nbr-levels [water-level] of neighbors
  set capacity min nbr-levels
]

【讨论】:

  • 谢谢!我结束了 {ask patch [let cap min-one-of neighbors [water-level] set capacity [water-level] of cap]} 但你的第二个解决方案更简洁,并告诉我 min 甚至可以用于它自己的,因为我以前只把它看作是最小的一个。再次感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-08-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多