コード例 #1
0
ファイル: simulation.py プロジェクト: thobson88/bluesky
 def batch(self, filename):
     # The contents of the scenario file are meant as a batch list: send to server and clear stack
     result = stack.openfile(filename)
     if result:
         scentime, scencmd = stack.get_scendata()
         self.send_event(b'BATCH', (scentime, scencmd))
         self.reset()
     return result
コード例 #2
0
ファイル: simulation.py プロジェクト: rjdverbeek/bluesky
 def batch(self, filename):
     # The contents of the scenario file are meant as a batch list: send to server and clear stack
     result = stack.openfile(filename)
     if result:
         scentime, scencmd = stack.get_scendata()
         self.send_event(b'BATCH', (scentime, scencmd))
         self.reset()
     return result
コード例 #3
0
ファイル: simulation.py プロジェクト: fybazs/bluesky
 def batch(self, filename):
     # The contents of the scenario file are meant as a batch list: send to manager and clear stack
     result = stack.openfile(filename)
     scentime, scencmd = stack.get_scendata()
     if result is True:
         manager.sendEvent(BatchEvent(scentime, scencmd))
     self.reset()
     return result
コード例 #4
0
ファイル: thesis.py プロジェクト: BVonk/bluesky
def preupdate():
    # print('settings {}'.format(CONF.conf))
    # First run the environment must be initialized to get the first state ready before model inference can take place.
    if sim.simt < CONF.update_interval*1.5:
        new_state = env.init()


    elif traf.ntraf!=0:
        # Construct new state
        state, reward, new_state, done = env.step()
        agent.update_cum_reward(reward)
        agent.update_replay_memory(state, reward, done, new_state)

        # if agent.replay_memory.num_experiences > agent.batch_size:
        # print('memory_size', agent.replay_memory.num_experiences)
        if agent.replay_memory.num_experiences > 1000 or agent.replay_memory.num_experiences == agent.memory_size:
            # agent.train_no_batch()
            agent.train()
        # agent.write_summaries(reward)
        # Now get observation without the deleted aircraft for acting. Otherwise an error occurs because the deleted
        # aircraft no longer exists in the stack.
        new_state = env.get_observation()

    collision = env.check_collision()

    if traf.ntraf!=0 and not collision:
        action = agent.act(new_state)
        env.action_command(action)

    # if collision:
    #     agent.cum_reward = -200

    # Check if all aircraft in simulation landed and there are no more scenario commands left
    if (env.get_done() and len(stack.get_scendata()[0])==0) or collision  or env.step_num>200:
        print(env.get_done(), len(stack.get_scendata()[0]), collision, env.step_num>170)
        # Reset environment states and agent states
        if env.episode % CONF.test_freq==0:
            agent.save_models(env.episode)
        env.reset()
        agent.reset()
コード例 #5
0
ファイル: simulation.py プロジェクト: thobson88/bluesky
        def step(self):
            ''' Perform a simulation timestep. '''
            # When running at a fixed rate, or when in hold/init,
            # increment system time with sysdt and calculate remainder to sleep.
            if not self.ffmode or not self.state == bs.OP:
                remainder = self.syst - time.time()
                if remainder > MINSLEEP:
                    time.sleep(remainder)

            elif self.ffstop is not None and self.simt >= self.ffstop:
                if self.benchdt > 0.0:
                    bs.scr.echo('Benchmark complete: %d samples in %.3f seconds.' % \
                                (bs.scr.samplecount, time.time() - self.bencht))
                    self.benchdt = -1.0
                    self.pause()
                else:
                    self.op()

            if self.state == bs.OP:
                # Plugins pre-update
                plugin.preupdate(self.simt)

            # Update screen logic
            bs.scr.update()

            # Simulation starts as soon as there is traffic, or pending commands
            if self.state == bs.INIT:
                if self.syst < 0.0:
                    self.syst = time.time()

                if bs.traf.ntraf > 0 or len(stack.get_scendata()[0]) > 0:
                    self.op()
                    if self.benchdt > 0.0:
                        self.fastforward(self.benchdt)
                        self.bencht = time.time()

            if self.state == bs.OP:
                stack.checkfile(self.simt)

            # Always update stack
            stack.process()

            if self.state == bs.OP:
                bs.traf.update(self.simt, self.simdt)

                # Update plugins
                plugin.update(self.simt)

                # Update Plotter
                plotter.update(self.simt)

                # Update loggers
                datalog.postupdate()

                # Update sim and UTC time for the next timestep
                self.simt += self.simdt
                self.utc += datetime.timedelta(seconds=self.simdt)

            # Always update syst
            self.syst += self.sysdt

            # Inform main of our state change
            if not self.state == self.prevstate:
                self.sendState()
                self.prevstate = self.state
