Example #1
0
def pp_lmfit_fitting(plan, real_perf_values, method='leastsq'):
    '''least squares or differential evolution fitting with bounds'''
    real_perf_values = np.array(real_perf_values)
    load_scale_factor = calc_pp_load_scale_factor(plan)
    perf_scale_factor = calc_pp_perf_scale_factor(real_perf_values)
    scaled_plan = list(map(lambda l: load_scale_factor * l, plan))
    scaled_perfs = list(map(lambda p: perf_scale_factor * p, real_perf_values))
    args = (scaled_plan,
            np.array(scaled_perfs),
            calc_residuals,
            unpack_pp_lmfit_parms,
            pp_performance_over_time2)
    params = lmfit.Parameters()
    params.add(name='perfpot', value=0.5, min=0, max=1)
    params.add(name='straindelay', value=4.0, min=0.001, max=30)
    params.add(name='responsedelay', value=2.0, min=0.001, max=30)
    params.add(name='overflowdelay', value=15, min=0.001, max=30)
    lmfit.minimize(objective_f, params, method=method, args=args)
    model_perfs = pp_performance_over_time(scaled_plan,
                                           0.0,
                                           0.0,
                                           params['perfpot'],
                                           params['straindelay'],
                                           params['responsedelay'],
                                           params['overflowdelay'])
    model_perfs = filter_model_perfs_2_real_perfs(model_perfs, real_perf_values)
    scaled_perfs = list(filter(lambda x: x > 0.0, scaled_perfs))
    assert(len(model_perfs) == len(scaled_perfs))
    rmse = calc_rmse(scaled_perfs, model_perfs)
    return (((params['perfpot'].value,
            params['straindelay'].value,
            params['responsedelay'].value,
            params['overflowdelay'].value), rmse),
            load_scale_factor,
            perf_scale_factor)
Example #2
0
def pp_cmaes_fitting(plan, real_perf_values):
    # x0 = np.array([4.0, 2.0, 15])  # initial guess of delays
    x0 = np.array([0.5, 4.0, 2.0, 15])  # initial guess including perfpot
    load_scale_factor = calc_pp_load_scale_factor(plan)
    perf_scale_factor = calc_pp_perf_scale_factor(real_perf_values)
    scaled_plan = list(map(lambda l: load_scale_factor * l, plan))
    scaled_perfs = list(map(lambda p: perf_scale_factor * p, real_perf_values))
    args = (scaled_plan,
            scaled_perfs,
            calc_rmse,
            unpack_pp_parms_list,
            pp_performance_over_time2)
    opts = cma.CMAOptions()
    # only optimize delays
    '''bounds = [[0.001, 0.001, 0.001],
              [30.0, 30.0, 30.0]]'''
    # optimize delays and init_p aka perfpot
    bounds = [[0.0, 0.001, 0.001, 0.001],
              [1.0, 30.0, 30.0, 30.0]]
    opts.set('bounds', bounds)
    # opts.set('verb_disp', False)
    # opts.set('verbose', -9)
    opts.set('maxiter', 800)
    res = cma.fmin(objective_f, x0, 0.5, args=args, options=opts)
    print('res[0] = {}'.format(res[0]))
    print('res[1] = {}'.format(res[1]))
    return res, load_scale_factor, perf_scale_factor
Example #3
0
def pp_minimize_fitting(plan, real_perf_values, method):
    '''generic interface for optimization.minimize for PerPot fitting.
    returns the OptimizeResult object and the scale factors.'''
    # x0 = np.array([4.0, 2.0, 0.001])  # initial guess
    x0 = np.array([0.5, 4.0, 2.0, 15])  # initial guess including perfpot
    load_scale_factor = calc_pp_load_scale_factor(plan)
    perf_scale_factor = calc_pp_perf_scale_factor(real_perf_values)
    scaled_plan = list(map(lambda l: load_scale_factor * l, plan))
    scaled_perfs = list(map(lambda p: perf_scale_factor * p, real_perf_values))
    args = (scaled_plan,
            scaled_perfs,
            calc_rmse,
            unpack_pp_parms_list,
            pp_performance_over_time2)
    bounds = [(0.0, 1.0),       # perfpot
              (0.001, 30.0),    # DS Delay of Strain Rate
              (0.001, 30.0),    # DR Delay of Response Rate
              (0.001, 30.0)]    # DSO Delay of Strain Overflow Rate
    options = {}
    # options['maxiter'] = 50
    options['disp'] = False

    def iter_callback(xk):
        print("current parameter vector: {}".format(xk))

    optres = optimize.minimize(objective_f,
                               x0,
                               args,
                               method,
                               bounds=bounds,
                               options=options,
                               callback=iter_callback)
    return optres, load_scale_factor, perf_scale_factor
