If statement 在Netlogo中使用嵌套的if或ifelse指定概率
我在使用Netlogo中的嵌套ifs来指定鹿的繁殖概率时遇到问题。以下是我到目前为止的想法:If statement 在Netlogo中使用嵌套的if或ifelse指定概率,if-statement,netlogo,If Statement,Netlogo,我在使用Netlogo中的嵌套ifs来指定鹿的繁殖概率时遇到问题。以下是我到目前为止的想法: to reproduce-adult let chance-fawn random-float 1.001 let chance-to-reproduce .9 let chance-for-one .3 let chance-for-two .4 let chance-for-three .02 if any? femadults [ ask femadults [ if ran
to reproduce-adult
let chance-fawn random-float 1.001
let chance-to-reproduce .9
let chance-for-one .3
let chance-for-two .4
let chance-for-three .02
if any? femadults [
ask femadults [
if random-float 1.001 < chance-to-reproduce [
if chance-fawn < chance-for-three
[set births (births + 3)
let new-offspring nobody
hatch-infants 3
[set new-offspring self set color red - 1 set size 1]
set offspring new-offspring]
if chance-fawn > chance-for-two
[set births (births + 2)
let new-offspring nobody
hatch-infants 2
[set new-offspring self set color red - 1 set size 1]
set offspring new-offspring]
if (chance-fawn > .02) and (chance-fawn < chance-for-one)
[set births (births + 1)
let new-offspring nobody
hatch-infants 1
[set new-offspring self set color red - 1 set size 1]
set offspring new-offspring]
]]]
end
复制成人
让机会小鹿随机浮动1.001
让我们有机会再生产
让我们有一个机会
给我两个机会
给我三次机会
如果有的话?成年女性[
问问成年女性[
如果随机浮动1.001<复制机会[
如果机会小鹿<三个人的机会
[设定出生率(出生率+3)
不要让新的后代出现
孵化婴儿3
[设置新后代自定颜色红色-1套尺寸1]
设定后代[新后代]
如果机会小鹿>两个人的机会
[设定出生率(出生率+2)
不要让新的后代出现
孵化婴儿2
[设置新后代自定颜色红色-1套尺寸1]
设定后代[新后代]
if(chance fawn>0.02)和(chance fawn
基本上,母鹿怀孕的几率是90%。所以我想如果母鹿怀孕了,她要么有1只,2只,要么3只小鹿。有一头小鹿的几率是28%。有2只小鹿的几率是60%。有3只小鹿的几率是2%。我当前代码的问题是,如果“chance fawn”介于.3和.4之间,它就不会出现在if语句中,而它应该是拥有2只小鹿的60%中的一部分。有没有更好的方法来实现这一点,使用if语句或其他方法?谢谢大家! 好的。。这是我的图纸(不按比例):
一行数字。。在第一个if之后,您涵盖了:
+=========+---------+---------+---------+---------+--------->
0.0 0.02 0.2 0.3 0.4 0.5
在2号,如果:
+=========+---------+---------+---------+=========+=========>
0.0 0.02 0.2 0.3 0.4 0.5
如果:
+=========+=========+=========+---------+=========+=========>
0.0 0.02 0.2 0.3 0.4 0.5
因此,您的条件不包括0.3到0.4范围是合乎逻辑的。(:
另外请注意,如果您生成的随机数正好是0.02,例如..第一个if和第三个if也将丢失它。除非您使用类似于=
的内容
希望这能解释..(:好的..这是我的图纸(不是按比例):
数字行..在第一个if之后,您涵盖:
+=========+---------+---------+---------+---------+--------->
0.0 0.02 0.2 0.3 0.4 0.5
在2号,如果:
+=========+---------+---------+---------+=========+=========>
0.0 0.02 0.2 0.3 0.4 0.5
如果:
+=========+=========+=========+---------+=========+=========>
0.0 0.02 0.2 0.3 0.4 0.5
因此,您的条件不包括0.3到0.4范围是合乎逻辑的。(:
另外请注意,如果您生成的随机数正好是0.02,例如..第一个if和第三个if也将丢失它。除非您使用类似于=
的内容
希望这能解释..(:您可以使用
ifelse
做任何您想做的事情,但是您可能想看看rnd
扩展,因为它简化了这类事情。特别是,允许您在为不同选项指定不同权重的情况下进行轮盘选择。例如,请查看此设置:
extensions [ rnd ]
globals [ fawn-probs ]
to setup
ca
crt 10 [
setxy random-xcor random-ycor
]
set fawn-probs [ [ 1 0.31 ] [ 2 0.67 ] [ 3 0.02 ] ]
set offspring-list-norm []
set offspring-list-alt []
reset-ticks
end
您有一个名为“小鹿概率”的列表,它将不同的概率分为不同的出生事件。请注意,我通过将每个概率除以0.9将它们相加为1;正如p.phidot所指出的,您最初的概率并没有。现在,您可以使用列表中的rnd:weighted one
让您的海龟随机选择f的数量从fawnprobs
列表中选择适当加权的芒
to reproduce
ask turtles [
; If a spawning event occurs
if random-float 1 < 0.9 [
; Select the number of fawns to spawn based on the weighted
; probability list 'fawn-probs'
let num-to-spawn first rnd:weighted-one-of-list fawn-probs [ p -> last p ]
hatch num-to-spawn [
rt random 360
fd 1
]
]
]
end
您可以使用
ifelse
执行任何操作,但您可能需要查看rnd
扩展,因为它简化了这类操作。特别是,允许您在为不同选项指定不同权重的情况下进行轮盘选择。例如,请查看此设置:
extensions [ rnd ]
globals [ fawn-probs ]
to setup
ca
crt 10 [
setxy random-xcor random-ycor
]
set fawn-probs [ [ 1 0.31 ] [ 2 0.67 ] [ 3 0.02 ] ]
set offspring-list-norm []
set offspring-list-alt []
reset-ticks
end
您有一个名为“小鹿概率”的列表,它将不同的概率分为不同的出生事件。请注意,我通过将每个概率除以0.9将它们相加为1;正如p.phidot所指出的,您最初的概率并没有。现在,您可以使用列表中的rnd:weighted one
让您的海龟随机选择f的数量从fawnprobs
列表中选择适当加权的芒
to reproduce
ask turtles [
; If a spawning event occurs
if random-float 1 < 0.9 [
; Select the number of fawns to spawn based on the weighted
; probability list 'fawn-probs'
let num-to-spawn first rnd:weighted-one-of-list fawn-probs [ p -> last p ]
hatch num-to-spawn [
rt random 360
fd 1
]
]
]
end
谢谢!我所在部门的人指出我的概率不等于1,并对其进行了调整,使其等于1,基本上解决了问题。现在说得通了!谢谢!我所在部门的人指出我的概率不等于1,并对其进行了调整,使其等于1,基本上解决了问题。让s现在开始!谢谢你的视觉效果,因为我的概率没有增加到一个范围,这是有意义的,我会错过一个范围。我现在开始工作了!很高兴它有帮助。[谢谢你的视觉效果,因为我的概率没有增加到一个范围,这是有意义的,我会错过一个范围。我现在开始工作了!很高兴它有帮助。[: