创建根据概率设置变量的海龟?

Creating turtles with variables set according to probabilities?

我正在尝试用例如 1000 只海龟填充模型。每只乌龟都拥有三个变量:性别、收入、教育。我想根据一些概率分配这些变量的值。例如。 -48% 的机会是女人,52% 的男人 -33% 的机会收入低于 100000,20% 的机会收入在 100000 和 200000 之间,xx% 的机会,等等。 -20% 的机会没有受过教育,7% 的机会获得博士学位,yy 机会接受 zz 教育等

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

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

我也尝试过 "rnd:weighted-n-of" 和类似的方法,但我似乎无法理解它(我已经 25 年没有做过统计了):-)

有什么想法吗?

一切顺利, 托盘

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 的区间分成几个部分,这些部分的概率等于部分的长度。所以上面的代码会让你有 50% 的机会获得 50000,30% 的机会获得 100000 和 20% 的机会获得 150000。

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