Пример #1
0
    def run_mc(self, N, minExp=4, maxExp=12, out=False, plot=False):
        # ----------------------------------------------------------
        # dicretize the stochastic space with Monte Carlo
        # ----------------------------------------------------------
        np.random.seed(1234567)

        print("-" * 60)
        print("Latin Hypercube Sampling")
        print("-" * 60)
        mcSampler, mcUQSetting = TestEnvironmentMC().buildSetting(
            self.params, self.simulation, 2**maxExp)
        # ----------------------------------------------------------
        # Monte Carlo Estimator
        # ----------------------------------------------------------
        samples = mcSampler.nextSamples(N)
        mcUQSetting.runSamples(samples)
        samples = mcUQSetting.getResults()[0]

        stats = {}
        for iN in np.logspace(minExp, maxExp, maxExp - minExp + 1, base=2):
            # split the results into chunk of Ni samples
            num_samples = int(iN)
            isamples = {0: dict(list(samples.items())[:num_samples])}
            analysis = MCAnalysis(self.params, isamples)
            analysis.setVerbose(False)

            stats[iN] = {
                "num_model_evaluations": num_samples,
                "mean_estimated": analysis.mean(),
                "var_estimated": analysis.var()
            }

            print("-" * 60)
            print("#samples = %i" % (num_samples, ))
            print("E[x] = %g ~ %g (err=%g)" %
                  (self.E_ana[0], analysis.mean()[0],
                   np.abs(self.E_ana[0] - analysis.mean()[0])))
            print("V[x] = %g ~ %g (err=%g)" %
                  (self.V_ana[0], analysis.var()[0],
                   np.abs(self.V_ana[0] - analysis.var()[0])))

        if out:
            # store results
            filename = os.path.join(
                self.pathResults, "%s_mc_d%i_%s_N%i.pkl" %
                (self.radix, self.numDims, "latinHypercube", N))
            fd = open(filename, "w")
            pkl.dump(
                {
                    'surrogate': 'mc',
                    'num_dims': self.numDims,
                    'sampling_strategy': "latin_hypercube",
                    'num_model_evaluations': N,
                    'mean_analytic': self.E_ana[0],
                    'var_analytic': self.V_ana[0],
                    'results': stats
                }, fd)
            fd.close()
Пример #2
0
    def run_mc(self, N=10, out=False, plot=False):
        # ----------------------------------------------------------
        # dicretize the stochastic space with Monte Carlo
        # ----------------------------------------------------------
        np.random.seed(1234567)

        print("-" * 60)
        print("Latin Hypercube Sampling")
        print("-" * 60)
        mcSampler = MCSampler.withLatinHypercubeSampleGenerator(self.params, N)
        mcUQSettingBuilder = UQBuilder()
        self.defineUQSetting(mcUQSettingBuilder)
        mcUQSetting = mcUQSettingBuilder.andGetResult()

        # ----------------------------------------------------------
        # Monte Carlo Estimator
        # ----------------------------------------------------------
        samples = mcSampler.nextSamples(N)
        mcUQSetting.runSamples(samples)
        samples = mcUQSetting.getTimeDependentResults(self.toi, qoi=self.qoi)

        # split the results into chunk of Ni samples
        num_samples = len(next(iter(samples.values())))
        analysis = MCAnalysis(self.params, samples)
        analysis.setVerbose(False)

        stats = {"num_model_evaluations": num_samples,
                 "mean_estimated": analysis.mean(),
                 "var_estimated": analysis.var()}

        if out:
            # store results
            filename = os.path.join(self.pathResults,
                                    "%s-qoi%s_%s.pkl" % (self.radix,
                                                         self.qoi,
                                                         "mc"))
            fd = open(filename, "w")
            pkl.dump({'surrogate': 'mc',
                      'num_dims': self.numDims,
                      'sampling_strategy': "latin_hypercube",
                      'num_model_evaluations': num_samples,
                      'time_steps': self.toi,
                      'setting': self.setting,
                      'qoi': self.qoi,
                      'results': stats},
                     fd)
            fd.close()