def run_bumps(problem, handler, curr_thread): def abort_test(): if curr_thread is None: return False try: curr_thread.isquit() except KeyboardInterrupt: if handler is not None: handler.stop("Fitting: Terminated!!!") return True return False fitclass, options = get_fitter() steps = options.get('steps', 0) if steps == 0: pop = options.get('pop', 0) * len(problem._parameters) samples = options.get('samples', 0) steps = (samples + pop - 1) / pop if pop != 0 else samples max_step = steps + options.get('burn', 0) pars = [p.name for p in problem._parameters] #x0 = np.asarray([p.value for p in problem._parameters]) options['monitors'] = [ BumpsMonitor(handler, max_step, pars, problem.dof), ConvergenceMonitor(), ] fitdriver = fitters.FitDriver(fitclass, problem=problem, abort_test=abort_test, **options) omp_threads = int(os.environ.get('OMP_NUM_THREADS', '0')) mapper = MPMapper if omp_threads == 1 else SerialMapper fitdriver.mapper = mapper.start_mapper(problem, None) #import time; T0 = time.time() try: best, fbest = fitdriver.fit() errors = [] except Exception as exc: best, fbest = None, np.NaN errors = [str(exc), traceback.format_exc()] finally: mapper.stop_mapper(fitdriver.mapper) convergence_list = options['monitors'][-1].convergence convergence = (2 * np.asarray(convergence_list) / problem.dof if convergence_list else np.empty((0, 1), 'd')) success = best is not None try: stderr = fitdriver.stderr() if success else None except Exception as exc: errors.append(str(exc)) errors.append(traceback.format_exc()) stderr = None return { 'value': best if success else None, 'stderr': stderr, 'success': success, 'convergence': convergence, 'uncertainty': getattr(fitdriver.fitter, 'state', None), 'errors': '\n'.join(errors), }
def run_bumps(problem, handler, curr_thread): def abort_test(): if curr_thread is None: return False try: curr_thread.isquit() except KeyboardInterrupt: if handler is not None: handler.stop("Fitting: Terminated!!!") return True return False fitopts = fitters.FIT_OPTIONS[fitters.FIT_DEFAULT] fitclass = fitopts.fitclass options = fitopts.options.copy() max_step = fitopts.options.get('steps', 0) + fitopts.options.get('burn', 0) pars = [p.name for p in problem._parameters] options['monitors'] = [ BumpsMonitor(handler, max_step, pars, problem.dof), ConvergenceMonitor(), ] fitdriver = fitters.FitDriver(fitclass, problem=problem, abort_test=abort_test, **options) omp_threads = int(os.environ.get('OMP_NUM_THREADS', '0')) mapper = MPMapper if omp_threads == 1 else SerialMapper fitdriver.mapper = mapper.start_mapper(problem, None) #import time; T0 = time.time() try: best, fbest = fitdriver.fit() except: import traceback traceback.print_exc() raise finally: mapper.stop_mapper(fitdriver.mapper) convergence_list = options['monitors'][-1].convergence convergence = (2 * numpy.asarray(convergence_list) / problem.dof if convergence_list else numpy.empty( (0, 1), 'd')) return { 'value': best, 'stderr': fitdriver.stderr(), 'success': True, # better success reporting in bumps 'convergence': convergence, 'uncertainty': getattr(fitdriver.fitter, 'state', None), }