使用n-of

时间:2018-04-08 15:50:25

标签: netlogo

我想要x%的海龟,称为pholders,将他们的选择从良好的1改为2。 代码如下:

ask pholders [ifelse random-float 1 <= probkauf [ask (n-of (count pholders with [choice-num = 1] * 0.01) pholders with[choice-num = 1]) [set choice-num 2]] [ifelse random-float 1 < 0.5[imitation set typeofchoice 1][beratung set typeofchoice 4]] ]

最初,100%的pholders选择了良好的1.问题如下:当我将pholders的数量增加到102到108之间的某个时间时,不再计算1%的分数,它计算10% 。 pholders数量越高,分数越大:对于200个pholders,代码计算为60%。当我将pholders的数量保持恒定且低于108但将百分比从0.01更改为0.02时,它会计算出55%或58%的值。这个问题可能来自于询问环境中的问题吗?

非常感谢你。

1 个答案:

答案 0 :(得分:1)

您的问题是您多次运行概率代码。您的代码具有以下结构:

ask pholders
 [ ifelse random-float 1 <= probkauf
    [ ask (n-of (count pholders with [choice-num = 1] * 0.01) pholders with [choice-num = 1])
      [ set choice-num 2]
    ]
   [ <do something else> ]
 ]

如果你有500个pholders,那么一个pholder会选择一个随机数500次,如果这个数字低于你的值probkauf,它会指示一些选择数为1的pholders将它改为choice-num 2. 500%1%转换的潜在场合是你有这么多被转换的原因。

根据评论中的描述,我认为你想要这个:

globals [probkauf]
turtles-own [choice-num]

to setup
  clear-all
  set probkauf 0.5
  create-turtles 1000
  [ setxy random-xcor random-ycor
    set color blue
    set choice-num 1
  ]
  reset-ticks
end

to go
  update-choices
  tick
end

to update-choices
  ifelse random-float 1 < probkauf
  [ ask turtles with [choice-num = 1]
    [ if random-float 1 < 0.01
      [ set choice-num 2
        set color red
      ]
    ]
  ]
  [ ; whatever happens with other part of probability
  ] 
end