【问题标题】:Netlogo, Finding the closest agent based on link distanceNetlogo,根据链接距离寻找最近的代理
【发布时间】:2019-06-14 05:34:22
【问题描述】:

大家好,所以我正在尝试解决一个 netlogo 模型,其中有节点相互链接。它是一个基于搜索和救援的模型,其中有两种类型的代理填充代理和救援代理,它们被放置在一个节点上。 与下图类似,橙色和紫色节点表示存在 pop/resc 代理的节点。救援代理需要根据链接距离找到最近的人口代理,并前往他们。例如,链接距离是下图中显示的数字。 (注意这个想法是不要使用 min-one-of in-radius 命令,它会给出最近链接距离的最近距离) 关于如何找到最接近每个 resc-agent 的人口代理的任何想法?

【问题讨论】:

    标签: netlogo


    【解决方案1】:

    这是网络扩展的一项工作,其中包含用于计算链接距离的原语 nw:turtles-in-radiusnw:weighted-distance-to

    【讨论】:

      【解决方案2】:

      是的,设法解决了这个问题。但这涉及制作许多清单。如果有人有更好的解决方案或改进以下代码。请让我知道。谢谢:)

      我设法通过创建 3 个列表来解决它, 1.所有人口代理的列表(N-pop-list) 2.人口代理所在的所有节点的列表(N-pop-node-list) 3. 以及距离列表,其中每个节点将计算从自身到弹出代理所在节点的距离。 (N-pop-distance-list)

      globals [G-target-agent G-node-target-agent]
      breed [pop-agents pop-agent]
      breed [resc-agents resc-agent]
      breed [nodes node]
      
      pop-agents-own [node-pop (;node the pop agents on)]
      resc-agents-own [node-resc (;node resc-agents on) target-agent (;agent they want to 
      travel to) target-pop-agent-at (;node target-pop-agents on)]
      nodes-own [N-pop-list N-pop-node-list N-pop-distance-list]
      links-own [dist (pretty much length/distance of the link !)]
      
      ...
      to setup-lists
      
      ask nodes [
      let temp-pop-list []
      let temp-pop-node-list []
      set N-pop-distance-list []
      
      ask pop-agents[
        set temp-pop-list lput self temp-pop-list
        set temp-pop-node-list lput node-pop temp-pop-node-list
      ]
      set N-pop-list temp-pop-list
      set N-pop-node-list temp-pop-node-list
      
      foreach N-pop-node-list
      [[i] ->
        let dist-to-node nw:weighted-distance-to i dist
        set N-pop-distance-list lput dist-to-node N-pop-distance-list
      ]
      ]
      end
      
      to search-pop-agent
      ask resc-agent[
      ask node-resc[
      let min-val min N-pop-distance-list
      let min-val-pos position min-val N-pop-distance-list
      set G-target-agent item min-val-pos N-pop-list 
      set G-node-pop-agent-at item min-val-pos N-pop-node-list
      ]
      set target-agent G-target-agent
      set node-pop-agent-at G-node-pop-agent-at
      ]
      end
      

      【讨论】:

      • 我无法弄清楚您的任何列表应该做什么。为什么不直接使用min one-of nw:weighted-distance-to 来查找最近的链接?
      • 据我了解,也许我不正确。 nw:weighted-distance-to,返回一个距离。我有兴趣根据链接距离找到最接近 resc-agent(两个代理都放置在节点上)的 pop-agent。类似于,问 resc-agent(set target-agent min-one-of pop-agents in-radius 5 [distance 我自己]
      • 对于列表 N-pop-distance-list 包含从每个节点到包含 pop-agents 的节点的距离。即如果有 5 个节点上有弹出代理,则模型中的每个节点都会将距离映射到这 5 个节点。它是距离列表 [23 4 6 7 9]。其他两个列表仅包含 Node who number 和 Pop-agent who number [pop-agent 1 3 4 6 7] [Node 82 77 65 44 56]。所以通过在距离列表中找到最小值的位置,就可以找到对应的pop-agent及其所在的节点。在这种情况下,最小距离为 4。因此 pop-agent 为 3,节点为 77。
      • nw:weighted-distance-to 计算沿(链接)路径的总距离,同时考虑每个链接的权重
      猜你喜欢
      • 2021-10-22
      • 2018-01-15
      • 1970-01-01
      • 1970-01-01
      • 2021-07-25
      • 2015-12-09
      • 2015-02-13
      • 2022-06-16
      • 2017-06-21
      相关资源
      最近更新 更多