Пример #1
0
 def get_ground_truth(self):
     self.ground_truth_path = self.local_models_path / 'safety_ground_truth.npz'
     load = self.ground_truth_path.exists()
     if load:
         try:
             ground_truth = SafetyTruth.load(self.ground_truth_path,
                                             self.env)
         except ValueError:
             load = False
     if not load:
         ground_truth = SafetyTruth(self.env)
         ground_truth.compute()
         ground_truth.save(self.ground_truth_path)
     return ground_truth
Пример #2
0
    def __init__(self, output_directory, name, envname, aname, envparams,
                 aparams, n_episodes, glie_start, safety_parameters_update_end,
                 reset_in_safe_state, metrics_sampling_frequency,
                 n_episodes_in_measurement, plot_every, seed):
        self.env = ENV_CONSTRUCTOR[envname](**envparams)
        self.agent = AGENT_CONSTRUCTOR[aname](env=self.env, **aparams)
        safety_truth_path = SAFETY_TRUTH_PATH[envname]
        if envname in SAFETY_TRUTH_FROM_VIBLY:
            self.safety_truth = SafetyTruth(self.env)
            self.safety_truth.from_vibly_file(safety_truth_path)
        else:
            self.safety_truth = SafetyTruth.load(safety_truth_path, self.env)

        self.n_episodes = n_episodes
        self.glie_start = glie_start if not isinstance(glie_start, float) else \
            int(glie_start * self.n_episodes)
        if safety_parameters_update_end is not None:
            if isinstance(safety_parameters_update_end, float):
                update_end = int(safety_parameters_update_end * n_episodes)
                self.safety_parameters_update_end = update_end
            else:
                self.safety_parameters_update_end = safety_parameters_update_end
        else:
            self.safety_parameters_update_end = n_episodes
        self.reset_in_safe_state = reset_in_safe_state
        self.metrics_sampling_frequency = metrics_sampling_frequency
        self.n_episodes_in_measurement = n_episodes_in_measurement
        self.plot_every = plot_every
        self.agent_has_safety_model = aname in HAS_SAFETY_MODEL

        self.METRICS_NAMES = BenchmarkSingleSimulation.METRICS_BASE_NAMES
        if self.agent_has_safety_model:
            self.METRICS_NAMES += [
                BenchmarkSingleSimulation.Q_C_Q_V_MNAME,
                BenchmarkSingleSimulation.Q_V_Q_C_MNAME
            ]

        plotters = {}
        if envname in PLOTTABLE_Q:
            if self.agent_has_safety_model:
                plotters.update({
                    'Q-Values_Safety':
                    QValueAndSafetyPlotter(
                        self.agent,
                        self.safety_truth,
                        # ensure_in_dataset=True
                    )
                })
            else:
                plotters.update({
                    'Q-Values':
                    QValuePlotter(
                        self.agent,
                        self.safety_truth,
                        write_values=False,
                        plot_samples=True,
                    )
                })

        super(BenchmarkSingleSimulation,
              self).__init__(output_directory, name, plotters)
        self.set_seed(value=seed)

        self.metrics_path = self.output_directory / 'metrics'
        self.metrics = AgentMetrics(*self.METRICS_NAMES)

        simparams = {
            'output_directory': output_directory,
            'name': name,
            'n_episodes': n_episodes,
            'glie_start': glie_start,
            'safety_parameters_update_end': safety_parameters_update_end,
            'reset_in_safe_state': reset_in_safe_state,
            'metrics_sampling_frequency': metrics_sampling_frequency,
            'n_episodes_in_measurement': n_episodes_in_measurement,
            'plot_every': plot_every,
        }
        logger.info(config_msg(f"Setting up simulation {name}"))
        logger.info(config_msg(f"ENVIRONMENT: {envname}"))
        logger.info(config_msg(str(envparams)))
        logger.info(config_msg(f"AGENT: {aname}"))
        logger.info(config_msg(str(aparams)))
        logger.info(config_msg("SIMULATION:"))
        logger.info(config_msg(str(simparams)))