2016-04-04 4 views
1

Я очень новичок в кодировании, и у меня проблемы. Я пытаюсь установить распределение по возрасту в netlogo исходя из вероятности того, что каждый возраст при настройке. Я установил переменную случайного числа, которую я использую, чтобы помочь в вероятности. Возрастные вероятности следующие:Создание распределения возраста в 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]]] 

... но не working.I в конечном счете, хотят чего-то, что я могу сказать, что если возраст ни один из ранее определенных 0, 365, 730 и т. д. не применяют значение следующего года/возраста.

+0

Итак, в чем вопрос? Вы просто ищете отзывы о том, как представлять этот дистрибутив, исходя из того, что у вас есть сейчас? – mattsap

+0

Ну, мой текущий код не дает числа, которые я ищу. Цифры близки, но меняются для каждой установки на ~ 50. Я ищу более точный способ распределения возраста. Например: мне нужно 2619 pDogs с возрастом = 0. –

ответ

0

См. Пример лотереи.

Или использовать расширение 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 
+0

Ваш отрывок кода работал хорошо, когда применяется к моей модели @Alan. У меня есть еще один вопрос о том, как привязываться к константе смерти при настройке. Вот что я имею прямо сейчас, но постоянная смерти не работает, как я надеялся. Извините, я не очень хорошо разбираюсь в форматировании. 'Пусть _numbers [2619 1262 779 446 243 104 38 9 2] пусть _ages [0 365 730 1095 1460 1825 2190 2555 2920] пусть _deaths [476 303 358 392 466 636 750 750 1000] (Foreach _ages _numbers _deaths [ пусть _age? 1 пусть _death? 3 Create-pDogs? 2 [установить возраст _age] спросить pDogs [ набор смерти _death]]) ' –

+0

@WilliamBrittainIrick Вы неоднократно задать все pDogs сбросить их смерти. Вместо этого инициализируйте все за один раз: '[set age _age set death _death]'. Это применимо только к вновь созданным pDogs. – Alan

Смежные вопросы