用根据概率设置变量的乌龟?

pno*_*ack 2 netlogo

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

概率将通过csv文件或用户界面提供。稍后,我将为这些人的投票方式(基于统计数据)制定规则。但就目前而言,我只需要创建具有正确价值观的人群即可。

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

我也尝试过“ rnd:weighted-n-of”之类的方法,但是我似乎无法解决这个问题(我已经25年没有做过统计了):-)

有任何想法吗?

祝一切顺利,帕尔

Jen*_*enB 5

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

ask turtles [set sex "female"]
ask-n-of 480 turtles [set sex "male"]
Run Code Online (Sandbox Code Playgroud)

也就是说,您必须先将它们全部设置为一个类别,然后再将其设置为另一类别。但是,这仅在您具有两个类别时才有效,因为如果您要求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 ]
]
Run Code Online (Sandbox Code Playgroud)

因此,您要做的是将区间从0到1分成几部分,其概率等于该部分的长度。因此,以上代码将为您提供50000的50%机会,100000的30%机会和150000的20%机会。

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