Exemplo n.º 1
0
def run_atan_sg(inputspace, gridType, level, numGridPoints,
                boundaryLevel, fullGrid, refinement, out, plot):
    testSetting = AtanPeridynamicExample(inputspace)
    if refinement is not None:
        testSetting.run_adaptive_sparse_grid(Grid.stringToGridType(gridType),
                                             level, numGridPoints, refinement,
                                             boundaryLevel, fullGrid, out,
                                             plot)
    else:
        testSetting.run_regular_sparse_grid(Grid.stringToGridType(gridType),
                                            level, numGridPoints, boundaryLevel,
                                            fullGrid, out, plot)
Exemplo n.º 2
0
def run_sobol_g_function_sg(fullModel, gridType, level, numGridPoints,
                            fullGrid, refinement, out):
    testSetting = SobolGFunctionSudret2008(fullModel)
    sobol_indices, N = testSetting.run_sparse_grids(
        Grid.stringToGridType(gridType), level, numGridPoints, fullGrid,
        refinement, out)
    return testSetting.sobol_indices, sobol_indices, N
Exemplo n.º 3
0
    def run_adaptive_sparse_grid(self, gridTypeStr, level, maxGridSize, refinement,
                                 boundaryLevel=None, out=False,
                                 plot=False):

        np.random.seed(1234567)
        gridType = Grid.stringToGridType(gridTypeStr)

        results = {'surrogate': 'asg',
                   'grid_type': gridType,
                   'is_full': False,
                   'time_steps': self.toi,
                   'setting': self.setting,
                   'num_dims': self.numDims,
                   'qoi': self.qoi,
                   'max_grid_size': maxGridSize,
                   'boundary_level': boundaryLevel,
                   'refinement': refinement,
                   'refinement_technique': 'refinement',
                   'adaptPoints': 5,
                   'adaptRate': 0.05,
                   'adpatEps': 1e-10,
                   'results': {}}

        # ----------------------------------------------------------
        # define the learner
        # ----------------------------------------------------------
        builder = UQBuilder()
        self.defineUQSetting(builder)
        uqSetting = builder.andGetResult()
        uqManager = TestEnvironmentSG().buildSetting(self.params,
                                                     level=level,
                                                     gridType=gridType,
                                                     deg=20,
                                                     maxGridSize=maxGridSize,
                                                     isFull=False,
                                                     adaptive=refinement,
                                                     adaptPoints=5,
#                                                      adaptRate=0.05,
                                                     epsilon=1e-10,
                                                     boundaryLevel=boundaryLevel,
                                                     qoi=self.qoi,
                                                     toi=self.toi,
                                                     saveAfterN=-1,  # dont save at all
                                                     uqSetting=uqSetting,
                                                     uqSettingRef=self.uqSettings['ref'])
        # ----------------------------------------------
        # first run
        oldSize = uqManager.uqSetting.getSize()
        while uqManager.hasMoreSamples():
            uqManager.runNextSamples()

            # ----------------------------------------------------------
            # specify ASGC estimator
            analysis = ASGCAnalysisBuilder().withUQManager(uqManager)\
                                            .withAnalyticEstimationStrategy()\
                                            .andGetResult()
            analysis.setVerbose(False)
            # ----------------------------------------------------------
            label = "asg_l%i_%s" % (level, gridTypeStr)
            self.runAnalysis(analysis, uqManager, "sg", label,
                             out, plot, results)

            # update results
            results["max_grid_size"] = uqManager.getGrid().getSize()

            if out:
                # store results
                filename = os.path.join(self.pathResults,
                                        "%s-qoi%s_%s_d%i_%s_Nmax%i_r%s_N%i.pkl" % (self.radix, self.qoi,
                                                                                   "asg",
                                                                                   self.numDims,
                                                                                   gridTypeStr,
                                                                                   maxGridSize,
                                                                                   refinement,
                                                                                   uqManager.getGrid().getSize()))
                fd = open(filename, "w")
                pkl.dump(results, fd)
                fd.close()
Exemplo n.º 4
0
    def run_regular_sparse_grid(self, gridTypeStr,
                                level,
                                maxGridSize,
                                boundaryLevel=1,
                                isFull=False,
                                out=False,
                                plot=False):
        np.random.seed(1234567)
        gridType = Grid.stringToGridType(gridTypeStr)

        results = {'surrogate': 'sg',
                   'grid_type': gridType,
                   'is_full': False,
                   'time_steps': self.toi,
                   'setting': self.setting,
                   'num_dims': self.numDims,
                   'qoi': self.qoi,
                   'max_grid_size': maxGridSize,
                   'boundary_level': boundaryLevel,
                   'refinement': None,
                   'results': {}}

        while True:
            print("-" * 80)
            print("level = %i, grid type = %s" % (level, gridTypeStr))
            builder = UQBuilder()
            self.defineUQSetting(builder)
            uqSetting = builder.andGetResult()
            uqManager = TestEnvironmentSG().buildSetting(self.params,
                                                         level=level,
                                                         gridType=gridType,
                                                         deg=20,
                                                         maxGridSize=maxGridSize,
                                                         isFull=isFull,
                                                         boundaryLevel=boundaryLevel,
                                                         qoi=self.qoi,
                                                         toi=self.toi,
                                                         saveAfterN=-1,
                                                         uqSetting=uqSetting,
                                                         uqSettingRef=self.uqSettings['ref'])

            if uqManager.sampler.getSize() > maxGridSize:
                print("DONE: %i > %i" % (uqManager.sampler.getSize(), maxGridSize))
                break

            # ----------------------------------------------
            oldSize = uqManager.uqSetting.getSize()
            while uqManager.hasMoreSamples():
                uqManager.runNextSamples()
            # ----------------------------------------------------------
            # specify ASGC estimator
            analysis = ASGCAnalysisBuilder().withUQManager(uqManager)\
                                            .withAnalyticEstimationStrategy()\
                                            .andGetResult()
            analysis.setVerbose(False)
            # ----------------------------------------------------------
            label = "sg_l%i_%s" % (level, gridTypeStr)
            self.runAnalysis(analysis, uqManager, "sg", label,
                             out, plot, results)

            level += 1

        # update results
        results["max_grid_size"] = uqManager.getGrid().getSize()

        if out:
            # store results
            filename = os.path.join(self.pathResults,
                                    "%s-qoi%s_%s_d%i_%s_Nmax%i_r%i_N%i.pkl" % (self.radix, self.qoi,
                                                                               "sg" if not isFull else "fg",
                                                                               self.numDims,
                                                                               gridTypeStr,
                                                                               maxGridSize,
                                                                               False,
                                                                               uqManager.getGrid().getSize()))
            fd = open(filename, "w")
            pkl.dump(results, fd)
            fd.close()
Exemplo n.º 5
0
def run_ishigami_sg(gridType, level, numGridPoints, fullGrid, refinement, out):
    testSetting = IshigamiSudret2008()
    sobol_indices, N = testSetting.run_sparse_grids(
        Grid.stringToGridType(gridType), level, numGridPoints, fullGrid,
        refinement, out)
    return testSetting.sobol_indices, sobol_indices, N