def calc_trial_fitness_df(trial): ''' Calculate the trial fitness df by aggregating from the collected session_data_dict (session_fitness_df's). Adds a consistency dimension to fitness vector. ''' trial_fitness_data = {} try: all_session_fitness_df = pd.concat(list(trial.session_data_dict.values())) except ValueError as e: logger.exception('Sessions failed, no data to analyze. Check stack trace above') for aeb in util.get_df_aeb_list(all_session_fitness_df): aeb_fitness_df = all_session_fitness_df.loc[:, aeb] aeb_fitness_sr = aeb_fitness_df.mean() consistency = calc_consistency(aeb_fitness_df) aeb_fitness_sr = aeb_fitness_sr.append(pd.Series({'consistency': consistency})) aeb_fitness_df = pd.DataFrame([aeb_fitness_sr], index=[trial.index]) aeb_fitness_df = aeb_fitness_df.reindex(FITNESS_COLS, axis=1) trial_fitness_data[aeb] = aeb_fitness_df # form multi_index df, then take mean across all bodies trial_fitness_df = pd.concat(trial_fitness_data, axis=1) mean_fitness_df = calc_mean_fitness(trial_fitness_df) trial_fitness_df = mean_fitness_df trial_fitness = calc_fitness(mean_fitness_df) logger.info(f'Trial mean fitness: {trial_fitness}\n{mean_fitness_df}') return trial_fitness_df
def save_session_df(session_data, prepath, info_space): '''Save session_df, and if is in eval mode, modify it and save with append''' filepath = f'{prepath}_session_df.csv' if util.get_lab_mode() in ('enjoy', 'eval'): ckpt = util.find_ckpt(info_space.eval_model_prepath) epi = int(re.search('epi(\d+)', ckpt)[1]) totalt = int(re.search('totalt(\d+)', ckpt)[1]) session_df = pd.concat(session_data, axis=1) eval_session_df = pd.DataFrame(data=[session_df.mean()]) for aeb in util.get_df_aeb_list(eval_session_df): eval_session_df.loc[:, aeb + ('epi', )] = epi eval_session_df.loc[:, aeb + ('total_t', )] = totalt # if eval, save with append mode header = not os.path.exists(filepath) with open(filepath, 'a') as f: eval_session_df.to_csv(f, header=header) else: session_df = pd.concat(session_data, axis=1) util.write(session_df, filepath)
def calc_trial_fitness_df(trial): '''Calculate the trial fitness df''' trial_fitness_data = {} all_session_fitness_df = pd.concat( list(trial.session_fitness_df_dict.values())) for aeb in util.get_df_aeb_list(all_session_fitness_df): aeb_df = all_session_fitness_df.loc[:, aeb] aeb_fitness_sr = aeb_df.mean() consistency = calc_consistency(aeb_df.values) aeb_fitness_sr = aeb_fitness_sr.append( pd.Series({'consistency': consistency})) aeb_fitness_df = pd.DataFrame([aeb_fitness_sr], index=[trial.index]) trial_fitness_data[aeb] = aeb_fitness_df trial_fitness_df = pd.concat(trial_fitness_data, axis=1) mean_fitness_df = trial_fitness_df.mean(axis=1, level=3) # mean across all bodies trial_fitness_df = mean_fitness_df # agg for trial level trial_fitness = calc_fitness(mean_fitness_df) logger.info(f'Trial mean fitness: {trial_fitness}\n{mean_fitness_df}') return trial_fitness_df
def save_session_df(session_data, filepath, info_space): '''Save session_df, and if is in eval mode, modify it and save with append''' if util.in_eval_lab_modes(): ckpt = util.find_ckpt(info_space.eval_model_prepath) epi = int(re.search('epi(\d+)', ckpt)[1]) totalt = int(re.search('totalt(\d+)', ckpt)[1]) session_df = pd.concat(session_data, axis=1) mean_sr = session_df.mean() mean_sr.name = totalt # set index to prevent all being the same eval_session_df = pd.DataFrame(data=[mean_sr]) # set sr name too, to total_t for aeb in util.get_df_aeb_list(eval_session_df): eval_session_df.loc[:, aeb + ('epi',)] = epi eval_session_df.loc[:, aeb + ('total_t',)] = totalt # if eval, save with append mode header = not os.path.exists(filepath) with open(filepath, 'a') as f: eval_session_df.to_csv(f, header=header) else: session_df = pd.concat(session_data, axis=1) util.write(session_df, filepath)
def calc_trial_fitness_df(trial): ''' Calculate the trial fitness df by aggregating from the collected session_data_dict (session_fitness_df's). Adds a consistency dimension to fitness vector. ''' trial_fitness_data = {} all_session_fitness_df = pd.concat(list(trial.session_data_dict.values())) for aeb in util.get_df_aeb_list(all_session_fitness_df): aeb_df = all_session_fitness_df.loc[:, aeb] aeb_fitness_sr = aeb_df.mean() consistency = calc_consistency(aeb_df.values) aeb_fitness_sr = aeb_fitness_sr.append( pd.Series({'consistency': consistency})) aeb_fitness_df = pd.DataFrame([aeb_fitness_sr], index=[trial.index]) trial_fitness_data[aeb] = aeb_fitness_df # form multiindex df, then take mean across all bodies trial_fitness_df = pd.concat(trial_fitness_data, axis=1) mean_fitness_df = trial_fitness_df.mean(axis=1, level=3) trial_fitness_df = mean_fitness_df trial_fitness = calc_fitness(mean_fitness_df) logger.info(f'Trial mean fitness: {trial_fitness}\n{mean_fitness_df}') return trial_fitness_df
def calc_trial_fitness_df(trial): ''' Calculate the trial fitness df by aggregating from the collected session_data_dict (session_fitness_df's). Adds a consistency dimension to fitness vector. ''' trial_fitness_data = {} all_session_fitness_df = pd.concat(list(trial.session_data_dict.values())) for aeb in util.get_df_aeb_list(all_session_fitness_df): aeb_fitness_df = all_session_fitness_df.loc[:, aeb] aeb_fitness_sr = aeb_fitness_df.mean() consistency = calc_consistency(aeb_fitness_df) aeb_fitness_sr = aeb_fitness_sr.append(pd.Series({'consistency': consistency})) aeb_fitness_df = pd.DataFrame([aeb_fitness_sr], index=[trial.index]) aeb_fitness_df = aeb_fitness_df.reindex(FITNESS_COLS, axis=1) trial_fitness_data[aeb] = aeb_fitness_df # form multiindex df, then take mean across all bodies trial_fitness_df = pd.concat(trial_fitness_data, axis=1) mean_fitness_df = trial_fitness_df.mean(axis=1, level=3) trial_fitness_df = mean_fitness_df trial_fitness = calc_fitness(mean_fitness_df) logger.info(f'Trial mean fitness: {trial_fitness}\n{mean_fitness_df}') return trial_fitness_df