NetLogo - 如何在字典或两个并行列表中读取和存储来自 GIS 栅格的数据?
NetLogo - How to read and store data from GIS raster in a dictionary or two parallel list?
我是 Netlogo 的新手,在空间上下文中实施意见动态模型时,我正在努力解决以下问题。
我使用以下代码导入了具有四种不同土地利用 类(值 1-4)的 GIS 栅格:
to loadData
clear-patches
initLandCharacter
show "loading landCharacter from file luw6604.asc"
set landUse gis:load-dataset landUseDataSet
show word "rows : "gis:height-of landUse
show word "columns: "gis:width-of landUse
gis:set-world-envelope-ds gis:envelope-of landUse
gis:apply-raster landUse value
resize-world 0 gis:width-of landUse (gis:height-of landUse - ( 2 * gis:height-of landUse)) 0
在我的模型中,3 种静态的人将根据特定 pxcor pycor 的土地使用价值以及该补丁与他们自己所在位置之间的距离,对世界上每个补丁有不同的看法。
因此,我的想法是创建一个字典或并行列表来存储位置键以及相应的意见。
然而,经过几天的努力,我比开始时更加困惑,我感到完全迷失了。
请,如果有人有任何想法,如何解决这个问题。非常感谢
谢谢,
一月
Jan,听起来 GIS 数据对您的问题来说不是必需的。以下是正确的吗?您想要为每一对 [patch, person] 存储一个值——一个意见。这种观点是两件事的函数:人的品种,以及人与补丁的距离。以下是我的一些想法。以下一些可能有用。
我看到了一些存储此信息的自然方式:
将意见存储在人中。
在补丁中存储意见。
双向存储意见。这需要一些小心。
将意见存储在单独的数据结构中,您可以使用补丁、人对访问。
创建一个名为 opinions
的单独品种的海龟。 (这可能不是你想要的。)
1、2 或 3 是最有用的取决于程序的其余部分需要做什么。例如,如果我的程序将主要对人进行操作,那么将意见存储在人中可能是最方便的。然后我可以使用 ask people [...]
访问每个人的意见。
另一个因素是:
如果您将意见存储在人身上,那么在每个人内部,都会有一个包含意见的数据结构,您必须能够通过 pxcor
s 和 pycor
s 访问这些意见。这可以是列表的列表,或者您可以使用 NetLogo 通过扩展提供的二维数据结构之一:数组、table 和矩阵。
如果您将意见存储在补丁中,您也许可以将它们存储在列表中,但您必须有一种方法来找到列表中的正确元素。也许每个人都可以有一个特殊的索引号,指示每个补丁的意见列表中的哪个元素对应于该人。
如果您使用选项 4,您可能需要创建一个 3 维数据结构(pxcor
、pycor
和人物)。
感谢 Mars 和 Seth 的建议。
我最终使用以下方法让它工作...
我在补丁设置中安装了一个计数器来为每个补丁分配一个 id:
让计数器0
设置计数器计数器 + 1
设置 ID 计数器
然后我通过使用距离计算了每个补丁中每只海龟的初始意见。这里是测试模型的代码:
让操作 0
让虚拟补丁具有 [value > 0]
问海龟[
让 tx xcor
让 ty ycor
展示 ”##############################################”
问假人[
让 dist distancexy tx ty
显示编号
显示价值
显示距离
如果距离<?和价值=? [设置操作?]
如果距离<?和价值=? [设置操作?]
如果距离<?和价值=? [设置操作?]
如果距离<?和价值=? [设置操作 ?]
if dist > ? and dist < ? and value = ? [set op ?]
if dist > ? and dist < ? and value = ? [set op ?]
if dist > ? and dist < ? and value = ? [set op ?]
if dist > ? and dist < ? and value = ? [set op ?]
if dist > ? and value = ? [set op ?]
if dist > ? and value = ? [set op ?]
if dist > ? and value = ? [set op ?]
if dist > ? and value = 4 [set op ?]
show op
]
]
结果是一个序列,它给出了补丁 ID 和基于距离和补丁值的意见。以及所有海龟和补丁之间的计算距离。
我是 Netlogo 的新手,在空间上下文中实施意见动态模型时,我正在努力解决以下问题。 我使用以下代码导入了具有四种不同土地利用 类(值 1-4)的 GIS 栅格:
to loadData
clear-patches
initLandCharacter
show "loading landCharacter from file luw6604.asc"
set landUse gis:load-dataset landUseDataSet
show word "rows : "gis:height-of landUse
show word "columns: "gis:width-of landUse
gis:set-world-envelope-ds gis:envelope-of landUse
gis:apply-raster landUse value
resize-world 0 gis:width-of landUse (gis:height-of landUse - ( 2 * gis:height-of landUse)) 0
在我的模型中,3 种静态的人将根据特定 pxcor pycor 的土地使用价值以及该补丁与他们自己所在位置之间的距离,对世界上每个补丁有不同的看法。
因此,我的想法是创建一个字典或并行列表来存储位置键以及相应的意见。
然而,经过几天的努力,我比开始时更加困惑,我感到完全迷失了。 请,如果有人有任何想法,如何解决这个问题。非常感谢
谢谢, 一月
Jan,听起来 GIS 数据对您的问题来说不是必需的。以下是正确的吗?您想要为每一对 [patch, person] 存储一个值——一个意见。这种观点是两件事的函数:人的品种,以及人与补丁的距离。以下是我的一些想法。以下一些可能有用。
我看到了一些存储此信息的自然方式:
将意见存储在人中。
在补丁中存储意见。
双向存储意见。这需要一些小心。
将意见存储在单独的数据结构中,您可以使用补丁、人对访问。
创建一个名为
opinions
的单独品种的海龟。 (这可能不是你想要的。)
1、2 或 3 是最有用的取决于程序的其余部分需要做什么。例如,如果我的程序将主要对人进行操作,那么将意见存储在人中可能是最方便的。然后我可以使用 ask people [...]
访问每个人的意见。
另一个因素是:
如果您将意见存储在人身上,那么在每个人内部,都会有一个包含意见的数据结构,您必须能够通过 pxcor
s 和 pycor
s 访问这些意见。这可以是列表的列表,或者您可以使用 NetLogo 通过扩展提供的二维数据结构之一:数组、table 和矩阵。
如果您将意见存储在补丁中,您也许可以将它们存储在列表中,但您必须有一种方法来找到列表中的正确元素。也许每个人都可以有一个特殊的索引号,指示每个补丁的意见列表中的哪个元素对应于该人。
如果您使用选项 4,您可能需要创建一个 3 维数据结构(pxcor
、pycor
和人物)。
感谢 Mars 和 Seth 的建议。
我最终使用以下方法让它工作...
我在补丁设置中安装了一个计数器来为每个补丁分配一个 id:
让计数器0 设置计数器计数器 + 1 设置 ID 计数器
然后我通过使用距离计算了每个补丁中每只海龟的初始意见。这里是测试模型的代码:
让操作 0
让虚拟补丁具有 [value > 0]
问海龟[
让 tx xcor
让 ty ycor
展示 ”##############################################”
问假人[
让 dist distancexy tx ty
显示编号
显示价值
显示距离
如果距离<?和价值=? [设置操作?]
如果距离<?和价值=? [设置操作?]
如果距离<?和价值=? [设置操作?]
如果距离<?和价值=? [设置操作 ?]
if dist > ? and dist < ? and value = ? [set op ?]
if dist > ? and dist < ? and value = ? [set op ?]
if dist > ? and dist < ? and value = ? [set op ?]
if dist > ? and dist < ? and value = ? [set op ?]
if dist > ? and value = ? [set op ?]
if dist > ? and value = ? [set op ?]
if dist > ? and value = ? [set op ?]
if dist > ? and value = 4 [set op ?]
show op
] ]
结果是一个序列,它给出了补丁 ID 和基于距离和补丁值的意见。以及所有海龟和补丁之间的计算距离。