我的代理生产太多 children
My agents are producing too many children
我正在研究一个模型,其中有后代的有性繁殖,所以有两种代理类型,男性和女性。我要求代理人在达到一定年龄后进行繁殖:400 次滴答,并继续每 400 次滴答进行一次。
如果有雄性,雌性应该只生产一个 child。该模型适用于前几代,但随后人口激增。初始人口为一雌一雄,数字依次为:2、3、7、19、575。我不知道为什么突然从 19 增加到 575。
看起来有些雌性后代在出生后立即繁殖,尽管有一个age = 0
,即它们没有遵循这个命令:
ask females [
if age > 0 and age mod 400 = 0 [
reproduce
]
完整模型如下:
turtles-own [age]
breed[males male]
breed[females female]
females-own [ mates max-mate-count mate-count availa-males mother father]
to setup
clear-all
crt 2 [
ifelse random 2 = 1 [set breed males] [set breed females]
]
ask females [set color grey
setxy random-xcor random-ycor
]
ask males [set color red
setxy random-xcor random-ycor
]
reset-ticks
end
to go
ask turtles [increment-age]
ask females [
if age > 0 and age mod 400 = 0 [
choose-mates
]
]
ask females [
if age > 0 and age mod 400 = 0 [
reproduce
]
]
tick
end
to increment-age
set age (1 + age)
end
to choose-mates
ask females [
set mates males in-radius 100 with [age >= 400]
]
end
to reproduce
ask females with [count mates > 0 ] [
hatch 1 [
set mother myself
set father one-of [mates] of mother
ifelse random 2 = 1 [set breed males
set color red
move-to one-of patches with [pcolor = black]
set age 0
]
[set breed females
set color grey
move-to one-of patches with [pcolor = black]
set mate-count 0
set age 0
]]]
end
希望对您有所帮助!
不要在 reproduce
过程中 ask females
。见下文。我也提出了一些其他建议。
turtles-own [age]
breed[males male]
breed[females female]
females-own [ mates max-mate-count mate-count availa-males mother father]
to setup
clear-all
create-males 1 [init-male]
create-females 1 [init-female]
reset-ticks
end
to init
set age 0
move-to one-of patches with [pcolor = black]
ifelse (breed = males) [init-male][init-female]
end
to init-male
set color red
end
to init-female
set color gray
set mate-count 0
end
to-report fertile
report (age > 0 and age mod 400 = 0)
end
to go
ask turtles [increment-age]
let _fertile (females with [fertile])
ask _fertile [choose-mates]
ask _fertile [reproduce]
tick
end
to increment-age
set age (1 + age)
end
to choose-mates
;ask females [ ;DONT DO THIS!
set mates (males in-radius 100 with [age >= 400])
;]
end
to reproduce ;female proc
;ask females with [count mates > 0 ] [ ;DON'T DO THIS!!
if (count mates > 0) [ ;DO THIS INSTEAD
hatch 1 [
set mother myself
set father one-of [mates] of mother
set breed one-of (list males females)
init
]
]
end
我正在研究一个模型,其中有后代的有性繁殖,所以有两种代理类型,男性和女性。我要求代理人在达到一定年龄后进行繁殖:400 次滴答,并继续每 400 次滴答进行一次。
如果有雄性,雌性应该只生产一个 child。该模型适用于前几代,但随后人口激增。初始人口为一雌一雄,数字依次为:2、3、7、19、575。我不知道为什么突然从 19 增加到 575。
看起来有些雌性后代在出生后立即繁殖,尽管有一个age = 0
,即它们没有遵循这个命令:
ask females [
if age > 0 and age mod 400 = 0 [
reproduce
]
完整模型如下:
turtles-own [age]
breed[males male]
breed[females female]
females-own [ mates max-mate-count mate-count availa-males mother father]
to setup
clear-all
crt 2 [
ifelse random 2 = 1 [set breed males] [set breed females]
]
ask females [set color grey
setxy random-xcor random-ycor
]
ask males [set color red
setxy random-xcor random-ycor
]
reset-ticks
end
to go
ask turtles [increment-age]
ask females [
if age > 0 and age mod 400 = 0 [
choose-mates
]
]
ask females [
if age > 0 and age mod 400 = 0 [
reproduce
]
]
tick
end
to increment-age
set age (1 + age)
end
to choose-mates
ask females [
set mates males in-radius 100 with [age >= 400]
]
end
to reproduce
ask females with [count mates > 0 ] [
hatch 1 [
set mother myself
set father one-of [mates] of mother
ifelse random 2 = 1 [set breed males
set color red
move-to one-of patches with [pcolor = black]
set age 0
]
[set breed females
set color grey
move-to one-of patches with [pcolor = black]
set mate-count 0
set age 0
]]]
end
希望对您有所帮助!
不要在 reproduce
过程中 ask females
。见下文。我也提出了一些其他建议。
turtles-own [age]
breed[males male]
breed[females female]
females-own [ mates max-mate-count mate-count availa-males mother father]
to setup
clear-all
create-males 1 [init-male]
create-females 1 [init-female]
reset-ticks
end
to init
set age 0
move-to one-of patches with [pcolor = black]
ifelse (breed = males) [init-male][init-female]
end
to init-male
set color red
end
to init-female
set color gray
set mate-count 0
end
to-report fertile
report (age > 0 and age mod 400 = 0)
end
to go
ask turtles [increment-age]
let _fertile (females with [fertile])
ask _fertile [choose-mates]
ask _fertile [reproduce]
tick
end
to increment-age
set age (1 + age)
end
to choose-mates
;ask females [ ;DONT DO THIS!
set mates (males in-radius 100 with [age >= 400])
;]
end
to reproduce ;female proc
;ask females with [count mates > 0 ] [ ;DON'T DO THIS!!
if (count mates > 0) [ ;DO THIS INSTEAD
hatch 1 [
set mother myself
set father one-of [mates] of mother
set breed one-of (list males females)
init
]
]
end