示例#1
0
 def genMod(self, individual):
     """Generate (GA) model from random vector (0-1) using model bounds."""
     model = np.asarray(individual) * (self.lUB - self.lLB) + self.lLB
     if self.logpar:
         return pg.exp(model)
     else:
         return model
示例#2
0
文件: mrs.py 项目: dongxu-cug/gimli
 def genMod(self, individual):
     """ generate (GA) model from random vector (0-1) using model bounds """
     model = np.asarray(individual) * (self.lUB - self.lLB) + self.lLB
     if self.logpar:
         return pg.exp(model)
     else:
         return model
示例#3
0
文件: mrsves.py 项目: wk1984/gimli
 def genMods( individual ):
     """ generate MRS and VES models from unit vector """
     model = pg.asvector( individual ) * ( self.lUB - self.lLB ) + self.lLB
     if self.logpar:
         model = pg.exp( model )
     
     modMRS = model(0,nlay*3-1)
     modVES = pg.cat(model(0,nlay-1),model(nlay*3-1,nlay*4-1))
     return modMRS, modVES
示例#4
0
        def genMods(individual):
            """generate MRS and VES models from unit vector"""
            model = individual * (self.lUB - self.lLB) + self.lLB
            #            model = pg.asvector(individual) * (self.lUB - self.lLB) + self.lLB
            if self.logpar:
                model = pg.exp(model)

            modMRS = model(0, nlay * 3 - 1)
            modVES = pg.cat(model(0, nlay - 1),
                            model(nlay * 3 - 1, nlay * 4 - 1))
            return modMRS, modVES
示例#5
0
文件: ert.py 项目: gimli-org/gimli
    def invert(self, data, values=None, verbose=0, **kwargs):
        """
        Invert the given data.

        A parametric mesh for the inversion will be created if non is given
        before.

        Parameters
        ----------
        """
        self.fop.setVerbose(verbose)
        self.inv.setVerbose(verbose)
        self.inv.setMaxIter(kwargs.pop('maxiter', 10))
        self.inv.setLambda(kwargs.pop('lambd', 10))

        if self.paraMesh is None:
            self.paraMesh = createParaMesh2dGrid(data.sensorPositions(),
                                                 **kwargs)
            self.setParaMesh(self.paraMesh)
            if verbose:
                print(self.paraMesh)
#                pg.show(self.paraMesh)

        err = data('err')
        rhoa = data('rhoa')

        startModel = pg.RVector(self.fop.regionManager().parameterCount(),
                                pg.median(rhoa))

        self.fop.setData(data)
        self.inv.setForwardOperator(self.fop)

        # check err here
        self.inv.setData(rhoa)
        self.inv.setError(err)
        self.inv.setModel(startModel)

        model = self.inv.run()

        if values is not None:

            if isinstance(values, pg.RVector):
                values = [values]
            elif isinstance(values, np.ndarray):
                if values.ndim == 1:
                    values = [values]

            allModel = pg.RMatrix(len(values), len(model))

            self.inv.setVerbose(False)
            for i in range(len(values)):
                print(i)
                tic = time.time()
                self.inv.setModel(model)
                self.inv.setReferenceModel(model)
                dData = pg.abs(values[i] / rhoa)

                relModel = self.inv.invSubStep(pg.log(dData))
                allModel[i] = model * pg.exp(relModel)
                print(i, "/", len(values), " : ", time.time()-tic,
                      "s min/max: ", min(allModel[i]), max(allModel[i]))

            return allModel
        return model
示例#6
0
    def invert(self, data, values=None, verbose=0, **kwargs):
        """
        Invert the given data.

        A parametric mesh for the inversion will be created if non is given
        before.

        Parameters
        ----------
        """
        self.fop.setVerbose(verbose)
        self.inv.setVerbose(verbose)
        self.inv.setMaxIter(kwargs.pop('maxiter', 10))
        self.inv.setLambda(kwargs.pop('lambd', 10))

        if self.paraMesh is None:
            self.paraMesh = createParaMesh2dGrid(data.sensorPositions(),
                                                 **kwargs)
            self.setParaMesh(self.paraMesh)
            if verbose:
                print(self.paraMesh)


#                pg.show(self.paraMesh)

        err = data('err')
        rhoa = data('rhoa')

        startModel = pg.RVector(self.fop.regionManager().parameterCount(),
                                pg.median(rhoa))

        self.fop.setData(data)
        self.inv.setForwardOperator(self.fop)

        # check err here
        self.inv.setData(rhoa)
        self.inv.setError(err)
        self.inv.setModel(startModel)

        model = self.inv.run()

        if values is not None:

            if isinstance(values, pg.RVector):
                values = [values]
            elif isinstance(values, np.ndarray):
                if values.ndim == 1:
                    values = [values]

            allModel = pg.RMatrix(len(values), len(model))

            self.inv.setVerbose(False)
            for i in range(len(values)):
                print(i)
                tic = time.time()
                self.inv.setModel(model)
                self.inv.setReferenceModel(model)
                dData = pg.abs(values[i] / rhoa)

                relModel = self.inv.invSubStep(pg.log(dData))
                allModel[i] = model * pg.exp(relModel)
                print(i, "/", len(values), " : ",
                      time.time() - tic, "s min/max: ", min(allModel[i]),
                      max(allModel[i]))

            return allModel
        return model
示例#7
0
 def response(self, model):
     return model[0] * pg.exp(-self.x / model[1])
示例#8
0
文件: mrs.py 项目: wk1984/gimli
 def genMod( self, individual ):
     model = pg.asvector( individual ) * ( self.lUB - self.lLB ) + self.lLB
     if self.logpar:
         return pg.exp( model )
     else:
         return model
示例#9
0
 def response(self, model):
     return model[0] * pg.exp(-self.x / model[1])