Netlogo - 在大型GIS环境中有效地更新空间聚集变量的颜色

时间:2015-01-26 22:02:00

标签: performance gis visualization spatial netlogo

我有一个GIS城市景观,我已经加载到Netlogo中,用许多变量填充我的景观。其中一个是一个ID,用于指示每个Netlogo补丁属于哪个地块。我正在尝试创建一个可视化过程,根据整个模拟过程中的资源使用情况,更新包裹内所有补丁的颜色(即共享ID)。

我遇到的问题是找到一种在高空间分辨率下执行此操作的有效方法。我的风景目前是400x400补丁,我宁愿增加它,但我尝试的程序甚至在这个分辨率上都很慢。以下是我目前尝试的3种方法:

  1. 查询所有补丁并独立更新颜色,例如

     ask patches [ set pcolor scale-color 5 mywateruse maxwateruse minwateruse]
    
    • 这非常慢,因为每个补丁都在运行此过程
  2. 创建一个包裹代表的单个补丁,要求它运行类似于上述的程序,然后让它询问分享它的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]
    
    • 这仍然非常缓慢,因为仍在询问每个补丁
  3. 我还尝试修改" Patch Clusters示例"在Netlogo建模库中运行代码,该代码将基于共享ID将每个补丁分配给补丁集,然后更新这些集群的颜色。虽然这可能会提高后端的速度。对于模拟(即更改补丁的颜色),设置中的聚类过程需要花费数小时才能自行运行。

  4. 任何寻求更有效方法的帮助都将非常感激。

1 个答案:

答案 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秒。那个"非常慢"?这似乎不太可能成为您模型中速度最快的瓶颈。