def currentDiagHess(self, params): #return np.ones(params.shape) # if hasattr(self, 'H'): # return self.H # op_l2_dot = createOperationLTwoDotProduct(self.grid) # self.H = np.empty((self.grid.getSize(), self.grid.getSize())) # u = DataVector(self.grid.getSize()) # u.setAll(0.0) # result = DataVector(self.grid.getSize()) # for grid_idx in xrange(self.grid.getSize()): # u[grid_idx] = 1.0 # op_l2_dot.mult(u, result) # self.H[grid_idx,:] = result.array() # u[grid_idx] = 0.0 # self.H = np.diag(self.H).reshape(1,-1) # return self.H #import ipdb; ipdb.set_trace() size = self._lastseen.shape[0] data_matrix = DataMatrix(self._lastseen[:,:self.dim]) mult_eval = createOperationMultipleEval(self.grid, data_matrix); params_DV = DataVector(self.grid.getSize()) params_DV.setAll(0.) results_DV = DataVector(size) self.H = np.zeros(self.grid.getSize()) for i in xrange(self.grid.getSize()): params_DV[i] = 1.0 mult_eval.mult(params_DV, results_DV); self.H[i] = results_DV.l2Norm()**2 params_DV[i] = 0.0 self.H = self.H.reshape(1,-1)/size #import ipdb; ipdb.set_trace() return self.H
def computeErrors(jgrid, jalpha, grid1, alpha1, grid2, alpha2, n=200): """ Compute some errors to estimate the quality of the interpolation. @param jgrid: Grid, new discretization @param jalpha: DataVector, new surpluses @param grid1: Grid, old discretization @param alpha1: DataVector, old surpluses @param grid2: Grid, old discretization @param alpha2: DataVector, old surpluses @return: tuple(<float>, <float>), maxdrift, l2norm """ jgs = jgrid.getStorage() # create control samples samples = DataMatrix(np.random.rand(n, jgs.getDimension())) # evaluate the sparse grid functions jnodalValues = evalSGFunctionMulti(jgrid, jalpha, samples) # eval grids nodalValues1 = evalSGFunctionMulti(grid1, alpha1, samples) nodalValues2 = evalSGFunctionMulti(grid2, alpha2, samples) # compute errors p = DataVector(jgs.getDimension()) err = DataVector(n) for i in range(n): samples.getRow(i, p) y = nodalValues1[i] * nodalValues2[i] if abs(jnodalValues[i]) > 1e100: err[i] = 0.0 else: err[i] = abs(y - jnodalValues[i]) # get error statistics # l2 l2norm = err.l2Norm() # maxdrift err.abs() maxdrift = err.max() return maxdrift, l2norm
def computeErrors(jgrid, jalpha, grid1, alpha1, grid2, alpha2, n=200): """ Compute some errors to estimate the quality of the interpolation. @param jgrid: Grid, new discretization @param jalpha: DataVector, new surpluses @param grid1: Grid, old discretization @param alpha1: DataVector, old surpluses @param grid2: Grid, old discretization @param alpha2: DataVector, old surpluses @return: tuple(<float>, <float>), maxdrift, l2norm """ jgs = jgrid.getStorage() # create control samples samples = DataMatrix(np.random.rand(n, jgs.dim())) # evaluate the sparse grid functions jnodalValues = evalSGFunctionMulti(jgrid, jalpha, samples) # eval grids nodalValues1 = evalSGFunctionMulti(grid1, alpha1, samples) nodalValues2 = evalSGFunctionMulti(grid2, alpha2, samples) # compute errors p = DataVector(jgs.dim()) err = DataVector(n) for i in xrange(n): samples.getRow(i, p) y = nodalValues1[i] * nodalValues2[i] if abs(jnodalValues[i]) > 1e100: err[i] = 0.0 else: err[i] = abs(y - jnodalValues[i]) # get error statistics # l2 l2norm = err.l2Norm() # maxdrift err.abs() maxdrift = err.max() return maxdrift, l2norm
def loss_fun(self, params): ''' Compute the value of regularized quadratic loss function in the current state ''' if not hasattr(self, '_lastseen'): return np.inf else: params_DV = DataVector(params) residuals = [] for sample_idx in xrange(self.batch_size): x = self._lastseen[sample_idx, :self.dim] y = self._lastseen[sample_idx, self.dim] x_DV = DataVector(x) residual = self.grid.eval(params_DV, x_DV) - y residuals.append(residual*residual) regularizer = params_DV.l2Norm() regularizer = self.l*regularizer*regularizer return 0.5*np.mean(residuals) + regularizer
def computeErrors(jgrid, jalpha, grid, alpha, f, n=200): """ Compute some errors to estimate the quality of the interpolation. @param jgrid: Grid, new discretization @param jalpha: DataVector, new surpluses @param grid: Grid, old discretization @param alpha: DataVector, old surpluses @param f: function, to be interpolated @param n: int, number of Monte Carlo estimates for error estimation @return: tuple(<float>, <float>), maxdrift, l2norm """ jgs = jgrid.getStorage() # create control samples samples = DataMatrix(np.random.rand(n, jgs.dim())) # evaluate the sparse grid functions jnodalValues = evalSGFunctionMulti(jgrid, jalpha, samples) nodalValues = evalSGFunctionMulti(grid, alpha, samples) # compute errors p = DataVector(jgs.dim()) err = DataVector(n) for i in xrange(n): samples.getRow(i, p) y = f(p.array(), nodalValues[i]) err[i] = abs(y - jnodalValues[i]) # get error statistics # l2 l2norm = err.l2Norm() # maxdrift err.abs() maxdrift = err.max() return maxdrift, l2norm