L2L Experiments

This is template script for setting up an experiment using an arbitrary Optimizer and Optimizee. For actual examples, see bin/l2l-fun-ce.py or bin/l2l-mnist-ce.py.

"""
This file is a typical example of a script used to run a L2L experiment. Read the comments in the file for more
explanations
"""
from l2l.utils.experiment import Experiment
from l2l.optimizees.optimizee import Optimizee, OptimizeeParameters
from l2l.optimizers.optimizer import Optimizer, OptimizerParameters


def main():
    # TODO: use  the experiment module to prepare and run later the simulation
    # define a directory to store the results
    experiment = Experiment(root_dir_path='~/home/user/L2L/results')
    # TODO when using the template: use keywords to prepare the experiment and
    #  create a dictionary for runner parameters
    # prepare_experiment returns the trajectory and all runner parameters
    runner_params = {
        "srun": "srun -n 1 -c 50",
        "exec": "python3",
        "max_workers": 32, 
    }

    traj, runner_params = experiment.prepare_experiment(name='L2L',
                                                        log_stdout=True,
                                                        runner_parameter=runner_params,
                                                        # To enable more detailed output for debugging
                                                        # set debug to True
                                                        debug=False,
                                                        # If you do not want to restart the optimizee
                                                        # and the simulation should be stopped
                                                        # set stop_run to True 
                                                        stop_run=False,
                                                        # if you want to overwrite previous results,
                                                        # set overwrite to True, 
                                                        # sotherwise specify a different root_dir_path.
                                                        overwrite= False)

    ## Innerloop simulator
    # TODO when using the template: Change the optimizee to the appropriate
    #  Optimizee class
    optimizee = Optimizee(traj)
    # TODO Create optimizee parameters
    optimizee_parameters = OptimizeeParameters()

    ## Outerloop optimizer initialization
    # TODO when using the template: Change the optimizer to the appropriate
    #  Optimizer class and use the right value for optimizee_fitness_weights.
    #  Length is the number of dimensions of fitness, and negative value
    #  implies minimization and vice versa
    optimizer_parameters = OptimizerParameters()
    optimizer = Optimizer(traj, optimizee.create_individual, (1.0,),
                          optimizer_parameters)

    experiment.run_experiment(optimizee=optimizee,
                              optimizee_parameters=optimizee_parameters,
                              optimizer=optimizer,
                              optimizer_parameters=optimizer_parameters)
    experiment.end_experiment(optimizer)


if __name__ == '__main__':
    main()