Example #4
0
def pp_lmfit_fitting(plan, real_perf_values, method='leastsq'):
    '''least squares or differential evolution fitting with bounds'''
    real_perf_values = np.array(real_perf_values)
    load_scale_factor = calc_pp_load_scale_factor(plan)
    perf_scale_factor = calc_pp_perf_scale_factor(real_perf_values)
    scaled_plan = list(map(lambda l: load_scale_factor * l, plan))
    scaled_perfs = list(map(lambda p: perf_scale_factor * p, real_perf_values))
    args = (scaled_plan, np.array(scaled_perfs), calc_residuals,
            unpack_pp_lmfit_parms, pp_performance_over_time2)
    params = lmfit.Parameters()
    params.add(name='perfpot', value=0.5, min=0, max=1)
    params.add(name='straindelay', value=4.0, min=0.001, max=30)
    params.add(name='responsedelay', value=2.0, min=0.001, max=30)
    params.add(name='overflowdelay', value=15, min=0.001, max=30)
    lmfit.minimize(objective_f, params, method=method, args=args)
    model_perfs = pp_performance_over_time(scaled_plan, 0.0, 0.0,
                                           params['perfpot'],
                                           params['straindelay'],
                                           params['responsedelay'],
                                           params['overflowdelay'])
    model_perfs = filter_model_perfs_2_real_perfs(model_perfs,
                                                  real_perf_values)
    scaled_perfs = list(filter(lambda x: x > 0.0, scaled_perfs))
    assert (len(model_perfs) == len(scaled_perfs))
    rmse = calc_rmse(scaled_perfs, model_perfs)
    return (((params['perfpot'].value, params['straindelay'].value,
              params['responsedelay'].value, params['overflowdelay'].value),
             rmse), load_scale_factor, perf_scale_factor)
Example #5
0
def pp_minimize_fitting(plan, real_perf_values, method):
    '''generic interface for optimization.minimize for PerPot fitting.
    returns the OptimizeResult object and the scale factors.'''
    # x0 = np.array([4.0, 2.0, 0.001])  # initial guess
    x0 = np.array([0.5, 4.0, 2.0, 15])  # initial guess including perfpot
    load_scale_factor = calc_pp_load_scale_factor(plan)
    perf_scale_factor = calc_pp_perf_scale_factor(real_perf_values)
    scaled_plan = list(map(lambda l: load_scale_factor * l, plan))
    scaled_perfs = list(map(lambda p: perf_scale_factor * p, real_perf_values))
    args = (scaled_plan, scaled_perfs, calc_rmse, unpack_pp_parms_list,
            pp_performance_over_time2)
    bounds = [
        (0.0, 1.0),  # perfpot
        (0.001, 30.0),  # DS Delay of Strain Rate
        (0.001, 30.0),  # DR Delay of Response Rate
        (0.001, 30.0)
    ]  # DSO Delay of Strain Overflow Rate
    options = {}
    # options['maxiter'] = 50
    options['disp'] = False

    def iter_callback(xk):
        print("current parameter vector: {}".format(xk))

    optres = optimize.minimize(objective_f,
                               x0,
                               args,
                               method,
                               bounds=bounds,
                               options=options,
                               callback=iter_callback)
    return optres, load_scale_factor, perf_scale_factor
Example #6
0
def pp_cmaes_fitting(plan, real_perf_values):
    # x0 = np.array([4.0, 2.0, 15])  # initial guess of delays
    x0 = np.array([0.5, 4.0, 2.0, 15])  # initial guess including perfpot
    load_scale_factor = calc_pp_load_scale_factor(plan)
    perf_scale_factor = calc_pp_perf_scale_factor(real_perf_values)
    scaled_plan = list(map(lambda l: load_scale_factor * l, plan))
    scaled_perfs = list(map(lambda p: perf_scale_factor * p, real_perf_values))
    args = (scaled_plan, scaled_perfs, calc_rmse, unpack_pp_parms_list,
            pp_performance_over_time2)
    opts = cma.CMAOptions()
    # only optimize delays
    '''bounds = [[0.001, 0.001, 0.001],
              [30.0, 30.0, 30.0]]'''
    # optimize delays and init_p aka perfpot
    bounds = [[0.0, 0.001, 0.001, 0.001], [1.0, 30.0, 30.0, 30.0]]
    opts.set('bounds', bounds)
    # opts.set('verb_disp', False)
    # opts.set('verbose', -9)
    opts.set('maxiter', 800)
    res = cma.fmin(objective_f, x0, 0.5, args=args, options=opts)
    print('res[0] = {}'.format(res[0]))
    print('res[1] = {}'.format(res[1]))
    return res, load_scale_factor, perf_scale_factor