netlogo - 如何让两个品种的乌龟从同一个巢穴出来时交替出现
问题描述
在这个蚂蚁模型中,我有两个品种的海龟:未成年人和觅食者。现在所有的觅食者都将单独出现,然后是所有未成年人(这是通过延迟初始出发来完成的。我希望他们轮流出来,直到我用完觅食者或用完未成年人。
我曾尝试将询问海龟 [if who >= ticks [ stop ]] 作为 GO 程序的第一步,但这使得所有海龟都从巢中爆炸而不是留下单个文件。
to go
ask foragers
[ if who >= ticks [ stop ] ;; delay initial departure
wiggle
fd 1 ]
ask minors
[ if who >= ticks [ stop ] ;; delay initial departure
ifelse color = white
[ look-for-transporter ]
[ hitchhike ]]
tick
end
我希望觅食者和未成年人在离开巢穴时交替进行。现在所有的觅食者都在未成年人之前离开。
解决方案
who
数字在创建时分配给每只海龟,并且与品种无关。因此,如果您创建 10 个觅食者,然后再创建 10 个未成年人,您的觅食者的who
值将从 0 到 9,而您的未成年人的who
值将介于 10 到 19 之间。因此,无论您首先创建哪个品种(因此范围最小)who
数字)将根据您的代码开始移动if who >= ticks...
。为了让你who
的基础代码做你需要的事情,你必须交替创建你的觅食者和未成年人。
但是,通常使用who
数字有点限制 - 您可能会发现创建自己的变量或以其他方式控制它更容易。例如,下面的设置nest-patch
在世界的最左侧创建一个,并将一些觅食者和未成年人移动到该补丁。海龟有一个布尔变量at-nest?
,您可以使用它来控制哪些海龟可以移动:
breed [ foragers forager ]
breed [ minors minor ]
globals [ last-left nest-patch ]
turtles-own [ at-nest? ]
to setup
ca
create-foragers 10 [ set color red ]
create-minors 20 [ set color blue ]
set nest-patch patch min-pxcor 0
ask nest-patch [ set pcolor yellow ]
ask turtles [
move-to nest-patch
set heading 90
set at-nest? true
pd
]
set last-left minors
reset-ticks
end
最初,所有海龟都将其at-nest?
设置为 true。at-nest?
然后,您可以在您要求将其设置为的每个品种的个体之间交替true
。看看下面的例子,评论中有更多细节:
to go
; If there are any turtles on the nest patch with at-nest? set to true
if any? ( turtles-on nest-patch ) with [ at-nest? ] [
; If both breeds are present on the nest patch, alternate back and forth
; between breeds to set at-nest? to false
ifelse ( length remove-duplicates [breed] of turtles-on nest-patch = 2 ) [
set last-left ifelse-value ( last-left = minors ) [ foragers ] [ minors ]
ask one-of last-left with [ at-nest? ] [
set at-nest? false
]
] [
; Otherwise, just ask one-of whichever breed is left to set at-nest? to false
ask one-of turtles-on nest-patch [
set at-nest? false
]
]
]
; Ask any turtles who have at-nest? set to false to move
ask turtles with [ not at-nest? ] [
if heading != 90 [
rt ifelse-value ( breed = minors ) [ 12 ] [ -12 ]
]
if xcor > 0 and heading = 90 [
rt ifelse-value ( breed = minors ) [ 12 ] [ -12 ]
]
fd 1
]
tick
end
该代码输出如下内容:
推荐阅读
- reactjs - 从两个不同的静态构建目录提供 React 构建文件
- asp.net-web-api - 使用 Asp.net Web Api 和 Angular 8 下载文件
- android-fragments - 从 Kotlin 片段中的 Activity 获取上下文
- javascript - 未捕获(承诺中)类型错误:无法读取未定义的属性“0”。从 csv 文件中提取以填充数组
- wpf - 有没有办法在除调试之外的配置中使用 XAML 的热重载功能?
- javascript - 是否可以将多个功能传递给导航项?
- r - 如何将此 for 循环转换为应用函数?
- php - 获取每个 ID 的最后一条记录
- ember.js - geolib 的导入在 Ember-cli 中不起作用
- javascript - 我正在尝试将 JSON 数据的值存储在 servlet 的数组中,但它显示 post.map 不起作用