我是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
答案 0 :(得分:3)
不幸的是,这不是简单地更改一些代码以使其工作的简单方法。您似乎有一个基本的概念问题。在代码级别,您正在使用wait 0.1
来立即停止所有发生的事情,并且您没有任何命令tick
来提前时间。
从概念上讲,您需要将开始时存在的事物和随时间推移发生的事物分开。您已经完成了此操作,将模型分为正常的setup
和go
过程。但是在时间上,您需要想象tick
代表特定的时间量(例如10秒)。在10秒的时间内发生了什么-您所有的撤离者都移动到下一个节点,或者至少移向下一个节点。
作为第一近似值:
ask one-of
代替ask
类型的构造(这将指示他们全部这样做)。wait
指令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