def test2(self): ho = HarmonicOscillator(self.d) self.visits = ho.make_visits(self.Tlist, self.binenergy, self.N, random=True) assert self.visits.shape == (len(self.Tlist), len(self.binenergy)) self.reduced_energy = self.binenergy[np.newaxis,:] / (self.Tlist[:,np.newaxis]) wham_utils.estimate_dos(self.visits, self.visits)
def test2(self): ho = HarmonicOscillator(self.d) self.visits = ho.make_visits(self.Tlist, self.binenergy, self.N, random=True) assert self.visits.shape == (len(self.Tlist), len(self.binenergy)) self.reduced_energy = self.binenergy[np.newaxis, :] / ( self.Tlist[:, np.newaxis]) wham_utils.estimate_dos(self.visits, self.visits)
def minimize(self): """compute the best estimate for the density of states""" nreps = self.nrep nbins = self.nebins visitsT = (self.visits1d) #print "min vis", np.min(visitsT) #print "minlogp", np.min(self.logP) self.reduced_energy = self.binenergy[np.newaxis, :] / ( self.Tlist[:, np.newaxis] * self.k_B) self.whampot = WhamPotential(visitsT, self.reduced_energy) if False: X = np.random.rand(nreps + nbins) else: # estimate an initial guess for the offsets and density of states # so the minimizer converges more rapidly offsets_estimate, log_dos_estimate = wham_utils.estimate_dos( self.visits1d, self.reduced_energy) X = np.concatenate((offsets_estimate, log_dos_estimate)) E0, grad = self.whampot.getEnergyGradient(X) rms0 = np.linalg.norm(grad) / np.sqrt(grad.size) try: from pele.optimize import lbfgs_cpp as quench if self.verbose: print "minimizing with pele lbfgs" ret = quench(X, self.whampot, tol=1e-3, maxstep=1e4, nsteps=10000) except ImportError: from wham_utils import lbfgs_scipy if self.verbose: print "minimizing with scipy lbfgs" ret = lbfgs_scipy(X, self.whampot, tol=1e-3, nsteps=10000) #print "quench energy", ret.energy if self.verbose: print "chi^2 went from %g (rms %g) to %g (rms %g) in %d iterations" % ( E0, rms0, ret.energy, ret.rms, ret.nfev) X = ret.coords self.logn_E = X[nreps:] self.w_i_final = X[:nreps]
def minimize(self): """compute the best estimate for the density of states""" nreps = self.nrep nbins = self.nebins visitsT = (self.visits1d) #print "min vis", np.min(visitsT) #print "minlogp", np.min(self.logP) self.reduced_energy = self.binenergy[np.newaxis,:] / (self.Tlist[:,np.newaxis] * self.k_B) self.whampot = WhamPotential(visitsT, self.reduced_energy) if False: X = np.random.rand( nreps + nbins ) else: # estimate an initial guess for the offsets and density of states # so the minimizer converges more rapidly offsets_estimate, log_dos_estimate = wham_utils.estimate_dos(self.visits1d, self.reduced_energy) X = np.concatenate((offsets_estimate, log_dos_estimate)) E0, grad = self.whampot.getEnergyGradient(X) rms0 = np.linalg.norm(grad) / np.sqrt(grad.size) try: from pele.optimize import lbfgs_cpp as quench if self.verbose: print "minimizing with pele lbfgs" ret = quench(X, self.whampot, tol=1e-3, maxstep=1e4, nsteps=10000) except ImportError: from wham_utils import lbfgs_scipy if self.verbose: print "minimizing with scipy lbfgs" ret = lbfgs_scipy(X, self.whampot, tol=1e-3, nsteps=10000) #print "quench energy", ret.energy if self.verbose: print "chi^2 went from %g (rms %g) to %g (rms %g) in %d iterations" % ( E0, rms0, ret.energy, ret.rms, ret.nfev) X = ret.coords self.logn_E = X[nreps:] self.w_i_final = X[:nreps]