2016-04-20 5 views
1

Dies ist mein erster Versuch, etwas „ernst“ in Netlogo zu tun, und ich versuche, die folgenden zu tun:Verwaltung Zeiträume in NetLogo

nach einem gewissen tick, mein Schildkröten Kauf Sachen beginnen und sie füllen eine Liste der Preise, die sie bezahlt haben (die Liste ist individuell). Ich möchte, dass sie aufhören zu kaufen, wenn der Mittelwert der Liste für eine bestimmte Anzahl von Ticks unter einem bestimmten Schwellenwert bleibt.

Meine Frage ist: Wie kann ich zählen Ticks in einem solchen Fall? Diese

ist, was ich dachte:

ifelse mean exePriceList < exePrice [set exitList lput who exitList]      
[set exitList []] 

if length exitList > exitTime [set buy false set sell false set pass  
true] 

Im Grunde das ist, was ich tue: Ich füge ein Element (I der Länge der Liste nur Pflege) auf eine andere Liste Ausgangslisten (die aufgerufen wird, nicht eine globale Variable aber es ist eine Schildkröten-eigene, und ich leere die Liste, wenn der Mittelwert höher als die Schwelle wird. Wenn die Liste länger als die gewünschte Anzahl von Ticks ist, stoppt die Schildkröte.

Es funktioniert nicht, da die exitList nicht ordnungsgemäß ausgefüllt ist. Was kann ich tun? Gibt es eine klügere Möglichkeit, die Zeit zu verwalten? Dies ist der Code des gesamten Verfahrens:

to bull-strategy 
ask turtles with [bull = true] [ 
set color green 

if ticks >= HFAentranceTime + startChecking [ 


    if mean exePriceList > exePrice + (exePrice * stopLossBull) [set buy false 
    set sell false set pass true] 


ifelse mean exePriceList < exePrice [set exitList lput who exitList] [set 
exitList []] 
    if length exitList > exitTime [set buy false set sell false set pass 
true] 

] 
] 
end 
+0

Sie verwenden eine Liste als Turtle-Variable zum Überprüfen der Uhrzeit. Aber warum? Möchten Sie die Liste später für etwas anderes verwenden? Denn sonst könntest du einfach eine normale Counter-Variable verwenden, wie ifselse ... [set turtle-exit-time (turtle-exit-time + 1)] [set turtle-exit-time 0] – Tyr

+0

Danke Tyr. Ich benutze jetzt eine Variable anstelle einer Liste, aber mein Problem bleibt: Die Variable wächst unglaublich schnell, es ist wie wenn alle Schildkröten auf der gleichen Variablen zählen und schreiben, deren Wert für alle Schildkröten gleich ist. – sato

+0

exePriceList ist schildkrötenspezifisch und für jede Schildkröte anders (sie kaufen nicht unbedingt bei jedem Tick und sie kaufen zu unterschiedlichen Preisen). Daher sollte der Mittelwert der Liste für jede Schildkröte unterschiedlich sein, und sie sollten ihren eigenen Zähler einzeln erhöhen. – sato

Antwort

0

Ich glaube, ich könnte die Lösung für mein Problem posten, wenn jemand sich in der gleichen Situation befindet. Es war nur ein (ziemlich grundlegender) Fehler im Code, wahrscheinlich aufgrund von Unerfahrenheit (und/oder mangelnder Aufmerksamkeit), ich bemerkte es erst am folgenden Tag: Es gab ein "fragen" im Übermaß. Ich forderte die Schildkröten auf, einer Prozedur zu folgen, und dann wiederholte ich versehentlich den "ask" -Befehl. Also im Grunde wurden die Schildkröten aufgefordert, sich gegenseitig Dinge zu fragen ... also der abnorme Anstieg der Theke. Danke für Ihre Hilfe.