首页 > 解决方案 > 西北扩展和代理导航

问题描述

我正在尝试解决如何实现代理导航。我已经将我的模型设置为在我的疏散模型中的每个“地板”补丁上生成节点。我还将海龟链接到相应的节点。我想做的是让疏散人员绘制一条通往出口的路径并同时执行疏散。我使用的 png 图像是具有白色地板和黑色墙壁/障碍物的基本平面图,我认为通过在白色地板上萌生节点,代理将自动绕过所述障碍物。我知道使用 nw 扩展是可能的,但是我未能将其合并到我的模型中。我已经查看了链接行走龟示例,但仍然无法弄清楚这一点。有没有人根据下面的代码对如何做到这一点有任何建议?或者关于如何整合寻路的任何建议?任何帮助将非常感激。

breed [nodes node]
breed [cells cell]
breed [evacuees evacuee]

evacuees-own
 [ target   
  direction  
 ]


to setup
clear-all

set-default-shape turtles "person";
import-pcolors "floorplan.png"


ask n-of evacnum patches with [pcolor = white]
   [
     sprout-evacuees 1 [
     set size 7
     set color green
    ;set speed 1 + random-float 1.5


  ifelse random 2 = 0
    [ set direction 1     
       ]
   [ set direction -1    
      ]




  ]
  ]


  ask patches with [ pcolor = white ] [

 sprout-nodes 1 [
  set size 0.5
  set shape "circle"
  set color grey
  ]
 ]

 ask nodes [
 create-links-with turtles-on neighbors4 [
  set color grey
 ]
 ]

ask patch 146 199
 [

  sprout-cells 1 [
    set size 1.5
    set shape "box"
    set color yellow
  ]
  ]

 ask evacuees
 [ set target one-of min-n-of 5 nodes [distance myself]
 face target
  ]


  reset-ticks
  end

  to go
  move
  tick
  end

  to move
  ask evacuees

   [
    walk
   forward 0.25
   if distance target < 0.2
   [ set target one-of min-n-of 5 nodes [distance myself]
   ]
   face target
    ]



   end


   to walk
    if not wall? (90 * direction) and wall? (135 * direction) [ rt 90 * 
   direction ]
   while [wall? 0] [ lt 90 * direction ]
   end

   to-report wall? [angle]
   report black = [pcolor] of patch-right-and-ahead angle 1
   end

标签: netlogo

解决方案


这个答案是我在这里的答案的简化版本,因此有关更多详细信息或更灵活的实现,请查看。这种简单的方法让疏散者检查相邻补丁上的哪些节点最接近exit-node,然后他们移动到该节点。使用基于您上面的代码的简单设置(但没有平面图,我没有看到发布的内容):

extensions [ nw ]

breed [nodes node]
breed [cells cell]
breed [evacuees evacuee]
globals [ exit-node ]

to setup
  clear-all

  set-default-shape turtles "person";
  ask patches [ set pcolor white ]
  ask patches with [ pxcor mod 5 = 0 ] [
    set pcolor black 
  ]
  ask patches with [ pycor mod 10 = 0 ] [
    set pcolor white 
  ]

  ask n-of 5 patches with [pcolor = white] [
    sprout-evacuees 1 [
      set size 2
      set color green
    ]
  ]

  ask patches with [ pcolor = white ] [  
    sprout-nodes 1 [
      set size 0.5
      set shape "circle"
      set color grey
    ]
  ]

  ask nodes [
    create-links-with nodes-on neighbors4 [
      set color grey
    ]
  ]

  ask patch 16 0 [
    sprout-cells 1 [
      set size 1.5
      set shape "box"
      set color yellow
    ]
  ]
  ask one-of cells [
    set exit-node one-of nodes-here 
  ]
  reset-ticks
end

现在,一些简单的运动代码:

to go
  ask evacuees [
    let target min-one-of nodes-on neighbors4 [
      length nw:turtles-on-path-to exit-node
    ] 
    move-to target
    if any? cells-here [
      show "I HAVE EVACUATED!"
      die
    ]
  ]  
  tick
end

要获得类似的行为:

在此处输入图像描述

编辑:

将全局变量更改为globals [ exits ]并替换它:

  ask patch 16 0 [
    sprout-cells 1 [
      set size 1.5
      set shape "box"
      set color yellow
    ]
  ]
  ask one-of cells [
    set exit-node one-of nodes-here 
  ]

有了这个:

  set exits nodes-on ( patch-set patch 16 0 patch -16 0 )

  ask exits [
    hatch-cells 1 [
      set size 1.5
      set shape "box"
      set color yellow
    ]
  ]

你应该能够使用go下面的修改让撤离者寻找最近的门:

to go
  ask evacuees [
    let my-node one-of nodes-on patch-here
    let my-exit min-one-of exits [
      length nw:turtles-on-path-to my-node
    ]
    let target min-one-of nodes-on neighbors4 [
      length nw:turtles-on-path-to my-exit
    ]
    move-to target
    if any? cells-here [
      show "I HAVE EVACUATED!"
      die
    ]
  ]
  tick
end

推荐阅读