更新
感谢Luke C& JenB。这是我修改后的代码。如果男性徘徊在她的领地,我只是将她的领土变成了不同的颜色(绿色到蓝色),将女性转变为“杀手”。如果任何男性碰巧出现在蓝色斑块上,他就会死亡。似乎最初触发转换的男性不会立即被吃掉,这就是我想要的。如果他在下一个嘀嗒声中没有离开她的蓝色区域,他就可以被吃掉。然后,任何后续的雄性都会立即被吃掉。
此外,我正在使用BehaviorSpace工具探索一些很酷的东西,比如在多次运行中吃掉所有雄性所需的滴答数。
唯一松散的目的是创建一个图形窗口,显示随时间变化的男性数量(滴答声)和一个包含非杀手/杀手女性数量的报告窗口。
原始帖子
我想用以下规则模拟狼蛛的行为系统:
女性是静止的
男性移动
如果任何一名男性在女性的某个半径范围内侵犯,该女性将成为“杀手”两个蜱虫
“杀人”女性境内的任何男性都被吃掉并从人口中被带走
当所有男性都被吃掉时,模拟结束
所有女性在安装时都是“非杀手”
该模型的最终目标:
要吃掉所有男性需要多少滴答?
在模拟结束时,人口中是否有“非杀手”女性?
这是我到目前为止所拥有的。我正在努力争取的部分是建立女性地区,当男性进入她的领地时,将非杀手女性转变为杀手女性,占据/取出被吃掉的男性,用蜱来报告模拟的持续时间以及是否有任何非杀手女性仍然在最后。
breed [females female]
breed [males male]
to setup
clear-all
reset-ticks
ask patches [set pcolor white]
setup-females
setup-males
end
to setup-females
create-females 15 [
set shape "spider"
set color 15
set size 25
setxy random-xcor random-ycor]
ask females [move-to one-of patches with [not any? females in-radius 40]
; prevents overlapping
ask patches in-radius 20 [set pcolor green]
]
end
to setup-males
create-males 30 [
set shape "spider"
set color black
set size 20
setxy random-xcor random-ycor]
ask males [move-to one-of patches with [not any? males in-radius 10]
; prevents overlapping
]
end
to go
move-males
tick
if count males = 0 [stop]
end
to move-males
ask males [
right random 360
if random 100 > 49 [forward 1 + random (15 - 1)]
if pcolor = blue [die]
;moves male 1 to 15 units per tick if condition satisfied
score-females
]
end
to score-females
ask females in-radius 20 [
if count males > 0 [ask patches in-radius 20 [set pcolor blue]]
]
end