我有一个GIS城市景观,我已经加载到Netlogo中,用许多变量填充我的景观。其中一个是一个ID,用于指示每个Netlogo补丁属于哪个地块。我正在尝试创建一个可视化过程,根据整个模拟过程中的资源使用情况,更新包裹内所有补丁的颜色(即共享ID)。
我遇到的问题是找到一种在高空间分辨率下执行此操作的有效方法。我的风景目前是400x400补丁,我宁愿增加它,但我尝试的程序甚至在这个分辨率上都很慢。以下是我目前尝试的3种方法:
查询所有补丁并独立更新颜色,例如
ask patches [ set pcolor scale-color 5 mywateruse maxwateruse minwateruse]
创建一个包裹代表的单个补丁,要求它运行类似于上述的程序,然后让它询问分享它的ID的补丁来改变它们的颜色,例如
ask patches with [parcelrep? = true] [set pcolor scale-color 5 mywateruse maxwateruse minwateruse]
ask other patches with [parcelID = [parcelID] of myself] [set pcolor [pcolor] of myself]
我还尝试修改" Patch Clusters示例"在Netlogo建模库中运行代码,该代码将基于共享ID将每个补丁分配给补丁集,然后更新这些集群的颜色。虽然这可能会提高后端的速度。对于模拟(即更改补丁的颜色),设置中的聚类过程需要花费数小时才能自行运行。
任何寻求更有效方法的帮助都将非常感激。
答案 0 :(得分:2)
我设置了一个400x400的世界(count patches
= 160000)并计算了你的变种#1在我的MacBook Pro上运行多长时间:
observer> reset-timer ask patches [ set pcolor scale-color 5 mywateruse 10 0] print timer
0.04
那是1/25秒。那个"非常慢"?这似乎不太可能成为您模型中速度最快的瓶颈。