netlogo - 如何将世界划分为特定大小的区域?
问题描述
我在构建模型时遇到了麻烦:我正在尝试构建一个农业区,其中特定数量的农民拥有不同大小的土地(也是特定的,不是随机的)。农庄中有田(黄片)和林(绿片)。
这是一段代码:
breed [Smallfarmers Smallfarmer] Smallfarmers-own [property]
breed [Mediumfarmers Mediumfarmer]
Mediumfarmers-own [property]
to setup
ca
loop [
repeat 50[
create-Smallfarmers 1 [
set property [patches in-radius-nowrap 1.5] of one-of patches with [pcolor = black]
if all? (patch-set [neighbors] of property) [pcolor = black] [
ask n-of 2 property [set pcolor green]
ask property with [pcolor != green] [set pcolor yellow]]]]
repeat 10[
create-Mediumfarmers 1 [
set property [patches in-radius-nowrap 2.9] of one-of patches with [pcolor = black]
if all? (patch-set [neighbors] of property) [pcolor = black] [
ask n-of 6 property [set pcolor green]
ask property with [pcolor != green] [set pcolor yellow]]]]
stop]
end
使用此代码,我遇到了这些问题:
- 不是所有的农民都是创造出来的。
- 这些属性漂浮在黑色空间中,相距甚远。
如何改进(或彻底改变)我的代码?
解决方案
这有几个不同的问题。第一个是一般的 NetLogo 位:
- Using
in-radius-nowrap
向我暗示你已经将世界包裹起来,并且真的不希望它包裹起来,因为它是陆地,包裹起来没有意义。您可以使用界面上的设置按钮(右上角)关闭环绕,您还可以在其中设置世界上的补丁数量。 - 如果你想创建(比如说)10 个农民,你不需要这样做
repeat 10 [create-farmers 1 ...
,你只需一次创建 10 个。[ ] 中设置属性的所有代码都将发生在每个农民身上,因为它是 create 块的一部分。 neighbors
已经是一个补丁集,但我怀疑你也想包含中央补丁
你的具体问题是太少的属性太远了 - 事实上,所有的农民和他们的属性都在被创建,但他们的属性没有被着色。您的代码创建了一个农民并为他们提供了属性,但只有在属性不重叠时才对其进行着色。
所以要解决这个问题,你需要只在有空间的地方创建农场。首先创建较大的农场可能更容易,然后较小的农场可以填补空白。但是,查看您的代码,所有农场的大小都相同(3x3),不同之处在于有多少字段是绿色或黄色。这是一些创建农场的代码(还要注意它将农民放在农场上)。
breed [farmers farmer]
farmers-own
[ property
]
to setup
clear-all
create-farmers 10
[ let potential-farms patches with [all? (patch-set self neighbors) [pcolor = black]]
ifelse any? potential-farms
[ move-to one-of potential-farms
set property (patch-set patch-here neighbors)
ask n-of 2 property [set pcolor green]
ask property with [pcolor != green] [set pcolor yellow]
]
[ print "No space available" ]
]
end
推荐阅读
- pervasive - '[pervasive][ODBC Engine Interface]Invalid date, time or timestamp value' 当试图比较日期时
- django - Django Rest Framework 嵌套序列化程序给出属性错误
- scala - 从火花数据框列中存在的字母数字值中删除字母
- java - 无法反序列化从 Springboot POST 映射函数上的 Angular http post 请求发送的 POJO
- css - 材质 UI 按钮未被 react-burger-menu 覆盖
- python - Python Pandas 不再支持带时间戳的整数和整数数组的加法/减法
- html - 子div内的按钮在同一位置
- c++ - 运行 Gstreamer C++ 示例时出错
- sabre - Sabre 并发请求限制
- php - 刷新表单不保留 textarea 换行符