示例#1
0
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),
    }
示例#2
0
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),
    }