继How can I increase speed up simulation of my least-cost path model之后,我试图找到一种方法来加速我的在大空间尺度上运行的最低成本路径模型。我的景观的范围是100 an²(1000个补丁x 1000个补丁,其中1个补丁=1个像素)。
目前,我的代码似乎可以工作,但运行速度非常慢:我的代码需要几个小时才能绘制一条成本最低的路径。问题是,我的模型在100天内按照两分钟的离散时间步长进化,而我的场景中有1000只狼。对于每一只狼,在每个时间步,我的模型必须在有一只狼的多边形(由几个补丁组成)和位于狼周围3公里半径内的所有多边形之间建立最低成本的路径。
我使用了新版本的NW-extension,我试图通过保存已经计算的所有成本来优化我的模型,以避免重新绘制成本最低的路径。不幸的是,我的代码仍然太慢,我不知道如何加速它。下面是我的代码,用于计算一条成本最低的路径的成本(如果需要,我可以向某人提供更多的代码)
to-report path-cost-between-polygons [ID-polygon-1 ID-polygon-2]
let path-cost -1
;; Define polygon edges
ask patches with [ID-polygon != ID-polygon-1] [
ask neighbors with [ID-polygon = ID-polygon-1] [
ask nodes-here [
set color red ] ] ]
ask patches with [ID-polygon != ID-polygon-2] [
ask neighbors with [ID-polygon = ID-polygon-2] [
ask nodes-here [
set color red ] ] ]
;; Calculate path cost
foreach sort ( (nodes-on patches with [ID-polygon = ID-polygon-1]) with [color = red] ) [
let node-on-polygon-1 ?
foreach sort ( (nodes-on patches with [ID-polygon = ID-polygon-2]) with [color = red] ) [
let node-on-polygon-2 ?
ask node-on-polygon-1 [
let cost nw:weighted-distance-to node-on-polygon-2 "link-cost"
if path-cost = -1 or cost < path-cost [
set path-cost cost ] ] ] ]
;; Save path cost between polygons
set list-ID-polygons lput (list ID-polygon-1 ID-polygon-2) list-ID-polygons
set list-path-costs-between-polygons lput path-cost list-path-costs-between-polygons
ask nodes with [color = red] [ set color white]
report path-cost
end非常感谢你的帮助。
发布于 2014-04-22 11:34:11
我目前正在开发一个新版本的NW-extension,它会更快。不幸的是,对于加权路径,它在NetLogo 5.0.6发布之前是不可用的。
在此之前,您可以编写自己的最低成本路径代码。A*将非常适合您的情况。实现起来肯定有些棘手,但却是可行的。如果我有时间,我会把它拍下来贴在这里。
https://stackoverflow.com/questions/23202199
复制相似问题