def stackio(self, cmd: 'txt', name: 'txt' = ''): ''' Calculate a set of metrics within specified sectors. ''' print('BLAAA', cmd, name) if cmd == 'LIST': if not self.sectors: return True, 'No registered sectors available' return True, 'Registered sectors:', str.join(', ', self.sectors) elif cmd == 'ADDSECTOR': if name == 'ALL': for areaname in areafilter.basic_shapes.keys(): self.stackio('ADDSECTOR', areaname) # Add new sector to list. elif name in self.sectors: return False, 'Sector %s already registered.' % name elif areafilter.hasArea(name): if not self.sectors: self.fconv = open( 'output/' + stack.get_scenname() + 'convergence.csv', 'w') self.fsd = open( 'output/' + stack.get_scenname() + 'density.csv', 'w') self.feff = open( 'output/' + stack.get_scenname() + 'efficiency.csv', 'w') # Create the plot if this is the first sector plotter.plot('metrics.metrics.sectorsd', dt=2.5, title='Static Density', xlabel='Time', ylabel='Aircraft count', fig=1) plotter.plot('metrics.metrics.sectorconv', dt=2.5, title='Summed Pairwise Convergence', xlabel='Time', ylabel='Convergence', fig=2) self.effplot = plotter.Plot('metrics.metrics.sectoreff', title='Route Efficiency', plot_type='boxplot', xlabel='Sector', ylabel='Efficiency', fig=3) # Add new area to the sector list, and add an initial inside count of traffic self.sectors.append(name) self.acinside.append(SectorData()) plotter.legend(self.sectors, 1) return True, 'Added %s to sector list.' % name else: return False, "No area found with name '%s', create it first with one of the shape commands" % name else: # Remove area from sector list if name in self.sectors: idx = self.sectors.index(name) self.sectors.pop(idx) return True, 'Removed %s from sector list.' % name return False, "No sector registered with name '%s'." % name
def makeLogfileName(logname, prefix: str = ''): timestamp = datetime.now().strftime('%Y%m%d_%H-%M-%S') if prefix == '' or prefix.lower() == stack.get_scenname().lower(): fname = "%s_%s_%s.log" % (logname, stack.get_scenname(), timestamp) else: fname = "%s_%s_%s_%s.log" % (logname, stack.get_scenname(), prefix, timestamp) return settings.log_path + '/' + fname
def reset(self): self.current_states = dict() self.max_speeds = dict() self.prevconfpairs = 0 self.prevlospairs = 0 self.timestamps = dict() self.actions_DDPG = [[] for i in range(3)] if len(stack.get_scenname()) > 0: bs.sim.DDPGsave(stack.get_scenname()) # clear the values from the previous episode bs.traf.ap.clearMaxSpeeds() bs.traf.ap.clearCrossings()
def initialize(self, *args): if not args: return True, "SSDSEQ is currently " + ("ON" if self.active else "OFF") self.active = True if args[0] == True else False if self.active == True and len(args) == 3: #If the txt file is already created, it should be deleted before a new simulation #stack.stack('ECHO The current time stamp is {time_stamp} seconds'.format(time_stamp = self.time_stamp)) stack.stack('IC {scenario_name}'.format(scenario_name=args[1])) #stack.stack('SYN SUPER {no_ac}'.format(no_ac = args[1])) #stack.stack('RESO SEQSSD') self.save_SSD = True if args[2] == True else False timestamp = datetime.now().strftime('%Y%m%d_%H-%M-%S') self.filename = "ASASDATA_%s_%s.log" % (stack.get_scenname(), timestamp) self.path_to_file = "output_smallscn/" + self.filename #A new scenario was uploaded so the time stamp has to be set to 0 self.time_stamp = 0 return True, 'My plugin received an o%s flag.' % ('n' if self.active else 'ff')
def send_siminfo(self): t = time.time() dt = np.maximum(t - self.prevtime, 0.00001) # avoid divide by 0 speed = (self.samplecount - self.prevcount) / dt * bs.sim.simdt manager.sendEvent(SimInfoEvent(speed, bs.sim.simdt, bs.sim.simt, bs.sim.simtclock, bs.traf.ntraf, bs.sim.state, stack.get_scenname())) self.prevtime = t self.prevcount = self.samplecount
def send_siminfo(self): t = time.time() dt = np.maximum(t - self.prevtime, 0.00001) # avoid divide by 0 speed = (self.samplecount - self.prevcount) / dt * bs.sim.simdt bs.sim.send_stream(b'SIMINFO', (speed, bs.sim.simdt, bs.sim.simt, bs.sim.simtclock, bs.traf.ntraf, bs.sim.state, stack.get_scenname())) self.prevtime = t self.prevcount = self.samplecount
def send_siminfo(self): t = time.time() dt = np.maximum(t - self.prevtime, 0.00001) # avoid divide by 0 speed = (self.samplecount - self.prevcount) / dt * bs.sim.simdt bs.sim.send_stream(b'SIMINFO', (speed, bs.sim.simdt, bs.sim.simt, str(bs.sim.utc.replace(microsecond=0)), bs.traf.ntraf, bs.sim.state, stack.get_scenname())) self.prevtime = t self.prevcount = self.samplecount
def initialize_asasdata(self): #ASAS data filename and path to file self.filename = "ASASDATA_%s.log" % (stack.get_scenname()) self.path_to_file = "output/" + self.filename self.data_collection_count = 0 #If the txt file is already created, it should be deleted before a new simulation if os.path.isfile(self.path_to_file): os.remove(self.path_to_file) file = open(self.path_to_file, "a") file.write(header2) file.close() #filename and path to file to store relevancy of metrics (only used in SRS1) self.filenametorelevancy = "RELEVANCY_%s.log" % (stack.get_scenname()) self.path_to_relevancy = "output/" + self.filenametorelevancy if os.path.isfile(self.path_to_relevancy): os.remove(self.path_to_relevancy) self.count_relevancy = 0
def send_siminfo(self): t = time.time() dt = np.maximum(t - self.prevtime, 0.00001) # avoid divide by 0 speed = (self.samplecount - self.prevcount) / dt * bs.sim.simdt manager.sendEvent(SimInfoEvent(speed, bs.sim.simdt, bs.sim.simt, bs.sim.simtclock, bs.traf.ntraf, bs.sim.state, stack.get_scenname())) self.prevtime = t self.prevcount = self.samplecount
def makeLogfileName(logname): timestamp = datetime.now().strftime('%Y%m%d_%H-%M-%S') fname = "%s_%s_%s.log" % (logname, stack.get_scenname(), timestamp) return settings.log_path + '/' + fname
def makeLogfileName(logname): timestamp = datetime.now().strftime('%Y%m%d_%H-%M-%S') fname = "%s_%s_%s.log" % (logname, stack.get_scenname(), timestamp) return settings.log_path + '/' + fname
def callRL(self): bs.sim.DDPGaction(stack.get_scenname(), self.nodes_RL)