Source code for skpar.core.skpar

"""Main environment of SKPAR"""
import os
import logging
import numpy as np
from skpar.core.utils import get_logger
from skpar.core.input import parse_input
from skpar.core.evaluate import Evaluator
from skpar.core.optimise import Optimiser


[docs]class SKPAR: """The main executable object.""" def __init__(self, infile="skpar_in.yaml", verbose=True): # setup logger # ------------------------------------------------------------------- loglevel = logging.DEBUG if verbose else logging.INFO self.logger = get_logger(name="skpar", filename="skpar.log", verbosity=loglevel) # specific for printing/reporting from numpy objects np.set_printoptions(threshold=60, linewidth=79, suppress=True) # Project work directory # ------------------------------------------------------------------- self.workdir = os.getcwd() # Main part # ------------------------------------------------------------------- # parse input file self.logger.info("Parsing input file {:s}".format(infile)) taskdict, tasklist, objectives, optimisation, config = parse_input( infile, verbose=verbose ) if optimisation is not None: algo, options, parameters = optimisation parnames = [p.name for p in parameters] else: parnames = None # instantiate the evaluator machinery self.logger.info("Instantiating Evaluator") self.evaluator = Evaluator( objectives, tasklist, taskdict, parnames, config, verbose=verbose ) # instantiate the optimiser if optimisation is not None: self.do_optimisation = True self.logger.info("Instantiating Optimiser") self.optimiser = Optimiser( algo, parameters, self.evaluator, options, verbose=True ) else: self.do_optimisation = False def __call__(self, evalonly=False): if self.do_optimisation and not evalonly: # run the optimiser self.logger.info("Starting optimisation") self.optimiser() # issue final report self.optimiser.report() self.logger.info("Done.") else: # no parameters: pass None to evaluator fitness = self.evaluator(None) self.logger.debug("Global fitness: {}".format(fitness)) def __repr__(self): lines = [] return "\n".join(lines)