1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- import pyNetLogo
- import pprint, time
- def turtles_created(new_turtles):
- for turtle_idx in set(new_turtles.keys()) - set(turtles.keys()):
- print "Turtle %i created." % turtle_idx
- def turtles_deleted(new_turtles):
- for turtle_idx in set(turtles.keys()) - set(new_turtles.keys()):
- print "Turtle %i deleted." % turtle_idx
- link = pyNetLogo.NetLogoLink(gui=False,
- netlogo_home="C:\\Program Files\\NetLogo 6.0.3",
- netlogo_version="6")
- turtles = {}
- link.load_model('BouncingBalls.nlogo')
- link.command("setup")
- print "Ready to go..."
- print link.report("reflection:turtles")
- state = "paused"
- to_setup = False
- ignored_attributes = set(["WHO", "HEADING", "SHAPE", "LABEL", "LABEL-COLOR", "BREED", "HIDDEN?", "PEN-SIZE", "PEN-MODE"])
- def user_inputter():
- global state
- global to_setup
- while 1:
- cmd = raw_input()
- if cmd == "reset":
- to_setup = True
- elif cmd == "step":
- state = "stepping"
- elif cmd == "continuous":
- state = "continuous"
- elif cmd == "pause":
- state = "paused"
- else:
- print "invalid command %s" % cmd
- import threading
- thrd = threading.Thread(target=user_inputter)
- thrd.start()
- while 1:
- if state in ["stepping", "continuous"]:
- start_time = time.time()
- link.command("go")
- #attr_names = [attr_name for attr_name in link.report('last last reflection:breeds') if attr_name not in ["WHO", "HEADING", "SHAPE", "LABEL", "LABEL-COLOR", "BREED", "HIDDEN?", "PEN-SIZE", "PEN-MODE"]]
- #new_turtles = {int(turtle_id): {attr_name: str(link.report('[' + attr_name + '] of turtle ' + str(turtle_id))) for attr_name in attr_names} for turtle_id in link.report('[who] of turtles')}
- attr_names = link.report('last last reflection:breeds')
- all_turtle_attributes = link.report("reflection:turtles")
- new_turtles = {}
- for turtle_attributes in all_turtle_attributes:
- the_turtle = dict(zip(attr_names, turtle_attributes.getResultAsObject()))
- new_turtles[int(float(the_turtle["WHO"]))] = the_turtle
- new_turtles = {k: {ak: av for ak, av in new_turtles[k].iteritems() if ak not in ignored_attributes} for k in new_turtles.keys()}
- turtles_created(new_turtles)
- turtles_deleted(new_turtles)
- turtles = new_turtles
- pprint.pprint(new_turtles)
- if state == "stepping":
- state = "paused"
- print time.time() - start_time
- if to_setup:
- link.command("setup")
- to_setup = False
- print "Done"
|