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)
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()
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()