Exemplo n.º 1
0
 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
Exemplo n.º 2
0
 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
Exemplo n.º 3
0
    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)
Exemplo n.º 4
0
    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)