Port.py 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. from pypdevs.DEVS import CoupledDEVS
  2. from atomic import *
  3. from events import Ship
  4. import pandas as pd
  5. class Port(CoupledDEVS):
  6. def __init__(self, name, plan, layer=None):
  7. super(Port, self).__init__(name)
  8. self.planner = self.addSubModel(Planner("planner", plan, layer))
  9. self.pool = self.addSubModel(Pool("pool"))
  10. self.sail = self.addSubModel(Sailer("sail", 6.235, 4.165)) # TODO: use the values from the data
  11. self.tugs = self.addSubModel(Sailer("tugs", 4.455, 2.001))
  12. self.connectPorts(self.planner.reqs, self.pool.req_in)
  13. self.connectPorts(self.pool.ship_out_sail, self.sail.ship_in)
  14. self.connectPorts(self.pool.ship_out_tug, self.tugs.ship_in)
  15. self.connectPorts(self.sail.ship_out, self.pool.ship_in)
  16. self.connectPorts(self.tugs.ship_out, self.pool.ship_in)
  17. def select(self, imm_children):
  18. for child in imm_children:
  19. if isinstance(child, Sailer):
  20. return child
  21. for child in imm_children:
  22. if isinstance(child, Pool):
  23. return child
  24. return imm_children[0]
  25. if __name__ == '__main__':
  26. from mapper import PoABLayer
  27. data = pd.read_csv("2022.csv")
  28. data = data.sort_values('time')
  29. layer = PoABLayer()
  30. port = Port("port", data, layer)
  31. set = {}
  32. for ix, row in data.iterrows():
  33. if row["Sleepboot"] not in set:
  34. set[row["Sleepboot"]] = row["Locatie van"]
  35. for b, l in set.items():
  36. port.pool.state["ships"][b] = Ship(b, l, 0, 0, 0, 0)
  37. import geoplotlib
  38. geoplotlib.set_window_size(640, 760)
  39. geoplotlib.tiles_provider({
  40. 'url': lambda zoom, xtile, ytile: 'http://a.tile.stamen.com/terrain/%d/%d/%d.png' % (zoom, xtile, ytile),
  41. 'tiles_dir': 'mytiles',
  42. 'attribution': 'Map tiles by Stamen Design, under CC BY 3.0. Data @ OpenStreetMap contributors.'
  43. })
  44. geoplotlib.add_layer(layer)
  45. from pypdevs.simulator import Simulator
  46. sim = Simulator(port)
  47. sim.setClassicDEVS()
  48. sim.setRealTime()
  49. # sim.setVerbose(None)
  50. sim.setTerminationTime(1000)
  51. sim.simulate()
  52. geoplotlib.show()