Source code for self_driving_lab_demo.utils.search

import numpy as np
from sklearn.model_selection import ParameterGrid










[docs] def ax_bayesian_optimization(sdl, num_iter, objective_name="frechet"): # Import ax only when needed to avoid top-level import issues from ax.service.managed_loop import optimize def evaluation_function(parameters): results = sdl.evaluate( dict(R=parameters["R"], G=parameters["G"], B=parameters["B"]) ) # Ax doesn't like the nested dictionary nor a flattened dict with string data keep_keys = {"frechet", "rmse", "mae"} drop_keys = list(set(results.keys()) - keep_keys) [results.pop(key, None) for key in drop_keys] return results bounds = dict(R=sdl.bounds["R"], G=sdl.bounds["G"], B=sdl.bounds["B"]) parameters = [dict(name=nm, type="range", bounds=bnd) for nm, bnd in bounds.items()] best_parameters, values, experiment, model = optimize( parameters=parameters, evaluation_function=evaluation_function, objective_name=objective_name, minimize=True, total_trials=num_iter, ) return best_parameters, values, experiment, model
# trial_df = experiment.get_trials_data_frame() # ax_inputs = trial_df.values.tolist() # bayesian_mae = [ # [trial.objective_mean for trial in exp.trials.values()] # for exp in experiment # ] # return ax_inputs # grid_mae = [[g["mae"] for g in gd] for gd in grid_data] # random_mae = [[r["mae"] for r in rd] for rd in random_data] # bayesian_mae = [ # [trial.objective_mean for trial in exp.trials.values()] # for exp in experiment # ] # = np.minimum.accumulate(np.mean(mae, axis=1), axis=1) # std_mae = np.std(mae, axis=1)