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



我是netlogo的新手,并开发了一个包含平面图的模型,其中代理商基本上疏散建筑物,避开障碍物等。我已经建立了我的模型,以便在建筑物内的每个补丁上萌芽一个节点,通过修改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

不幸的是,这不是简单地更改某些代码以使其工作的简单解决方案。你似乎有一个基本的概念问题。在代码级别,你使用wait 0.1来阻止立即发生的一切,并且你没有任何命令tick来推进时间。

从概念上讲,你需要将开始时存在的事情和随着时间的推移发生的事情分开。您已经完成了此操作,将模型分解为setup,并正常go过程。但是在时间进展中,您需要将tick想象为代表某个特定的时间量(假设 10 秒)。在 10 秒的时间内会发生什么 - 你所有的撤离人员都移动到下一个节点,或者至少朝向它或其他什么。

作为第一个近似值:

  1. ask one-of类型结构替换为ask(这将指示它们都这样做)。
  2. 删除wait指令
  3. 添加tick作为 Go 过程中的最后一个命令(以推进时钟)

然后,每次按下它时,您的go按钮都会随着时间的推移而移动。您可以通过选中"永久"框来编辑 go 按钮以重复运行 go 过程。

这是一个完整的模型,将为您提供一个起点。它包括向疏散点移动并使用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

最新更新