def update(self, grid, v, admissibleSet): # prepare data gpsi = list(admissibleSet.values()) # prepare list of grid points gs = grid.getStorage() gpsj = [None] * gs.getSize() for i in range(gs.getSize()): gpsj[i] = gs.getPoint(i) # compute stiffness matrix for next run basis = getBasis(grid) A = self._strategy.computeBilinearFormByList(basis, gpsi, gpsj) # compute the expectation value term for the new points b = self._strategy.computeBilinearFormIdentity(basis, gpsi) # estimate missing coefficients w = np.ndarray(admissibleSet.getSize()) for i, gp in enumerate(admissibleSet.values()): w[i] = estimateSurplus(grid, gp, v) # w[i] = estimateConvergence(grid, gp, v) # update the ranking values = self.__computeRanking(v, w, A, b) self._ranking = {} for i, gpi in enumerate(admissibleSet.values()): self._ranking[gpi.getHash()] = values[i]
def update(self, grid, v, admissibleSet): # prepare data gpsi = admissibleSet.values() # prepare list of grid points gs = grid.getStorage() gpsj = [None] * gs.size() for i in xrange(gs.size()): gpsj[i] = gs.get(i) # compute stiffness matrix for next run basis = getBasis(grid) A = self._strategy.computeBilinearFormByList(basis, gpsi, gpsj) # compute the expectation value term for the new points b = self._strategy.computeBilinearFormIdentity(basis, gpsi) # estimate missing coefficients w = DataVector(admissibleSet.getSize()) for i, gp in enumerate(admissibleSet.values()): w[i] = estimateSurplus(grid, gp, v) # w[i] = estimateConvergence(grid, gp, v) # update the ranking values = self.__computeRanking(v, w, A, b) self._ranking = {} for i, gpi in enumerate(admissibleSet.values()): self._ranking[gpi.hash()] = values[i]
def rank(self, grid, gp, alphas, params, *args, **kws): # get grid point associated to ix gs = grid.getStorage() p = [gs.getCoordinates(gp, j) for j in range(gs.getDimension())] # get joint distribution ap = params.activeParams() U = ap.getIndependentJointDistribution() T = ap.getJointTransformation() q = T.unitToProbabilistic(p) # estimate the surplus alpha = estimateSurplus(grid, gp, alphas) # get area of basis function A = 1.0 for d in range(gs.getDimension()): A *= getIntegral(grid, gp.getLevel(d), gp.getIndex(d)) return abs(alpha) * U.pdf(q) * A
def rank(self, grid, gp, alphas, params, *args, **kws): # get grid point associated to ix gs = grid.getStorage() p = [gp.getCoord(j) for j in xrange(gs.dim())] # get joint distribution ap = params.activeParams() U = ap.getIndependentJointDistribution() T = ap.getJointTransformation() q = T.unitToProbabilistic(p) # estimate the surplus alpha = estimateSurplus(grid, gp, alphas) # get area of basis function A = 1.0 for d in xrange(gs.dim()): A *= getIntegral(grid, gp.getLevel(d), gp.getIndex(d)) return abs(alpha) * U.pdf(q) * A
def rank(self, grid, gp, alphas, params, *args, **kws): gs = grid.getStorage() # estimate the convergence of ancestors of gp ratio = estimateSurplus(grid, gp, alphas) # get grid point associated to ix p = [gp.getCoord(j) for j in xrange(gs.dim())] # get joint distribution ap = params.activeParams() U = ap.getIndependentJointDistribution() T = ap.getJointTransformation() q = T.unitToProbabilistic(p) # scale surplus by probability density a = abs(ratio) * U.pdf(q) # get area of basis function A = 1.0 for d in xrange(gs.dim()): A *= getIntegral(grid, gp.getLevel(d), gp.getIndex(d)) return a * A
def rank(self, grid, gp, alphas, params, *args, **kws): return np.abs(estimateSurplus(grid, gp, alphas))
def rank(self, grid, gp, alphas, params, *args, **kws): return abs(estimateSurplus(grid, gp, alphas))
for i in range(gs.getSize()): gs.getCoordinates(gs.getPoint(i), p) nodalValues[i] = f(p.array()) v = hierarchize(grid, nodalValues) ipar = 1 assert ipar < len(v) gp = gs.getPoint(ipar) print("Grand father:", gs.getCoordinate(gs.getPoint(0), 0), v[0]) print("Father:", gs.getCoordinate(gs.getPoint(0), 0), v[ipar]) gpl = HashGridPoint(gp) gpl.getLeftChild(0) gpr = HashGridPoint(gp) gpr.getRightChild(0) assert gsc.isContaining(gpl) assert gsc.isContaining(gpr) print(gs.getCoordinate(gpl, 0), \ estimateSurplus(grid, gpl, v), \ estimateConvergence(grid, gpl, v), \ w[gsc.getSequenceNumber(gpl)]) print(gs.getCoordinate(gpr, 0), \ estimateSurplus(grid, gpr, v), \ estimateConvergence(grid, gpr, v), \ w[gsc.getSequenceNumber(gpr)])