Netlogo Dijkstra算法

Netlogo Dijkstra算法,netlogo,dijkstra,Netlogo,Dijkstra,我试图用Dijkstra算法找到最短路径。邻居有一个问题,每次程序试图找到下一个当前节点时,它都会返回init。这不是对您问题的直接回答,如果您试图找出如何为自己编写Dijkstra算法的代码作为练习,这对您没有帮助,但如果您只是在寻找最短路径,您始终可以从网络扩展使用 这个原语实际上是在幕后使用Dijkstra的算法 然而,为了使用它,你需要一个实际的网络,所以你必须使用海龟而不是补丁。然而,这很容易做到。假设你有一个叫节点的海龟品种,你可以在每个补丁上放置一个节点,如下所示: to-repo

我试图用Dijkstra算法找到最短路径。邻居有一个问题,每次程序试图找到下一个当前节点时,它都会返回init。

这不是对您问题的直接回答,如果您试图找出如何为自己编写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 ]
]

如果你只想知道距离,你可以用它来代替。

这不是对你问题的直接回答,如果你想知道如何为自己编写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 ]
]

如果您只需要距离,可以使用。

谢谢!!这正是我想要的!!谢谢这正是我想要的!!