Beispiel #1
0
    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
Beispiel #2
0
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
Beispiel #3
0
 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()
Beispiel #4
0
    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')
Beispiel #5
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
Beispiel #6
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
     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
Beispiel #7
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
     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
Beispiel #8
0
 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
Beispiel #9
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
Beispiel #10
0
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
Beispiel #11
0
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
Beispiel #12
0
 def callRL(self):
     bs.sim.DDPGaction(stack.get_scenname(), self.nodes_RL)