diff --git a/robogauge/tasks/pipeline/multi_pipeline.py b/robogauge/tasks/pipeline/multi_pipeline.py index e1d4a70..b32ab0c 100644 --- a/robogauge/tasks/pipeline/multi_pipeline.py +++ b/robogauge/tasks/pipeline/multi_pipeline.py @@ -133,7 +133,7 @@ class MultiPipeline: """ Process results from all processes and aggregate them. """ multi_logger.info("📊 Aggregating Results from all runs...") - summary = {'success': {}, **self.static_info, 'summary': {}, 'quality_score': {}, 'terrain_quality_score': {}} + summary = {'success': {}, **self.static_info, 'summary': {}, 'terrain_weighted_summary': {}, 'quality_score': {}, 'terrain_quality_score': {}} finish_msg = ( f"""\n{'='*20} Run Finish Summary {'='*20}\n""" f"""{'Seed':^10}{'Base Mass':^15}{'Friction':^15}{'Status':^10}\n""" @@ -165,9 +165,14 @@ class MultiPipeline: for metric, means in value_collections.items(): summary['summary'][metric] = {} + summary['terrain_weighted_summary'][metric] = {} for mean_name, values in means.items(): v = float(np.mean(values)) summary['summary'][metric][mean_name] = f"{v:.4f} ± {float(np.std(values)):.4f}" + twv = v + if summary['terrain_name'] in SEARCH_LEVELS_TERRAINS: + twv = 0.09 * (summary['terrain_level'] - 1) + 0.19 * v + summary['terrain_weighted_summary'][metric][mean_name] = f"{twv:.4f} ± {float(np.std(values)):.4f}" weight = 1 if metric in ['ang_vel_err', 'lin_vel_err']: weight = 2 diff --git a/robogauge/tasks/pipeline/stress_pipeline.py b/robogauge/tasks/pipeline/stress_pipeline.py index 4317ecb..aac3761 100644 --- a/robogauge/tasks/pipeline/stress_pipeline.py +++ b/robogauge/tasks/pipeline/stress_pipeline.py @@ -193,7 +193,7 @@ class StressPipeline: continue summary[key] = result['results'] - for metric, means in result['results']['summary'].items(): + for metric, means in result['results']['terrain_weighted_summary'].items(): for mean_name, value_str in means.items(): value = float(value_str.split(' ± ')[0]) metric_collections[metric][mean_name].append(value)