协助Netlogo中的节点/链接导航

时间:2019-04-08 22:28:02

标签: netlogo

我是netlogo的新手,正在开发一种模型,该模型结合了楼层平面图,在该平面图中,代理商实质上撤离了建筑物,避免了障碍物等。我建立了模型,以使节点发芽到建筑物内的每个补丁上,并通过修改示例我在这里被卢克·C(Luke C)发现,我已对代理商进行编程,以选择通往出口的路径。

但是,我遇到的问题是每跳动只移动一个特工。有什么办法可以改变吗?因此,例如,一个业务代表会每跳一次向前移动1个补丁,以这种方式在各个业务代表之间循环吗?我了解每个跳动不能移动一个以上的特工。提前致谢!

这是代码

extensions [ nw ]

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


evacuees-own [panic calm speed fear direction enterthenetwork]
leaders-own [calm speed ]


to setup
ca
clear-all
set-default-shape turtles "person";
import-pcolors "foreal2.png"

set-default-shape nodes "circle"


ask patches with [ pcolor = white ] [

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

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

ask n-of evacnum nodes [
hatch 1 [
  set size 10
  set color green
  set breed evacuees
  set shape "person"
]
]

ask n-of 2 evacuees [
set color blue
]


ask patch 146 199
[

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

  reset-ticks
  end

to avoid-walls
let front-patches patches in-cone 2 75
if [pcolor] of one-of front-patches = black [set heading heading - -120]
end



to go

let ready-evacuees evacuees with [ color = green ]


let evac-proxies turtle-set map [ i -> [nodes-on patch-here] of i ] sort 
ready-evacuees



ask one-of cells [


let node-proxy one-of nodes-on neighbors4


ask node-proxy [

  let my-evac-proxy min-one-of evac-proxies [length ( nw:turtles-on-path- 
to myself) ]

  ask my-evac-proxy [

    let path-to-follow nw:turtles-on-path-to myself


   ask turtle-set path-to-follow [
     set color orange
    ]

    let ready-evacuee one-of evacuees-here with [ color = green ]
    ask ready-evacuee[
      set color yellow
    ]

    ask ready-evacuee [
      foreach path-to-follow [
        n ->
        face n
        move-to n


        wait 0.1
      ]
    ]
   ]
  ]
  ]
 end

2 个答案:

答案 0 :(得分:3)

不幸的是,这不是简单地更改一些代码以使其工作的简单方法。您似乎有一个基本的概念问题。在代码级别,您正在使用wait 0.1来立即停止所有发生的事情,并且您没有任何命令tick来提前时间。

从概念上讲,您需要将开始时存在的事物和随时间推移发生的事物分开。您已经完成了此操作,将模型分为正常的setupgo过程。但是在时间上,您需要想象tick代表特定的时间量(例如10秒)。在10秒的时间内发生了什么-您所有的撤离者都移动到下一个节点,或者至少移向下一个节点。

作为第一近似值:

  1. ask one-of代替ask类型的构造(这将指示他们全部这样做)。
  2. 删除wait指令
  3. tick添加为go过程中的最后一条命令(以提高时钟)

然后,每次您按下转到按钮时,它都会在时间上移动。您可以通过选中“永远”框来编辑“执行”按钮以重复运行“执行”过程。

答案 1 :(得分:1)

这里是一个完整的模型,它将为您提供一个起点。它包括朝着疏散点的方向移动,并使用min-n-of(如min-one-of)找到要向其移动的地方。您将需要使用速度滑块(中间上方)来降低速度,以查看行为。

要构建模型,请尝试进行较小的更改并使它们生效,然后再添加下一个元素。例如,在整理好机芯之前,您不应该考虑墙壁。目前还不清楚所有不同品种的用途。

breed [nodes node]

breed [evacuees evacuee]
evacuees-own
[ target
]

to setup
  clear-all
  create-evacuees 100
  [ setxy random-xcor random-ycor
    set shape "person"
    set color blue
  ]
  create-nodes 20
  [ setxy random-xcor random-ycor
    set shape "circle"
    set color red
  ]
  ask evacuees
  [ set target one-of min-n-of 5 nodes [distance myself]
    face target
  ]
  reset-ticks
end

to go
  move
end

to move
  ask evacuees
  [ forward 0.25
    if distance target < 0.2
    [ set target one-of min-n-of 5 nodes [distance myself]
    ]
    face target
  ]
end