根据概率创建具有变量的海龟?

时间:2017-05-16 18:41:26

标签: netlogo

我正试图用1000只海龟来填充模型。每只乌龟都有三个变量:性别,收入,教育。我想根据一些概率分配这些变量的值。例如。 女性占48%,男性占52% 收入低于10万的概率为-33%,收入概率为20万到20万之间的概率为20%,xx%概率等等。 没有受过教育的几率为-20%,有一定几率获得博士学位,有机会接受zz教育等。

概率将通过csv文件或用户界面提供。稍后我将制定规则,这些人如何投票(基于统计数据)。但就目前而言,我只需要创造一个具有正确价值的人口。

我尝试在某些条件下使用“ask n-of”,但随着变量和可能值的增加,它变得复杂。

我也试过“rnd:weighted-n-of”和类似的,但我似乎无法理解它(我25年没有统计数据): - )

有什么想法吗?

一切顺利, 帕列

1 个答案:

答案 0 :(得分:4)

ask-n-of是正确的方法,您不需要加权随机化。如果你知道总会有1000只海龟而你想要48%是男性,那么你需要的代码如下:

ask turtles [set sex "female"]
ask-n-of 480 turtles [set sex "male"]

也就是说,您必须先将它们全部设置为一个类别,然后将其设置为另一个类别。然而,这仅在你有两个类别时有效,因为如果你要求50%为男性,然后要求50%为女性,则每个ask-n-of是从整个人群中随机抽取的。你可能想要的是这样的:

ask turtles
[ let choose-income random-float 1
  if choose-income < 0.5 [ set income 50000 ]
  if choose-income >= 0.5 and choose-income < 0.8 [ set income 100000 ]
  if choose-income >= 0.8 [ set income 150000 ]
]

所以你正在做的是将从0到1的间隔分成几个部分,其概率等于部分的长度。所以上面的代码可以让你获得50000的几率50%,30万的几率达到100000,有机会达到15万的20%。

请注意,如果我在模型中对此进行编码,我实际上会使用if-elseifelse-value。但是,这需要嵌套的if / else块,这很难阅读。