Visualising experiments¶
This tutorial introduces the built-in plotting utilities defined in plots.py. These functions help you inspect and compare the results of a BLADE experiment.
We assume you have already executed an experiment and saved the results using an ExperimentLogger. Replace results/simple_exp with your own experiment folder.
[1]:
from iohblade.loggers import ExperimentLogger
from iohblade.plots import plot_convergence, plot_experiment_CEG, plot_code_evolution_graphs, plot_boxplot_fitness, plot_boxplot_fitness_hue, fitness_table, plot_token_usage
logger = ExperimentLogger('results/simple_exp')
---------------------------------------------------------------------------
FileNotFoundError Traceback (most recent call last)
Cell In[1], line 3
1 from iohblade.loggers import ExperimentLogger
2 from iohblade.plots import plot_convergence, plot_experiment_CEG, plot_code_evolution_graphs, plot_boxplot_fitness, plot_boxplot_fitness_hue, fitness_table, plot_token_usage
----> 3 logger = ExperimentLogger('results/simple_exp')
File ~/work/BLADE/BLADE/iohblade/loggers/base.py:61, in ExperimentLogger.__init__(self, name, read)
59 self._write_progress()
60 else:
---> 61 self.dirname = self.create_log_dir(name)
62 self.dirs.append(self.dirname)
63 self.progress = {
64 "start_time": datetime.now().isoformat(),
65 "end_time": None,
66 "current": 0,
67 "total": 0,
68 }
File ~/work/BLADE/BLADE/iohblade/loggers/base.py:90, in ExperimentLogger.create_log_dir(self, name)
88 tempi += 1
89 dirname = f"{name}-{tempi}"
---> 90 os.mkdir(dirname)
91 return dirname
FileNotFoundError: [Errno 2] No such file or directory: 'results/simple_exp'
Convergence plot¶
plot_convergence shows the average best fitness over time for all methods on each problem.
[2]:
plot_convergence(logger)
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
Cell In[2], line 1
----> 1 plot_convergence(logger)
NameError: name 'logger' is not defined
Code evolution graphs (CEG)¶
plot_experiment_CEG visualises how code evolves during optimisation. Each run is plotted separately.
[3]:
plot_experiment_CEG(logger)
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
Cell In[3], line 1
----> 1 plot_experiment_CEG(logger)
NameError: name 'logger' is not defined
plot_code_evolution_graphs is the lower level function used by plot_experiment_CEG. It plots a single run with various complexity metrics.
[4]:
run_data = logger.get_data().query('method_name == "LLaMEA" and seed == 1')
plot_code_evolution_graphs(run_data, save=False)
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
Cell In[4], line 1
----> 1 run_data = logger.get_data().query('method_name == "LLaMEA" and seed == 1')
2 plot_code_evolution_graphs(run_data, save=False)
NameError: name 'logger' is not defined
Boxplots¶
Use plot_boxplot_fitness or plot_boxplot_fitness_hue to compare final fitness across methods or problems.
[5]:
plot_boxplot_fitness(logger)
plot_boxplot_fitness_hue(logger)
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
Cell In[5], line 1
----> 1 plot_boxplot_fitness(logger)
2 plot_boxplot_fitness_hue(logger)
NameError: name 'logger' is not defined
Fitness table¶
fitness_table creates a LaTeX table summarising mean and standard deviation per method/problem.
[6]:
fitness_table(logger)
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
Cell In[6], line 1
----> 1 fitness_table(logger)
NameError: name 'logger' is not defined
Token usage¶
plot_token_usage shows how many API tokens were consumed by each method.
[7]:
plot_token_usage(logger)
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
Cell In[7], line 1
----> 1 plot_token_usage(logger)
NameError: name 'logger' is not defined