Example #1
0
    def run(self, configuration):
        """
        Run the optimization and place output files in the directory specified by the configuration.
        @param configuration: The optimization configuration object
        @type configuration: Configuration
        @return: The run history
        @rtype: History
        """

        # Parse the configuration
        self._configuration = configuration
        self._directory = self._configuration.get_directory()
        if not path.exists(self._directory):
            makedirs(self._directory)

        self._logger = Logger(self._directory + '/' + configuration.get_log_file(),
                              configuration.get_log_level(), configuration.get_console_log_level())
        self._logger.info('Athena optimization run started')

        # Load the model
        if self._configuration.get_model() == 'ZDT1':
            model = ZDT1()
            self._logger.info('Model ZDT1 selected')

        elif self._configuration.get_model() == 'ZDT2':
            model = ZDT2()
            self._logger.info('Model ZDT2 selected')

        elif self._configuration.get_model() == 'ZDT3':
            model = ZDT3()
            self._logger.info('Model ZDT3 selected')

        elif self._configuration.get_model() == 'ZDT4':
            model = ZDT4()
            self._logger.info('Model ZDT4 selected')

        elif self._configuration.get_model() == 'ZDT6':
            model = ZDT6()
            self._logger.info('Model ZDT6 selected')

        elif self._configuration.get_model() == 'DTLZ1':
            model = DTLZ1()
            self._logger.info('Model DTLZ1 selected')

        elif self._configuration.get_model() == 'DTLZ2':
            model = DTLZ2()
            self._logger.info('Model DTLZ2 selected')

        elif self._configuration.get_model() == 'DTLZ3':
            model = DTLZ3()
            self._logger.info('Model DTLZ3 selected')

        elif self._configuration.get_model() == 'TNK':
            model = TNK()
            self._logger.info('Model TNK selected')

        elif self._configuration.get_model() == 'PACKING':
            model = PACKING()
            self._logger.info('Model PACKING selected')

        elif self._configuration.get_model() == 'POLONI':
            model = POLONI()
            self._logger.info('Model POLONI selected')

        else:
            self._logger.error('Unable to determine model ' + self._configuration.get_model())
            raise AthenaException('Unable to determine model ' + self._configuration.get_model())

        # Load the algorithm
        if self._configuration.get_algorithm() == 'SERIAL':
            algorithm = Serial()
            self._logger.info('Algorithm SERIAL selected')

        elif self._configuration.get_algorithm() == 'ISLANDS':
            algorithm = Islands()
            self._logger.info('Algorithm ISLANDS selected')

        elif self._configuration.get_algorithm() == 'SPHERES':
            algorithm = Spheres()
            self._logger.info('Algorithm SPHERES selected')

        else:
            self._logger.error('Unable to determine algorithm ' + self._configuration.get_algorithm())
            raise AthenaException('Unable to determine algorithm ' + self._configuration.get_algorithm())

        # Run the optimization
        self._logger.debug('Setting the logger to the algorithm')
        algorithm.set_logger(self._logger)

        self._logger.debug('Setting the model to the algorithm')
        algorithm.set_model(model)

        self._logger.info('Starting the algorithm')
        algorithm.parse_configuration(configuration)
        history, convergence, solution = algorithm.run()

        json_convergence = json.dumps(convergence, default=encode_convergence_metrics, sort_keys=True, indent=2)

        if configuration.get_write_history():
            json_history = history.to_json()
            with open(self._directory + '/generations.out', 'w+') as data_file:
                data_file.write(json_history)

        if configuration.get_write_solution():
            json_solution = json.dumps(solution, default=encode_individual, sort_keys=True, indent=2)
            with open(self._directory + '/solution.out', 'w+') as soln_file:
                soln_file.write(json_solution)

        with open(self._directory + '/convergence.out', 'w+') as convergence_file:
            convergence_file.write(json_convergence)

        with open(self._directory + '/configuration.config', 'w+') as config_file:
            config_file.write(configuration.to_json())

        self._logger.info('Optimization finished')

        return history