2016-04-04 3 views
1

Ich bin sehr neu in der Codierung und ich habe ein bisschen Ärger. Ich versuche, eine Alterverteilung im netlogo zu bilden, die auf Wahrscheinlichkeiten basiert, jedes Alter bei setup zu haben. Ich errichtete eine Zufallszahlvariable, die ich verwende, um in der Wahrscheinlichkeit zu helfen. Alterswahrscheinlichkeiten sind wie folgt:Erstellen einer Altersverteilung in Netlogo

Tage | Wahrscheinlichkeit

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

Ich brauche auch 2 pDogs Alter 2920

Hier zu sein ist das, was ich bisher habe, aber ich bin nicht sicher, ob es ein besserer Weg, dies zu tun.

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]] 

Ich versuche auch einen anderen Weg, um das Gleiche zu erreichen. Zuerst frage ich 2619 pDogs alt sein = 0. ich einen Code zu machen versuche, das sagt:

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

... aber es ist nicht working.I schließlich wollen etwas, das ich kann sagen, dass, wenn das Alter ist nicht einer der zuvor definierten Werte 0, 365, 730 usw. gilt das nächste Jahr/Alter.

+0

Also, was ist die Frage? Sind Sie auf der Suche nach einem Feedback zur Darstellung dieser Distribution, basierend auf dem, was Sie jetzt haben? – mattsap

+0

Nun, mein aktueller Code gibt nicht die Zahlen, nach denen ich suche. Die Zahlen sind nah, variieren jedoch pro Setup um ~ 50. Ich suche nach einer präziseren Möglichkeit, eine Altersverteilung zu haben. Zum Beispiel: Ich brauche 2619 pDogs mit Alter = 0. –

Antwort

0

Siehe das Lotterie-Beispiel.

Oder Payette der RND-Erweiterung verwenden: https://github.com/NetLogo/Rnd-Extension#readme

Aber wenn Sie genaue Zahlen wollen, wie Sie am Ende vorschlagen, müssen Sie einen anderen Ansatz. Zum Beispiel:

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

Ihr Code-Auszug funktionierte gut, wenn sie auf mein Modell @Alan angewendet wurde. Ich habe noch eine Frage darüber, wie man eine Todeskonstante beim Setup anwendet. Hier ist, was ich gerade habe, aber die Todeskonstante funktioniert nicht so wie ich gehofft habe. Tut mir leid, ich bin nicht sehr gut mit Formatierung. 'Lassen _numbers [2619 1262 779 446 243 104 38 9 2] lassen _ages [0 365 730 1095 1460 1825 2190 2555 2920] lassen _deaths [476 303 358 392 466 636 750 750 1000] (foreach _ages _numbers _deaths [ lassen _age? 1 lassen _death? 3 create-pDogs? 2 [set Alter _age] fragen pDogs [ Satz Tod _death]]) ' –

+0

@WilliamBrittainIrick Sie wiederholt alle pDogs fragen ihren Tod zu setzen. Initiiere stattdessen alles auf einmal: '[set age _age set death _death]'. Dies gilt nur für die neu erstellten pDogs. – Alan