通过使用网络扩展,以下代码在两个多边形(由多个面片组成)之间构建成本最低的路径:
to calculate-LCP [ID-polygon-1 ID-polygon-2]
let path []
let path-cost -1
;;;;;;;;;;;;;;;;;;;;;;;;
;; Define polygon edges
ask patches with [plabel != ID-polygon-1] [
ask neighbors with [plabel = ID-polygon-1] [
ask nodes-here [
set color red ] ] ]
ask patches with [plabel != ID-polygon-2] [
ask neighbors with [plabel = ID-polygon-2] [
ask nodes-here [
set color red ] ] ]
;;;;;;;;;;;;;;;;;;;;;;;;
;; Build least-cost path
ask nodes with [color = red] [
foreach sort nodes-on patches with [ID-polygon = ID-polygon-1] [
let node-on-polygon-1 ?
foreach sort nodes-on patches with [ID-polygon = ID-polygon-2] [
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
set path nw:weighted-path-to node-on-polygon-2 "link-cost" ] ] ] ] ]
;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Draw least-cost path
foreach path [ ;; trace le least-cost path
ask ? [ set color red
set thickness 0.2 ] ]
end
我将此代码应用于两个多边形,这两个多边形由图中的黑色矩形表示。通过使用探查器扩展,此代码运行了 14 分钟。
对于每只狼,我想在有狼的多边形和位于狼周围 3 公里半径内的所有多边形之间构建成本最低的路径。这是我的代码:
ask wolves [
set my-list-of-polygons-in-buffer ( [plabel] of patches in-radius 3 )
set my-list-of-polygons-in-buffer remove-duplicates my-list-of-polygons-in-buffer
set my-list-of-polygons-in-buffer remove [plabel] of patch-here my-list-of-polygons-in-buffer
set my-list-of-polygons-in-buffer remove "" my-list-of-polygons-in-buffer
foreach my-list-of-polygons-in-buffer [
let ID-polygon-in-buffer ?
ask patches with [plabel = ID-polygon-in-buffer] [
let LCP calculate-LCP [my-ID-polygon] of myself ID-polygon-in-buffer ] ] ]
问题是我的程序“calculate-LCP”运行得太慢,无法在狼周围的缓冲区中定义成本最低的路径(我的模型中有 100 只狼)。如何提高模型的仿真速度?
非常感谢您的帮助。
您只需致电nw:set-snapshot turtles links
当您第一次设置网络时。如果任何权重发生变化,或者添加或删除任何链接或节点,您将需要再次调用它。这应该会极大地加快你的代码速度。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)