目前,我把海龟放在一个光栅上,我要求他们改变他们附近补丁的颜色。然而,这个过程花费了太多的时间,我找不到原因。下面的代码显示了主要部分,但它不应该工作。
breed[tradis tradi]
breed[tecnos tecno]
to setup-map
user-message "Se Borrará el Mapa y Las Distancias Guardadas"
ca
resize-world 0 700 0 700
set mundo gis:load-dataset "D:/Geografico/Lago_Tota_SZH_Raster_Grueso.asc"
gis:set-transformation [-72.994844704 -72.835891153 5.418413284 5.648012857666661] [0 700 0 700]
set lago gis:load-dataset "D:/Geografico/Lago_Tota_Raster.asc"
draw-tota
draw-lago
set emptypatches patches with [pcolor <= 50]
ask emptypatches [set tota "na"]
set terrain patches with [pcolor > 50 and pcolor < 60]
ask terrain [set tota 1]
set border patches with [tota = 1 and any? neighbors with [tota != 1]]
to go
cultivate
tick
end
to cultivate
ask tecnos [ if ticks > 0 and ticks mod 4 = 0 [ask patches in-radius 4 with [tota = 1]
[set dano_suelo_promedio mean [dano_suelo] of patches
set pcolor 42
set cosecha cosecha + 1
]
ifelse pcolor = 42 [][set recuperar recuperar + 1]
]
]
ask tradis [ if ticks > 0 and ticks mod 6 = 0 [if patch-here = terreno [ask patches in-radius 4 with [terreno]; falta presentar la coseachas 6-3-3
[set dano_suelo_promedio mean [dano_suelo] of patches
set pcolor 42
set cosecha cosecha + 1
]
ifelse pcolor = 42 [][set recuperar recuperar + 1]
]
]
]
end这是给我带来麻烦的部分。这个特定的部分大约需要30分钟才能运行,这是毫无意义的。随着补丁颜色的改变,它正在缓慢地工作。光栅本身是大的,700×700,所以我试图找到一种方法来询问最少的数量,如果其他,以便它可以尽快。
如有任何建议,将不胜感激。
发布于 2022-07-04 13:25:48
为了继续Charles所写的内容,如果您只想计算相关补丁的平均值,而不是所有补丁的平均值,我建议使用一个局部变量(使用let)来定义补丁,并使用另一个局部变量来定义平均值,因为我假设,对于某个海龟选择的所有补丁,这个平均值是相同的。这意味着,您现在计算49个补丁的平均值--每次1次--而不是计算所有1002001个补丁的平均值--每tecno 49次,这在规模上有很大的差异。
ask tecnos [
if ticks > 0 and ticks mod 4 = 0 [
let my_patches patches in-radius 4 with [tota = 1]
let my_mean mean [dano_suelo] of my_patches
ask my_patches [
set dano_suelo_promedio my_mean
set pcolor 42
set cosecha cosecha + 1
] ;end of ask my_patches
ifelse pcolor = 42 [][set recuperar recuperar + 1]
] ;end of if
] ;end of ask tecnos发布于 2022-06-30 20:28:04
我想到的一件事是,您要求每个tecnos和每个tradis计算相同的东西,mean [dano_suelo] of patches,这大概对它们都是一样的。如果有很多补丁,那就是大量的计算。您能在过程开始时计算一次,然后将其提供给每个代理吗?或者,是否有一个子集的补丁,每个代理是要找到均值?
查尔斯
https://stackoverflow.com/questions/72820680
复制相似问题