def extendLvls(self, run, lvls): if len(lvls) == 0: # First run, add min_lvls on each dimension d = run.params.min_dim eye = np.eye(d, dtype=int) new_lvls = np.vstack([np.zeros(d, dtype=int)] + [i*eye for i in range(1, run.params.min_lvls)]) lvls.add_from_list(new_lvls) return mimc.extend_prof_lvls(lvls, self.profCalc, run.params.min_lvls) return
def extendLvls(self, run, lvls): if len(lvls) == 0: # First run, add min_lvls on each dimension d = run.params.min_dim eye = np.eye(d, dtype=int) new_lvls = np.vstack( [np.zeros(d, dtype=int)] + [i * eye for i in range(1, run.params.min_lvls)]) lvls.add_from_list(new_lvls) return mimc.extend_prof_lvls(lvls, self.profCalc, run.params.min_lvls) return
def extendLvls(self, run, lvls): if len(lvls) == 0: # First run, add min_lvls on each dimension d = run.params.min_dim + self.extrapolate_s_dims eye = np.eye(d, dtype=int) new_lvls = np.vstack( [np.zeros(d, dtype=int)] + [i * eye for i in range(1, run.params.min_lvl)]) lvls.add_from_list(new_lvls) return import time tStart = time.process_time() # estimate rates self.d_err_rates, \ s_fit_rates = misc.estimate_misc_error_rates(d=run.params.min_dim, lvls=lvls, errs=run.last_itr.calcDeltaEl(), d_err_rates=self.d_err_rates, lev2knots=lambda beta:misc.lev2knots_doubling(1+beta)) #################### extrapolate error rates if s_fit_rates is not None: valid = np.nonzero( s_fit_rates > 1e-15 )[0] # rates that are negative or close to zero are not accurate. N = len(s_fit_rates) + self.extrapolate_s_dims k_of_N = self.transNK(run.params.qoi_dim, N, run.params.qoi_problem) K = np.max(k_of_N) c = np.polyfit(np.log(1 + k_of_N[valid]), s_fit_rates[valid], 1) k_rates_stoch = c[0] * np.log(1 + np.arange(0, K + 1)) + c[1] s_err_rates = np.maximum(k_rates_stoch[k_of_N[:N]], np.min(s_fit_rates[valid])) s_err_rates[valid] = s_fit_rates[ valid] # The fitted rates should remain the same else: s_err_rates = [] tEnd_rates = time.process_time() - tStart ######### Update tStart = time.process_time() self.profCalc = setutil.MISCProfCalculator( self.d_err_rates + self.d_work_rates, s_err_rates) mimc.extend_prof_lvls(lvls, self.profCalc, run.params.min_lvl)
def extendLvls(self, run, lvls): if len(lvls) == 0: # First run, add min_lvls on each dimension d = run.params.min_dim + self.extrapolate_s_dims eye = np.eye(d, dtype=int) new_lvls = np.vstack([np.zeros(d, dtype=int)] + [i*eye for i in range(1, run.params.min_lvl)]) lvls.add_from_list(new_lvls) return import time tStart = time.clock() # estimate rates self.d_err_rates, \ s_fit_rates = misc.estimate_misc_error_rates(d=run.params.min_dim, lvls=lvls, errs=run.last_itr.calcDeltaEl(), d_err_rates=self.d_err_rates, lev2knots=lambda beta:misc.lev2knots_doubling(1+beta)) #################### extrapolate error rates if s_fit_rates is not None: valid = np.nonzero(s_fit_rates > 1e-15)[0] # rates that are negative or close to zero are not accurate. N = len(s_fit_rates) + self.extrapolate_s_dims k_of_N = self.transNK(run.params.qoi_dim, N, run.params.qoi_problem) K = np.max(k_of_N) c = np.polyfit(np.log(1+k_of_N[valid]), s_fit_rates[valid], 1) k_rates_stoch = c[0]*np.log(1+np.arange(0, K+1)) + c[1] s_err_rates = np.maximum(k_rates_stoch[k_of_N[:N]], np.min(s_fit_rates[valid])) s_err_rates[valid] = s_fit_rates[valid] # The fitted rates should remain the same else: s_err_rates = [] tEnd_rates = time.clock() - tStart ######### Update tStart = time.clock() self.profCalc = setutil.MISCProfCalculator(self.d_err_rates + self.d_work_rates, s_err_rates) mimc.extend_prof_lvls(lvls, self.profCalc, run.params.min_lvl)