59 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			59 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| """ ----------------------------------------- Methods for summarizing the experiments ------------------------------------------ """
 | |
| import os
 | |
| from pathlib import Path
 | |
| 
 | |
| from visualization import line_chart_fixpoints, bar_chart_fixpoints
 | |
| 
 | |
| 
 | |
| def summary_fixpoint_experiment(runs, population_size, epochs, experiments, net_learning_rate, directory,
 | |
|                                 summary_pre_title):
 | |
|     avg_fixpoint_counters = {
 | |
|         "avg_identity_func": 0,
 | |
|         "avg_divergent": 0,
 | |
|         "avg_fix_zero": 0,
 | |
|         "avg_fix_weak": 0,
 | |
|         "avg_fix_sec": 0,
 | |
|         "avg_other_func": 0
 | |
|     }
 | |
| 
 | |
|     for i in range(len(experiments)):
 | |
|         fixpoint_counters = experiments[i].fixpoint_counters
 | |
| 
 | |
|         avg_fixpoint_counters["avg_identity_func"] += fixpoint_counters["identity_func"]
 | |
|         avg_fixpoint_counters["avg_divergent"] += fixpoint_counters["divergent"]
 | |
|         avg_fixpoint_counters["avg_fix_zero"] += fixpoint_counters["fix_zero"]
 | |
|         avg_fixpoint_counters["avg_fix_weak"] += fixpoint_counters["fix_weak"]
 | |
|         avg_fixpoint_counters["avg_fix_sec"] += fixpoint_counters["fix_sec"]
 | |
|         avg_fixpoint_counters["avg_other_func"] += fixpoint_counters["other_func"]
 | |
| 
 | |
|     # Calculating the average for each fixpoint
 | |
|     avg_fixpoint_counters.update((x, y / len(experiments)) for x, y in avg_fixpoint_counters.items())
 | |
| 
 | |
|     # Checking where the data is coming from to have a relevant title in the plot.
 | |
|     if summary_pre_title not in ["ST", "SA", "soup", "mixed", "robustness"]:
 | |
|         summary_pre_title = ""
 | |
| 
 | |
|     # Plotting the summary
 | |
|     source_checker = "summary"
 | |
|     exp_details = f"{summary_pre_title}: {runs} runs & {epochs} epochs each."
 | |
|     bar_chart_fixpoints(avg_fixpoint_counters, population_size, directory, net_learning_rate, exp_details,
 | |
|                         source_checker)
 | |
| 
 | |
| 
 | |
| def summary_fixpoint_percentage(runs, epochs, fixpoints_percentages, ST_steps, SA_steps, directory_name,
 | |
|                                 population_size):
 | |
|     fixpoints_percentages = [round(fixpoints_percentages[i] / runs, 1) for i in range(len(fixpoints_percentages))]
 | |
| 
 | |
|     # Plotting summary
 | |
|     if "soup" in directory_name:
 | |
|         line_chart_fixpoints(fixpoints_percentages, epochs / ST_steps, ST_steps, SA_steps, directory_name,
 | |
|                              population_size)
 | |
|     else:
 | |
|         line_chart_fixpoints(fixpoints_percentages, epochs, ST_steps, SA_steps, directory_name, population_size)
 | |
| 
 | |
| 
 | |
| """ --------------------------------------------------- Miscellaneous ---------------------------------------------------------- """
 | |
| def check_folder(experiment_folder: str):
 | |
|     exp_path = Path('experiments') / experiment_folder
 | |
|     exp_path.mkdir(parents=True, exist_ok=True)
 | 
