我想建立多边形(例如多边形A)之间的最低成本路径,其中有一只狼和所有多边形位于狼周围半径3公里处,并找到成本最低的多边形(另见How can I increase speed up simulation of my least-cost path model。然后,狼向这个多边形移动(例如多边形B)。从多边形B重复该过程,等等。
to-report path-cost
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] [
set path-cost calculate-LCP [my-ID-polygon] of myself ID-polygon-in-buffer] ] ]
report [plabel] of (min-one-of patches [path-cost])
end
1)从多边形A开始,代码起作用,因为只有缓冲区中的多边形具有路径开销。但是从多边形B来看,存在一个问题。代码在位于多边形A的缓冲区和多边形B的缓冲区中的多边形中找到成本最低的多边形。代码必须只找到多边形B缓冲区中多边形中成本最低的多边形我该如何解决这个问题?在从多边形B计算路径成本之前,我是否要为每个多边形补丁重置状态变量“path-cost”?
ask patches [
set path-cost 0 ]
2)如果三个狼的缓冲区中包含相同的多边形,那么路径成本将如何分配给每个补丁多边形的状态变量“path-cost”,即是否可能具有3 x成本值相同的多边形
3)在下图中,为什么最低成本路径不遵循直线?成本最低的路径采用补丁对角线而不是较短的补丁侧。
非常感谢你的帮助。
答案 0 :(得分:1)
我将反过来回答你的问题。
3)正如赛斯所说,这是一个单独的问题。也就是说,这就是答案。默认情况下,所有链接的成本相同。也就是说,对角链路的成本与水平链路的成本相同。因此,没有理由偏爱对角线上的水平链路。成本实际上是相同的。您可以使用链接权重来解决此问题。只需创建一个新的链接变量(cost
或其他),将其设置为链接的长度,然后使用该变量请求最短的加权路径。
2)不是真的。您可以将path-cost
设置为包含不同狼的值的列表,但我不建议您这样做。我不认为使用补丁变量是正确的方法。
1)您必须将路径成本设置为0,但有更好的方法。此外,您的程序仅返回最后一次狼跑的最低成本路径(因为狼会继续覆盖补丁变量)。
首先,我认为你真的希望path-cost
成为一个狼程序(我也会将它命名为least-cost-polygon
,因为它实际上是在报告一个多边形)。也就是说,它只是为狼提供最近的多边形。所以这里有一个简化版本,它不会在任何补丁变量中存储任何东西(从而避免碰撞,因为没有任何东西被覆盖):
to-report least-cost-polygon
[ plabel ] of min-one-of patches in-radius 3 with [ plabel != [plabel] of myself ] [
calculate-LCP [ my-ID-polygon ] of myself
]
end
答案 1 :(得分:0)