Esempio n. 1
0
class Nettuno:
    '''Main Nettuno class containing EnsembleCollection and Optimizer objects'''

    def __init__(self, optimizer, init_filename=".nettuno", log_level=0):
        self.init_filename = init_filename
        self.ensemble_collection = EnsembleCollection(log_level)
        # self.optimizer = Optimizer()
        if optimizer == "steepest_descent":
            self.optimizer = SteepestDescentOptimizer(log_level)
        else:
            print "Unknown optimization algorithm: %s. Aborting." % optimizer
            sys.exit(1)
        self.read_init_file()

    def read_init_file(self):
        '''Reads configuration file'''
        self.ensemble_collection.read_init_file(self.init_filename)
        self.optimizer.read_init_file(self.init_filename)
    
    def output_init_file(self, init_file_output):
        '''Writes configuration file'''
        if init_file_output == self.init_filename:
            backup_name = self.init_filename + "_"+ datetime.datetime.today().isoformat("-")
            shutil.copyfile(self.init_filename, backup_name)

        if init_file_output == "stdout":
            print "### Nettuno settings output ###\n"
            print repr(self),
            print "###############################"
        else :
            init_file = open(self.init_filename, "w")
            init_file.write(repr(self))
            init_file.close()

    def get_ensemble_collection(self):
        '''Retrieve EnsembleCollection object'''
        return self.ensemble_collection

    def get_optimizer(self):
        '''Retrieve Optimizer object'''
        return self.optimizer

    def optimize(self):
        '''Start optimization procedure'''
        if len(self.ensemble_collection) > 0:
            self.optimizer.optimize(self.ensemble_collection)

    def __repr__(self):
        return repr(self.optimizer) + "\n" + repr(self.ensemble_collection)
Esempio n. 2
0
 def __init__(self, optimizer, init_filename=".nettuno", log_level=0):
     self.init_filename = init_filename
     self.ensemble_collection = EnsembleCollection(log_level)
     # self.optimizer = Optimizer()
     if optimizer == "steepest_descent":
         self.optimizer = SteepestDescentOptimizer(log_level)
     else:
         print "Unknown optimization algorithm: %s. Aborting." % optimizer
         sys.exit(1)
     self.read_init_file()
Esempio n. 3
0
                      help="File in which to read optimization settings.")
    parser.add_option("--init_file_output", dest="init_file_output", default="stdout",
                      help="File/stream in which to write optimization settings.")
    parser.add_option("--optimizer", dest="optimizer", type='choice', choices=['steepest_descent'], 
                      default="steepest_descent",
                      help="Which optimization algorithm to use")
    parser.add_option("--log_level", dest="log_level", default="1",
                      help="How much information to output to screen")

    (options, args) = parser.parse_args()

    # Allocate main object
    nettuno = Nettuno(options.optimizer, options.init_file, int(options.log_level))

    # Add ensembles specified from command line
    for target_ensemble_tuple in options.new_target_ensembles:
        option_dict = EnsembleCollection.option_list_to_ensemble_option_dict(target_ensemble_tuple)
        nettuno.get_ensemble_collection().add_model_ensemble(**option_dict)

    for model_ensemble_tuple in options.new_model_ensembles:
        option_dict = EnsembleCollection.option_list_to_ensemble_option_dict(model_ensemble_tuple)
        nettuno.get_ensemble_collection().add_model_ensemble(**option_dict)

    # Optionally write out settings to file or stdout
    if options.init_file_output != "stdout" or options.log_level >=1:
        nettuno.output_init_file(options.init_file_output)


    # Call optimization
    nettuno.optimize()