我是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
在我的模型中,根据特定pxcor pycor的土地利用价值以及该补丁与其自身位置之间的距离,3个静态品种的人在世界上的每个补丁上都应该有不同的意见。
因此,我的想法是创建字典或并行列表来存储位置键以及相应的意见。
然而,经过几天的努力,我比在初学期更困惑,我感到完全迷失了。 请,如果有人有任何想法,如何解决这个问题。我将非常感激
谢谢, 扬
答案 0 :(得分:1)
Jan,听起来好像GIS数据对你的问题不是必不可少的。以下是否正确?你想为每一对[补丁,人]存储一个值 - 一个意见。这种观点是两件事的函数:人的品种,以及人与补丁的距离。以下是我想到的一些想法。以下某些内容可能很有用。
我看到了一些自然的方法来存储这些信息:
在人们中存储意见。
在补丁中存储意见。
双向存储意见。这需要一些照顾。
将意见存储在您可以使用补丁,人员对进行访问的单独数据结构中。
创建一个名为opinions
的单独品种的海龟。 (这可能不是你想要的。)
1,2或3是否最有用取决于程序的其余部分需要做什么。例如,如果我的程序主要是针对人员操作,那么将意见存储在人员中可能是最方便的。然后,我可以使用ask people [...]
访问每个人的意见,例如。
另一个因素是:
如果您将意见存储在人员中,那么在每个人中,将会有一个包含您必须能够通过pxcor
和pycor
访问的意见的数据结构。这可以是列表列表,也可以使用NetLogo通过扩展提供的二维数据结构之一:array,table和matrix。
如果您在补丁中存储意见,您可以将它们存储在列表中,但您必须有办法找到列表中的正确元素。也许每个人都可以有一个特殊的索引号,表明每个补丁的意见列表中哪个元素是与该人相对应的那个。
如果您使用选项4,则可能需要创建三维数据结构(pxcor
,pycor
和人员)。
答案 1 :(得分:0)
感谢Mars和Seth的建议。
我最终使用以下方法工作......
我在修补程序的设置中安装了一个计数器,为每个补丁分配一个ID:
让反击0 设置计数器+ 1 设置ID计数器
我通过使用距离来计算每个补丁的每只乌龟的初步意见。这里是测试模型的代码:
让操作0
让虚拟补丁[value> 0]
问乌龟[
让tx xcor
让ty ycor
show" ############################################# #"
问假人[
让dist distxy tx ty
显示ID
显示价值
显示dist
如果dist< ?和价值=? [设置操作?]
如果dist< ?和价值=? [设置操作?]
如果dist< ?和价值=? [设置操作?]
如果dist< ?和价值=? [设置操作?]
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和意见。以及所有乌龟和斑块之间的计算距离。