我想知道您可以通过什么方式将补丁程序拥有的变量分组?我正在使用NetLogo 5.3.1。
具体地说,我正在这样做:
patches-own[some-variable other-variables]
to setup
gis:apply-coverage dataset-1 "some-variable" some-variable
;this line above for 1000 other-variables
end
我想这样做:
globals [group-variables]
patches-own [some-variable other-variables]
to setup
set group-variables (list some-variable other-variables)
foreach group-variables[
gis:apply-coverage dataset-1 "?" ?
]
end
但这似乎是不可能的:现在,安装程序仅是乌龟/补丁程序。我还收到gis:apply-coverage期望的消息,但是却得到了任何消息。
在不减慢程序速度的情况下,我还可以使用什么其他方式对这些变量进行分组?
我看过列表,数组和表,但问题是gis:apply-coverage需要补丁变量。这不包括数组和表。列表需要在补丁程序上下文中定义,但是gis:apply-coverage需要在观察者上下文中调用。 read-from-string变量不支持读取变量并创建所有字符串,然后对其调用run不会提高执行速度。
答案 0 :(得分:2)
我认为主要问题是您使用了?变量作为字符串(“?”)。这是行不通的,因为它没有引用当前的foreach循环变量。 也许有更好的解决方案,但是我通过使用run原语使它起作用,该原语允许根据字符串和变量的组合创建命令。 这是一个简短的示例,使用GIS代码示例中的国家/地区数据集:
extensions[gis]
globals [group-vars shp]
patches-own [CNTRY_NAME POP_CNTRY]
to load-multiple-vars-from-shp
ca
; Load Data
set shp gis:load-dataset "C:/Program Files/NetLogo 5.3.1/app/models/Code Examples/GIS/data/countries.shp"
; Print properties
print gis:property-names shp
; Select two properties to write to patch-variable
set group-vars (list "CNTRY_NAME" "POP_CNTRY")
; Loop over group-vars
foreach group-vars
[
; Apply coverage of current variable
run (word "gis:apply-coverage shp \"" ? "\"" ?)
]
; Visualize patch variables to check if everything is working
ask patches
[
set plabel substring (word CNTRY_NAME) 0 1
set pcolor POP_CNTRY
]
end