【问题标题】:Making an age distribution in netlogo在 netlogo 中进行年龄分布
【发布时间】:2016-04-04 18:16:41
【问题描述】:

我对编码很陌生,但遇到了一些麻烦。我正在尝试根据设置时每个年龄的概率在 netlogo 中进行年龄分布。我设置了一个随机数变量来帮助计算概率。年龄概率如下:

天 |概率

  _0  ____0.476
 _365__    0.229
 _730    __0.142
_1095   _0.081
_1460    _0.044
_1825    _0.019
_2190   _0.007
_2555  _0.002

我还需要 2 个 pDogs 才能达到 2920 岁

这是我目前所拥有的,但我不确定是否有更好的方法来做到这一点。

    pDogs-own[family age health random-number]

    ask pDogs [
    set random-number random 1000.5]

    ask pDogs
    [if random-number <= 476 [set age 0]]
    ask pDogs
    [if ((random-number > 476) and (random-number <= 705)) [set age 365]] 
    ask pDogs
    [if ((random-number > 705) and (random-number <= 847)) [set age 730]]
    ask pDogs
    [if ((random-number > 847) and (random-number <= 928)) [set age 1095]]
    ask pDogs
    [if ((random-number > 928) and (random-number <= 972)) [set age 1460]]
    ask pDogs
    [if ((random-number > 972) and (random-number <= 991)) [set age 1825]]
    ask pDogs
    [if ((random-number > 991) and (random-number <= 998)) [set age 2190]]
    ask pDogs
    [if ((random-number > 998) and (random-number <= 1000)) [set age 2555]]

我也在尝试另一种方法来完成同样的事情。首先,我要求 2619 pDogs 的年龄 = 0。我正在尝试编写一个代码:

    ask n-of 2619 pDogs [
    set age 0]
    ask pDogs [
    if age != 0 [
    ask n-of 1262 pDogs [
    set age 365]]] 

...但它不起作用。我最终想要一些我可以说的东西,如果年龄不是先前定义的 0、365、730 等之一,则应用下一年/年龄值。

【问题讨论】:

  • 那么问题是什么?您是否只是在寻找有关如何根据您现在拥有的信息来表示此分布的反馈?
  • 好吧,我当前的代码没有给出我正在寻找的数字。数字很​​接近,但每个设置的差异约为 50。我正在寻找一种更精确的方法来进行年龄分布。例如:我需要 2619 个年龄为 0 的 pDogs。

标签: distribution netlogo


【解决方案1】:

参见彩票示例。

或者使用 Payette 的 rnd 扩展: https://github.com/NetLogo/Rnd-Extension#readme

但是,如果您想要确切的数字,正如您最后建议的那样,您将需要一种不同的方法。例如:

turtles-own [age]

to setup
  let _numbers [5 10 15 10 5]
  let _ages [0 1 2 3 4]
  (foreach _ages _numbers [
    let _age ?1
    crt ?2 [set age _age]
  ])
end

【讨论】:

  • 您的代码摘录在应用于我的模型@Alan 时效果很好。我还有一个关于在设置时添加死亡常数的问题。这就是我现在所拥有的,但死亡常数并没有像我希望的那样工作。对不起,我不太擅长格式化。 let _numbers [ 2619 1262 779 446 243 104 38 9 2] let _ages [0 365 730 1095 1460 1825 2190 2555 2920] let _deaths [476 303 358 392 466 636 750 750 1000] (foreach _ages _numbers _deaths [ let _age ?1 let _death ?3 create-pDogs ?2 [set age _age] ask pDogs [ set death _death]])
  • @WilliamBrittainIrick 你反复要求所有 pDogs 重置他们的死亡。相反,一次性初始化所有内容:[set age _age set death _death]。这仅适用于新创建的 pDogs。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-31
  • 2020-10-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多