If statement 在Netlogo中使用嵌套的if或ifelse指定概率

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

我在使用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 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现在开始!谢谢你的视觉效果,因为我的概率没有增加到一个范围,这是有意义的,我会错过一个范围。我现在开始工作了!很高兴它有帮助。[谢谢你的视觉效果,因为我的概率没有增加到一个范围,这是有意义的,我会错过一个范围。我现在开始工作了!很高兴它有帮助。[: