def test(): natoms = 100 tol = 1e-6 from pygmin.potentials.lj import LJ pot = LJ() X = getInitialCoords(natoms, pot) X += np.random.uniform(-1,1,[3*natoms]) * 0.3 #do some steepest descent steps so we don't start with a crazy structure #from optimize.quench import _steepest_descent as steepestDescent #ret = steepestDescent(X, pot.getEnergyGradient, iprint = 1, dx = 1e-4, nsteps = 100, gtol = 1e-3, maxstep = .5) #X = ret[0] #print X Xinit = np.copy(X) e, g = pot.getEnergyGradient(X) print "energy", e lbfgs = BFGS(X, pot, maxstep = 0.1) ret = lbfgs.run(100, tol = tol, iprint=1) print "done", ret[1], ret[2], ret[3] print "now do the same with scipy lbfgs" from pygmin.optimize import lbfgs_scipy as quench ret = quench(Xinit, pot.getEnergyGradient, tol = tol) print ret[1], ret[2], ret[3] print "now do the same with scipy bfgs" from pygmin.optimize import bfgs as oldbfgs ret = oldbfgs(Xinit, pot.getEnergyGradient, tol = tol) print ret[1], ret[2], ret[3] print "now do the same with old gradient + linesearch" gpl = GradientPlusLinesearch(Xinit, pot, maxstep = 0.1) ret = gpl.run(100, tol = 1e-6) print ret[1], ret[2], ret[3]
def test(): natoms = 100 tol = 1e-6 from pygmin.potentials.lj import LJ pot = LJ() X = getInitialCoords(natoms, pot) X += np.random.uniform(-1, 1, [3 * natoms]) * 0.3 #do some steepest descent steps so we don't start with a crazy structure #from optimize.quench import _steepest_descent as steepestDescent #ret = steepestDescent(X, pot.getEnergyGradient, iprint = 1, dx = 1e-4, nsteps = 100, gtol = 1e-3, maxstep = .5) #X = ret[0] #print X Xinit = np.copy(X) e, g = pot.getEnergyGradient(X) print "energy", e lbfgs = BFGS(X, pot, maxstep=0.1) ret = lbfgs.run(100, tol=tol, iprint=1) print "done", ret[1], ret[2], ret[3] print "now do the same with scipy lbfgs" from pygmin.optimize import lbfgs_scipy as quench ret = quench(Xinit, pot.getEnergyGradient, tol=tol) print ret[1], ret[2], ret[3] print "now do the same with scipy bfgs" from pygmin.optimize import bfgs as oldbfgs ret = oldbfgs(Xinit, pot.getEnergyGradient, tol=tol) print ret[1], ret[2], ret[3] print "now do the same with old gradient + linesearch" gpl = GradientPlusLinesearch(Xinit, pot, maxstep=0.1) ret = gpl.run(100, tol=1e-6) print ret[1], ret[2], ret[3]
def testpot1(): from pygmin.potentials.lj import LJ import itertools pot = LJ() a = 1.12 #2.**(1./6.) theta = 60. / 360 * np.pi coords = [ 0., 0., 0., \ -a, 0., 0., \ -a/2, a*np.cos(theta), 0., \ -a/2, -a*np.cos(theta), 0.1 \ ] natoms = len(coords) / 3 c = np.reshape(coords, [-1, 3]) for i, j in itertools.combinations(range(natoms), 2): r = np.linalg.norm(c[i, :] - c[j, :]) print i, j, r e, g = pot.getEnergyGradient(coords) print "initial E", e print "initial G", g, np.linalg.norm(g) eigpot = LowestEigPot(coords, pot) vec = np.random.rand(len(coords)) e, g = eigpot.getEnergyGradient(vec) print "eigenvalue", e print "eigenvector", g if True: e, g, hess = pot.getEnergyGradientHessian(coords) print "shape hess", np.shape(hess) print "hessian", hess u, v = np.linalg.eig(hess) print "max imag value", np.max(np.abs(u.imag)) print "max imag vector", np.max(np.abs(v.imag)) u = u.real v = v.real print "eigenvalues", u for i in range(len(u)): print "eigenvalue", u[i], "eigenvector", v[:, i] #find minimum eigenvalue, vector imin = 0 umin = 10. for i in range(len(u)): if np.abs(u[i]) < 1e-10: continue if u[i] < umin: umin = u[i] imin = i print "lowest eigenvalue ", umin, imin print "lowest eigenvector", v[:, imin] from pygmin.optimize import lbfgs_py as quench ret = quench(vec, eigpot.getEnergyGradient, iprint=10, tol = 1e-5, maxstep = 1e-3, \ rel_energy = True) print ret print "lowest eigenvalue " print umin, imin print "lowest eigenvector" print v[:, imin] print "now the estimate" print ret[1] print ret[0]
def testpot1(): from pygmin.potentials.lj import LJ import itertools pot = LJ() a = 1.12 #2.**(1./6.) theta = 60./360*np.pi coords = [ 0., 0., 0., \ -a, 0., 0., \ -a/2, a*np.cos(theta), 0., \ -a/2, -a*np.cos(theta), 0.1 \ ] natoms = len(coords)/3 c = np.reshape(coords, [-1,3]) for i, j in itertools.combinations(range(natoms), 2): r = np.linalg.norm(c[i,:] - c[j,:]) print i, j, r e, g = pot.getEnergyGradient(coords) print "initial E", e print "initial G", g, np.linalg.norm(g) eigpot = LowestEigPot(coords, pot) vec = np.random.rand(len(coords)) e, g = eigpot.getEnergyGradient(vec) print "eigenvalue", e print "eigenvector", g if True: e, g, hess = pot.getEnergyGradientHessian(coords) print "shape hess", np.shape(hess) print "hessian", hess u, v = np.linalg.eig(hess) print "max imag value", np.max(np.abs(u.imag)) print "max imag vector", np.max(np.abs(v.imag)) u = u.real v = v.real print "eigenvalues", u for i in range(len(u)): print "eigenvalue", u[i], "eigenvector", v[:,i] #find minimum eigenvalue, vector imin = 0 umin = 10. for i in range(len(u)): if np.abs(u[i]) < 1e-10: continue if u[i] < umin: umin = u[i] imin = i print "lowest eigenvalue ", umin, imin print "lowest eigenvector", v[:,imin] from pygmin.optimize import lbfgs_py as quench ret = quench(vec, eigpot.getEnergyGradient, iprint=10, tol = 1e-5, maxstep = 1e-3, \ rel_energy = True) print ret print "lowest eigenvalue " print umin, imin print "lowest eigenvector" print v[:,imin] print "now the estimate" print ret[1] print ret[0]