Netlogo Dijkstra算法
我试图用Dijkstra算法找到最短路径。邻居有一个问题,每次程序试图找到下一个当前节点时,它都会返回init。这不是对您问题的直接回答,如果您试图找出如何为自己编写Dijkstra算法的代码作为练习,这对您没有帮助,但如果您只是在寻找最短路径,您始终可以从网络扩展使用 这个原语实际上是在幕后使用Dijkstra的算法 然而,为了使用它,你需要一个实际的网络,所以你必须使用海龟而不是补丁。然而,这很容易做到。假设你有一个叫Netlogo Dijkstra算法,netlogo,dijkstra,Netlogo,Dijkstra,我试图用Dijkstra算法找到最短路径。邻居有一个问题,每次程序试图找到下一个当前节点时,它都会返回init。这不是对您问题的直接回答,如果您试图找出如何为自己编写Dijkstra算法的代码作为练习,这对您没有帮助,但如果您只是在寻找最短路径,您始终可以从网络扩展使用 这个原语实际上是在幕后使用Dijkstra的算法 然而,为了使用它,你需要一个实际的网络,所以你必须使用海龟而不是补丁。然而,这很容易做到。假设你有一个叫节点的海龟品种,你可以在每个补丁上放置一个节点,如下所示: to-repo
节点的海龟品种,你可以在每个补丁上放置一个节点,如下所示:
to-report find-path [ init final ]
ask init [set dist_d 0]
let current init
let p_dij []
set p_dij insert-item 0 p_dij current
show "dij"
while [not (current = final)]
[
ask [neighbors with [pcolor = yellow and not (dist_d = -1)]] of current [set dist_d min (list dist_d (1 + [dist_d] of current))]
ask current [set dist_d -1]
let min_d min [dist_d] of neighbors
set current one-of neighbors with [dist_d = min_d and pcolor = yellow]
set p_dij insert-item (length p_dij - 1) p_dij current
]
ask patches with [pcolor = yellow] [set plabel dist_d set plabel-color red]
report p_dij
end
然后可以在黄色节点之间创建链接:
ask patches [
sprout-nodes 1 [
set color pcolor ; give the node the same color as the patch
set hidden? true ; hide the node if you prefer not seeing it
]
]
从一个黄色节点到另一个黄色节点的路径就是:
ask nodes with [ color = yellow ] [
create-links-with (nodes-on neighbors) with [ color = yellow ]
]
如果你只想知道距离,你可以用它来代替。这不是对你问题的直接回答,如果你想知道如何为自己编写Dijkstra算法的代码作为练习,它也帮不了你,但是如果你只是在寻找一条最短路径,你总是可以使用来自网络扩展的
这个原语实际上是在幕后使用Dijkstra的算法
然而,为了使用它,你需要一个实际的网络,所以你必须使用海龟而不是补丁。然而,这很容易做到。假设你有一个叫节点的海龟品种,你可以在每个补丁上放置一个节点,如下所示:
to-report find-path [ init final ]
ask init [set dist_d 0]
let current init
let p_dij []
set p_dij insert-item 0 p_dij current
show "dij"
while [not (current = final)]
[
ask [neighbors with [pcolor = yellow and not (dist_d = -1)]] of current [set dist_d min (list dist_d (1 + [dist_d] of current))]
ask current [set dist_d -1]
let min_d min [dist_d] of neighbors
set current one-of neighbors with [dist_d = min_d and pcolor = yellow]
set p_dij insert-item (length p_dij - 1) p_dij current
]
ask patches with [pcolor = yellow] [set plabel dist_d set plabel-color red]
report p_dij
end
然后可以在黄色节点之间创建链接:
ask patches [
sprout-nodes 1 [
set color pcolor ; give the node the same color as the patch
set hidden? true ; hide the node if you prefer not seeing it
]
]
从一个黄色节点到另一个黄色节点的路径就是:
ask nodes with [ color = yellow ] [
create-links-with (nodes-on neighbors) with [ color = yellow ]
]
如果您只需要距离,可以使用。谢谢!!这正是我想要的!!谢谢这正是我想要的!!