Time 每只海龟释放两只海龟
我目前正在开发一个模型,在这个模型中,我可以模拟购物时行人的运动。所以,我已经想好了我需要的一些东西,但我一直在想如何在某个补丁中每蜱释放2只海龟(就像一对)。两只海龟同时获释。我的代码是基于ant的代码,但它只是一次释放了所有的行人数量,然后海龟开始行走。蜱虫也会在所有海龟被释放后开始。我希望海龟们进入时开始“行走”。 这是我的密码:Time 每只海龟释放两只海龟,time,netlogo,release,agent,Time,Netlogo,Release,Agent,我目前正在开发一个模型,在这个模型中,我可以模拟购物时行人的运动。所以,我已经想好了我需要的一些东西,但我一直在想如何在某个补丁中每蜱释放2只海龟(就像一对)。两只海龟同时获释。我的代码是基于ant的代码,但它只是一次释放了所有的行人数量,然后海龟开始行走。蜱虫也会在所有海龟被释放后开始。我希望海龟们进入时开始“行走”。 这是我的密码: breed [ leadvisitors leadvisitor ] breed [ visitors visitor ] to setup clear-
breed [ leadvisitors leadvisitor ]
breed [ visitors visitor ]
to setup
clear-all
setup-visitors
reset-ticks
end
to setup-visitors
create-leadvisitors num-of-pedestrians * 0.1 ;;create 10% of the total number of pedestrians
[
set demand-type "none"
set color black
set size 1
setxy 0 16
set heading 180
set pen-size 1
set destination one-of patches
set wait-time -1
set demand-lvl 0
]
create-visitors (num-of-pedestrians - (num-of-pedestrians * 0.1))
[ set demand-type 0
set size 1
setxy 0 16
set heading 180
set pen-size 1
set destination one-of patches
set wait-time -1
set demand-lvl 1
set attracted? false
] ]
end
to go
if turtles = 0 [ stop ]
ask turtles
[
set-demand-type
have-demand
]
if ticks > 100 [ stop ]
tick
display-labels
end
;;;;; visitor's internal state of demand ;;;;;
to set-demand-type
if demand-type = 0
[ set demand-type "food"
set color red
let target (patches in-cone visitor-vision-depth visitor-view-angle) with [pcolor = red]
]
end
to have-demand
if demand-lvl = 0
[
ifelse wait-time = -1
[ stroll ]
[ set wait-time wait-time - 1
if wait-time = 0
[ stroll ]]
]
if demand-lvl = 1
[ ifelse wait-time = -1
[ stroll
evaluate ]
[ set wait-time wait-time - 1
if wait-time = 0
[ stroll
evaluate ]]
]
end
to stroll
if any? neighbors with [ pcolor = gray - 3 ]
[ die ]
ifelse any? neighbors with [ pcolor = gray or pcolor = orange or pcolor = blue or pcolor = red]
[ facexy exitpt-x exitpt-y ]
[ rt random-float visitor-view-angle lt random-float visitor-view-angle ]
fd walking-speed
end
to evaluate
if any? neighbors with [ pcolor = gray or pcolor = orange or pcolor = blue or pcolor = gray - 4 or pcolor = gray - 3 or pcolor = red + 2]
[ facexy exitpt-x exitpt-y
rt random-float visitor-view-angle lt random-float visitor-view-angle
fd walking-speed ]
let _mycolor color
if any? (patches in-cone visitor-vision-depth visitor-view-angle) with [pcolor = _mycolor]
[ let new-target max-one-of ( patches with [pcolor = _mycolor] in-cone visitor-vision-depth visitor-view-angle) [patch-influence]
let dist-to-new-target min-one-of (patches with [pcolor = _mycolor] in-cone visitor-vision-depth visitor-view-angle) [distance myself]
face new-target
set heading towards new-target
fd walking-speed
set attracted? true
attracted-and-visiting
re-evaluate
]
end
to attracted-and-visiting
if pcolor = red + 2
[ set heading towards one-of patches with [pcolor = red + 2]
fd 0
set patch-popularity patch-popularity + 1
set wait-time avg-waiting-time
if count turtles-here > 0
[ set num-of-visitors num-of-visitors + 1 ]
set plabel num-of-visitors
]
end
to re-evaluate
let _mycolor color
if not any? (patches in-cone visitor-vision-depth visitor-view-angle) with [pcolor = _mycolor]
[ set attracted? false ]
ifelse choose? [set heading towards one-of patches with [pcolor = _mycolor]] [facexy exitpt-x exitpt-y]
end
to-report choose?
report random 2 = 0
end
作为我们反复评论的结果,让我来看看你在寻找什么。我假设您希望在运行开始时创建
leadvisitors
,然后随着运行的进行,在每个勾选中添加两个visitors
。如果是这样的话,那么您的设置
过程如下
globals [num-visitors-created]
to setup
clear-all
set num-visitors-created 0
create-leadvisitors num-of-pedestrians * 0.1 [
set demand-type "none"
set color black
set size 1
setxy 0 16
set heading 180
set pen-size 1
set destination one-of patches
set wait-time -1
set demand-lvl 0
set num-visitors-created num-visitors-created + 1
]
reset-ticks
end
创建您的主要访问者
,但不创建访问者
。请注意,全局变量num visitors created
跟踪创建的leadvisitors
和visitors
的数量,在每次创建leadvisitor
或visitor
时递增一
在您的go
过程中,您将创建两个访客,每个访客勾选,直到创建的访客
和主要访客
总数达到行人数
。(如果只有一个新访客的空间,您是希望只创建一个,还是需要成对创建?我假设是后者。)因为您不希望访客的死亡为新访客打开空间,所以我们测试创建的数字,而不是仍然存在的数字
to go
if turtles = 0 [ stop ]
; create a new pair of visitors if there is room.
if num-visitors-created <= (num-of-pedestrians - 2)
create-visitors 2 [
set demand-type 0
set size 1
set heading 180
set pen-size 1
setxy 0 16
set destination one-of patches
set wait-time -1
set demand-lvl 1
set attracted? false
set num-visitors-created num-visitors-created + 1
]
ask turtles
[
set-demand-type
have-demand
]
if ticks > 100 [ stop ]
tick
display-labels
end
请注意,此处未设置新访问者的xy坐标,因此它们从生成它们的补丁开始。我们需要更具体地了解您的
go
过程,但基本上在该过程中,您将获得所需的补丁sprout 2 visitors[]
,您将在括号中输入大小、颜色、标题,等等,一旦它们被创造出来,它们将遵守与任何其他游客一样的行走规则。他们只需加入访客的代理集
。嗨@Charles,我试过sprout 2访客[]。访客被突出显示,顶部出现“预期命令”提示。我的代码实际上相当长。。我在上面添加了完整的代码。。希望能有帮助。非常抱歉,我的语法错了。应该是sprout visitors 2[]
。(如果没有任何东西放在括号内,则括号是不必要的。)我将检查代码的其余部分,但错误的语法可能是问题所在。唉,我们都会犯错误!你好,查尔斯,第一个适合我。但确实增加了“创造访客2/个行人”。这样访客数量就不会超过由滑块控制的行人总数。还有一件事,正如我在问题上所说的。我希望两名游客一获释就可以步行。但对于这一次,滴答计数只有在所有访客都被释放后才开始。有没有办法让访客开始“行走”并在前两名访客被释放时开始计时?Lyne,我不确定创建访客2/num行人
是否符合您的要求。我假设行人的数量很大,所以您的除法将产生一小部分,NetLogo将四舍五入为零。不会创建任何访问者。我已经编辑了我的答案以包含该约束。新行查找两个数字中较小的一个,2
,滑块的值减去当前访客数。(我假设行人数
是滑块值。)我还假设行人只包括访客
,不包括主要访客
。如果这两个都包括在内,你想把海龟算进去,因为访客和主要访客都是海龟。那么,我对你的设置有点不确定。您的设置
一次创建行人数
(引导访客
和访客
)在第一次勾选之前,他们不会开始移动,直到go
程序启动,在该点所有人都将移动。你想从更少的行人开始,然后随着时间的推移逐渐增加,直到达到最大数量吗?嗨,查尔斯,新的代码对我来说不太管用,因为现在在行人总数发布后,例如10人,另外一批10人的访客也出来了等等。
ask one-of patches with [pcolor = red] [
sprout-visitors 2 [
set demand-type 0
set size 1
set heading 180
set pen-size 1
set destination one-of patches
set wait-time -1
set demand-lvl 1
set attracted? false
set num-visitors-created num-visitors-created + 1
]
]