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
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)))