コード例 #6
0
ファイル: simulation.py プロジェクト: rjdverbeek/bluesky
        def step(self):
            ''' Perform a simulation timestep. '''
            # When running at a fixed rate, or when in hold/init,
            # increment system time with sysdt and calculate remainder to sleep.
            if not self.ffmode or not self.state == bs.OP:
                remainder = self.syst - time.time()
                if remainder > MINSLEEP:
                    time.sleep(remainder)

            elif self.ffstop is not None and self.simt >= self.ffstop:
                if self.benchdt > 0.0:
                    bs.scr.echo('Benchmark complete: %d samples in %.3f seconds.' % \
                                (bs.scr.samplecount, time.time() - self.bencht))
                    self.benchdt = -1.0
                    self.pause()
                else:
                    self.op()

            if self.state == bs.OP:
                # Plugins pre-update
                plugin.preupdate(self.simt)

            # Update screen logic
            bs.scr.update()

            # Simulation starts as soon as there is traffic, or pending commands
            if self.state == bs.INIT:
                if self.syst < 0.0:
                    self.syst = time.time()

                if bs.traf.ntraf > 0 or len(stack.get_scendata()[0]) > 0:
                    self.op()
                    if self.benchdt > 0.0:
                        self.fastforward(self.benchdt)
                        self.bencht = time.time()

            if self.state == bs.OP:
                stack.checkfile(self.simt)

            # Always update stack
            stack.process()

            if self.state == bs.OP:

                bs.traf.update(self.simt, self.simdt)

                # Update plugins
                plugin.update(self.simt)

                # Update Plotter
                plotter.update(self.simt)

                # Update loggers
                datalog.postupdate()

                # Update sim and UTC time for the next timestep
                self.simt += self.simdt
                self.utc += datetime.timedelta(seconds=self.simdt)

            # Always update syst
            self.syst += self.sysdt

            # Inform main of our state change
            if not self.state == self.prevstate:
                self.sendState()
                self.prevstate = self.state
コード例 #7
0
ファイル: simulation.py プロジェクト: fybazs/bluesky
    def doWork(self):
        self.syst = int(time.time() * 1000.0)

        # Send list of stack functions available in this sim to gui at start
        stackdict = {
            cmd: val[0][len(cmd) + 1:]
            for cmd, val in stack.cmddict.items()
        }
        manager.sendEvent(StackInitEvent(stackdict))

        while self.running:
            if self.state == Simulation.op:
                # Plugins pre-update
                plugin.preupdate(self.simt)
                # Datalog pre-update (communicate current sim time to loggers)
                datalog.preupdate(self.simt)

            # Update screen logic
            bs.scr.update()

            # Simulation starts as soon as there is traffic, or pending commands
            if self.state == Simulation.init:
                if bs.traf.ntraf > 0 or len(stack.get_scendata()[0]) > 0:
                    self.start()
                    if self.benchdt > 0.0:
                        self.fastforward(self.benchdt)
                        self.bencht = time.time()

            if self.state == Simulation.op:
                stack.checkfile(self.simt)

            # Always update stack
            stack.process()

            if self.state == Simulation.op:

                bs.traf.update(self.simt, self.simdt)

                # Update metrics
                # self.metric.update()

                # Update plugins
                plugin.update(self.simt)

                # Update loggers
                datalog.postupdate()

                # Update time for the next timestep
                self.simt += self.simdt

            # Update clock
            self.simtclock = (self.deltclock + self.simt) % onedayinsec

            # Process Qt events
            manager.processEvents()

            # When running at a fixed rate, or when in hold/init, increment
            # system time with sysdt and calculate remainder to sleep
            if not self.ffmode or not self.state == Simulation.op:
                self.syst += self.sysdt
                remainder = self.syst - int(1000.0 * time.time())

                if remainder > 0:
                    QThread.msleep(remainder)

            # If running in fast-time with an end-time that has passed, go back to
            # real-time running.
            elif self.ffstop is not None and self.simt >= self.ffstop:
                # If this fast-time section was part of a benchmark, send
                # message with benchmark results
                if self.benchdt > 0.0:
                    bs.scr.echo(
                        'Benchmark complete: %d samples in %.3f seconds.' %
                        (bs.scr.samplecount, time.time() - self.bencht))
                    self.benchdt = -1.0
                    self.pause()
                else:
                    self.start()

            # Inform main of our state change
            if not self.state == self.prevstate:
                self.sendState()
                self.prevstate = self.state